iptables 不关闭端口 3000?

Ske*_*eve 2 security iptables port

我想以只打开特定端口的方式在我的服务器上配置 iptables。不过,如果我在其上运行网络应用程序,我可以访问例如端口 3000。打开 3000 的原因可能是什么?

这是命令的输出 iptables -nv -L INPUT

 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x00
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:!0x17/0x02 state NEW
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x3F
  670  302K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
  187  136K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
   33  1968 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp spt:25 state ESTABLISHED
Run Code Online (Sandbox Code Playgroud)

在我看来,上表表明只有端口 80、443、22 和 25 处于打开状态,但显然我遗漏了一些东西。

更新。内容/etc/sysconfig/iptables

# Generated by iptables-save v1.4.21 on ...
*filter
:INPUT ACCEPT [11:812]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [7:2120]
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on ...
# Generated by iptables-save v1.4.21 on ...
*mangle
:PREROUTING ACCEPT [6775:1045434]
:INPUT ACCEPT [6183:992008]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3415:5301713]
:POSTROUTING ACCEPT [3415:5301713]
COMMIT
# Completed on ...
# Generated by iptables-save v1.4.21 on ...
*nat
:PREROUTING ACCEPT [671:58811]
:POSTROUTING ACCEPT [3:243]
:OUTPUT ACCEPT [3:243]
COMMIT
# Completed on ...
# Generated by iptables-save v1.4.21 on ...
*raw
:PREROUTING ACCEPT [6775:1045434]
:OUTPUT ACCEPT [3415:5301713]
COMMIT
Run Code Online (Sandbox Code Playgroud)

更新。感谢@akhfa 和@Iain 的回答!两者都为我工作。似乎拒绝的选项要好一些(例如,鉴于此比较),因此我将其标记为已接受的选项。

PS 现在我有一个问题,我无法再从我的服务器 ping google,但这可能超出了原始问题的范围。PPS 没关系,最后我通过在开头添加以下规则来解决互联网访问问题:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT  -p udp --sport 53 -m state --state ESTABLISHED     -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT  -p tcp --sport 53 -m state --state ESTABLISHED     -j ACCEPT

sudo iptables -A INPUT -p icmp -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

use*_*517 8

您没有任何阻止端口 3000 的规则。您的策略是 ACCEPT,因此端口 3000(与其他所有端口一样)是开放的。您可以尝试在规则末尾添加默认丢弃/拒绝,这很常见

iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
Run Code Online (Sandbox Code Playgroud)

并且应该完成这项工作,因为任何到达那么远的数据包都将被拒绝,并且遥控器会认为注意正在收听该部分。


小智 6

您可以像这样将 INPUT 中的默认策略更改为 DROP

iptables -P INPUT DROP
Run Code Online (Sandbox Code Playgroud)

然后您可以删除 INPUT 链中的所有 DROP 规则。如果进行此更改,则必须在要打开的每个端口中添加 ACCEPT 规则。