Я делаю реализацию на Linux-машине, чтобы отклонять входящие запросы telnet от порта telnet 8023 на стороне WAN. Функциональность достигается с помощью следующих правил iptables. Первое правило в цепочке предварительной маршрутизации NAT для входящих tcp-кадров DNAT с порта 8023 на 23 и второе правило для отклонения этих tcp-кадров на порту 23 с помощью tcp-reset
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.
Однако, увидев захват всей транзакции с WAN-машины с помощью Wirehark, можно было наблюдать следующую последовательность.
TCP sequence:
SYN -->
<-- SYN/ACK
ACK -->
<-- RST
Также был прикреплен захват wirehark.
Можем ли мы отправить RST для первого запроса SYN по правилу в iptables, как показано ниже?
TCP sequence:
SYN -->
<-- RST
Может ли кто-нибудь помочь в этом отношении ... Заранее спасибо.
Интересный.
Я только что протестировал это, и в моей системе он работает так, как вы ожидаете. Я тестировал его с портом 25 на моем локальном сервере, который не используется часто:
iptables-save # Generated by iptables-save v1.4.12 on Fri Aug 22 14:34:49 2014 *nat :PREROUTING ACCEPT [12:1729] :INPUT ACCEPT [12:1729] :OUTPUT ACCEPT [110:7484] :POSTROUTING ACCEPT [110:7484] -A PREROUTING -p tcp -m tcp --dport 225 -j DNAT --to-destination :25 COMMIT # Completed on Fri Aug 22 14:34:49 2014 # Generated by iptables-save v1.4.12 on Fri Aug 22 14:34:49 2014 *filter :INPUT ACCEPT [888:1187686] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [883:134630] -A INPUT -p tcp -m tcp --dport 25 -j REJECT --reject-with tcp-reset COMMIT # Completed on Fri Aug 22 14:34:49 2014 telnet XXX.XXX.XXX.XXX 225 Trying XXX.XXX.XXX.XXX... telnet: Unable to connect to remote host: Connection refused
У меня не устанавливается соединение, а затем выполняется сброс, как у вас.
Я использую Linux 3.2.0-67 и iptables v1.4.12
tcpdump -vvvv tcp port 225 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 14:48:29.178049 IP (tos 0x10, ttl 64, id 50487, offset 0, flags [DF], proto TCP (6), length 60) xx.39444 > xxxxx.225: Flags [S], cksum 0x2c0d (correct), seq 47731887, win 14600, options [mss 1460,sackOK,TS val 665686424 ecr 0,nop,wscale 5], length 0 14:48:29.178089 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40) xxxxx.225 > xx.39444: Flags [R.], cksum 0x3745 (incorrect -> 0x8628), seq 0, ack 47731888, win 0, length 0