Как ограничить доступ к сервисам по IP-адресу с помощью фаервола на VPS?

В статье разберём:

  • как ограничить доступ к SSH по IP через ufw;
  • как разрешить работу только определённых клиентов для веб-сервиса;
  • как задать аналогичные правила через firewalld;
  • как проверить, что ограничения работают;
  • какие ошибки встречаются и как их решать.

Что понадобится

  • Ubuntu/Debian VPS с ufw или CentOS/RHEL с firewalld.

  • Доступ по SSH с root или sudo.

  • IP-адрес компьютера или сети, откуда разрешаем подключение.

Ограничение доступа по IP через UFW (Ubuntu/Debian)

ufw — удобный инструмент для управления правилами iptables. С его помощью можно разрешить доступ к сервису только определённым IP.

Разрешаем доступ к SSH только с одного IP

# Разрешаем доступ по SSH только с IP 203.0.113.10
sudo ufw allow from 203.0.113.10 to any port 22 comment 'SSH доступ с офиса'

# Проверяем активные правила
sudo ufw status numbered

Теперь подключение к SSH с других адресов будет отклонено.

Разрешаем доступ с подсети

# Разрешаем доступ с подсети /24 (например, офисная сеть)
sudo ufw allow from 203.0.113.0/24 to any port 22

Ограничение для веб-сервиса (порт 8080)

# Только с IP 198.51.100.25
sudo ufw allow from 198.51.100.25 to any port 8080
Пример ограничения доступа по IP через UFW

Важно: перед ограничением SSH обязательно убедитесь, что IP указан правильно. Иначе можно потерять доступ и придётся входить через VNC/консоль в панели хостинга.

Ограничение доступа через firewalld (CentOS/RHEL)

На CentOS/RHEL для управления правилами чаще используется firewalld. Он позволяет задавать доступ по IP к конкретным сервисам или портам.

Разрешаем доступ к SSH только с одного IP

# Разрешаем доступ к SSH (порт 22) только с IP 203.0.113.10
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='203.0.113.10' port port=22 protocol=tcp accept"

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

Разрешаем доступ с подсети

sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='203.0.113.0/24' port port=22 protocol=tcp accept"
sudo firewall-cmd --reload

Пример для веб-сервиса (порт 8080)

# Разрешаем доступ только с IP 198.51.100.25
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='198.51.100.25' port port=8080 protocol=tcp accept"
sudo firewall-cmd --reload
Пример ограничения доступа по IP через firewalld

Совет: если сервис должен быть доступен всем изнутри сервера, но ограничен снаружи — используйте правила только для внешнего интерфейса (--zone=public).

Проверка правил и типичные ошибки

После настройки важно убедиться, что правила применились и работают как задумано.

Проверка в UFW

sudo ufw status numbered

Будет список активных правил с указанием IP-адресов и портов.

Проверка в firewalld

sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules

Вывод покажет активные сервисы, порты и rich-rules с IP-адресами.

Типичные ошибки

  • Ограничили SSH и потеряли доступ — всегда оставляйте открытым доступ для своего IP и тестируйте в новой сессии перед закрытием старой.

  • Не указали /32 — если нужно разрешить только один IP, используйте полный адрес без маски или с маской /32.

  • Не применили изменения — в firewalld правила действуют после --reload, в UFW правила сохраняются сразу.

  • Конфликтующие правила — если разрешили доступ для IP, но ранее стоит правило deny для порта, приоритет может блокировать доступ. Проверьте порядок правил.

Проверка правил ограничения доступа по IP в фаерволе

Совет: для проверки используйте подключение с другого IP (например, через мобильный интернет), чтобы убедиться, что фильтрация действительно работает.

Итоги

  • Разобрали, как ограничить доступ к SSH и другим сервисам по IP через ufw (Ubuntu/Debian).

  • Настроили аналогичные правила в firewalld (CentOS/RHEL).

  • Научились проверять активные правила и список rich-rules.

  • Разобрали типичные ошибки и как не потерять доступ при настройке.

Ограничение по IP — это простой, но надёжный способ повысить безопасность VPS. Его можно комбинировать с другими мерами: сменой SSH-порта, использованием ключей, установкой Fail2Ban и двухфакторной аутентификацией.