2 декабря 2011 г.

Защита сервера linux

Минимальные действия по защите сервера на Linux...

Что ни говори, а защищаться придется, ведь после запуска сервера и вывода его в web начинается подбор паролей, попытки взлома, попытки положить сервер, поиск админских скриптов и т.д.

Во первых закроем все не нужные порты. Оставим только 80 и 443 и один порт для доступа по ssh. Сервер MySql поставим локально с адресом 127.0.0.1 - зачем нам лишняя уязвимость. Почтовый сервер также локально ставим. Сервер ftp вообще отключим, будем закачивать файлы через ssh. Порт ssh перенесем со стандартного 22 на какой-нибудь ххххх и пусть умники сначала его найдут.

Проверим порты командой netstat -tulpn

Поправим  ssh порт в файле /etc/services и в /etc/ssh/sshd_config  далее сделаем перезапуск службы service sshd restart. Теперь в ssh клиенте, например Putty, также пропишем наш новый порт вместо 22.

Некоторые настройки в файле  /etc/ssh/sshd_config
MaxAuthTries 2 //Максимум 2 попытки ввода пароля и разрыв соединения
ClientAliveInterval 3600 //не разрывать установленный сеанс 1 час
MaxStartups 2 //максимальное количество одновременных соединений



Вместо ftp будем пользоваться sftp, который работает через шифрованное соединение. Например, удобен плагин sftpplug.wfx для Total Commander.

Если все-таки нужен vsftpd, то внесем некоторые правки в конфиг:
max_login_fails=2 // количество попыток ввода пароля;
delay_failed_login=5 // время между неудавшимся логином и выводом сообщения;
anonymous_enable=NO // запретим анонимных пользователей
ftpd_banner=Welcome to ftp //скроем версию сервера

И все равно нужно еще защитится от подбора паролей, или говоря странным языком - от "брутфорса". Для этого есть хорошая разработка с названием "Fail2ban". Она может "банить" пользователей, которые заданное число раз совершают противоправные действия. Система обладает очень гибкой настройкой. Принцип основан на том, что она следит за определенными лог-файлами, например Apache, и при появлении в них шаблонных строчек создает правило блокирования через фаервол iptables. Важный момент - Fail2ban кушает память и занимает около 80М.  

Нужно скачать сам  Fail2ban и поместить временно в папку на сервере. Далее запустить установку python setup.py install. Затем скопировать конфигурации, и добавить программу в автозапуск.
cp files/redhat-initd /etc/init.d/fail2ban
chkconfig --add fail2ban
chkconfig fail2ban on

Затем создадим правила "бана" в файле /etc/fail2ban/jail.conf.  Здесь главное указать имя лог файла для наблюдения, количество попыток подбора пароля, и время бана в секундах. В случае бана система отправит письмо на указанный ящик. 

Например, секция для ssh:
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=xxxx, protocol=tcp]
sendmail-whois[name=SSH, dest=admin@myhost.com, sender=admin@myhost.com  ]
logpath = /var/log/secure
maxretry = 3
bantime = 300
 
Особенность такая, что в поле filter стоит имя фильтра sshd, который описан в файле sshd.conf. Там пишутся именно правила фильтрации. Фильтры размещаются в папке /etc/fail2ban/filter.d/

Чтобы система банила подбор пароля нужно дописать в sshd.conf  в правилах строку:
^$(__prefix_line)sFailed password for .* from <HOST>(?: port \d*)?(?: ssh\d*)? 
sevrice fail2ban restart - перезапускаем после изменений  

Аналогично можно создавать правила для ftp, для доступа к несуществующим папкам, скриптам, что очень часто делают любопытные граждане в поисках интересного. А уж сколько бродит роботов, которые что-то вынюхивают. У меня Fail2ban срабатывает где-то 2 раза в сутки и как правило не зря.  Это лишь небольшая часть работ по защите, но достаточно эффективная. В добавок к этому обязательно нужно провести настройку сервера, отдающего на 80 порту. 

Комментариев нет:

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