Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #69, СЕНТЯБРЬ 2004 г.

Делаем FreeBSD безопасной

Сергей Можайский aka techniX

Xakep, номер #069, стр. 069-116-3


По окончании работы с зашифрованным разделом размонтируем устройство и отключим шифрованный диск:

# umount /dev/ad4s1c.bde

# gbde detach /dev/ad4s1c

IP-протоколы

Теперь займемся защитой от атак, связанных с недостатками протокола TCP/IP. Начнем с фильтрации SYNFIN-пакетов. Это TCP-пакеты с одновременно установленными флагами начала и завершения соединения, пользы от них практически никакой, зато они часто используются при хакерских атаках. Одновременно займемся ICMP-протоколом и включим в ядро еще парочку полезных опций:

// ох уж эти SYNFIN-пакеты

options TCP_DROP_SYNFIN

// ограничиваем количество ICMP-ответов, что помогает при защите от DoS атак

options ICMP_BANDLIM

// генерируем случайный идентификатор IP-пакетов

options RANDOM_IP_ID

// блокируем RST-пакеты

options TCP_RESTRICT_RST

Но этого еще недостаточно, добавляем в /etc/rc.conf:

// отбрасываем SYNFIN-пакеты

tcp_drop_synfin="YES"

// отключаем прием и отправку переадресовывающих ICMP-пакетов

icmp_drop_redirect="YES"

// в системном журнале регистрируем переадресовывающие ICMP-пакеты

icmp_log_redirect="YES"

// предотвращаем springboarding и smurf-атаки

icmp_bmcastecho="NO"

Далее прописываем в /etc/sysctl.conf строчки

net.inet.tcp.blackhole=2

net.inet.udp.blackhole=1

С помощью этих переменных мы превращаем нашу систему в так называемую "черную дыру". Отныне она не будет реагировать на пакеты, поступающие на закрытые порты, и они будут просто пропадать. Этот прием позволяет защититься от флуда и от скрытого сканирования портов.

Огненная стена

Естественно, без фильтрации сетевого трафика нам не обойтись. Встроенный файрвол ipfw позволит нам фильтровать пакеты по заданным критериям и вести учет. Для того чтобы включить файрвол, нужно добавить в ядро вот эти опции:

options IPFIREWALL

options IPFIREWALL_VERBOSE

После чего добавить в /etc/rc.conf строки

firewall_enable="YES"

firewall_type="open"

Однако тип файрвола "open" подходит для чего угодно, но только не для защищенного сервера. Поэтому для более надежной защиты можно выбрать одну из стандартных конфигураций:

// защита только сервера

firewall_type="client"

// защита сервера и локальной сети

firewall_type="simple"

или же написать свой файл с правилами файрвола. Немного разберемся с созданием правил. Общий формат правила ipfw такой:

<действие> <протокол> from <откуда> to <куда> <дополнительные условия>

В качестве выполняемого действия файрвол может разрешить (allow, pass, accept, permit) прохождение пакета или запретить (deny, drop, reject) его, а также посчитать (count), перенаправить по нужному адресу (fwd, forward) или другой программе (divert). Протоколы могут быть ip или all (для всех протоколов стека TCP/IP), а также tcp, udp, icmp и т.п.

Формат поля источника (from) и приемника (to) пакета может быть записан в различных формах: доменное имя, ip-адрес, подсеть в формате IP:MASK (192.168.1.0:255.255.255.0) или IP/LENGTH (192.168.1.0/24), а также в виде специального слова any (любой адрес) или me (все адреса локальной машины). Для tcp и udp протокола после адреса источника или приемника можно через пробел указать еще и порт. И, наконец, из дополнительных условий самыми полезными являются направление пакета (in или out - входящий и исходящий соответственно), интерфейс, через который будет проходить пакет (например, via fxp0), и даже идентификатор пользователя (uid) или группы (gid), для которых это правило будет работать. Теперь не составит труда разобраться, что правило

Назад на стр. 069-116-2  Содержание  Вперед на стр. 069-116-4