Почему Fail2ban не блокирует указанный порт?

У нас настроен сервер на базе Debian 12 с использованием Postfix, Dovecot и iptables. Мы хотим защитить IMAP и POP3 от атак методом подбора с помощью стандартного фильтра. 

Мы создали или редактируем файл mcedit /etc/fail2ban/jail.local и добавили следующее: 

[dovecot]  
enabled = true  
filter = dovecot  
port = imap,imaps,pop3,pop3s  
action = iptables-multiport[name=dovecot, port="imap,imaps,pop3,pop3s", protocol=tcp]  
bantime = 60m  
maxretry = 3  
findtime = 60m  

После этого мы попытались многократно подключиться к порту 143 TCP с неверным паролем и наблюдали следующие записи в логах: 

```
2024-11-13 11:25:49,381 fail2ban.jail           [1658152]: INFO    Jail 'modoboa' started
2024-11-13 11:25:49,383 fail2ban.filtersystemd  [1658152]: INFO    [modoboa] Jail is in operation now (process new journal entries)
2024-11-13 11:25:49,428 fail2ban.filter         [1658152]: INFO    [dovecot] Found 193.105.37.198 - 2024-11-13 11:08:39
2024-11-13 11:25:49,429 fail2ban.filter         [1658152]: INFO    [dovecot] Found 193.105.37.198 - 2024-11-13 11:22:05
2024-11-13 11:25:49,429 fail2ban.filtersystemd  [1658152]: INFO    [dovecot] Jail is in operation now (process new journal entries)
2024-11-13 11:25:49,751 fail2ban.actions        [1658152]: NOTICE  [dovecot] Restore Ban 193.105.37.198
```

Блокировка сработала, и мы проверили правила iptables с помощью команды:

```
iptables -L -n --line
```

В результате мы увидели следующее правило:

```
Chain f2b-dovecot (1 references)
num  target     prot opt source               destination
1    REJECT     0    --  193.105.37.198       0.0.0.0/0            reject-with icmp-port-unreachable
2    RETURN     0    --  0.0.0.0/0            0.0.0.0/0
```

Таким образом, возникает вопрос: должно ли данное правило блокировать только подключение на 143 порт?
  • 13 ноября 2024 г. 8:53
Ответы на вопрос 2
Правила, созданные Fail2ban, работают на уровне IP и не ограничиваются конкретными портами, если только вы не укажете это в ваших правилах. Давайте детально разберём вашу ситуацию.

### Что происходит?

1. **Правила Fail2ban**: Ваше правило `iptables-multiport` было правильно настроено, чтобы блокировать все подключения к портам, указанным в `port = imap,imaps,pop3,pop3s`. Это означает, что если IP-адрес подпадает под условие блокировки, все попытки подключиться к любому из указанных портов будут заблокированы.

2. **Журнал логов Fail2ban**: По вашим логам видно, что Fail2ban зафиксировал несколько неудачных попыток подключения от IP-адреса `193.105.37.198` и выполнил блокировку. Это значит, что Fail2ban работает корректно.

3. **Состояние iptables**: Вы видите, что правило действительно было добавлено, и оно использует `REJECT` по IP, который был заблокирован. Это правило будет блокировать все попытки подключения от данного IP, в том числе к порту 143, потому что это правило не привязывается к конкретному порту.

### Разъяснение правила

Правило в iptables:

```
num  target     prot opt source               destination
1    REJECT     0    --  193.105.37.198       0.0.0.0/0            reject-with icmp-port-unreachable
```

Этот выход означает, что любые пакеты (для всех протоколов, поскольку `prot opt` имеет значение `0`, что означает любой протокол) от источника `193.105.37.198` к любой цели (так как `destination` — это `0.0.0.0/0`) будут отвергнуты. Так что, если атакующий пытается подключиться к IMAP (порт 143), его подключение будет отклонено.

### Заключение

Таким образом, ваше правило действительно должно блокировать подключения к порту 143, и в этом нет недоразумения. Возможно, проблема заключается в том, что вы неявно проверяете, работает ли блокировка, или ваши тесты на подключение могут не срабатывать как ожидалось. Для проверки вы можете использовать такие утилиты, как `telnet` или `nmap`, чтобы попытаться подключиться к порту с заблокированного IP. Если вы все сделали правильно и увидели блокировку в правилах iptables, блокировка работает корректно.
Все оказалось просто тупо не увидел создавшееся в цепочке input правило. Все ок, все работает! 
Похожие вопросы