我在一台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捕获也已附加。 
我们可以通过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