В данной статье мы разберем настройку Fail2Ban для Zimbra, чтобы усилить безопасность почтового сервера. В этом руководстве я использую CentOS. Измените версию python-pip при использовании другой ОС.
Настройка Fail2Ban для Zimbra
Fail2ban можно установить используя репозиторий EPEL:
yum install epel-release -y yum install fail2ban -y
Или установим его ручками, используя следующие шаги:
1) Сначала установим pip
yum install python3-pip
2) Теперь установим зависимости, необходимые для работы Fail2Ban
pip3 install pyinotify pip3 install dnspython
3) Загрузим и распакуем архив с Fail2Ban
cd /home wget -c https://github.com/fail2ban/fail2ban/archive/0.9.4.tar.gz
4) Установим наш скрипт с Fail2Ban
tar -xvf 0.9.4.tar.gz cd fail2ban-0.9.4 python3 setup.py install
5) Скопируем файл для установки службы
cp files/fail2ban.service /usr/lib/systemd/system/
6) Отредактируем службу
nano /usr/lib/systemd/system/fail2ban.service
Измените следующие строки в конфигурации
ExecStart=/usr/local/bin/fail2ban-client -x start ExecStop=/usr/local/bin/fail2ban-client stop ExecReload=/usr/local/bin/fail2ban-client reload
Создадим каталог для fail2ban
mkdir /var/run/fail2ban
Добавим строку в конец файла var.conf
nano /usr/lib/tmpfiles.d/var.conf
d /var/run/fail2ban 0755 - - -
Перезапустим systemd
systemctl daemon-reload
Теперь настроим сам fail2ban:
1) Создайте файл «/etc/fail2ban/jail.local», и он переопределит файл конфигурации по умолчанию «/etc/fail2ban/jail.conf».
Обязательно добавьте локальный IP-адрес сервера Zimbra в секцию «ignoreip=». Также можно добавить другие ip адреса, которые fail2ban должен игнорировать.
nano /etc/fail2ban/jail.local
[DEFAULT] # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban will not ban a host which matches an address in this list. # Several addresses can be defined using space (and/or comma) separator. #ignoreip = 127.0.0.1/8 ::1 10.137.26.29/32 ignoreip = 127.0.0.1/8 IP-ADDRESS-OF-ZIMBRA-SERVER/32 banaction = route # A host is banned if it has generated "maxretry" during the last "findtime" seconds. # 10 minute (in seconds) #findtime = 600 # "bantime" is the number of seconds that a host is banned. # 10 hour (in seconds) #bantime = 3600 # "maxretry" is the number of failures before a host get banned. #maxretry = 5
2) Создадим правила zimbra.jail со следующими настройками:
nano /etc/fail2ban/jail.d/zimbra.local
[zimbra-smtp]
enabled = true
filter = zimbra-smtp
port = 25,465,587
logpath = /var/log/zimbra.log
maxretry = 3
findtime = 600
bantime = 3600
[zimbra-webmail]
enabled = true
filter = zimbra-webmail
port = 80,443
logpath = /opt/zimbra/log/mailbox.log
maxretry = 3
findtime = 600
bantime = 3600
[zimbra-admin]
enabled = true
filter = zimbra-admin
port = 7071,9071
logpath = /opt/zimbra/log/mailbox.log
maxretry = 3
findtime = 600
bantime = 3600
3) Теперь создадим фильтры для служб Zimbra:
Код ниже нужно просто скопировать и вставить в консоль.
Для Webmail
tee /etc/fail2ban/filter.d/zimbra-webmail.conf > /dev/null <<EOF [Definition] # failregex = \[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$ INFO .*;oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, invalid password$ ignoreregex = EOF
Для Zimbra SMTP/SMTPS/Submission
tee /etc/fail2ban/filter.d/zimbra-smtp.conf > /dev/null <<EOF [Definition] # failregex = postfix\/submission\/smtpd\[\d+\]: warning: .*\[<HOST>\]: SASL \w+ authentication failed: authentication failure$ postfix\/smtps\/smtpd\[\d+\]: warning: .*\[<HOST>\]: SASL \w+ authentication failed: authentication failure$ ignoreregex = EOF
Для панели управления Webadmin
tee /etc/fail2ban/filter.d/zimbra-admin.conf > /dev/null <<EOF [Definition] # failregex = INFO .*;ip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, invalid password$ INFO .*ip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$ ignoreregex = EOF
4) Если вы запускаете прокси nginx на том же узле, что и почтовый сервер, вам нужно будет добавить 127.0.0.1 и реальный IP-адрес этого узла:
su - zimbra zmprov mcf +zimbraMailTrustedIP 127.0.0.1 +zimbraMailTrustedIP {IP of Server} zmcontrol restart
Перезапустим службу fail2ban и добавим его в автозагрузку:
systemctl restart fail2ban systemctl enable fail2ban
Проверим, что служба работает:
systemctl status fail2ban
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ FAIL2BAN
Посмотреть список активированных фильтров:
fail2ban-client status
Посмотреть заблокированные ip адреса?
ip r или команда route -n
Как заблокировать ip в fail2ban?
fail2ban-client set <имя фильтра> banip <IP-адрес>
Например: fail2ban-client set zimbra-smtp banip 10.18.20.77
Как разблокировать ip в fail2ban?
fail2ban-client set <имя фильтра> unbanip <IP-адрес>
За основу была использована статья с вики зимбры.
У вас не хватает самого главного это action
curl -k https://raw.githubusercontent.com/imanudin11/zimbra-fail2ban/master/zimbra-admin.conf > /etc/fail2ban/filter.d/zimbra-admin.conf
– Zimbra Webmail
curl -k https://raw.githubusercontent.com/imanudin11/zimbra-fail2ban/master/zimbra-webmail.conf > /etc/fail2ban/filter.d/zimbra-webmail.conf
– Zimbra SMTP/SMTPS/Submission
curl -k https://raw.githubusercontent.com/imanudin11/zimbra-fail2ban/master/zimbra-submission.conf
Без них сервис будет видеть логи но ничего не будет делать
Немного поздно отвечаю, но то что вы скинули указано в этом пункте:
3) Теперь создадим фильтры для служб Zimbra: