向 iptables 添加规则是否意味着它立即生效?

neu*_*ert 2 iptables firewall networking 20.04

sudo iptables -A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT在 bash 中运行,然后尝试使用 PuTTY 通过端口 2222 通过同一 LAN/子网上的另一台机器连接到该机器,但没有成功。

也许我需要在添加规则后重新启动 iptables 才能生效?如果是这样,我会怎么做?

这是输出iptables -S

-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-4f5770ea8905 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-4f5770ea8905 -j DOCKER
-A FORWARD -i br-4f5770ea8905 ! -o br-4f5770ea8905 -j ACCEPT
-A FORWARD -i br-4f5770ea8905 -o br-4f5770ea8905 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 443 -j ACCEPT
-A DOCKER -d 172.18.0.7/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 6379 -j ACCEPT
-A DOCKER -d 172.18.0.8/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.10/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-4f5770ea8905 ! -o br-4f5770ea8905 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-4f5770ea8905 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
Run Code Online (Sandbox Code Playgroud)

这是输出sudo iptables --line-numbers -L INPUT

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2222
Run Code Online (Sandbox Code Playgroud)

use*_*489 6

是的,通过 iptables 命令添加规则会立即生效。

大概您想为端口添加 ACCEPT 规则,因为您想覆盖阻止所有或大多数端口的规则。

但是,您已添加将规则-A附加到表的规则。由于您已经有一个阻止规则(使用诸如 DROP 或 REJECT 之类的东西),新规则将在此之后添加,使其无效。

如果您希望它起作用,您需要在阻止规则之前插入规则 (-I #),或者将规则添加到配置文件中的正确位置并重新加载所有规则。(或使用 ufw 或 firewalld 之类的工具为您执行此操作)。您可以获得带有编号的规则列表,iptables --line-numbers -L INPUT并在阻止规则的位置或之前插入新规则。

如果假设您有阻止规则是错误的,那么您需要返回并检查是否有任何东西打开了端口。您可以使用netstat -nl | grep 2222or ss -nlt | grep 2222,如果未列出,则端口上没有任何侦听内容。

从您添加到问题中的输出来看, INPUT 表基本上是空的(除了您的接受规则),并-P INPUT ACCEPT表示接受与输入表中的规则不匹配的任何内容。