Перенаправление веб-сервера с порта 5000 на порт 80 на локальном хосте (Fedora, firewall-cmd)

Вопрос или проблема

На Fedora 24 веб-сервер (Node.js) работает (самостоятельно, без apache/nginx) на порту 5000.
http://localhost:5000 работает

Как сделать его доступным на порту 80?

Пробовал следующее

systemctl restart firewalld
firewall-cmd --add-service=http --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000 
firewall-cmd --list-all
FedoraWorkstation (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp3s0
  sources: 
  services: mdns ssh dhcpv6-client samba-client https http
  ports: 1025-65535/tcp 1025-65535/udp
  protocols: 
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=5000:toaddr=
  source-ports: 
  icmp-blocks: 
  rich rules: 

Дополнительная информация
Пробовал все вышеперечисленное с –zone=external тоже

Запуск node как root на порту 80 работает. Обратите внимание, что IPv4 нет:

netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:4433            0.0.0.0:*               LISTEN      3977/deluge-gtk     
tcp        0      0 0.0.0.0:51157           0.0.0.0:*               LISTEN      3977/deluge-gtk     
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      900/postgres        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      3203/dropbox        
tcp        0      0 127.0.0.1:17600         0.0.0.0:*               LISTEN      3203/dropbox        
tcp        0      0 127.0.0.1:17603         0.0.0.0:*               LISTEN      3203/dropbox        
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::4433                 :::*                    LISTEN      3977/deluge-gtk     
tcp6       0      0 :::51157                :::*                    LISTEN      3977/deluge-gtk     
tcp6       0      0 :::5432                 :::*                    LISTEN      900/postgres        
tcp6       0      0 :::17500                :::*                    LISTEN      3203/dropbox        
tcp6       0      0 :::34017                :::*                    LISTEN      10532/code          
tcp6       0      0 :::5858                 :::*                    LISTEN      30394/node          
tcp6       0      0 :::5000                 :::*                    LISTEN      30394/node     

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000 --permanent

#заставить перенаправление портов работать на localhost
iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 5000

Не забудьте запустить firewall-cmd --reload после установки постоянных правил. В противном случае, правила не будут считаны до перезапуска службы firewalld.

Ответ или решение

Для того чтобы перенаправить веб-сервер с порта 5000 на порт 80 на локальном хосте в Fedora, вы уже предприняли ряд полезных шагов. Рассмотрим ваши действия и добавим несколько рекомендаций для достижения цели.

Понимание задачи

Вы хотите сделать локальный Node.js сервер, работающий на порту 5000, доступным через стандартный HTTP-порт 80. Это обычно делается для удобства, поскольку пользователи в основном обращаются к веб-сайтам через порт 80.

Ваши действия

Вы использовали firewall-cmd для настройки пересылки портов и маскарадинга. Это правильный шаг, так как функциональность firewalld позволяет управлять сетевыми правилами на Fedora.

Рекомендуемые шаги

  1. Проверка существующих настроек:

    • Убедитесь, что у вас нет противоречивых правил в firewall, которые могут препятствовать правильной работе перенаправления. Для этого выполните firewall-cmd --list-all и убедитесь, что правило пересылки портов настроено правильно.
  2. Настройка пересылки через iptables:

    • Вы уже добавили правило для работы с локальным хостом:
      iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 5000
    • Убедитесь, что это правило сохранено и будет применено после перезагрузки системы. Для этого вам может понадобиться сохранить правила iptables (например, с помощью iptables-save).
  3. Перезагрузка конфигурации firewall:

    • Для того чтобы изменения вступили в силу, выполните firewall-cmd --reload. Это применит все постоянные изменения.
  4. Проверка доступности:

    • Убедитесь, что порт 80 доступен и не блокируется другими правилами или приложениями. Выполните netstat -tpln или ss -tpln для проверки состояния порта.
  5. Диагностика и отладка:

    • Если после выполнения всех шагов проблема не решена, проверяйте логи системы и firewalld (journalctl -xe), чтобы найти возможные ошибки или предупреждения, которые могут указать на проблемы в конфигурации.

Заключение

Следуя перечисленным шагам, вы должны настроить правильную переадресацию запросов с порта 80 на порт 5000 на вашем Fedora сервере. Это позволит пробросить ваши локальные запросы без необходимости запускать Node.js сервер от имени root на порту 80. Внимательно следите за каждым шагом и проверяйте состояние системы после внесения изменений.

Я надеюсь, что данное решение поможет вам в создании безопасной и эффективной конфигурации веб-сервера на Fedora.

Оцените материал
Добавить комментарий

Капча загружается...