如何阻止环回上的端口?

如何阻止环回上的端口?

我正在做一些测试,希望能够测试我的数据库出现故障的情况。它与我的测试在同一个盒子上运行,并且看起来像下面这样的事情并没有起到作用

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

相关内容