В статье разберём:
- как ограничить доступ к 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

Важно: перед ограничением 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

Совет: если сервис должен быть доступен всем изнутри сервера, но ограничен снаружи — используйте правила только для внешнего интерфейса (--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 (например, через мобильный интернет), чтобы убедиться, что фильтрация действительно работает.
Итоги
-
Разобрали, как ограничить доступ к SSH и другим сервисам по IP через
ufw
(Ubuntu/Debian). -
Настроили аналогичные правила в
firewalld
(CentOS/RHEL). -
Научились проверять активные правила и список rich-rules.
-
Разобрали типичные ошибки и как не потерять доступ при настройке.
Ограничение по IP — это простой, но надёжный способ повысить безопасность VPS. Его можно комбинировать с другими мерами: сменой SSH-порта, использованием ключей, установкой Fail2Ban и двухфакторной аутентификацией.