Первые меры безопасности во 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 в правилах все ж таки указал бы так как то красивей
Много споров о том что фаер должен быть по умолчанию закрыт, или по умолчанию открыт,Я для себя решил так, все что смотрит в мир закрыто по умолчанию, все что внурти открыто. мне так проще живется.
а еще можно использовать вложенные списки
:)
"И еще рекомендую закрыть доступ для пользователя root, все в том же sshd_config закомментируйте строку:"
По умолчанию во фре , удаленный доступ к ssh, руту противопоказан настройками безопасности :). Наверняка вы используете FirstVDS.
mich, ага, знаю. И пользуюсь FirstVDS :)
Спасибо Эд! :)
Всегда пожалуста! )
Отличная подборка. Я раньше такое делал по разрозненным статьям с OpenNet.
А что, DNS-рекурсия действительно такое затратное занятие?
Kuroki Kaze, ну как сказать, достаточно затратная. Все лучше не использовать её, чем через себя прогонять запросы
/etc/fw.sh
Что за цифорки в fw.sh объяснил бы, 5-10-15-20-25... просто по порядку писать
да, просто по порядку... можешь 1,2,3,4... как в бейсике вообщем)
А как закрыть торент порты ???
Ну при поиске в Google кучу ответов на ваш вопрос, лично я сам этим никогда не занимался
А вы знаете какие порты использует BitTorrent-ы
Думаю совершенно поразному, вот мой Transmission:
Оставьте свой комментарий