Я использовал iptables в течение долгого времени, но никогда не использовал firewalld до недавнего времени. Я включил порту 3 000 TCP через firewalld со следующей командой:
# firewall-cmd --zone=public --add-port=3000/tcp --permanent
Однако я не могу получить доступ к серверу на порте 3000. От внешнего поля:
telnet 178.62.16.244 3000
Trying 178.62.16.244...
telnet: connect to address 178.62.16.244: Connection refused
Нет никаких проблем маршрутизации: у Меня есть отдельное правило для порта вперед от порта 80 для портирования 8000, который хорошо работает внешне. Мое приложение определенно слушает на порте также:
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 99 36797 18662/node
firewall-cmd
кажется, не показывает порт, который любой - видит как ports
пусто. Вы видите вперед правило, которое я упомянул ранее.
# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports: port=80:proto=tcp:toport=8000:toaddr=
icmp-blocks:
rich rules:
Однако я вижу правило в файле конфигурации XML:
# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<port protocol="tcp" port="3000"/>
<forward-port to-port="8000" protocol="tcp" port="80"/>
</zone>
Что еще я должен сделать для предоставления доступа к моему приложению на порте 3000?
Также: добавляет доступ через порт корректную вещь сделать? Или я должен сделать firewalld 'сервис' для своего приложения вместо этого?
Использование флага --permanent
записывает ваши изменения в постоянную конфигурацию, но не в текущую. Снова запустите ту же команду без флага --permanent
, чтобы она немедленно вступила в силу.
Начиная с RHEL 7.1 и текущих версий Fedora, вы также можете скопировать запущенную конфигурацию в постоянную с:
firewall-cmd --runtime-to-permanent
Как ни странно, правило, казалось, только выписывалось в конфигурационный файл и не применялось сразу. Пришлось перезагружать брандмауэр:
firewall-cmd --reload
После этого появилось правило:
# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports: 3000/tcp
masquerade: no
forward-ports: port=80:proto=tcp:toport=8000:toaddr=
icmp-blocks:
rich rules:
Порт теперь доступен.
Оставив это примечание, поскольку моя проблема не была решена, пока я не перезапустил systemctl с помощью
sudo systemctl restart firewalld
Я пробовал все вышеперечисленное. Перезагрузил вм. Я даже установил правила в VNIC. Но это решилось только после перезапуска службы.
Среда: Oracle Cloud Network ВМ: вычислительный экземпляр (разработчик с Oracle Linux 8)