готовый скрипт установки и настройки Fail2Ban (Ubuntu 22.04 / 24.04)
Добавлено: 09 июл 2026, 22:38
Сохраните его как install_fail2ban.sh, дайте права на выполнение и запустите на чистом сервере (Ubuntu 22.04 / 24.04).
🚀Скрипт установки install_fail2ban.sh
📌 Как использовать
1. Создайте файл на сервере
2. Вставьте содержимое скрипта (скопируйте весь блок выше)
3. Дайте права на выполнение
4. Запустите скрипт
🔍 Что делает скрипт
Шаг Действие
1 Устанавливает Fail2Ban и iptables-persistent
2 Создаёт fail2ban.local с уровнем WARNING
3 Создаёт jail.local с 5 тюрьмами (sshd, postfix-sasl, postfix-pipelining, postfix-flood, postfix-helo)
4 Создаёт недостающие фильтры для Postfix
5 Создаёт цепочки iptables f2b-sshd и f2b-postfix, чтобы избежать ошибок CHAIN_DEL
6 Сохраняет правила iptables для сохранения после перезагрузки
7 Проверяет синтаксис и запускает Fail2Ban
✅ После установки проверьте
📌 Если на сервере нет Postfix
Просто отключите почтовые тюрьмы в jail.local:
В каждой секции [postfix-*] замените enabled = true на enabled = false
🚀Скрипт установки install_fail2ban.sh
Код: Выделить всё
#!/bin/bash
# === Скрипт автоматической настройки Fail2Ban v1.0 ===
# Логирование: WARNING
# Бэкенд: systemd
# Тюрьмы: sshd, postfix-sasl, postfix-pipelining, postfix-flood, postfix-helo
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} Fail2Ban Ultimate Installer v1.0 ${NC}"
echo -e "${GREEN}========================================${NC}"
# 1. Обновление и установка Fail2Ban
echo -e "${YELLOW}[1/10] Обновление списка пакетов...${NC}"
sudo apt update -qq
echo -e "${YELLOW}[2/10] Установка Fail2Ban и iptables-persistent...${NC}"
sudo apt install fail2ban iptables-persistent -y
# 2. Остановка службы для редактирования
echo -e "${YELLOW}[3/10] Остановка службы Fail2Ban...${NC}"
sudo systemctl stop fail2ban
# 3. Создание fail2ban.local (уровень логирования WARNING)
echo -e "${YELLOW}[4/10] Создание /etc/fail2ban/fail2ban.local...${NC}"
sudo tee /etc/fail2ban/fail2ban.local > /dev/null << 'EOF'
[Definition]
loglevel = WARNING
EOF
# 4. Создание jail.local (все тюрьмы)
echo -e "${YELLOW}[5/10] Создание /etc/fail2ban/jail.local...${NC}"
sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8
backend = systemd
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 3600
backend = systemd
action = iptables-multiport[name=sshd, port=ssh]
[postfix-sasl]
enabled = true
filter = postfix-sasl
logpath = /var/log/mail.log
maxretry = 2
findtime = 180
bantime = 86400
backend = systemd
maxlines = 1000
action = iptables-multiport[name=postfix, port="smtp,465,587,25,submission,imap,imaps,pop3,pop3s"]
[postfix-pipelining]
enabled = true
filter = postfix-pipelining
logpath = /var/log/mail.log
maxretry = 3
findtime = 300
bantime = 86400
backend = systemd
action = iptables-multiport[name=postfix, port="smtp,465,587,25,submission,imap,imaps,pop3,pop3s"]
[postfix-flood]
enabled = true
filter = postfix-flood
logpath = /var/log/mail.log
maxretry = 5
findtime = 60
bantime = 3600
backend = systemd
action = iptables-multiport[name=postfix, port="smtp,465,587,25,submission,imap,imaps,pop3,pop3s"]
[postfix-helo]
enabled = true
filter = postfix-helo
logpath = /var/log/mail.log
maxretry = 3
findtime = 300
bantime = 86400
backend = systemd
action = iptables-multiport[name=postfix, port="smtp,465,587,25,submission,imap,imaps,pop3,pop3s"]
EOF
# 5. Создание фильтров (если их нет)
echo -e "${YELLOW}[6/10] Создание фильтров postfix...${NC}"
sudo tee /etc/fail2ban/filter.d/postfix-pipelining.conf > /dev/null << 'EOF'
[Definition]
failregex = ^<HOST>.* lost connection after (AUTH|UNKNOWN|EHLO|HELO|MAIL|RCPT|DATA|RSET|NOOP|QUIT)
^<HOST>.* improper command pipelining after (EHLO|HELO)
ignoreregex =
EOF
sudo tee /etc/fail2ban/filter.d/postfix-flood.conf > /dev/null << 'EOF'
[Definition]
failregex = ^<HOST>.* (too many errors after|flood|limit exceeded)
ignoreregex =
EOF
sudo tee /etc/fail2ban/filter.d/postfix-helo.conf > /dev/null << 'EOF'
[Definition]
failregex = ^<HOST>.* (HELO|EHLO) (localhost|127\.0\.0\.1)
ignoreregex =
EOF
# 6. Создание цепочек iptables (чтобы избежать ошибок CHAIN_DEL)
echo -e "${YELLOW}[7/10] Создание цепочек iptables...${NC}"
# Удаляем старые цепочки, если есть
sudo iptables -D INPUT -p tcp --dport ssh -j f2b-sshd 2>/dev/null || true
sudo iptables -F f2b-sshd 2>/dev/null || true
sudo iptables -X f2b-sshd 2>/dev/null || true
sudo iptables -D INPUT -p tcp -m multiport --dports smtp,465,587,25,submission,imap,imaps,pop3,pop3s -j f2b-postfix 2>/dev/null || true
sudo iptables -F f2b-postfix 2>/dev/null || true
sudo iptables -X f2b-postfix 2>/dev/null || true
# Создаём новые цепочки
sudo iptables -N f2b-sshd 2>/dev/null || true
sudo iptables -A f2b-sshd -j RETURN 2>/dev/null || true
sudo iptables -I INPUT -p tcp --dport ssh -j f2b-sshd 2>/dev/null || true
sudo iptables -N f2b-postfix 2>/dev/null || true
sudo iptables -A f2b-postfix -j RETURN 2>/dev/null || true
sudo iptables -I INPUT -p tcp -m multiport --dports smtp,465,587,25,submission,imap,imaps,pop3,pop3s -j f2b-postfix 2>/dev/null || true
# 7. Сохраняем правила iptables
echo -e "${YELLOW}[8/10] Сохранение правил iptables...${NC}"
sudo iptables-save > /etc/iptables/rules.v4 2>/dev/null || true
sudo ip6tables-save > /etc/iptables/rules.v6 2>/dev/null || true
# 8. Проверка синтаксиса
echo -e "${YELLOW}[9/10] Проверка синтаксиса конфигов...${NC}"
sudo fail2ban-client -t
# 9. Запуск службы
echo -e "${YELLOW}[10/10] Запуск Fail2Ban...${NC}"
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# 10. Финальный статус
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} УСТАНОВКА ЗАВЕРШЕНА! ${NC}"
echo -e "${GREEN}========================================${NC}"
echo -e "Уровень логирования: $(sudo fail2ban-client get loglevel)"
echo -e "Статус службы:"
sudo systemctl status fail2ban --no-pager | grep Active
echo -e "\n${GREEN}Активные тюрьмы:${NC}"
sudo fail2ban-client status
echo -e "\n${YELLOW}Проверьте логи: sudo tail -f /var/log/fail2ban.log${NC}"
1. Создайте файл на сервере
Код: Выделить всё
vim install_fail2ban.sh3. Дайте права на выполнение
Код: Выделить всё
chmod +x install_fail2ban.shКод: Выделить всё
sudo ./install_fail2ban.shШаг Действие
1 Устанавливает Fail2Ban и iptables-persistent
2 Создаёт fail2ban.local с уровнем WARNING
3 Создаёт jail.local с 5 тюрьмами (sshd, postfix-sasl, postfix-pipelining, postfix-flood, postfix-helo)
4 Создаёт недостающие фильтры для Postfix
5 Создаёт цепочки iptables f2b-sshd и f2b-postfix, чтобы избежать ошибок CHAIN_DEL
6 Сохраняет правила iptables для сохранения после перезагрузки
7 Проверяет синтаксис и запускает Fail2Ban
✅ После установки проверьте
Код: Выделить всё
sudo fail2ban-client get loglevel # Должно быть WARNING
sudo fail2ban-client status # 5 тюрем
sudo fail2ban-client status sshd # Баны работают
sudo tail -20 /var/log/fail2ban.log | grep ERROR # Ошибок нет
Просто отключите почтовые тюрьмы в jail.local:
Код: Выделить всё
vim /etc/fail2ban/jail.local