[DEFAULT]
ignoreip = 127.0.0.1
bantime = 10 # made for test purposes
maxretry = 3
backend = polling
destemail = email@mycompany.com
banaction = iptables-multiport
mta = sendmail
protocol = tcp
action = %(action_mw)s
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
[pam-generic]
enabled = true
filter = pam-generic
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/auth.log
maxretry = 6
Остальные конфигурации fail2ban являются стандартными.
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_winbind.so
session required pam_loginuid.so
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
session required pam_unix.so
session optional pam_winbind.so
session required pam_loginuid.so
Обратите внимание, единственная разница заключается в добавлении сессия [success = 1 default = ignore] pam_succeed_if.so service в cron quiet use_uid.
May 22 15:30:01 node1 CRON[16029]: pam_unix(cron:session): session opened for user root by (uid=0)
May 22 15:30:01 node1 CRON[16029]: pam_unix(cron:session): session closed for user root
May 22 15:35:01 node1 CRON[16514]: pam_unix(cron:session): session opened for user root by (uid=0)
May 22 15:35:01 node1 CRON[16514]: pam_unix(cron:session): session closed for user root
fail2ban-client set ssh banip 1.2.3.4
в 15:26 IP забанят в 15:30. Вот почему я связываю его с перечисленным выше заданием cron. /etc/pam.d/common-session-noninteractive
и повторите команду fail2ban-client, нет записи в /var/log/auth.log
и никакого бана.Больше информации:
дефолт /etc/pam.d/common-session-noninteractive
:
fail2ban-client set ssh banip 1.2.3.4
-> IP забанен невидимый cron, которое выполняется каждые 5 минут. Я проверил каждый файл в /etc/cron*
и /var/spool/cron/*
и такой работы не было. Итог: ручной бан работает с задержкой до 5 минут.
добавлено session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
в /etc/pam.d/common-session-noninteractive
как было предложено Вот:
fail2ban-client set ssh banip 1.2.3.4
-> невидимый cron работа не работает и запрета не происходит.
как изменение в /etc/pam.d/common-session-noninteractive
мешает fail2ban-client забанить IP? И почему?
root@node1:~# fail2ban-client set loglevel 4 Current logging level is DEBUG root@node1:~# fail2ban-client -vvv set ssh banip 1.2.3.4 DEBUG Reading /etc/fail2ban/fail2ban DEBUG Reading files: ['/etc/fail2ban/fail2ban.conf', '/etc/fail2ban/fail2ban.local'] INFO Using socket file /var/run/fail2ban/fail2ban.sock DEBUG OK : '1.2.3.4' DEBUG Beautify '1.2.3.4' with ['set', 'ssh', 'banip', '1.2.3.4'] 1.2.3.4 root@zap:~# tail -f /var/log/fail2ban.log 2013-05-24 21:32:07,695 fail2ban.comm : DEBUG Command: ['set', 'ssh', 'banip', '1.2.3.4'] 2013-05-24 21:32:07,696 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4'] 2013-05-24 21:32:07,696 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4'] 2013-05-24 21:32:07,696 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4']
Результат: запрета нет.
quiet
из session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
в /etc/pam.d/common-session-noninteractive
:Результат: успешный бан.
/var/log/auth.log
:
May 24 22:00:01 node1 CRON[22483]: pam_succeed_if(cron:session): requirement "service in cron" was met by user "root"
May 24 22:00:01 node1 CRON[22483]: pam_succeed_if(cron:session): requirement "service in cron" was met by user "root"
/var/log/fail2ban.log
:
2013-05-24 21:56:07,955 fail2ban.comm : DEBUG Command: ['set', 'loglevel', '4']
2013-05-24 21:56:20,155 fail2ban.comm : DEBUG Command: ['set', 'ssh', 'banip', '1.2.3.4']
2013-05-24 21:56:20,156 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4']
2013-05-24 21:56:20,156 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4']
2013-05-24 21:56:20,156 fail2ban.filter : DEBUG Currently have failures from 1 IPs: ['1.2.3.4']
2013-05-24 22:00:01,079 fail2ban.filter : DEBUG /var/log/auth.log has been modified
2013-05-24 22:00:01,079 fail2ban.filter.datedetector: DEBUG Sorting the template list
2013-05-24 22:00:01,853 fail2ban.filter : DEBUG /var/log/auth.log has been modified
2013-05-24 22:00:01,853 fail2ban.filter.datedetector: DEBUG Sorting the template list
2013-05-24 22:00:01,870 fail2ban.actions: WARNING [ssh] Ban 1.2.3.4
2013-05-24 22:00:01,870 fail2ban.actions.action: DEBUG iptables -n -L INPUT | grep -q fail2ban-ssh
2013-05-24 22:00:01,876 fail2ban.actions.action: DEBUG iptables -n -L INPUT | grep -q fail2ban-ssh returned successfully
2013-05-24 22:00:01,877 fail2ban.actions.action: DEBUG iptables -I fail2ban-ssh 1 -s 1.2.3.4 -j DROP
2013-05-24 22:00:01,919 fail2ban.actions.action: DEBUG iptables -I fail2ban-ssh 1 -s 1.2.3.4 -j DROP
2013-05-24 22:00:01,920 fail2ban.actions.action: DEBUG
2013-05-24 22:00:01,923 fail2ban.actions.action: DEBUG returned successfully
...
fail2ban 0.8.7.1-2 ~ ppa7 ~ lucid из Вот. Стандартная (версия 0.8.4) продолжала давать сбой:
"global name 'time' is not defined"
которые побуждают меня искать более новую версию.
Я думаю (но не подтвердил), что fail2ban просто ожидает новых строк в auth.log перед применением команды fail2ban-client, поэтому бан выполняется не «невидимым заданием cron, которое выполняется каждые 5 минут», а «бесконечным циклом, который читает 'logpath' ", в конкретном случае auth.log. Если это правда, то изменение, которое вы сделали в /etc/pam.d/common-session-noninteractive, не помешает fail2ban-client заблокировать IP-адрес, но откладывает его до появления новой строки в auth.log. Новые строки журнала появляются реже, потому что вы отключили cron-сообщения, и нужно дольше ждать бана IP.