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

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

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

1 ответ1

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 работает в первую очередь. В этом случае вы также должны разблокировать другой порт.

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