Это карта сети:
[External computer]---[Router]---[SSH server]
EXTERNAL NET <=|=> INTERNAL NET
Маршрутизатор выполняет преобразование SNAT и порта:
#~ iptables -t nat -A POSTROUTING -o eth-external -j SNAT --to-source $EXT_ROUTER_IP
#~ iptables -t nat -A PREROUTING -i eth-external -p tcp --dport 2222 -j DNAT --to-destination $SSH_SERVER:22
Это хорошо работает, я могу сделать SSH к серверу SSH из-за пределов моей сети, выполнив команду ssh -p 2222 $ ROUTER_IP.
Проблема возникает, когда я устанавливаю политику по умолчанию для FORWARD в DROP.
#~ iptables -P FORWARD DROP
Логично, что теперь пакеты на внутренний SSH-сервер отбрасываются.
Я пытаюсь с
#~ iptables -A FORWARD -i eth-external -o eth-internal -p tcp --dport 22 -j ACCEPT
#~ iptables -A FORWARD -o sth-external -i eth-internal -p tcp --dport 22 -j ACCEPT
Нет работы.
#~ iptables -A FORWARD -i eth-external -o eth-internal -j ACCEPT
#~ iptables -A FORWARD -o sth-external -i eth-internal -j ACCEPT
Работает.
Но я не хочу разрешать весь трафик между этими двумя интерфейсами, только пакеты SSH.
Кто-нибудь может мне помочь?
Спасибо!
РЕДАКТИРОВАТЬ:
Наконец-то у меня это получилось ...
#~ iptables -t nat -A PREROUTING -i eth-external -p tcp --dport 2222 -j DNAT --to-destination $SSH_SERVER:22
#~ iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
спасибо @davidgo