Для защиты сервера FreeBSD можно использовать следующие настройки.
Существует несколько сервисов, которые необходимо отключить:
1 2 |
#chmod ugo= /usr/bin/rlogin #chmod ugo= /usr/bin/rsh |
Любые сторонние утилиты установленные вами, должны быть ограничены для регулярных пользователей.
1 2 |
#chmod o= /usr/local/bin/nmap #chmod o= /usr/local/bin/nessus |
Конфигурация системы для запуска демонов
Пришло время включить или отключить определённые сервисы, изменив /etc/rc.conf.
Мы отключим sendmail, как небезопасный.
1 |
#echo 'sendmail_enable="NONE"' >> /etc/rc.conf |
По умолчанию, для ядра установлен уровень безопасности -1, т.е. отсутствие защиты.
Возможно вам понадобится уровень 2 или более безопасный уровень 3. Если вы хотите получить больше информации об уровнях безопасности обратитесь к man страницам по init(8).
После загрузки ядра уровень безопасности может только возрастать
1 2 |
#echo 'kern_securelevel_enable="YES"' >> /etc/rc.conf #echo 'kern_securelevel="3"' >> /etc/rc.conf |
Если не используете NFS, отключите portmap:
1 |
#echo 'portmap_enable="NO"' >> /etc/rc.conf |
inetd — является небезопасным, поэтому убедимся, что он отключен.
1 |
#echo 'inetd_enable="NO"' >> /etc/rc.conf |
Очищаем каталог /tmp при запуске системы, что будет гарантировать отсутствие вредоносных элементов во временных файлах.
1 |
#echo 'clear_tmp_enable="YES"' >> /etc/rc.conf |
Если не используется удалённая машина для хранения логов, убедимся, что syslogd не использует сетевой сокет.
1 |
#echo 'syslogd_flags="-ss"' >> /etc/rc.conf |
Перенаправление сообщений ICMP может использоваться атакующими для направления вас на другой маршрутизатор. Поэтому будем игнорировать эти сообщения и журналировать их.
1 2 |
#echo 'icmp_drop_redirect="YES"' >> /etc/rc.conf #echo 'icmp_log_redirect="YES"' >> /etc/rc.conf |
Следующий параметр является весьма желательным, поскольку он будет регистрировать все попытки обращения к закрытым портам. Это необходимо, в случае, если кто-то пытается получить доступ к системе через определённый порт.
1 |
#echo 'log_in_vain="YES"' >> /etc/rc.conf |
Установка переменных ядра
Есть ряд переменных ядра которые следует установить. Мы добавим их в /etc/sysctl.conf чтобы сделать их постоянными.
Первое — запретим пользователям видеть информацию о процессах выполняемых с другим UID.
1 2 3 4 5 6 7 |
#echo "security.bsd.see_other_uids=0" >> /etc/sysctl.conf Второе изменение необходимо для вступления в силу концепции «чёрной дыры» (blackhole), когда пакеты RST не отправляются в ответ на запрос закрытых портов. Поэтому, мы можем достаточно просто блокировать сканирование портов на начальном уровне. <pre lang="bash"> #echo "net.inet.tcp.blackhole=2" >> /etc/sysctl.conf #echo "net.inet.udp.blackhole=1" >> /etc/sysctl.conf |
Мы будем генерировать случайные ID для IP пакетов, а не увеличивать их последовательно на единицу. Это позволяет предотвратить удалённое наблюдение скорости пакетов генерируемых счётчиком.
Данная возможность доступна в FreeBSD 5.3. и более старших ветвях.
1 |
#echo "net.inet.ip.random_id=1" >> /etc/sysctl.conf |
Записи ядра
Есть несколько параметров безопасности, которые мы можем зафиксировать на уровне ядра.
Сначала отключим комбинацию Alt+Ctl+Del, чтобы исключить возможность локальной перезагрузки сервера с клавиатуры. Добавим следующие строки:
1 2 3 |
# nano -w /usr/srs/sys/i386/conf/MYKERNEL options SC_DISABLE_REBOOT # Disable Ctrl+Alt+Del options RANDOM_IP_ID # Enables random IP ID generation |
Опция RANDOM_IP_ID доступна только для ветки 5.3 и выше.
Соберите собственное ядро.
Как только вы закончите сборку ядра, установите его и перезагрузите систему. Войдите в систему и обновите дерево портов.
Опциональные настройки для скрытой (stealth) системы.
Следующие опции используются для шлюзов, syslog серверов или выделенных брандмауэров. Вы можете использовать их и на обычных серверах, однако это приведет к снижению производительности.
Вы можете настроить FreeBSD на сброс SYN/FIN пакетов:
1 |
#echo 'tcp_drop_synfin="YES"' >> /etc/rc.conf |
Добавьте следующие записи в файл конфигурации ядра для сброса SYN/FIN пакетов и включения невидимого перенаправления. Невидимое (stealth) перенаправление передаёт пакеты не изменяя TTL.Это полезно для скрытия брандмауэра при использовании traceroute.
1 2 3 |
# nano -w /usr/src/sys/i386/conf/MYKERNEL options TCP_DROP_SYNFIN # Enables the ability to drop SYN/FIN packets options IPSTEALTH # Enable stealth forwarding |
Вы можете использовать утилиту lockdown (/usr/ports/security/lockdown) для автоматизации множества из указанных опций.