Você está aplicando as cadeias erradas. Os pacotes recebidos são primeiro processados por PREROUTING; se eles forem identificados como indo para "esta" máquina, eles serão entregues para INPUT, caso contrário, para FORWARD e POSTROUTING. A cadeia OUTPUT aplica-se apenas aos pacotes que são gerados localmente. O tutorial do iptables tem um capítulo fantástico sobre isso.
Com base em um exemplo em outro lugar na internet , para responder às suas dúvidas pergunta como posada, você provavelmente só precisa fazer isso:
# Packets that arrive for port 7080 should be redirected to port 80
iptables -t nat -A PREROUTING -p tcp --dport 7080 -j REDIRECT --to-ports 80
# Separately, all packets that leave this machine that go to port 80
# (which will include the ones redirected above) should be masqueraded,
# i.e. use NAT:
iptables -t nat -A POSTROUTING -p tcp --dport 80 -j MSAQUERADE
Tenho certeza de que o que você quer fazer é mais complicado, até porque você não diz em que direção deseja que isso aconteça. Se o que você realmente quer fazer é apenas configurar uma porta para frente para que seu endereço IP externo (vamos fingir que é 251.112.112.42) olhe para a Internet como se tivesse um servidor web rodando em sua porta 7080 - mas você está realmente servindo que a partir de uma máquina interna (digamos 192.168.42.1) na porta 80. Isso também é fácil, apenas diferente, e ainda mais perto do exemplo já mencionado :
# Anything sent to your external IP:port gets redirected to the internal one:
iptables -t nat -A PREROUTING -d 251.112.112.42/32 -p tcp --dport 7080 \
-j DNAT --to-destination 192.168.42.1:80
# Make sure those connections actually work, by rewriting everything back,
# again simply using NAT:
iptables -t nat -A POSTROUTING -d 192.168.42.1 -p tcp -dport 80 -j MASQUERADE