Interessante.
Acabei de testar isso e no meu sistema funciona como você espera. Eu testei com a porta 25 no meu servidor local que não está em alta utilização:
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
Eu não obtenho a conexão estabelecida e, em seguida, a redefinição como você faz.
Estou usando o 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