iptables 安全 squid 代理

iptables 安全 squid 代理

我有一个设置,其中我的传入互联网连接进入 squid 代理/缓存服务器,然后从那里进入我的本地无线路由器。

在代理服务器的 wan 端,我有地址为 208.78.∗∗∗.∗∗∗ 的 eth0。
在代理服务器的 lan 端,我有地址为 192.168.2.1 的 eth1。

来自我的局域网的流量通过代理透明地转发到互联网,遵循以下规则。请注意,来自 squid 服务器本身的流量也通过代理/缓存路由,这是故意的:

# iptables forwarding
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.2.0/24 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

# iptables for squid transparent proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.2.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

如何设置 iptables 来阻止从外部对我的服务器进行的任何连接,同时不阻止从内部发起的任何连接?我尝试过这样做:

iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -j REJECT

但这会阻止一切。我还尝试过反转这些命令的顺序,以防我弄错了那部分,但这没有帮助。我想我并不完全了解 iptables 的一切。

有任何想法吗?

答案1

我如何设置 iptables 来阻止从外部对我的服务器的任何连接,同时不阻止从内部发起的任何连接?

在 INPUT 链中按顺序排列

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state INVALID -j DROP
iptables -A INPUT -i eth0 -j REJECT

如果您想调试它,请查看您的 conntrack。

答案2

根据你的iptables配置,第一行可能不是必须的,第二行肯定是错的(ps是第二行eth0或者eth1)。

第一行基本上允许您的 iptables 接受来自内部网络的所有传入请求和连接。

尝试在第二行使用它:

iptables -A 转发 -i eth1 -o eth0 -j 接受

这告诉 iptables向前所有从 eth1 (WAN) 进入 eth0 (LAN) 的数据包 - 这样就无法从 eth1 (WAN) 连接到您的服务器。

不过需要提醒的是:两行 iptables 规则会带来麻烦。我建议您通过查看在线示例配置来了解有关如何配置的更多信息。您可以开始查看本文

答案3

我想也许我有答案。这似乎对我有用,而且如果有人知道比我更多的检查,请告诉我。

我想我只需要确保匹配连接的状态。我添加了以下规则:

iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -j REJECT

我通过从我们网络之外的计算机(我家里的计算机)对 wan IP 运行 nmap 来检查它......它只是挂起了,并没有显示任何东西。

我还尝试连接 squid 服务器上正在监听的端口,但所有连接尝试均失败。不过,网络内部一切仍按预期运行。

答案4

首先,你对每条链的政策是什么?你可以检查一下,iptables -L如果没有规则匹配,政策就是将执行的默认操作。

对于服务器保护你需要的是:

  • 将默认规则设置为 DROP

    iptables -P 输入删除

  • 允许来自 LAN 的流量进入 LAN 接口

    iptables -A 输入 -i eth1 -s 192.168.2.0/24 -j 接受

并保持 FORWARD 链原样。

就是这样。

相关内容