Перенаправлять только определенные запросы хостов, оставляя значение по умолчанию для других

У меня есть машина с открытым портом 80, уже включен http-сервер. Я хочу перехватить любой входящий трафик через порт 80 и:

  • если происходит перенаправление с ip1,ip2,ip3 на другое приложение, прослушивающее другой порт
  • Остальное зайти на веб-сервер

Возможно ли это? В настоящее время я использую socat, но, даже с reuseaddr, я по-прежнему получаю сообщение об ошибке при запуске веб-сервера из-за порта уже используется...

1 ответ

Вы сказали "только с открытым портом 80". Если другие порты заблокированы каким-либо внешним брандмауэром (например, маршрутизатор с NAT, вам перенаправлен только порт 80), то основное правило может быть таким:

iptables -t nat -A PREROUTING -p TCP --dport 80 -s 192.168.1.7 -j REDIRECT --to-port 1234

Принимая каждый трафик, поступающий в порт 80, он перенаправляет все, что от 192.168.1.7 в порт 1234оставляя остальное нетронутым.

Заметка iptables работает на основе первого матча, так что вы можете сделать

iptables -t nat -I PREROUTING …

вместо.

Различные способы указания нескольких возможных адресов источника см. В ответах на этот вопрос: iptables несколько источников IP.

Но если "только с открытым портом 80" означает, что у вас есть iptables -A INPUT … правила, которые позволяют только порт 80, я ожидаю, что одно только выше не будет работать. Это потому что nat/PREROUTING работает в первую очередь. В этом случае вы также должны разблокировать другой порт.

Другие вопросы по тегам