Может ли iptables изменить свои правила в зависимости от сети, в которой вы сейчас находитесь?

461
codykochmann

Есть ли у iptables способ автоматически адаптировать некоторые из его правил или просто указать, какие наборы правил он использует в зависимости от текущей сети?

У меня есть много применений для чего-то подобного, но два самых чистых примера:

  1. Если я нахожусь в моей домашней сети, выставьте определенные порты для локальной сети. Когда меня нет, отбрось трафик к ним.
  2. Если у меня есть рабочий компьютер, который должен отправлять системные журналы в сервер пересылки журналов UDP, но эта цель меняет IP-адреса в зависимости от того, в какой сети я работаю (поскольку серверы пересылки журналов не используют стандартные IP-адреса), разрешать трафик UDP только на указанные IP-адреса, когда определенные условия сети соблюдены.

Я знаю, что мог бы просто написать небольшой скрипт на python, который бы дал мне такое поведение. Но в последнее время я пытался заставить себя НАСТОЯЩИМ использовать инструменты, которые система уже предоставляет мне, вместо того, чтобы заново изобретать каждое колесо, с которым я сталкиваюсь.

Операционная система - Kali (на основе Debian), иногда также CentOS, так что практически любая опция linux-y находится на столе, если iptables не является правильным уровнем для решения этой проблемы.

2
У Iptables нет способа узнать, в какой сети вы находитесь. Самое близкое было бы разрешить трафик на / из адресов в диапазонах известных сетей, но это, очевидно, далеко не надежно. Возможно, вам удастся взломать какой-нибудь скрипт пост-апа в любой инструмент настройки сети, который вы используете, чтобы применить правильные правила. multithr3at3d 6 лет назад 1
Если в вашей домашней и рабочей сетях используются разные диапазоны IP-адресов. schroeder 6 лет назад 0
Существуют ли инструменты, которые уже хороши в таких вещах? codykochmann 6 лет назад 0

1 ответ на вопрос

1
grawity

Сам iptables полностью статичен. Вам понадобится интерфейс, поддерживающий работу сети.

Существуют ли инструменты, которые уже существуют

В Fedora / CentOS используется firewalld, который имеет понятие «зоны» (похожее на те, что наблюдаются в брандмауэре Windows). Если ваша система использует NetworkManager, вы можете назначить зону каждому сетевому профилю, и она соответственно загрузит правила брандмауэра.

Другой вариант - использовать вспомогательные «ловушки» в инструменте конфигурации сети, чтобы он запускал скрипт, который загружает нужный набор правил при каждом подключении к другой сети. Это может быть простой сценарий, вызывающий в iptables-restore < /etc/iptables/rules.$ZONEзависимости от того, какой SSID Wi-Fi активен.