您如何阻止环回上的端口?

cyl*_*lus 4 networking iptables

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

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
Run Code Online (Sandbox Code Playgroud)

我将要终止我的数据库进程,移动文件(因为我的数据库在崩溃时会自动恢复),然后让测试以这种方式继续,但这似乎是一种糟糕的方式。

阻止环回端口的正确方法是什么?

the*_*fog 5

删除所有环回流量的命令行命令 (lo0)

$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
Run Code Online (Sandbox Code Playgroud)

解释

因为 iptables 从上到下评估规则并在“第一场比赛获胜”的基础上工作,您需要确保您的-i lo DROP规则-I 插入到顶部而不是-A附加到规则的底部,因此它在另一个规则接受环回之前匹配流量,例如,如果您的数据库是 MySQL,则此规则也可能匹配

INPUT -p tcp --dport 3306 ACCEPT
Run Code Online (Sandbox Code Playgroud)

所以如果你做了命令:

$ [sudo] iptables -A INPUT --dport 25262 -i lo -j DROP
                  ^^^ Notice the difference
Run Code Online (Sandbox Code Playgroud)

您的规则如下所示:

INPUT -p tcp --dport 3306 ACCEPT   ---> this "wins" and request is accepted
INPUT --dport 25262 -i lo -j DROP
Run Code Online (Sandbox Code Playgroud)

通过运行:

$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
Run Code Online (Sandbox Code Playgroud)

您的最终规则如下所示:

INPUT --dport 25262 -i lo -j DROP  ---> this "wins" and request is DROP'ed
INPUT -p tcp --dport 3306 ACCEPT 
... all your other rules
Run Code Online (Sandbox Code Playgroud)