如何在 Ubuntu 上阻止 IP 地址?

如何在 Ubuntu 上阻止 IP 地址?

我已经将 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 适用于发往路由器本身的数据包。

相关内容