Рейтинг:0

Как ограничить переадресацию портов firewalld на определенные исходные адреса?

флаг jp

Во-первых, я извиняюсь, если этот вопрос уже задавался раньше, но я не смог найти ответа, просматривая информацию, доступную на SE.

Моя ситуация следующая: У меня есть один сервер CentOS 7, который стоит на переднем крае и предоставляет ряд услуг. Он подключен к одному общедоступному порту Ethernet (eno1) и одному порту локальной сети Ethernet (eno2). К локальной сети подключен второй сервер, на который я хочу перенаправить трафик на определенный порт.

FirewallD обеспечивает переадресацию портов и работает. Все идет нормально! Однако есть серьезная проблема, с которой я столкнулся: я хочу ограничить доступ к этой переадресованной службе по общедоступному IP-адресу, и я не смог понять это, потому что FirewallD кажется слишком упрощенным в том, что с ним можно сделать. Отлично, если вы просто хотите открыть сервис в сети для всех, но не так много, когда вы хотите открыть его только для определенных областей. Дополнительная проблема заключается в том, что на целевом сервере в локальной сети все исходные IP-адреса для переадресованного трафика являются адресом в локальной сети сервера шлюза (10.0.0.1). Это означает, что я также не могу фильтровать трафик на целевом сервере по IP-адресу, оставляя сервис открытым для всего мира (чего я не хочу).

Есть ли способ сделать это с помощью firewalld? Я пытался сделать это вручную с помощью iptables, но вынужден был признать поражение. следуя всей информации, которую я смог найти, я так и не получил переадресацию на работу...

Уточнение:

Интернет -> (eno1, общедоступный IP-адрес) -> Centos -> (eno2, 10.0.0.1) -> целевой сервер (10.0.0.2)

Michael Hampton avatar
флаг cz
Это кажется тривиально простым; см. https://serverfault.com/a/684739/126632
Mark Straver avatar
флаг jp
Спасибо, наставили меня на правильный путь! С оговоркой, что зоны являются эксклюзивными и требуют дублирования всех правил... Из-за этого мой доступ чуть не заблокировали. :П
Рейтинг:1
флаг jp

С помощью Майкла Хэмптона (спасибо!) мне удалось во всем разобраться, и я отвечаю на свой вопрос.

Нужна отдельная зона, которую вы определяете, добавляя к ней области видимости:

firewall-cmd --new-zone=специальный --permanent
брандмауэр-cmd --перезагрузить
брандмауэр-cmd --zone=специальный --add-source=12.34.56.78/32 --постоянный
брандмауэр-cmd --zone=специальный --add-source=12.34.56.88/32 --постоянный
брандмауэр-cmd --zone=специальный --add-source=12.34.99.0/24 --постоянный

Затем добавьте все обычные сервисы/порты, которые вы бы имели в своем публичный зону в эту новую зону (в основном продублируйте ее конфигурацию) и, наконец, добавьте правило переадресованного порта только в новую зону с (пример http-прокси):

firewall-cmd --zone=special --add-forward-port=port=8080:proto=tcp:toaddr=10.0.0.2 --постоянный

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

брандмауэр-cmd --перезагрузить

и вуаля: области видимости 12.34.56.78/32, 12.34.56.88/32 и 12.34.99.0/24 теперь имеют доступ к прокси-сервису примера, но больше никому.

ОБНОВИТЬ

Критическое примечание: Эти шаги отлично работают для входящий трафик но чтобы заставить firewalld вести себя как маршрутизатор NAT, включая исходящий трафик, требуется больше работы (что я не смог заставить работать...). Если у кого-то есть более полное решение, позволяющее входящим и исходящим потокам работать через сервер с брандмауэром, я с радостью отмечу это как принятый ответ!

OT: В конце концов я все равно использовал IPTables, которые я использовал для переадресации портов. и NAT без особых проблем, как только я понял, что я сделал неправильно (у меня не было исходящего правила в цепочке FORWARD... >.> <.<), и он позволяет точно контролировать области действия в каждом правиле (с бонус, я могу делать все из Webmin :P). Поскольку это не по теме, я оставляю этот ответ как есть.

Michael Hampton avatar
флаг cz
Просто включить маскарад?!
Mark Straver avatar
флаг jp
Конечно, я сделал. Это не сработало.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.