2025-06-16 06:44:36
В Red Hat Enterprise Linux 8 (RHEL 8) по умолчанию используется `firewalld` для управления брандмауэром. Чтобы открыть порты 80 (HTTP) и 443 (HTTPS) перманентно (то есть, чтобы настройки сохранялись после перезагрузки), нужно использовать утилиту `firewall-cmd`. Ниже приведены команды для этого, а также альтернативный способ с использованием `iptables`, если вы отключили `firewalld` и используете `iptables`.
### 1. **Открытие портов 80 и 443 в firewalld**
#### Открытие портов
Чтобы открыть порты 80 и 443 в текущей зоне (по умолчанию это обычно зона `public`) и сделать настройки постоянными:
```bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
```
#### Альтернативный способ: использование служб
Поскольку порты 80 и 443 соответствуют службам `http` и `https`, можно добавить их вместо указания портов напрямую:
```bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
```
#### Применение изменений
После добавления портов или служб необходимо перезагрузить `firewalld`, чтобы применить постоянные настройки:
```bash
sudo firewall-cmd --reload
```
#### Проверка
Убедитесь, что порты или службы добавлены:
```bash
sudo firewall-cmd --list-all
```
Пример вывода:
```
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client http https ssh
ports: 80/tcp 443/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
```
Или проверьте только порты:
```bash
sudo firewall-cmd --list-ports
```
Вывод: `80/tcp 443/tcp`
Для проверки постоянных настроек:
```bash
sudo firewall-cmd --permanent --list-all
```
#### Примечания
- Если вы используете нестандартную зону (не `public`), укажите её явно, например:
```bash
sudo firewall-cmd --zone=dmz --permanent --add-service=http
sudo firewall-cmd --zone=dmz --permanent --add-service=https
sudo firewall-cmd --reload
```
- Убедитесь, что `firewalld` запущен:
```bash
sudo systemctl status firewalld
```
Если не запущен, включите и запустите:
```bash
sudo systemctl enable firewalld
sudo systemctl start firewalld
```
---
### 2. **Открытие портов 80 и 443 в iptables (если firewalld отключён)**
Если вы отключили `firewalld` и используете `iptables`, выполните следующие шаги:
#### Добавление правил
Добавьте правила для открытия портов 80 и 443:
```bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
```
#### Сохранение правил
Чтобы правила сохранялись после перезагрузки, используйте `iptables-save`:
```bash
sudo iptables-save > /etc/sysconfig/iptables
```
#### Убедитесь, что iptables-сервис включён
Если используется `iptables-services`:
```bash
sudo systemctl enable iptables
sudo systemctl start iptables
```
#### Проверка
Проверьте текущие правила:
```bash
sudo iptables -L -v -n --line-numbers
```
Пример вывода:
```
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 1234 567K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 10 600 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
```
Или используйте:
```bash
sudo iptables-save
```
---
### 3. **Рекомендация**
- В RHEL 8 предпочтительно использовать `firewalld`, так как он проще в управлении и поддерживает динамические изменения без потери соединений. Использование служб (`http`, `https`) вместо прямого указания портов упрощает управление, так как службы автоматически включают нужные порты (80 для `http`, 443 для `https`).
- Если вы используете `iptables`, убедитесь, что `firewalld` отключён, чтобы избежать конфликтов:
```bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
```
---
### Ответ на ваш вопрос
Для открытия портов 80 и 443 перманентно в RHEL 8 используйте:
```bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```
Эти команды заменяют функциональность `iptables-save` для постоянного сохранения настроек в `firewalld`. Проверяйте настройки с помощью `sudo firewall-cmd --list-all`.
========================
---
- name: Open ports 80 and 443 permanently in firewalld
hosts: all
become: yes
tasks:
- name: Ensure firewalld is installed
dnf:
name: firewalld
state: present
- name: Ensure firewalld is started and enabled
systemd:
name: firewalld
state: started
enabled: yes
- name: Open HTTP service (port 80) permanently
firewalld:
service: http
permanent: yes
state: enabled
immediate: yes
- name: Open HTTPS service (port 443) permanently
firewalld:
service: https
permanent: yes
state: enabled
immediate: yes
- name: Reload firewalld to apply changes
command: firewall-cmd --reload
args:
warn: no
--------
- name: Open port 80 permanently
firewalld:
port: 80/tcp
permanent: yes
state: enabled
immediate: yes
- name: Open port 443 permanently
firewalld:
port: 443/tcp
permanent: yes
state: enabled
immediate: yes
----------------------------
Back to list