我在 Fedora 机器上设置了 iptables。我允许所有入站 HTTPS 流量、所有出站流量,并且还设置了允许的已建立相关规则。但是我在日志中看到这样的丢弃条目:
流量丢弃:SRC=XXXX DST=My_Server_IP DF PROTO=TCP SPT=443 DPT=Random_High_Port
为什么我建立的/相关的相关规则没有选择并允许它?我唯一的想法是,在收到此回复之前,连接超时了。如果是这样,有人知道这个超时窗口是什么,或者是否可以修改它吗?谢谢。
编辑:
这是一个完整的数据包
丢弃的流量:IN=eth0 OUT= MAC=_____________ SRC=XXXX DST=YYYY LEN=81 TOS=0x00 PREC=0x00 TTL=46 ID=11862 DF PROTO=TCP SPT=443 DPT=50680 WINDOW=6235 RES=0x00 ACK PSH FIN URGP=0
以下是与此场景相关的 3 条 IP 表规则
/sbin/iptables -A 输入 -m 状态 --state ESTABLISHED,RELATED -j 接受
/sbin/iptables -A 输入 -p tcp -m 状态 --state NEW --dport 443 -j 接受
/sbin/iptables -P 输出接受
由于源是 443,这应该是与出站连接相关的传入流量。我只需要知道它为什么失败和/或超时是多少。
答案1
Netfilter 已从状态表中删除该连接。 中的其中一个超时
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_*
已过期。我猜是nf_conntrack_tcp_timeout_last_ack
。
场景如下:您的 Web 服务器发送一个包含一些数据和 fin 集的最终数据包。客户端处于昏迷状态 30 秒。Netfilter 从状态表中删除该条目。客户端唤醒并发送不再属于跟踪连接的 fin ack。
我在网络服务器上经常看到这种情况。这是客户端的问题。
如果您想验证您可以记录状态表(/proc/net/nf_conntrack
)并将其与防火墙日志关联。
编辑:我把方向颠倒了,但概念适用。在这种情况下,他的服务器正在建立传出的 https 连接,因此它实际上是客户端,而远程 Web 服务器的响应速度可能很慢。
规则
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
与此无关。它与 DST 端口 443 有关,这是 SPT 443。