我正在 Linux 机器上实施一个实现,以拒绝来自 WAN 端 telnet 端口 8023 的传入 telnet 请求。该功能是通过使用以下 iptables 规则实现的。NAT 预路由链中的第一条规则用于将来自端口 8023 的传入 tcp 帧 DNAT 到 23,第二条规则使用 tcp-reset 拒绝端口 23 上的这些 tcp 帧
iptables -t nat -A PREROUTING -i wan+ -p tcp --dport 8023 -j DNAT --to-destination :23
iptables -A INPUT -i wan+ -p tcp --dport 23 -j REJECT --reject-with tcp-reset
添加这些规则后,WAN 机器上的新会话将终止。
[root@ROOT ~]# telnet 192.168.3.252 8023
Trying 192.168.3.252...
Connected to 192.168.3.252.
Escape character is '^]'.
Connection closed by foreign host.
然而,当看到 wireshark 从 wan 机器捕获整个交易时,观察到了以下序列。
TCP sequence:
SYN -->
<-- SYN/ACK
ACK -->
<-- RST
wireshark 捕获信息也已附加。
我们可以通过下面的 iptables 规则为第一个 SYN 请求发送 RST 吗?
TCP sequence:
SYN -->
<-- RST
有人可以在这方面提供帮助吗?提前谢谢了。
答案1
有趣的。
我刚刚测试过,在我的系统上它按预期工作。我在本地服务器上使用端口 25 测试了它,该服务器的使用率不高:
iptables-保存 # 由 iptables-save v1.4.12 于 2014 年 8 月 22 日星期五 14:34:49 生成 *自然 :预路由接受 [12:1729] :输入接受 [12:1729] :输出接受 [110:7484] :后路由接受 [110:7484] -A PREROUTING -p tcp -m tcp --dport 225 -j DNAT --to-destination :25 犯罪 # 于 2014 年 8 月 22 日星期五 14:34:49 完成 # 由 iptables-save v1.4.12 于 2014 年 8 月 22 日星期五 14:34:49 生成 *筛选 :输入接受 [888:1187686] :转发接受 [0:0] :输出接受 [883:134630] -A 输入-p tcp -m tcp --dport 25 -j REJECT --reject-with tcp-reset 犯罪 # 于 2014 年 8 月 22 日星期五 14:34:49 完成 远程登录 XXX.XXX.XXX.XXX 225 正在尝试 XXX.XXX.XXX.XXX... telnet:无法连接到远程主机:连接被拒绝
我没有建立连接,然后像您一样重置。
我正在使用 Linux 3.2.0-67 和 iptables v1.4.12
tcpdump -vvvv tcp 端口 225 tcpdump:在 eth0 上监听,链接类型 EN10MB(以太网),捕获大小 65535 字节 14:48:29.178049 IP(tos 0x10、ttl 64、id 50487、偏移量 0、标志 [DF]、proto TCP(6)、长度 60) xx.39444 > xxxxx.225:标志 [S]、cksum 0x2c0d(正确)、seq 47731887、win 14600、选项 [mss 1460、sackOK、TS val 665686424 ecr 0、nop、wscale 5]、长度 0 14:48:29.178089 IP(tos 0x0、ttl 64、id 0、偏移量 0、标志 [DF]、proto TCP(6)、长度 40) xxxxx.225 > xx.39444:标志 [R.],cksum 0x3745(不正确 -> 0x8628),seq 0,ack 47731888,win 0,长度 0