Настройки безопасности FreeBSD. Часть 1

Модификация настроек ОС для повышения внешней и внутренней безопасности.

Меняем алгоритм шифрования

Заменим алгоритм шифрования паролей с md5 на еще более надежный Blowfish.
Делаем исправления в файле /etc/login.conf в секции default:

// заменяем алгоритм шифрования на Blowfish
:passwd_format=blf:\

// устанавливаем период устаревания паролей
:passwordtime=52d:\

// предупреждаем о том, что пароли должны содержать разные символы
:mixpasswordcase=true:\

// задаем минимальную длину пароля
:minpasswordlen=9:\

Теперь обновляем базу (login.conf.db):

cap_mkdb /etc/login.conf

Проверим, получилось ли у нас. Cмотрим содержимое /etc/master.passwd. Если зашифрованный пароль теперь начинается с «$2», все ОК. Осталось сделать так, чтобы пароли новых пользователей шифровались алгоритмом Blowfish.
Редактируем файл /etc/auth.conf:

crypt_default=blf

IP-протоколы

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

Добавляем в /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 позволит нам фильтровать пакеты по заданным критериям и вести учет.

Для его включения нужно добавить в /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), для которых это правило будет работать. Теперь не составит труда разобраться, что правило

deny tcp from any to 192.168.1.0/24 in via fxp0

запрещает прохождение любых входящих tcp-пакетов через интерфейс fxp0 к сети 192.168.1.0/24, а правило

count ip from 192.168.1.0/24 to me uid 1001

будет вести учет трафика, который получит из сети 192.168.1.0/24 пользователь с UID, равным 1001.

Каждое правило файрвола должно иметь свой уникальный номер. Правила проверяются в порядке возрастания своих номеров. Для управления файрволом существует команда ipfw. Чтобы добавить правило, воспользуйся командой:

ipfw add <номер> <правило>

а чтобы его удалить:

ipfw delete <номер>

Для просмотра списка правил есть команда ipfw list, а ipfw show покажет трафик и количество пакетов, обработанных каждым из правил. В качестве примера для настройки файрвола можно посмотреть файл /etc/rc.firewall, а также ознакомиться с руководством по ipfw. Напоследок добавим в /etc/rc.conf строчку:

log_in_vain="YES"

Теперь все попытки подключения к закрытым портам твоего сервера будут занесены в логи.

Демонов — под контроль

Не ко всем службам, запущенным на твоем сервере, стоит давать доступ. Если заблокировать доступ к отдельным портам можно с помощью правильной настройки файрвола, то доступ к службам проще ограничить с помощью файла /etc/hosts.allow. Для примера ограничим доступ по ssh только несколькими сетями:

sshd : localhost : allow
sshd : 192.168.1. : allow
sshd : 10.1.1.0/255.255.255.240 : allow
sshd : ALL : deny

Формат файла достаточно простой. Сначала мы указываем имя службы, затем имя или адрес хоста или сети, затем действие. Правило ALL указывает, как поступать в случаях, не предусмотренных предыдущими правилами.

Теперь займемся демоном inetd, который играет весьма важную роль в обеспечении безопасности системы. Через него работают telnetd, ftpd, talk и прочие службы. Если никакие из демонов, запускаемых из inetd, тебе не нужны, отключи его. Для этого надо указать в /etc/rc.conf:

inetd_enable="NO"

Если тебе все же нужен inetd и службы, которые запускаются из него, то стоит включить протоколирование событий и при большой нагрузке увеличить количество одновременных обращений к inetd (по умолчанию это число равно 256). Для этого добавь в /etc/rc.conf строчку

inetd_flags="-l -R 1024"

Последние штрихи

Вот мы и закончили, все изменения в конфигурационные файлы внесены, настройки сделаны. Осталось перезагрузить систему. Посмотрим, чего мы добились.

$ netstat -na | grep LISTEN

Эта команда покажет нам, на каких портах висят сервисы. Чем их меньше, тем лучше. Также попробуй просканить свою машину nmap’ом. Итак, теперь твоя система намного более защищена, чем раньше. Не забывай регулярно обновлять ее и следить за логами. Удачи!

Оставить комментарий

Оповещать о новых комментариях по RSS