1

Это карта сети:

  [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

1 ответ1

0

Вы не принимаете трафик с порта 2222 на порт 22. Вам нужны линии

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 2222 -j ACCEPT

или, возможно, лучше

iptables -A FORWARD -i eth-external -o eth-internal -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Который будет соответствовать исходящим пакетам в ответ на входящий запрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .