Я настроил sshd моего сервера на прослушивание нестандартного порта 42.
Однако на работе я нахожусь за брандмауэром/прокси, которые разрешают исходящие соединения только на порты 21, 22, 80 и 443. Соответственно, я не могу подключиться по ssh к своему серверу с работы, что плохо. Я не хочу возвращать sshd на порт 22.
Идея такова: на моем сервере локально перенаправляем порт 22 на порт 42еслиИсходный IP совпадает с внешним IP моей рабочей сети. Для ясности предположим, что IP моего сервера — 169.1.1.1 (на eth1), а внешний IP моей работы — 169.250.250.250. Для всех IP, отличных от 169.250.250.250, мой сервер должен ответить ожидаемым «подключение отклонено», как это происходит для не прослушиваемого порта.
Я совсем новичок в iptables. Я бегло просмотрел длинное руководство по iptables и эти связанные/релевантные вопросы:
- вопрос iptables: переадресация порта x на порт ssh другой машины в сети
- Как перенаправить порт с помощью iptables?
Однако эти вопросы касаются более сложных сценариев с несколькими хостами, и мне не ясно, какие таблицы и цепочки следует использовать для локальной переадресации портов, и следует ли использовать 2 правила (для пакетов «вопрос» и «ответ») или только 1 правило для пакетов «вопрос».
Пока что я включил только пересылку через sysctl. Завтра начну тестировать решения и буду признателен за указания или, может быть, примеры для конкретных случаев для реализации моего простого сценария.
Правилен ли проект решения, представленный ниже?
iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp
--destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED
-j ACCEPT
Должен ли я использовать mangle
таблицу вместо filter
? И/или FORWARD
цепочку вместо INPUT
?
решение1
Для пересылки/перенаправления необходимо отредактировать таблицу NAT.
Такое правило, вероятно, ближе всего к тому, что вам нужно.
/sbin/iptables --table nat --append PREROUTING --protocol tcp \
--source 169.250.250.250 --dport 22 \
--jump REDIRECT --to-ports 42
Было бы гораздо проще и, вероятно, лучше просто оставить SSH на стандартном порту и как следует его защитить. Использование альтернативного порта замедлит мотивированного злоумышленника всего на пару секунд. Настройте систему предотвращения вторжений, например denyhosts/fail2ban, и отключите аутентификацию на основе пароля. Или рассмотрите возможность ограничения скорости входящих ssh-подключений.
Видеть:
решение2
Я бы использовал Shorewall для управления ip-таблицами. Он устанавливает приличный базовый брандмауэр, и делать то, что вам нужно, просто. Добавьте правило в /etc/shorewall/rules, например:
DNAT net:169.250.250.250 loc:169.250.250.250 tcp 42 22
Как и другие, я не уверен, почему вы запускаете sshd на другом порту. Если это интернет-порт, вы можете рассмотреть port knocking, чтобы держать порт закрытым, пока вы не нажмете на другой порт. Shorewall справляется с этим просто.