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

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.
Камиль Мачоровски