Белый список исходных IP-адресов в CentOS 7

Белый список исходных IP-адресов в CentOS 7

Я хочу настроить межсетевой экран CentOS 7 таким образом, чтобы все входящие запросы блокировались, за исключением исходящих IP-адресов, которые я занес в белый список. И для IP-адресов из белого списка все порты должны быть доступны.

Я могу найти несколько решений (не уверен, будут ли они работать), iptablesно CentOS 7 использует firewalld. Я не могу найти ничего похожего, чтобы добиться с помощью firewall-cmdкоманды.

Интерфейсы находятся в Public Zone. Я также уже переместил все сервисы в Public zone.

решение1

Я бы добился этого, добавив источники в зону. Сначала проверьте, какие источники есть для вашей зоны:

firewall-cmd --permanent --zone=public --list-sources

Если таковых нет, вы можете начать их добавлять, это ваш «белый список»

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(Это добавляет целый /24и отдельный IP-адрес, так что у вас есть ссылка как на подсеть, так и на отдельный IP-адрес)

Задайте диапазон портов, которые вы хотите открыть:

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

Это касается только портов с 1 по 22. При желании вы можете расширить это число.

Теперь перезагрузите то, что вы сделали.

firewall-cmd --reload

И проверьте свою работу:

 firewall-cmd --zone=public --list-all

Примечание / редакционная статья: Это неважно, но мне нравится зона "доверенных" для белого списка IP-адресов в firewalld. Вы можете сделать дальнейшую оценку, прочитавпредложения redhat по выбору зоны.

Смотрите также:


Если вам нужны DROPпакеты за пределами этого источника, вот пример того, как отбросить те, которые находятся за пределами того, что /24я использовал в качестве примера ранее,для этого можно использовать расширенные правила, я полагаю. Это концептуально, я не тестировал это (кроме того, что увидел, что centos 7 принимает команду), но, должно быть достаточно просто сделать pcap и посмотреть, ведет ли он себя так, как вы ожидаете

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'

решение2

Даже если ответ был принят и проголосован, я не думаю, что он правильный. Я не могу найти четкого объяснения в документации, но из реализованного поведения это выглядит так:

  1. Интерфейс и источник используются как селекторы — какую зону(ы) активировать
  2. оба игнорируются для зоны по умолчанию (всегда активна)

Итак, ответ будет таким:

  1. заблокируйте зону по умолчанию, например «публичную» — порты не должны быть открыты, а службы недоступны
  2. в другой зоне скажите «работа» — определите источник и откройте порты

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

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

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

$ sudo firewall-cmd --get-active-zones

ты получишь:

work
  sources: 192.168.0.0/24

поэтому правила зоны "work" будут применяться к конкретной подсети. У вас будет диапазон открытых портов для "белого списка" =подсетькак и просили. И конечно же используйте --permanentoption в --add-xxxутверждениях, чтобы закрепить поведение.

В свою очередь, любые порты или службы, которые находятся в «публичной» (по умолчанию) зоне, будут применяться ко всем интерфейсам и исходным адресам.

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Та же система работает для интерфейсов. Скажем, добавляя интерфейс "ens3" в зону "work":

$ sudo firewall-cmd --zone=work --add-interface=ens3

вы будете использовать правила зоны «work» для любых запросов из определенного интерфейса — более грубый селектор, чем «source».

решение3

Отказ от ответственности: я на самом деле не пробовал то, что предлагаю, здесь, но это довольно близко к последней настройке firewalld, которую я делал, поэтому я исхожу из этого. Firewalld предоставляет вам несколько предварительно настроенных зон, как раз для этой цели. Одна называется "drop", которая сбрасывает все входящее, и одна называется "trusted", которая позволяетлюбойсоединение (т. е., так что вам даже не нужно открывать отдельные порты, я думаю). Хитрость в том, чтобы заставить нужную зону сработать для того, что вам нужно.

Firewalld применит правила для зоны на основе следующего приоритета:

  • Если исходный IP-адрес совпадает с исходным IP-адресом, привязанным к зоне, он использует его.
  • Если исходный IP-адрес не соответствует ни одной конкретной зоне, он проверяет, настроена ли для него зона.интерфейспакет пришел на. Если есть один, он использует его.
  • Наконец, если ничего не совпадает, используется зона по умолчанию.

Итак, для начала вам необходимо привязать свои доверенные IP-адреса к «доверенной» зоне:

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

Затем либо установите зону по умолчанию на «drop», либо привяжите к ней свой интерфейс:

firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=eth0

и затем дайте изменениям вступить в силу (предупреждение: это, вероятно, приведет к разрыву соединения, если вы делаете это по сети и не добавили свой исходный IP-адрес в доверенную зону):

firewall-cmd --reload

Конечно, вы также можете просто временно протестировать их, опустив «--permanent» (и тогда вам не придется использовать --reload).

решение4

Я удивлен, что ответы на доверенные зоны не являются выбранным ответом. Доверенная зона имеет значение по умолчанию "target: ACCEPT", в то время как остальные - "target: default". Хотя это на самом деле не имеет значения, похоже, что это предполагаемый метод из-за его названия и значения цели по умолчанию.

Как быстро заблокировать ящик, чтобы доступ к нему был только у вас:

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

После перечисления всех зон вы должны увидеть что-то вроде этого:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

Примечание: Я удалил строки с нулевым/отсутствующим значением. Важно то, что trusted и drop оба (активны) и drop имеет ваш публичный интерфейс.

Что это делает с iptables для демонстрации:

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0

Связанный контент