Сохранить или восстановить правила помогут бинарники /sbin/iptables-save и /sbin/iptables-restore.
Поброди по каталогам POM и ознакомься с документацией по каждому модулю. Правда, сведений там не очень много.
Помимо главных патчей, POM содержит фиксы для содружества iptables с eggdrop, warcraft и quake3 :).
Чтобы узнать какие параметры понимает тот или иной модуль, выполни команду iptables -help –m имя_модуля.
Я не проверял работу POM с ядром 2.6.х. Разработчики о совместимости также умалчивают. Поэтому я не гарантирую стабильность работы с подобными кернелами.
Помимо DNAT существует и SNAT, когда заменяется адрес отправителя. Это бывает необходимым в некоторых случаях.
Существует специальный модуль netmap, который позволяет более удобно производить NAT. В ядре создается цель NETMAP, после чего можно сделать статическую привязку вида 1:1 к любой сети.
С документацией по iptables ты можешь ознакомиться на известном портале www.opennet.ru.
Хитрый тюнинг и грамотная защита / Приемы настройки сервера
Ты поставил и настроил сервер. У тебя все работает, пользователи довольны, и теперь настало время добавить в систему ту самую изюминку, о которую, возможно, сломает зуб не один взломщик.
Тюнингуем систему
Первый шаг – обезопасить себя встроенными средствами. Общение с ядром будем проводить через 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:
Листинг
TCP_PORTS="42,88,135,139,145,389,443,445,464,593,636,637,1025,1026,1027,1029,1433,3372,3389»
UDP_PORTS="»
Я указал набор TCP-портов, очень похожий на тот, что открывает Windows 2000 Server в дефолтовой установке. UDP-порты прослушивать мы не будем – их редко сканируют.
После этого имеет смыл указать хосты, чье сканирование мы будем игнорировать, например, машины из локалки. Пропиши путь к файлу со списком игнорируемых хостов:
Листинг
IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore»
Читать дальше