我已经将 Ubuntu 机器配置为路由器。步骤NAT 配置如下:
#iptables -F
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables-save > /etc/network/iptables
然后将此文件位置保存在 rc.local 中
#vi /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
/sbin/iptables-restore < /etc/network/iptables
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
#reboot
成功了,现在我想屏蔽一个 IP 地址。为此,我执行了以下命令:
#iptables -A INPUT -s 69.171.229.11 -j DROP
#iptables-save > /etc/network/iptables
#reboot
但它不起作用。
vi /etc/network/iptables
现在看起来像这样:
# Generated by iptables-save v1.4.4 on Tue Feb 14 11:21:16 2012
*nat
:PREROUTING ACCEPT [870:97719]
:POSTROUTING ACCEPT [283:23151]
:OUTPUT ACCEPT [461:28753]
-A POSTROUTING -o eth0 -j MASQUERADE COMMIT
# Completed on Tue Feb 14 11:21:16 2012
# Generated by iptables-save v1.4.4 on Tue Feb 14 11:21:16 2012
*filter
:INPUT ACCEPT [4914:3254723]
:FORWARD ACCEPT [2382:1222521]
:OUTPUT ACCEPT [4010:410041]
-A INPUT -s 98.137.149.56/32 -j DROP
COMMIT
# Completed on Tue Feb 14 11:21:16 2012
我缺少什么来阻止 IP 地址?
答案1
如果您想阻止 IP 使用 MASQUERADE 规则,您需要将该规则放入链中FORWARD
,而不是INPUT
链中。
iptables -I FORWARD -s 69.171.229.11 -j DROP
答案2
我认为这个顺序不正确。
使用 append 所做的就是将其放在链的底部。IPtables 在第一次匹配后停止。因此,规则可能在遇到阻止规则之前就被匹配。确保阻止规则位于顶部。您可以使用 -I 选项将其插入链中的特定位置。
答案3
iptables-save 确实不是使你的 iptables 规则持久化,这样它们在重启后就会丢失。相反,它会将你当前的 iptables 配置打印到 STDOUT(参见iptables-save 的手册页)。因此,重启后,你的 iptables 应该是空的。
您可能希望在重启后从该文件恢复规则。为此,请使用
iptables-restore < /etc/network/iptables
看iptables-restore 的手册页关于这一点。
正如帕特里克所说,规则
iptables -A INPUT -s 69.171.229.11 -j DROP
只会阻止数据包发送到路由器本身 - 如果地址正确,它们仍会被转发。为了防止这种情况,请添加规则
iptables -A FORWARD -s 69.171.229.11 -j DROP
FORWARD 适用于路由器想要转发的数据包,而 INPUT 适用于发往路由器本身的数据包。