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