在运行调用 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
答案1
我认为问题是你允许OUTPUT
到端口 22,但它应该从端口22:
-A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
这应该可以修复您发布的第二行日志。但我不确定您记录的第一个数据包为什么会被捕获。您能检查iptables -nvL
并确保这些规则确实得到应用吗?