我正在做一些测试,希望能够测试我的数据库出现故障的情况。它与我的测试在同一个盒子上运行,并且看起来像下面这样的事情并没有起到作用
iptables -A INPUT -p tcp --dport 25262 -j DROP
iptables -A INPUT -p tcp --sport 25262 -j DROP
iptables -A INPUT -p tcp --dport 25262 -i lo -j DROP
iptables -A INPUT -p tcp --dport 25262 -s 127.0.0.1 -j DROP
我即将采取杀死我的数据库进程,移动文件(因为我的数据库在崩溃时自动恢复),并让测试继续这样,但这似乎是一个糟糕的方法。
阻止环回端口的正确方法是什么?
答案1
用于删除所有环回流量的命令行命令 (lo0)
$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
解释
因为 iptables 从上到下评估规则并在“首场比赛获胜”的基础上工作,所以您需要确保您的-i lo DROP
规则是-I
插入到顶部而不是-A
附加的到规则的底部,因此它在另一个规则接受环回流量之前匹配,例如,如果您的数据库是 MySQL,则该规则也可能匹配
INPUT -p tcp --dport 3306 ACCEPT
所以如果你执行了命令:
$ [sudo] iptables -A INPUT --dport 25262 -i lo -j DROP
^^^ Notice the difference
你的规则看起来像这样:
INPUT -p tcp --dport 3306 ACCEPT ---> this "wins" and request is accepted
INPUT --dport 25262 -i lo -j DROP
通过运行:
$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
你的最终规则如下:
INPUT --dport 25262 -i lo -j DROP ---> this "wins" and request is DROP'ed
INPUT -p tcp --dport 3306 ACCEPT
... all your other rules