如何使用iptables处理两个以太网口?
eth0 端口供 LAN 使用(192.168.1.50 专用 IP)。
eth1 端口通过电缆调制解调器(80.0.xxx.xxx 公共 IP)连接到互联网。
ifconfig
输出:
eth0 Link encap:Ethernet HWaddr 00:19:99:C1:86:BB
inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:137532 errors:0 dropped:0 overruns:0 frame:0
TX packets:55658 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:99968969 (95.3 MiB) TX bytes:10403525 (9.9 MiB)
Interrupt:50 Memory:fe700000-fe720000
eth1 Link encap:Ethernet HWaddr 00:19:99:C1:61:3B
inet addr:80.0.xxx.xxx Bcast:255.255.255.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:144558 errors:0 dropped:0 overruns:0 frame:0
TX packets:70347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34500131 (32.9 MiB) TX bytes:27893843 (26.6 MiB)
Interrupt:177 Memory:fe600000-fe620000
如何使用iptables来阻止所有传入路由eth1
但只允许22端口。这样Internet端就无法访问我们的Web服务器,ftp服务器等。只允许22端口进行SSH访问。 Ping 也应该可以工作。
在本地网络 ( eth0
) 上,有超过 70 台客户端 PC - 它们应该能够访问服务器上的任何内容,但只是阻止内部本地 ip 192.168.1.20 和 192.168.1.30 访问 192.168.1.50(私有 ip)服务器。
使用 iptables 如何做到这一点?
答案1
您可以使用-i device
和-o device
来匹配以太网设备。例如,
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT # must allow machine to talk to itself, else much breakage.
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
或者类似的。您还可以使用-s
/-d
来过滤源和目标 IP 地址。
我建议命名您的以太网接口,以便您可以使用-i lan
&-i wan
代替。您可以在 udev 规则中命名它们。在 Debian 上,您可以编辑/etc/udev/rules.d/70-persistent-net.rules
.
PS:过滤 WAN 接口时,请确保 DHCP 仍然有效(如果您正在使用它)。否则,当租约到期时,您的连接将神秘地中断,这可能是在一段时间之后。
答案2
小心!!
您提到为 ssh 打开端口 21。端口 21 的标准用法是 ftp;端口 22 是标准 ssh。虽然可以(有时需要)使用非标准 ssh 端口,但如果您忘记(或忘记告诉其他用户),您最终会感到非常头疼。
也就是说,可以在此处找到常用 iptables 示例的集合。
http://www.thegeekstuff.com/2011/06/iptables-rules-examples/
更通用的 IPTables 参考: