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


0

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

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

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


Что вы имеете в виду "только с открытым портом 80"? Не заблокированы ли другие порты каким-либо внешним брандмауэром (например, маршрутизатор с NAT, перенаправлен только порт 80)? или по внутреннему программному брандмауэру ( iptablesправила)?
Камиль Мачоровски

К сожалению, блок находится за пределами моей машины, поэтому я ничего не могу с этим поделать ...
Фейт

Ответы:


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


Итак, если я правильно понял, он перенаправляет только трафик с 192.168.1.7 на порт 1234, а остальное - на 80?
Фейт

@ Фейт Да. Мой ответ теперь расширен.
Камиль Мачоровски

Кажется, что это работает, но происходит нечто странное: если я делаю iptables -L для перечисления своих правил, я не вижу введенное правило ... но оно работает наверняка, поэтому оно должно быть там! Мне это нужно для того, чтобы, на
всякий

@Phate я считаю iptables -L, эквивалентно iptables -t filter -L. Вам нужно iptables -t nat -L.
Камиль Мачоровски
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.