Прячем шлюз от traceroute
Источник - http://bkmz.org/346/pryatchem-shlyuz-ot-traceroute
Наверное многие из вас выполняли команду traceroute блаблабла. И если у вас стоит NAT, то вы видели в списке ипов своего сервера, иногда его нужно скрыть, чтобы лишнии глаза не узнали про существование данного узла, опять же, это все прячется не сильно качественно, но для меня пойдет. В FreeBSD есть option IPSTEALTH которая спрячет сервер без лишних тело движений, ну а на Linux нам придется понять природу пинга и трасерта, и понять, как можно скрыть сервер. Самый просто способ, это выключить пинги на сервере полностью, но они не дадут нужного эффекта.
iptables -A INPUT -i eth0 -p icmp -j DROP
Все, теперь, если к серверу попадает пакет протокола icmp, то он его просто не замечает, все бы хорошо, но Linux юзает UDP протокол при трассировке:
The UNIX version of Tracert performs the same function as the Windows version except that the IP payload is a UDP packet addressed to a (presumably) unknown destination UDP port.
Что на самом деле очень неприятно, ведь нам теперь нужно блокировать весь UDP, чтобы спрятать и для UNIX хостов сервер. Но, внимательный читатель, наверное заметил, что трассероут отправляет пакет на неизвестный IP но на определенный порт. Осталось найти его. Карочи, не собираюсь никого мучить, просто вот диапозон 33434:33534 Теперь блокируем, для того чтобы не вводить 100 портов вручную, используем расширение netfilter — multiport
iptables -A INPUT -i eth0 -p udp -m multiport --dport 33434:33534 -j DROP
Все, теперь наш сервер не отвечает ни на какие пинги, но мы ведь хотели его спрятать, а отключить пинги можно и через sysctl. Если бы вы пользовали FreeBSD, вы бы пересобрали ведро с нужной опцией и забыли, а использую линукс вы поймет что происходит с пакетом, и почему в такой ситуации сервер «прячется». Читаем про TTL, вкратце, это — поле в заголовке, уменьшается при прохождении каждого узла, так вот, для того чтобы спрятать сервер, нам нужно либо увеличить значение на 1, либо его просто не уменьшать. Для выполнения первого условия достаточно пересобрать kernel без функции, к сожалению сейчас не вспомню как она называется, и у вас сервер «выпадет» из трассы.
Для выполнения второго условия нам достаточно воткнуть наши первые правила в PREROUTING, то есть в самый первый чайн, народ учите мат часть , и увеличить TTL. Для этого есть специальная, одноименная цель TTL, она должна быть собратой в вашей системе, иначе ничего не выйдет.
iptables -t mangle -I INPUT 1 -i eth0 -p icmp -j TTL --ttl-inc 1 iptables -t mangle -I INPUT 1 -i eth0 -p udp -m multiport --dport 33434:33534 -j TTL --ttl-inc 1
Обсуждение