Хакер - Спецвыпуск журнала «Хакер» #47, октябрь 2004 г.
iptables –A INPUT –p tcp –dport 31337 –j TARPIT
Фильтруй базарТеперь iptables умеет искать подстроку в пакете. В этом ему помогает модуль string.so. Например, ты захочешь намутить защиту от пересылки shell-кодов на твою машину либо просто не желаешь, чтобы юзер заливал бинарник на сервер. Если раньше приходилось патчить кернел и ставить дополнительный модуль, то сейчас достаточно вбить всего одно правило:
iptables -A INPUT -p tcp -dport 21 -m string -string '|7F|ELF' -j DROP
Раз уж мы заговорили об ограничениях, расскажу, как предостеречь свою машину от DoS-атаки. Нужно воспользоваться модулем limit.so, позволяющим ограничивать пропускную способность. Если ты видишь, что твой FTPD зажирает процессор и захлебывается в данных, сделай ограничение в 5 пакетов за одну секунду.
iptables –A INPUT –p tcp –dport 21 –m limit –limit 5/sec –j REJECT
Вероятно, у тебя уже кружится голова от наворотов POM. Но самое вкусное я оставил напоследок :). Теперь ты способен контролировать одновременное число подключений не только с одного IP-адреса, а даже с целой подсети! Это возможно, даже если сам сервис не поддерживает такую функцию. Модуль connlimit.so создан специально для подобной работы. Библиотека способна ограничить подключения к определенному сервису, например, к демону sshd. Просто добавь рулес в цепь INPUT:
iptables –A INPUT –p tcp -syn -dport 22 -m connlimit -connlimit-above 3 -j REJECT.
И в заключение…Думаю, этого материала тебе хватит не только для освоения азов iptables, но и для грамотной защиты своего сервера. Благо брандмауэр это позволяет :). Синтаксис iptables прост как три копейки, думаю, ты все понял уже после первого правила. Теперь все зависит только от тебя, я же могу пожелать немного терпения и изобретательности. Остальное прибавится после установки Patch-o-Matic :).
Ликбез по iptablesВот несколько команд, которые ты можешь использовать при работе с iptables.
Листинг
iptables –N цепь – создание новой цепочки
iptables –F цепь – очистка произвольной цепи
iptables –X цепь – удаление цепи
iptables –D цепь номер_правила – удалить правило из определенной цепи
iptables –P цепь политика – изменение политики цепи
iptables –line-numbers –nvL цепь – просмотр всех правил в определенной цепи в verbose-режиме, без преобразования адресов с нумерацией каждого правила (быстрый и подробный просмотр)
service iptables save/restore – сохранение (восстановление) всех правил в отдельный конфиг
service iptables start/stop – запуск (останов) фаервола
Мнение экспертаАндрей «Andrushock» Матвеев, редактор рубрики «UNIXoid» журнала «Хакер»:
«Число пользователей интернета с каждым днем неуклонно растет, а прогресс и информационные технологии не желают стоять на месте. В связи с этим провайдерам приходится выделять физическим лицам и организациям IP-адреса для маршрутизаторов и серверов, рабочих станций и WAP-терминалов, беспроводных устройств и даже бытовой техники. Так как число доступных адресов в реализации IPv4 составляет примерно 2 в 32-й степени, то мы невольно становимся свидетелями кризиса IP-адресов. По независимым статистическим исследованиям последний свободный адрес будет занят уже в 2008 году. Для решения проблемы были предложены, а затем внедрены три „лекарства“: протокол CIDR (бесклассовая доменная маршрутизация), качественно новый протокол IPv6 (адресное пространство составляет 2 в 128-й степени) и система NAT (трансляция сетевых адресов). Как раз за счет системы NAT пограничный шлюз может выполнять следующие процедуры: перехват всех клиентских запросов из доверенной подсети, подмена исходного порта и адреса источника своим непривилегированным портом и адресом своего внешнего сетевого интерфейса, ведение специальной таблицы соответствия установленных соединений, чтобы, получив от удаленного хоста ответный пакет, корректно перенаправить его клиенту, инициировавшему запрос. Благодаря такому подходу достаточно иметь всего один реальный IP-адрес, всем клиентским машинам назначаются специально зарезервированные IP-адреса, немаршрутизируемые во внешних сетях (RFC 1918). Поскольку все исходящие соединения устанавливаются от имени шлюза, полностью скрывается топология внутренней сети – это огромный плюс с точки зрения безопасности. Однако из-за трансляции адресов могут возникнуть проблемы при работе с FTP, IRC и некоторыми другими сложными протоколами (решается установкой специальных прокси). Нужно четко понимать, что брандмауэр с фильтрацией пакетов, такой, как iptables, ipfw, ipfilter, pf, – это не панацея от всех напастей глобальной сети. Это всего лишь, как ясно из названия, фильтр пакетов. Да, он может помешать выяснению доступности хоста (ping sweep), пресечь попытки сканирования портов, отсеять пакеты с недопустимыми комбинациями флагов (SYN+FIN, FIN+URG+PUSH), предотвратить DoS-атаку, разграничить доступ к службам на основе IP-адреса источника, перенаправить валидный трафик, защитить демилитаризованную зону и скрыть доверенную подсеть. Однако такой брандмауэр бессилен против червей, троянов, бэкдоров, эксплоитов, снифинга и, конечно же, против braindamaged пользователей, так как он работает, к сожалению, только на сетевом и транспортном уровнях. Поэтому многочасовая оптимизация правил непроницаемого брандмауэра – это зря потерянное время, если в системе крутится непропатченный Sendmail или инсекьюрный Wu-ftpd. К защите как сервера, так и клиентского хоста необходим комплексный подход.
Сохранить или восстановить правила помогут бинарники /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.
Хитрый тюнинг и грамотная защита / Приемы настройки сервера
Toxa ([email protected])
Ты поставил и настроил сервер. У тебя все работает, пользователи довольны, и теперь настало время добавить в систему ту самую изюминку, о которую, возможно, сломает зуб не один взломщик.
Тюнингуем системуПервый шаг – обезопасить себя встроенными средствами. Общение с ядром будем проводить через 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-пакетов с особыми флагами, к примеру: