Назад | Перейти на главную страницу

Firewalld с псевдонимом IP (eth0: 0)

(Решение найдено, см. Ниже ...)

Сервер (CentOS 7) имеет несколько общедоступных IP-адресов, которые настраиваются обычным способом. ifcfg-eth0:0 config и работают нормально. Пытаюсь адаптироваться к firewalld (идёт из iptables). Мне нравится иметь возможность указывать открытые порты для каждого псевдонима IP - с iptables это было сделано просто путем установки IP-адреса назначения, соответствующего любому псевдониму, необходимому для порта.

я мысль с firewalld я мог бы применить разные зоны к каждому интерфейсу для достижения того же эффекта, но, похоже, я не могу этого сделать.

Начнем с:

# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth0:0
trusted
  interfaces: eth1

Я создал новую зону public_web что я хотел использовать для eth0:0

# firewall-cmd --permanent --new-zone=public_web
success
# firewall-cmd --permanent --zone=public_web --add-service=http
success
# firewall-cmd --permanent --zone=public_web --add-interface=eth0:0
success
# firewall-cmd --reload
success

Но...

# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth0:0
trusted
  interfaces: eth1

Я попытался --remove-interface, --change-interface и различные другие команды в разном порядке, но eth0:0 не сдвинется с места. Кажется, я не могу найти никакой документации об использовании псевдонимов, поэтому я не уверен, что это вообще правильный способ достичь того, чего я хочу?

Спасибо всем.


Решение:

Решение - использовать destination в служебном файле, его можно использовать только один раз для каждой службы.

Допустим, вам нужен порт 443 на 87.98.256.512, сделайте копию https.xml файл (рекомендуем не трогать оригиналы) в /etc/firewalld/services, здесь я буду использовать https-admin.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>HTTPS for 87.98.256.512</short>
  <description>...</description>
  <port protocol="tcp" port="443"/>
  <destination ipv4="87.98.256.512" />
</service>

затем

# firewall-cmd --permanent --zone=public --add-service=https-admin
success
# firewall-cmd --reload
success
# firewall-cmd --zone=public --list-services
http https-admin

И наконец подтвердите это с помощью iptables

Chain IN_public_allow (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            87.98.256.512        tcp dpt:443 ctstate NEW
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW

Помните: только один destination тег для каждой службы, поэтому просто создайте несколько служб, если это ваше требование.

Вся функциональность псевдонимов интерфейса осталась в прошлом. На самом деле он не создает отдельный интерфейс. Вам давно не нужно было использовать псевдонимы для назначения нескольких IP-адресов одному интерфейсу. Поскольку это не «настоящий» интерфейс, ваш брандмауэр не может рассматривать его как настоящий интерфейс. Если вы используете ip addr вы увидите, что все адреса назначены основному интерфейсу, а eth0:0 просто считается ярлыком для этого адреса.

Учитывая все это, я не совсем уверен, что вам нужно сделать, чтобы настроить брандмауэр. Я подозреваю, что вам может потребоваться указать порты по IP, а не по IP-адресу и не псевдониму.