Хитрый тюнинг и грамотная защита Toxa (toxa@cterra.ru) Спецвыпуск: Хакер, номер #047, стр. 047-080-1 Полезные приемы настройки сервера Ты поставил и настроил сервер. У тебя все работает, пользователи довольны, и теперь настало время добавить в систему ту самую изюминку, о которую, возможно, сломает зуб не один взломщик. Тюнингуем систему Первый шаг - обезопасить себя встроенными средствами. Общение с ядром будем проводить через sysctl - удобный интерфейс для тюнинга сетевой подсистемы. Расскажу на примере FreeBSD. В этой системе нужно обратить внимание, как минимум, на следующие переменные: Листинг net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом. Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС. "Черные дыры" заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам. Идем дальше. Маршрутизацию от источника можно смело отключить: Листинг net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда. При серьезной атаке может не менее серьезно выручить. Выстави следующую переменную: Листинг net.inet.tcp.syncookies=1 Чтобы затруднить определение версии твоей ОС анализом приходящих от нее пакетов, изменим значение Time To Live: Листинг net.inet.ip.ttl=64 Современная система не должна отвечать на широковещательные пинги, но и по сей день существуют сети, которые могут стать источником DoS-атаки. Чтобы не попасть в их список, выставляем: Листинг net.inet.icmp.bmcastecho=0 Если ты хочешь отслеживать коннекты на закрытые порты твой машины, используй следующую переменную: Листинг net.inet.tcp.log_in_vain=1 На нагруженном сервере, правда, тебя может засыпать количеством сообщений. Если не нужна поддержка смешного протокола T/TCP (TCP for Transactions), то пакеты с флагами SYN+FIN можно смело отбрасывать как неликвидные :). Протокол редко где используется, а потому это имеет смысл. Листинг net.inet.tcp.drop_synfin=1 Обманываем сканеры Вторжение в систему начинается со сканирования - это прописная истина. Можно (и нужно) уже на этом этапе усложнить жизнь злоумышленнику. Так, пакетный фильтр OpenBSD PF имеет встроенную возможность определения и блокирования сканеров, используя технологию Passive OS Fingerprinting. Достаточно добавить правило "block quick from any os NMAP" в pf.conf, чтобы результаты работы популярного сканера nmap заставили хакера почесать затылок. Также nmap'у можно противодействовать с помощью "scrub in all" и фильтрации TCP-пакетов с особыми флагами, к примеру: Листинг block return-rst in log quick proto tcp all flags FP/FP block return-rst in log quick proto tcp all flags SE/SE block return-rst in log quick proto tcp all flags FUP/FUP Но можно обойтись и userland-средствами. Например, утилитой portsentry. Она открывает для прослушивания указанные TCP/UDP-порты, логирует обращения к ним и позволяет реагировать на сканирование. После скачивания с http://packetstormsecurity.nl/UNIX/IDS/ и установки portsentry правим portsentry.conf: |