Я добавил порт в публичную зону в firewalld, но все еще не могу получить доступ к порту

Я давно использую iptables, но до недавнего времени никогда не использовал firewalld. Я включил порт 3000 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 "сервис" для моего приложения?

4 ответа

Решение

С использованием --permanent flag записывает ваши изменения в постоянную конфигурацию, но не в рабочую конфигурацию. Запустите ту же команду еще раз без --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 перезапустить firewalld

Я пробовал все вышеперечисленное. Перезагрузил ВМ. Я даже установил правила в VNIC. Но проблема решилась только после перезапуска службы.

Среда: виртуальная машина Oracle Cloud Network: вычислительный экземпляр (разработчик с Oracle Linux 8)

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

Другие вопросы по тегам