(Решение найдено, см. ниже...)
Сервер (CentOS 7) имеет несколько публичных IP-адресов, они настроены через обычные ifcfg-eth0:0
файлы конфигурации и работают нормально. Я пытаюсь адаптироваться к 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
на одну услугу можно назначить только один тег, поэтому просто создайте несколько услуг, если это вам необходимо.
решение1
Вся функциональность псевдонимов интерфейсов осталась от прошлого. Фактически она не создает отдельный интерфейс. Вам уже давно не нужно использовать псевдонимы для назначения нескольких IP-адресов одному интерфейсу. Поскольку это не «настоящий» интерфейс, программное обеспечение вашего брандмауэра не может рассматривать его как настоящий интерфейс. Если вы используете команду, ip addr
вы увидите, что все адреса назначены основному интерфейсу, а eth0:0
просто считается меткой для этого адреса.
Учитывая все это, я не совсем уверен, что вам нужно сделать, чтобы настроить ваш брандмауэр. Я подозреваю, что вам может потребоваться указать порты по IP, а не по IP-адресу и не по псевдониму.