iptables 规则只允许一个端口并阻止其他端口

Gok*_*kul 4 firewall iptables centos netstat

我们有两个应用程序在运行(在 linux 之上)并且都通过端口 42605 进行通信。我想快速验证这是否是用于它们之间通信的唯一端口。我尝试了以下规则,但似乎不起作用。所以,只是想澄清一下,如果我做错了。

以下是我运行的命令序列

iptables -I INPUT -j REJECT
iptables -I INPUT -p tcp --dport 42605 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I OUTPUT -p tcp --dport 42605 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

因此,由于我正在插入它,因此它将以相反的顺序添加。

我想允许来自和到 42605 的传入和传出通信。上述规则看起来不错还是我做错了?

另一个问题,这是否是测试的正确方法,或者我应该使用“netstat”命令来查看哪个端口与另一个 ip 建立了连接?

Rah*_*til 5

我们可以使 INPUT 策略丢弃以阻止所有内容并仅允许特定端口

# allow established sessions to receive traffic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow your application port
iptables -I INPUT -p tcp --dport 42605 -j ACCEPT
# allow SSH 
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
# Allow Ping
iptables -A INPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow localhost 
iptables -A INPUT -i lo -j ACCEPT
# block everything else 
iptables -A INPUT -j DROP
Run Code Online (Sandbox Code Playgroud)

另一个问题,这是否是测试的正确方法,或者我应该使用“netstat”命令来查看哪个端口与另一个 ip 建立了连接?

是的,您可以检查netstat -antop | grep app_port,也可以使用 strace :

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
Run Code Online (Sandbox Code Playgroud)

要使用已知 pid 监视现有进程:

strace -p $( pgrep application_name) -f -e trace=network -s 10000
Run Code Online (Sandbox Code Playgroud)