Ограничить доступ к серверу по IP адресам можно с помощью файлов hosts.allow и hosts.deny, которые управляют TCP Wrappers на Linux/Unix системах и контролируют, какие хосты могут подключаться к сервисам. Эти файлы обрабатываются до запуска основного приложения и имеют приоритет над встроенными правилами сервиса.
Зачем это нужно
- Защита сервисов (SSH, FTP, HTTP) от несанкционированного доступа на уровне операционной системы
- Блокировка подозрительных IP адресов без отключения сервиса полностью
- Централизованное управление доступом для всех приложений, поддерживающих TCP Wrappers
- Снижение нагрузки на сервер путём отклонения соединений на уровне ядра ОС
- Создание whitelist (список разрешённых) или blacklist (список запрещённых) IP адресов
Пошаговая инструкция
- Откройте терминал на сервере Linux/Unix или подключитесь по SSH с правами администратора.
- Перейдите в директорию с файлами конфигурации: выполните команду
cd /etc - Создайте резервную копию файла
hosts.allow:sudo cp hosts.allow hosts.allow.bak - Создайте резервную копию файла
hosts.deny:sudo cp hosts.deny hosts.deny.bak - Откройте файл
hosts.allowв текстовом редакторе:sudo nano hosts.allow - Добавьте строку для разрешения доступа конкретному сервису от конкретного IP:
sshd: 192.168.1.100(разрешить доступ SSH только с IP 192.168.1.100) - Для разрешения доступа целому диапазону IP используйте:
sshd: 192.168.1.0/24илиsshd: 192.168.1. - Для разрешения всем хостам используйте:
sshd: ALL - Сохраните файл: нажмите
Ctrl+O, затемEnter, и выйдите:Ctrl+X - Откройте файл
hosts.deny:sudo nano hosts.deny - Добавьте строку для запрета доступа:
sshd: 192.168.2.50(запретить доступ SSH с IP 192.168.2.50) илиALL: ALLдля полного запрета по умолчанию - Сохраните файл:
Ctrl+O,Enter,Ctrl+X - Проверьте синтаксис файлов командой:
sudo tcpdmatch -a hosts.allow -d hosts.deny sshd 192.168.1.100 - Перезагрузите сервис для применения изменений:
sudo systemctl restart sshd(для SSH) - Протестируйте доступ с разных IP адресов, попытавшись подключиться по SSH или другому сервису.
Часто задаваемые вопросы
Какой файл имеет приоритет: hosts.allow или hosts.deny? Файл hosts.allow проверяется первым, и если там найдено совпадение, доступ разрешается, даже если сервис указан в hosts.deny.
Можно ли использовать доменные имена вместо IP адресов? Да, TCP Wrappers поддерживает доменные имена и маски подсетей, например: sshd: .example.com или sshd: 10.0.0.0/255.255.255.0
Как проверить, применились ли правила после редактирования файлов? Перезагрузитесь или перезапустите сервис командой sudo systemctl restart [название-сервиса], затем проверьте логи: sudo tail -f /var/log/auth.log