> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/client-area/kak-zashitit-server-vps-vds-ot-nesankcionirovannogo-dostupa/firewall.md](https://docs.f3cloud.com/ru/client-area/kak-zashitit-server-vps-vds-ot-nesankcionirovannogo-dostupa/firewall.md).

# Настройка брандмауэра UFW и firewalld на Linux VPS

Как настроить брандмауэр на VPS и закрыть лишние порты. Пошаговая настройка UFW для Ubuntu и Debian и firewalld для AlmaLinux, CentOS и Oracle Linux, доступ к SSH только с вашего IP.

Брандмауэр решает, какие подключения пускать на сервер, а какие нет. Логика простая, снаружи должны быть видны только те сервисы, которыми вы реально пользуетесь. Чем меньше открытых портов, тем меньше шансов, что кто-то найдёт в них уязвимость.

Обычно открыть нужно совсем немного.

* **SSH** – порт `22` или ваш, если вы его [меняли](https://docs.f3cloud.com/ru/client-area/kak-zashitit-server-vps-vds-ot-nesankcionirovannogo-dostupa/smena-porta-ssh.md);
* **сайт** – порты `80` и `443`;
* **VPN или прокси** – порты, которые использует ваша программа, например `443` для VLESS.

> **Сначала разрешите SSH.**
>
> Если включить брандмауэр, не разрешив SSH, вы сразу потеряете доступ к серверу. Поэтому выполняйте команды строго по порядку.

***

### Настройка брандмауэра

Команды выполняются на сервере.

#### Ubuntu и Debian (UFW)

```bash
# Устанавливаем UFW (в Ubuntu он обычно уже есть)
sudo apt update
sudo apt install -y ufw

# По умолчанию запрещаем все входящие подключения и разрешаем
# исходящие
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Разрешаем SSH. Если вы меняли порт, укажите свой вместо 22
sudo ufw allow 22/tcp

# Если на сервере работает сайт, открываем HTTP и HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Включаем брандмауэр. На вопрос о текущих SSH-подключениях
# ответьте y
sudo ufw enable

# Смотрим, какие правила действуют
sudo ufw status verbose
```
#### AlmaLinux, CentOS, Oracle Linux (firewalld)

```bash
# Устанавливаем firewalld и включаем его автозапуск
sudo dnf install -y firewalld
sudo systemctl enable --now firewalld

# Смотрим, что уже открыто. SSH здесь обычно разрешён по
# умолчанию
sudo firewall-cmd --list-all

# Если на сервере работает сайт, открываем HTTP и HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Применяем изменения
sudo firewall-cmd --reload
```

Если позже понадобится открыть ещё какой-то порт, например `8080` для панели управления, это делается одной командой.

#### Ubuntu и Debian (UFW)

```bash
# Открываем порт 8080 для TCP-подключений
sudo ufw allow 8080/tcp
```
#### AlmaLinux, CentOS, Oracle Linux (firewalld)

```bash
# Открываем порт 8080 для TCP-подключений и применяем изменения
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
```

***

### SSH только с вашего IP-адреса

Это самая сильная мера, ведь подключиться к SSH сможете только вы, а для всех остальных порт будет закрыт. Свой IP-адрес можно узнать на сайте [2ip.ru](https://2ip.ru).

> **Подходит, если у вас постоянный IP.**
>
> Этот шаг подходит, только если у вас постоянный IP-адрес. У многих домашних провайдеров он время от времени меняется, и тогда после смены адреса вы не сможете зайти по SSH, и придётся заходить через консоль. Если не уверены, что IP постоянный, пропустите этот шаг.

#### Ubuntu и Debian (UFW)

```bash
# Разрешаем SSH только с вашего IP. Вместо ВАШ_IP подставьте
# свой адрес,
# а вместо 22 – свой порт SSH, если меняли его
sudo ufw allow from ВАШ_IP to any port 22 proto tcp

# Удаляем общее правило, которое пускало к SSH всех
sudo ufw delete allow 22/tcp

# Проверяем список правил
sudo ufw status
```
#### AlmaLinux, CentOS, Oracle Linux (firewalld)

```bash
# Разрешаем SSH только с вашего IP. Вместо ВАШ_IP подставьте
# свой адрес,
# а вместо 22 – свой порт SSH, если меняли его
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ВАШ_IP" port port="22" protocol="tcp" accept'

# Убираем стандартный сервис SSH, который был открыт для всех
sudo firewall-cmd --permanent --remove-service=ssh

# Применяем изменения и проверяем результат
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
```

> **Если доступ всё-таки пропал.**
>
> Если доступ всё-таки пропал, откройте сервер кнопкой <kbd>Консоль</kbd> в списке серверов в личном кабинете и временно выключите брандмауэр.\
> На Ubuntu и Debian это команда `sudo ufw disable`.\
> На AlmaLinux, CentOS и Oracle Linux это `sudo systemctl stop firewalld`.
>
> Потом поправьте правила и включите его снова.

***

### Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Сайт хостинга:** [https://f3cloud.com](https://f3cloud.com/ru)
