Linux iptables – 用RST拒绝tcp SYN

我在一台linux机器上执行一个实现来拒绝来自wan端telnet端口8023的传入telnet请求。这个function是通过使用下面的iptables规则来实现的。 NAT prerouting chain中的第一条规则是将从端口8023到23的入站TCP帧DNAT,而第二条规则是使用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捕获整个交易时,观察到以下顺序。

 TCP sequence: SYN --> <-- SYN/ACK ACK --> <-- RST 

wireshark捕获也已附加。 Wireshark捕获telnet帧

我们可以通过iptables中的规则发送RST作为第一个SYN请求吗?

 TCP sequence: SYN --> <-- RST 

有人可以帮助这方面的…先谢谢了。

有趣。

我只是testing,并在我的系统上,它的工作原理,你所期望的。 我testing了我的本地服务器端口25,这是不高使用:

 iptables-save命令
 #由iptables-save生成2014年8月22日星期五14:34:49发布
 * NAT
 :预备接受[12:1729]
 :input接受[12:1729]
 :OUTPUT ACCEPT [110:7484]
 :承认接受[110:7484]
 -PREROUTING -p tcp -m tcp --dport 225 -j DNAT  - 到目的地:25
承诺
 #2014年8月22日星期五14:34:49完成
 #由iptables-save生成2014年8月22日星期五14:34:49发布
 *过滤
 :input接受[888:1187686]
 :FORWARD ACCEPT [0:0]
 :输出接受[883:134630]
 -A INPUT -p tcp -m tcp --dport 25 -j REJECT --reject-with tcp-reset
承诺
 #2014年8月22日星期五14:34:49完成

 telnet XXX.XXX.XXX.XXX 225
尝试XXX.XXX.XXX.XXX ...
 telnet:无法连接到远程主机:连接被拒绝

我没有build立连接,然后像你一样重置。

我正在使用Linux 3.2.0-67和iptables v1.4.12

 tcpdump -vvvv tcp端口225
 tcpdump:监听eth0,链路types为EN10MB(以太网),捕获大小为65535字节
 IP(tos 0x10,tt164,id 50487,offset 0,flags [DF],proto TCP(6),length 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,tt164,id 0,offset 0,flags [DF],proto TCP(6),length 40)
     xxxxx.225> xx.39444:Flags [R.],0xks(不正确 - > 0x8628),seq 0,ack 47731888,win 0,length 0