LogNotes

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
----------------------------
← Previous
Back to list