fail2ban не перехватывает атаку SMTP паролем

618
Shachar Shemesh

Спамеры запускают на моем сервере атаки по подбору паролей (постфикс в Debian). Они уже угадали пароли двух пользователей и начали рассылать спам с моего сервера. Пароли изменены, а атаки смягчены (на данный момент), но я хочу полностью их заблокировать.

Я установил fail2ban, но по какой-то причине он не может обнаружить атаки.

/etc/fail2ban/fail.conf содержит:

[sasl]  enabled = true port = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s filter = sasl # You might consider monitoring /var/log/mail.warn instead if you are # running postfix since it would provide the same log lines at the # "warn" level but overall at the smaller filesize. #logpath = /var/log/mail.log logpath = /var/log/mail.warn 

/etc/fail2ban/filter.d/sasl.conf содержит:

# Fail2Ban configuration file # # Author: Yaroslav Halchenko # # $Revision$ #  [Definition]  # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$  # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = 

Когда я запускаю фильтр /var/log/mail.warn, он дает результаты:

# fail2ban-regex /var/log/mail.warn '(?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$'  Running tests =============  Use regex line : (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|P... Use log file : /var/log/mail.warn   Results =======  Failregex |- Regular expressions: | [1] (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$ | `- Number of matches: [1] 15293 match(es)  Ignoreregex |- Regular expressions: | `- Number of matches:  Summary =======  Addresses found: [1] 123.169.7.222 (Sun Feb 25 06:40:18 2018) 123.169.7.222 (Sun Feb 25 06:40:21 2018) ... 185.173.176.157 (Fri Mar 02 10:12:46 2018) 185.173.176.157 (Fri Mar 02 10:13:15 2018) 185.173.176.157 (Fri Mar 02 10:13:43 2018) 185.173.176.157 (Fri Mar 02 10:14:11 2018) 185.173.176.157 (Fri Mar 02 10:14:41 2018) 185.173.176.157 (Fri Mar 02 10:15:13 2018) 185.173.176.157 (Fri Mar 02 10:15:42 2018) 185.173.176.157 (Fri Mar 02 10:16:13 2018) 185.173.176.157 (Fri Mar 02 10:16:42 2018) 185.173.176.157 (Fri Mar 02 10:17:10 2018)  Date template hits: 34294 hit(s): MONTH Day Hour:Minute:Second 0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year 0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second 0 hit(s): Year/Month/Day Hour:Minute:Second 0 hit(s): Day/Month/Year Hour:Minute:Second 0 hit(s): Day/Month/Year Hour:Minute:Second 0 hit(s): Day/MONTH/Year:Hour:Minute:Second 0 hit(s): Month/Day/Year:Hour:Minute:Second 0 hit(s): Year-Month-Day Hour:Minute:Second 0 hit(s): Year.Month.Day Hour:Minute:Second 0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond] 0 hit(s): Day-Month-Year Hour:Minute:Second 0 hit(s): TAI64N 0 hit(s): Epoch 0 hit(s): ISO 8601 0 hit(s): Hour:Minute:Second 0 hit(s): <Month/Day/Year@Hour:Minute:Second>  Success, the total number of match is 15293  However, look at the above section 'Running tests' which could contain important information. 

Несмотря на все это, /var/log/fail2ban.logне показывает блокировку нарушающего IP-адреса.

Обновить

Следуя предложениям, я увеличил уровень журнала. Это показывает:

2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Processing line with time:1519986602.0 and ip:185.173.176.157 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Ignore line since time 1519986602.0 < 1519987675.92 - 600 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Processing line with time:1519986635.0 and ip:185.173.176.157 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Ignore line since time 1519986635.0 < 1519987675.92 - 600 

Jail.conf имеет:

bantime = 600 maxretry = 3 
2
Выстрел в темноте: вы правильно выбрали порог? Я имею в виду, что f2b может правильно обнаруживать эти атаки, но его логика заключается в том, что IP-адрес запрещается только в том случае, если у него были неудачные попытки `X` во временном интервале` Y`, то есть с некоторой скоростью `X / Y`. Если в вашем случае этот порог слишком низок (т. Е. Атака правильно распределена по времени), fail2ban не будет считать это атакой. Таким образом, если fail2ban будет запрещать каждое соответствие его критериям, пользователи, которые законно не смогли ввести свой пароль, будут сразу же забанены. kostix 6 лет назад 0
Подумайте о повышении лог-уровня f2b (установите `loglevel` в` 4`) для отладки. kostix 6 лет назад 0
@kostix Я сделал, но я не понимаю журнал. Shachar Shemesh 6 лет назад 0
Из `Игнорировать строку со времени 1519986602.0 <1519987675.92 - 600` и ​​[документы] (https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options), я думаю, что` 600` является значением опция `findtime`. То есть попытки взлома с определенного IP-адреса, похоже, достигают больших успехов, чем `findtime`, и, следовательно, игнорируются` fail2ban`. «1519987675.92-1519986602.0» - «1073,92» или около 18 минут. kostix 6 лет назад 0
@kostix Можете ли вы написать это в качестве ответа, чтобы я мог принять это? Плохое слово (цензура) адаптирует скорость сканирования к моим настройкам. Хорошо, я позволю им сканировать 24 пароля в день и посмотрим, сколько времени им потребуется, чтобы взломать один. Shachar Shemesh 6 лет назад 0
Могу ли я порекомендовать вам установить аутентификацию TLS? Я имею в виду, мандат TLS снаружи и требует проверки сертификатов, представленных клиентами. Возможно, вам потребуется создать и поддерживать свой собственный ЦС (пакет `easy-rsa` может помочь), но взамен это решение будет в значительной степени защищено от подбора пароля. kostix 6 лет назад 0
Я не вижу, что это соответствует развертыванию, которое я делаю для моей целевой аудитории (в частности, моих родителей). Это неплохая идея, это просто не практично. Вроде как все другие развертывания TLS когда-либо. С letsencrypt я даже не думаю, что это должен быть частный CA. Shachar Shemesh 6 лет назад 0
Тем не менее, я мог бы иметь имя пользователя для аутентификации SMTP, отличное от адреса электронной почты, к которому оно относится. Даже это может оказаться за пределами возможностей моей целевой аудитории. Shachar Shemesh 6 лет назад 0

1 ответ на вопрос

3
kostix

Из Ignore line since time 1519986602.0 < 1519987675.92 - 600записи журнала и документов, я заклинаю, что 600это значение findtimeпараметра. То есть попытки взлома с данного IP, кажется, достигают больших успехов findtimeи поэтому игнорируются fail2ban.

1519987675.92-1519986602.0это 1073.92или около 18 минут.


Пуленепробиваемое решение будет предусматривать использование TLS на интерфейсе, выходящем в Интернет, и проверку того, что сертификаты, представленные клиентами, выпущены доверенным центром сертификации.

Похожие вопросы