В Linux есть простой и почти забытый механизм ограничения сетевого доступа к сервисам - TCP Wrappers. Сегодня его используют редко, потому что он сильно уступает по гибкости
iptables и nftables, но инструмент до сих пор работает и иногда может быть полезен. Основан он на библиотеке libwrap и действует на уровне приложений, которые ее поддерживают.Суть проста: доступ контролируется через два файла:
/etc/hosts.allow и /etc/hosts.deny.▪️ Пример. Допустим, нужно закрыть SSH для всех, кроме нескольких локальных подсетей.
Для этого в /
etc/hosts.allow добавляем:
sshd : 10.10.0.0/24
sshd : 172.16.50.0/24
А в
/etc/hosts.deny:
sshd : ALL
После этого подключение по SSH будет возможно только из указанных сетей. Никакие службы перезапускать не нужно, правила применяются сразу. Если кто-то попытается подключиться извне, в логах SSH появится запись:
journalctl -u ssh -n 10
sshd[814]: refused connect from 172.31.8.45 (172.31.8.45)
Можно дополнительно логировать все заблокированные подключения:
sshd : ALL \
: spawn /usr/bin/echo "$(/bin/date +"%%d-%%m-%%y %%T") SSH access blocked from %h" >> /var/log/libwrap
В итоге в
/var/log/libwrap появится понятная запись:
21-01-26 10:03:05 SSH access blocked from 172.31.8.45
Важно: сервис обязан поддерживать libwrap. Проверить это можно так:
ldd /usr/sbin/sshd | grep libwrap
Очевидно, что полноценный файрвол будет более надежным решением. Но TCP Wrappers могут быть полезны в простых сценариях, как дополнительный уровень защиты или страховка на случай ошибки в правилах файрвола. Полезно хотя бы знать, что такой механизм существует и как он работает.
#linux #security
🧑💻 NetworkAdmin