我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
以下是 的输出sudo iptables --line-numbers -L INPUT
:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:2222
答案1
是的,通过 iptables 命令添加规则会立即生效。
假设您想为该端口添加一条 ACCEPT 规则,因为您想覆盖阻止所有或大多数端口的规则。
但是,您已添加规则,该规则-A
会将规则附加到表中。由于您已经有了阻止规则(使用 DROP 或 REJECT 之类的东西),因此新规则将添加在其后,从而使其无效。
如果希望此方法有效,您需要在阻止规则之前插入规则 (-I #),或者将规则添加到配置文件中的正确位置并重新加载所有规则。(或者使用 ufw 或firewalld 等工具为您执行此操作)。您可以获取规则的编号列表,并iptables --line-numbers -L INPUT
在阻止规则的位置或之前插入新规则。
如果您认为有一条阻止规则的假设是错误的,那么您需要返回并检查是否有任何东西打开了该端口。您可以使用netstat -nl | grep 2222
或ss -nlt | grep 2222
,如果没有列出,则没有任何程序正在监听该端口。
从您添加到问题的输出来看,输入表基本上是空的(除了您的接受规则)并且-P INPUT ACCEPT
表示接受与输入表中的规则不匹配的任何内容。