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

Закрываем SSH

Отредактируйте в файле /etc/ssh/sshd_config следующие строки:

# Будет добавлено к названию версии, посмотреть можно через telnet на 2244 порт
VersionAddendum SuperPuperSSH-9.8.7
# Указываем порт который будем слушать, главное чтобы он отличался от 22-го,
# так как много тупых ботов подбирающих пароли на 22 порт
Port 2244
# Внешний адрес моей машины
ListenAddress 82.146.63.195

И еще рекомендую закрыть доступ для пользователя root, все в том же sshd_config закомментируйте строку:

#PermitRootLogin yes

От перебора паролей по SSH вам может помочь DenyHost.

Закрываем порты

Теперь запустим файрволл IPFW:

firewall_enable="YES"
firewall_script="/etc/fw.sh"
firewall_logging="YES"

И напишем инициализирующий скрипт /etc/fw.sh

#!/bin/sh
FwCMD="/sbin/ipfw"

${FwCMD} -f flush
${FwCMD} 10 add check-state
# закрываем sendmail
${FwCMD} 15 add allow tcp from me to me 25
${FwCMD} 20 add deny tcp from any to me 25
${FwCMD} 30 add deny tcp from any to me 587
# закрываем mysql
${FwCMD} 40 add deny tcp from any to me 3306
# закрываем sphinx
${FwCMD} 45 add allow tcp from me to me 3312
${FwCMD} 50 add deny tcp from any to me 3312
# закрываем apache
${FwCMD} 55 add allow tcp from me to me 88
${FwCMD} 60 add deny tcp from any to me 88
# закрываем tornado web server
${FwCMD} 75 add allow tcp from me to me 8001
${FwCMD} 80 add deny tcp from any to me 8001
# закрываем tracd
${FwCMD} 105 add allow tcp from me to me 3050
${FwCMD} 110 add deny tcp from any to me 3050
# разрешаем все остальное
${FwCMD} 1000 add allow ip from any to any

Делаем его выполняемым:

chmod +x /etc/ipfw.sh

Далее перегружаем rc.conf.

На 88, 8001, 3050 я проксирую с помощью Nginx, поэтому доступа с внешки мне к ним не надо.
На сегодняшний момент у меня отсутствует Apache, а с PHP-FPM я работаю через unix-сокет, поэтому закрывать порт не имеет смысла.

Еще рекомендую прочитать Боремся с HTTP-флудом средствами IPFW.

Закрываем DNS-рекурсию и меняем версию Bind

Для DNS-сервера Bind меняем в named.conf атрибуты allow-recursion и version:

// Relative to the chroot directory, if any
directory       "/etc/namedb";
pid-file        "/var/run/named/pid";
dump-file       "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
allow-recursion { localnets; localhost; };
version "SuperPuperDNS-9.8.7";

Вкратце DNS-рекурсия это когда DNS сервер по запросу пользователя выполняет сам все запросы для поиска нужной информации во всей системе DNS. А нам лишнюю работу выполнять не хочется, поэтому мы отключаем рекурсию.

Проверить версию DNS-сервера Bind можно так:

dig @ns1.adw0rd.ru version.bind chaos txt

Sendmail только для внутреннего использования

Отредактируем /etc/rc.conf:

sendmail_enable="NO" #"NO" - for listen only 127.0.0.1

В общем то и все, это минимум, который вам поможет защититься от мелких атак и всяких скрипткидесов. Главное следите за обновлениями ПО, которое вы используете и все будет хорошо!


Комментарии (14) на запись «Первые меры безопасности во FreeBSD»

» Трекбеки скрыты, показать их?
  1. bappoy | 09.04.2010 в 13:15

    Щас набегут бить за ipfw, и правильно, потому что последнее правило должно быть deny ip from any to any, а перед ним несколько разрешающих.

  2. epsyl | 09.04.2010 в 13:18

    Опа!

    Яндекс.директ! :-D

  3. adw0rd | 09.04.2010 в 13:24

    bappoy, спасибо, исправлюсь :)

  4. adw0rd | 09.04.2010 в 13:26

    epsyl, зато мне флешку дали на 2 гига :P

    Мелочь, а приятно :)

  5. epsyl | 09.04.2010 в 13:38

    а полотенце с мылом не дали? :-D

  6. zar0ku1 | 09.04.2010 в 18:07

    2bappoy

    deny ip from any to any

    ставится по умолчанию, если вы конечно специально не пересобирали ядро

  7. agat | 12.04.2010 в 12:31

    за ipfw бить не будут, правильно и так, и так, все зависит от того что у вас установлено в net.inet.ip.fw.one_pass

    При установке значения 1 пакет, выходящий из канала dummynet не проходит снова через брандмауэр. В противном случае, после выполнения действия канала, пакет повторно попадает на брандмауэр и проверяется, начиная со следующего правила,

    ...

    а вобще я бы слово port в правилах все ж таки указал бы так как то красивей

    ${FwCMD} 15 add allow tcp from me to me port 25

    Много споров о том что фаер должен быть по умолчанию закрыт, или по умолчанию открыт,Я для себя решил так, все что смотрит в мир закрыто по умолчанию, все что внурти открыто. мне так проще живется.

  8. agat | 12.04.2010 в 12:33

    а еще можно использовать вложенные списки

    ${FwCMD} 15 add deny tcp from me to me port 25, 80, 135-146

    :)

  9. mich | 14.04.2010 в 21:33

    «И еще рекомендую закрыть доступ для пользователя root, все в том же sshd_config закомментируйте строку:»

    По умолчанию во фре , удаленный доступ к ssh, руту противопоказан настройками безопасности :). Наверняка вы используете FirstVDS.

  10. adw0rd | 15.04.2010 в 10:07

    mich, ага, знаю. И пользуюсь FirstVDS :)

  11. Серёга | 24.04.2010 в 22:27

    Спасибо Эд! :)

  12. adw0rd | 25.04.2010 в 01:57

    Всегда пожалуста! )

  13. Kuroki Kaze | 19.05.2010 в 11:16

    Отличная подборка. Я раньше такое делал по разрозненным статьям с OpenNet.

    А что, DNS-рекурсия действительно такое затратное занятие?

  14. adw0rd | 19.05.2010 в 12:04

    Kuroki Kaze, ну как сказать, достаточно затратная. Все лучше не использовать её, чем через себя прогонять запросы

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