在运行调用 paramiko 的 python 库时,我注意到我的 iptables 日志中有一些被阻止的数据包。当我试图弄清楚为什么 iptables 运行时这个库的网络性能不一致时,我注意到了被阻止的数据包。基本上,服务器(以下日志中的 10.0.12.206)运行库,该库使用 paramiko 通过端口 22 在客户端(以下日志中的 10.0.10.103)上安全地执行命令。当客户端运行许可 iptables 时,它运行良好出色地。当客户端使用以下规则运行 iptables 时,通常会出现无限期挂起,我怀疑这可能是由于客户端上运行的 iptables 阻止了某些数据包,因为这些数据包仅在库运行时出现在日志中。
这些是我的 iptables 规则-
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-A INPUT -i lo -j -ACCEPT
-A OUTPUT -o lo -j -ACCEPT
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j -ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j -ACCEPT
-A INPUT -j LOG --log-prefix "IPtables DROP DEFAULT IN: "
-A OUTPUT -j LOG --log-prefix "IPtables DROP DEFAULT OUT: "
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
这些是客户端日志中的常见消息-
Oct 7 16:43:08 ip-10-0-10-103 kernel: IPtables DROP DEFAULT IN: IN=eth0 OUT= MAC=<withheld> SRC=10.0.12.206 DST=10.0.10.103 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=18436 DF PROTO=TCP SPT=58634 DPT=22 WINDOW=523 RES=0x00 ACK FIN URGP=0
Oct 7 16:44:14 ip-10-0-10-103 kernel: IPtables DROP DEFAULT OUT: IN= OUT=eth0 SRC=10.0.10.103 DST=10.0.12.206 LEN=260 TOS=0x00 PREC=0x00 TTL=64 ID=57627 DF PROTO=TCP SPT=22 DPT=58634 WINDOW=240 RES=0x00 ACK PSH URGP=0
我想看看这些被阻止的数据包是否引起了麻烦。如何允许这些被阻止的数据包通过?我尝试了一些规则,但没有运气,例如-
-A OUTPUT -o eth0 -p tcp --tcp-flags ALL ACK,PSH,URG -j ACCEPT
我认为问题在于您允许
OUTPUT
端口22,但它应该来自端口 22:这应该可以修复您发布的第二条日志行。我不确定为什么您记录的第一个数据包会被捕获。你能检查
iptables -nvL
并确保这些规则得到实际应用吗?