
Для предотвращения атак на сервер, который непосредственно работает в сети Интернет, есть очень замечательный сервис - Fail2Ban.
Fail2Ban - простой локальный сервис, который анализирует логи на предмет попытки подобрать пароли к ssh, ftp, http-сервисам. Если такие попытки найдены, fail2ban блокирует ip-адрес источника. Сервис очень гибко настраивается - возможна блокировка через iptables или /etc/hosts.allow (deny), способен оповещать по email, писать лог, сбрасывать блокировку через заданное время и прочее.
Устанавливаем fail2ban:
aptitude install fail2ban |
Изоляторы (jails)
Несмотря на то, что файл fail2ban.conf определяет основную конфигурацию всей подсистемы, всё-таки наиболее важным для функционирования, пожалуй, следует считать файл jail.conf, который содержит описания так называемых "изоляторов" (jails).
Текущую конфигурацию каждого изолятора описывает набор следующих параметров:
Содержимое файла jail.conf разделяется на секции, соответствующие различным сервисам. Самая первая секция называется [DEFAULT] и предназначается для определения общих параметров, значения которых имеют силу во всех последующих секциях данного файла. Один из вариантов содержимого конфига:
[DEFAULT]
ignoreip = 127.0.0.1 # ban & send an e-mail with whois report and relevant log lines # Choose default action. To change, just override value of 'action' with the # # Next jails corresponds to the standard configuration in Fail2ban 0.6 which # [ssh] enabled = true # Generic filter for pam. Has to be used with action which bans all ports enabled = false [xinetd-fail] enabled = false [ssh-ddos] enabled = true # [apache] enabled = true # default action is now multiport, so apache-multiport jail was left enabled = false [apache-noscript] enabled = true [apache-overflows] enabled = true # [vsftpd] enabled = false [proftpd] enabled = false [wuftpd] enabled = false [pure-ftpd] enabled = false # [postfix] enabled = true [couriersmtp] enabled = true enabled = true [courierpop3s] enabled = true [courierimap] enabled = true [courierimaps] enabled = true [sendmail] enabled = true # [courierauth] enabled = true [sasl] enabled = true # DNS Servers # These jails block attacks against named (bind9). By default, logging is off # Word of Caution: enabled = false [named-refused-tcp] enabled = false |
Перезапускаем:
sudo /etc/init.d/fail2ban restart |
Проверяем логи fail2ban, они находятся в /var/log/fail2ban.log.
Если Вы используете правила iptables для fail2ban, в логах будут ошибки:
2013-02-06 12:36:18,402 fail2ban.jail : INFO Jail 'ssh-ddos' started 2013-02-06 12:36:18,410 fail2ban.jail : INFO Jail 'ssh' started 2013-02-06 12:51:41,522 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh-ddos iptables -F fail2ban-ssh-ddos iptables -X fail2ban-ssh-ddos returned 100 2013-02-06 12:51:41,523 fail2ban.jail : INFO Jail 'ssh-ddos' stopped 2013-02-06 12:51:42,450 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh iptables -F fail2ban-ssh iptables -X fail2ban-ssh returned 100 |
Фиксим эти ошибки.
Открываем /usr/bin/fail2ban-client. Находим:
beautifier.setInputCmd(c) |
и выше добавляем строку:
time.sleep(0.1) |
Должно выглядеть примерно так:
def __processCmd(self, cmd, showRet = True): beautifier = Beautifier() for c in cmd: time.sleep(0.1) beautifier.setInputCmd(c) |
После рестарт fail2ban:
/etc/init.d/fail2ban restart |
Просматриваем логи, в них все нормально:
2013-02-06 13:10:14,037 fail2ban.filter : INFO Set maxRetry = 5 2013-02-06 13:10:14,439 fail2ban.filter : INFO Set findtime = 600 2013-02-06 13:10:14,539 fail2ban.actions: INFO Set banTime = 3600 2013-02-06 13:10:15,646 fail2ban.jail : INFO Jail 'pure-ftpd' started 2013-02-06 13:10:15,747 fail2ban.jail : INFO Jail 'courierpop3' started 2013-02-06 13:10:15,848 fail2ban.jail : INFO Jail 'courierimaps' started 2013-02-06 13:10:15,950 fail2ban.jail : INFO Jail 'courierauth' started 2013-02-06 13:10:16,051 fail2ban.jail : INFO Jail 'apache' started 2013-02-06 13:10:16,152 fail2ban.jail : INFO Jail 'courierpop3s' started 2013-02-06 13:10:16,254 fail2ban.jail : INFO Jail 'couriersmtp' started 2013-02-06 13:10:16,355 fail2ban.jail : INFO Jail 'named-refused-tcp' started 2013-02-06 13:10:16,457 fail2ban.jail : INFO Jail 'apache-noscript' started 2013-02-06 13:10:16,558 fail2ban.jail : INFO Jail 'sendmail' started 2013-02-06 13:10:16,659 fail2ban.jail : INFO Jail 'ssh' started 2013-02-06 13:10:16,760 fail2ban.jail : INFO Jail 'apache-overflows' started 2013-02-06 13:10:16,862 fail2ban.jail : INFO Jail 'named-refused-udp' started 2013-02-06 13:10:16,963 fail2ban.jail : INFO Jail 'postfix' started 2013-02-06 13:10:17,064 fail2ban.jail : INFO Jail 'ssh-ddos' started 2013-02-06 13:10:17,166 fail2ban.jail : INFO Jail 'courierimap' started 2013-02-06 13:10:17,267 fail2ban.jail : INFO Jail 'sasl' started |
Проверяем работу:
iptables -L |
Если у вас при перезапуске fail2ban-client reload
Посыпят ошибки, примерно такого плана:
WARNING 'findtime' not defined in 'ssh'. Using default value
WARNING 'findtime' not defined in 'dropbear'. Using default value
WARNING 'findtime' not defined in 'pam-generic'. Using default value
WARNING 'findtime' not defined in 'xinetd-fail'. Using default value
WARNING 'findtime' not defined in 'ssh-ddos'. Using default value
WARNING 'findtime' not defined in 'apache'. Using default value
WARNING 'findtime' not defined in 'apache-multiport'. Using default value
WARNING 'findtime' not defined in 'apache-noscript'. Using default value
WARNING 'findtime' not defined in 'apache-overflows'. Using default value
WARNING 'findtime' not defined in 'php-url-fopen'. Using default value
WARNING 'findtime' not defined in 'vsftpd'. Using default value
WARNING 'findtime' not defined in 'proftpd'. Using default value
WARNING 'findtime' not defined in 'pure-ftpd'. Using default value
WARNING 'findtime' not defined in 'wuftpd'. Using default value
WARNING 'findtime' not defined in 'postfix'. Using default value
WARNING 'findtime' not defined in 'couriersmtp'. Using default value
WARNING 'findtime' not defined in 'courierauth'. Using default value
WARNING 'findtime' not defined in 'sasl'. Using default value
WARNING 'findtime' not defined in 'named-refused-udp'. Using default value
WARNING 'findtime' not defined in 'named-refused-tcp'. Using default value
WARNING 'findtime' not defined in 'pop3'. Using default value
Для исправления в секцию [DEFAULT] файла /etc/fail2ban/jail.conf
введите значение findtime = 600