我有一个设置,其中我的传入互联网连接进入 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 链原样。
就是这样。