Не каждую службу можно перепривязать. Тогда порт закрывает фильтр на самом сервере — набор правил nftables.
Таблицы, цепочки и порядок правил разобраны в уроке «Разрешить нужное, сохранить запрет». Для сервера, который смотрит в интернет, набор строят от запрета: политика цепочки input — drop, а разрешения — списком. Так выглядит набор почтового сервера, которому снаружи нужны SSH и SMTP (порт 25):
iif lo accept пропускает подключения самой машины к себе — так приложение дойдёт до базы на 127.0.0.1. ct state established,related accept по отслеживанию соединений пропускает ответы на подключения, которые начал сам сервер, и пакеты уже открытых сеансов: без этой строки сервер не получит ответа ни от одного внешнего сервера. Последнее правило — порты из описи, которые нужны снаружи.
Правила живут в ядре до перезагрузки. При загрузке их берёт из /etc/nftables.conf служба nftables: файл проверяют sudo nft -c -f /etc/nftables.conf, а службу включают sudo systemctl enable --now nftables.
На удалённом сервере policy drop без разрешения для порта 22 закроет вход по SSH: новый сеанс уже не откроется, а без строки ct state оборвётся и текущий. Вернуть доступ можно будет только через консоль. Перед загрузкой проверь файл nft -c и не закрывай текущий сеанс, пока не войдёшь вторым.
Набор с policy drop загружен, порта 8080 в списке разрешений нет, админка по-прежнему слушает 0.0.0.0:8080. Что напечатает с чужой машины nc -zv -w 2 192.0.2.1 8080?
-
Фильтр решает раньше программы: пакет, отброшенный в
hook input, до сокета не доходит. -
Отказ присылает ядро сервера, когда пакет дошёл, а порт никто не слушает. Здесь админка слушает, но пакет отбросил фильтр, и ответа нет совсем.
Политика drop отбрасывает пакет молча, и чужая машина ждёт до тайм-аута. Connection refused ядро присылает, только когда пакет дошёл, а порт никто не слушает.
Главное в шаге
-
Набор «всё, что не разрешено, запрещено»:
policy drop,iif lo accept,ct state established,related acceptи список нужных портов. -
Постоянные правила — файл
/etc/nftables.confи включённая службаnftables; файл проверяютnft -c -f.