如何配置 iptables 以允许通过端口 3128 上的 squid 代理访问特定域?

如何配置 iptables 以允许通过端口 3128 上的 squid 代理访问特定域?

我的规则有什么问题?我已经在服务器上安装了 squid,我只想通过 squid 访问一些特定的域,但 iptables 完全阻止了我

我发现这个:iptables 规则仅允许 HTTP 流量流向一个域,我尝试应用并调整我的规则,但没有成功。

这是我的规则:

iptables -F
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5801  -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5901  -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 6001  -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 777 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 321 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 953 -j ACCEPT
iptables -A OUTPUT -p tcp -d domain1.com --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp -d domain2.com --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp -d sub1.domain2.com --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp -d sub2.domain2.com --dport 3128 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables-save > /etc/sysconfig/iptables
service iptables restart

答案1

iptables不是那样工作的。它是一个第 3 层子系统(在某种程度上是第 2 层),对域名之类的东西没有任何有意义的了解。您可以阻止对 IP 地址的访问,如果碰巧主机名domain[12].comsub[12].domain2.com解析到的 IP 地址本身不为其他域提供任何服务,您可以通过 IP 地址阻止它们。

如果您想要阻止 squid 访问某些 URL,则需要在 squid 配置中执行此操作。我不是squid专家,但看起来您可以使用以下方法执行此操作:

acl          aclname   dstdomain   "/etc/squid/allow/safe-sites"  # file must exist
http_access  allow     aclname
http_access  deny      all

包含/etc/squid/allow/safe-sites例如

domain1.com
domain2.com
sub1.domain2.com
sub2.domain2.com

(谢谢这个博客一些小抄笔记)。

答案2

正如 @MadHatter 所说,iptables 规则不是这样使用的,对于 squid,您必须允许某些 IP 访问某些特定站点。请按照以下步骤操作:

将此行添加到您的 Squid.conf 文件中。

acl allow_ip src “/etc/squid/allow_ip”

acl allow_ip_site url_regex “/etc/squid/block_ip_allow”

http_access allow allow_ip allow_ip_site

或供参考:

https://stackoverflow.com/questions/10599122/restrict-squid-access-to-only-one-site

对于少数网站,您可以直接在 squid.conf 中定义 url 和 ip,但是 madhatter 建议的方法是最好的。

相关内容