9 апреля 2010 г. IPFW Bind Sendmail SSH FreeBSD

Первые меры безопасности во FreeBSD

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

Скрываем версию Nginx

В конфиге /usr/local/etc/nginx/nginx.conf установите:

server_tokens off;

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

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

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

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

Комментарии

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

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

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

epsyl, зато мне флешку дали на 2 гига :P
Мелочь, а приятно :)

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

2bappoy
deny ip from any to any

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

за ipfw бить не будут, правильно и так, и так, все зависит от того что у вас установлено в net.inet.ip.fw.one_pass
При установке значения 1 пакет, выходящий из канала dummynet не проходит снова через брандмауэр. В противном случае, после выполнения действия канала, пакет повторно попадает на брандмауэр и проверяется, начиная со следующего правила,
....
а вобще я бы слово port в правилах все ж таки указал бы так как то красивей

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

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

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

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

:)

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

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

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

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

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

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

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

Делаем его выполняемым: chmod +x /etc/ipfw.sh

/etc/fw.sh

Что за цифорки в fw.sh объяснил бы, 5-10-15-20-25... просто по порядку писать

/etc/fw.sh
ага, спасибо

Что за цифорки в fw.sh объяснил бы, 5-10-15-20-25... просто по порядку писать

да, просто по порядку... можешь 1,2,3,4... как в бейсике вообщем)

А как закрыть торент порты ???

Ну при поиске в Google кучу ответов на ваш вопрос, лично я сам этим никогда не занимался

А вы знаете какие порты использует BitTorrent-ы

Думаю совершенно поразному, вот мой Transmission:

$ netstat -anp | grep transmission
tcp        0      0 0.0.0.0:51413           0.0.0.0:*               LISTEN      18414/transmission
tcp6       0      0 :::51413                :::*                    LISTEN      18414/transmission
udp        0  35840 0.0.0.0:51413           0.0.0.0:*                           18414/transmission
udp     1370      0 192.168.1.2:36952      203.0.113.42:5351       ESTABLISHED 18414/transmission

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

Markdown