IPtables 不常见的丢包

IPtables 不常见的丢包

我正在基于 Rocky Linux 的服务器上设置一个基本的 iptables 防火墙,内核版本为 5.15.103-1。主要要求是为不同的服务器组建立特定的访问规则。目标是允许管理工作站完全访问,允许生产服务器以受限形式访问,同时拒绝任何其他请求的访问。

我的防火墙脚本目前如下所示:


K1="10.0.51.31-10.0.51.41"
K2="10.0.51.91-10.0.51.101"
ADMIN="10.0.51.21,10.0.51.22"

# Clear rules and set default policies
iptables -F
iptables -X
iptables -N admin; iptables -N prod

# ACCEPT connections initiated from host itself
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# ACCEPT from loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP

# Allow ICMP echo requests (ping) and related ICMP messages
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT

iptables -A INPUT -j admin
iptables -A INPUT -j prod

# Allow all except ssh
iptables -A prod -p tcp ! --dport 22 -m iprange --src-range $K1 -j ACCEPT
iptables -A prod -p tcp ! --dport 22 -m iprange --src-range $K2 -j ACCEPT

# Allow all
iptables -A admin -p tcp -s $ADMIN -j ACCEPT

# Log and drop all other connections
iptables -A INPUT -m limit --limit 10/sec -j LOG --log-prefix "iptables " --log-level 4
iptables -A INPUT -j LOG --log-prefix "iptables " --log-level 4
iptables -A INPUT -j DROP

该服务器没有公共接口,互联网访问通过基于 Linux 的 NAT 网关进行路由。但是,我注意到日志中存在丢包的情况,例如: Aug 15 14:35:50 prod2 kernel: iptables IN=em2 OUT= MAC=41:fb:72:ff:94:7e:15:f3:2b:1c:1b:b6:18:01 SRC=52.218.197.1 DST=10.0.51.153 LEN=40 TOS=0x00 PREC=0x00 TTL=237 ID=13818 DF PROTO=TCP SPT=443 DPT=8418 WINDOW=12284 RES=0x00 ACK URGP=0

此流量与 S3 的上传/下载相关。这些数据包应该只能通过 NAT 网关到达我的服务器,这意味着它们是从我的服务器发起的会话的一部分。值得注意的是,并非所有这些数据包都被丢弃,我可以成功地 curl 此 IP 地址,没有任何问题。

尽管丢包了,但我没有遇到服务器的任何其他问题(下载/上传到 S3)。我尝试将这些日志与 conntrack 表和 tcpdump 进行交叉引用,但没有取得太大成功。有没有办法进一步调查并确定这些数据包被丢弃的原因,尤其是当它们可能是从我的服务器发起的会话的一部分时?

相关内容