使用 iptables 测试应用程序

使用 iptables 测试应用程序

我正在测试连接到两个数据库的 Web 应用程序。我无法停止它们,但我想模拟其中一个数据库的中断。

因此我打开了一个正在 ping DB 服务器的终端:

 ping 172.21.7.188

在第二个终端我执行了以下操作:

sudo iptables -A INPUT -s 172.21.7.188 -j DROP
sudo iptables -A OUTPUT -d 172.21.7.188 -j DROP

但我没有看到任何变化 - ping 仍然返回。我做错了什么?

答案1

虽然您可能正在使用 Ubuntu,但这个问题不是特定于 Ubuntu 的,而是特定于 Linux 的,所以我认为最好在 ServerFault 上提问。


回答原始问题(在 OP 编辑​​之前)

INPUT 链中的规则是正确的,但 OUTPUT 链中的规则是错误的。您希望丢弃发往所提及 IP 的数据包,而不是来自该 IP 的数据包(这在此链中毫无意义)。

这就是为什么您必须在规则中将-s( --source) 更改为-d( ):--destination

# iptables -A OUTPUT -d 172.21.7.188 -j DROP

但即使您只丢弃了传入的数据包,也可以说这已经足够了。的确,ping 返回了(ICMP 回应回复到达了您的主机),但没有上述行,并且咨询 tcpdump 或 wireshark 会显示与 ping 相关的数据报(即传出和传入),但应用程序ping没有收到传入的数据报,因为它们被丢弃了。

显然,在大多数情况下仅丢弃传入的数据包是相当不明智的,因为它会导致连接两端(在连接级别或应用程序级别)的状态不同。


对已编辑问题的回答

如果更正后仍然不起作用,那么我怀疑您的防火墙已经有一些规则,使新规则无法访问。您添加规则的方式使它们附加在链的末尾。您应该先删除新规则(与附加命令相同,但更改-A-D)。

现在将你的规则添加到适合的链的开头(即,将它们插入到给定的规则编号 1 处)(与附加命令相同,更改-A-I):

# iptables -I INPUT  -s 172.21.7.188 -j DROP
# iptables -I OUTPUT -d 172.21.7.188 -j DROP

现在它应该可以工作了。

答案2

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

这将阻止 Ping

我在我们的服务器上使用这个脚本来管理 Iptables

#!/bin/bash 

#This Script was Used for Only Setting up Iptables in ubuntu 12.04 server
#uncomment the Lines With # Which u don't need to use 
#if u going to use this script in remote VPS Test it in local systems before applying it in remote VPS .
#final line will be commented with # cos it will save the iptables if its not commented with #


#0. Flush every Rules what ever there already 

iptables -F

#1. This enable traffic for (lo) loopback interface(-i) 


iptables -A INPUT -i lo -j ACCEPT


#2. This Will Keep the rules for Which service currently Established  eg : ssh


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#3. This Will Enable the Port Number 22 for ssh which i we have defined 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT


#4.This Will Enable the Port Number 80 for http 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT


#5.This Will Enable the Port Number 443 for httpd 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT


#6. Allow rsync from a specific network


iptables -A INPUT -i eth0 -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT


iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT


#7. Blow ICMP PING Request 

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP


#11. This Will Block Other connections 


iptables -A INPUT -j DROP



#saving the iptables 


#sudo apt-get install iptables-persistent
#sudo service iptables-persistent save
#sudo service iptables-persistent restart

相关内容