Назад | Перейти на главную страницу

IP-зависимая локальная переадресация портов в Linux

Я настроил 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 и следующие вопросы:

Однако эти вопросы относятся к более сложным сценариям с несколькими хостами, и мне неясно, какие таблицы и цепочки я должен использовать для локальной переадресации портов, и должны ли я иметь 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?

Чтобы пересылать / перенаправлять вещи, вы должны отредактировать таблицу 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-соединения с ограничением скорости.

Видеть:

Я бы использовал Shorewall для управления ip-таблицами. Он устанавливает достойный базовый брандмауэр, и делать то, что вы хотите, очень просто. Добавьте правило в / etc / shorewall / rules, например:

Сеть DNAT: 169.250.250.250 расположение: 169.250.250.250 tcp 42 22

Как и другие, я не уверен, почему вы запускаете sshd на другом порту. Если это интернет-порт, вы можете захотеть посмотреть на стук порта, чтобы он оставался закрытым, если вы сначала не нажмете другой порт. Shorewall справляется с этим просто.