ЕДИНЫЙ СКРИПТ УСТАНОВКИ ЗАЩИТЫ POSTFIX

Модератор: padonki

Ответить
Аватара пользователя
Padonak
padonki
Сообщения: 3831
Зарегистрирован: 14 авг 2006, 20:43
Контактная информация:

ЕДИНЫЙ СКРИПТ УСТАНОВКИ ЗАЩИТЫ POSTFIX

Сообщение Padonak »

побаловался тут на днях с DeepSeek - прикольно вышло :)

Код: Выделить всё

#!/usr/bin/env bash

# ============================================
# СКРИПТ ПРОВЕРКИ СТАТУСА ЗАЩИТЫ POSTFIX
# Версия: 2.0
# ============================================

# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}=========================================${NC}"
echo -e "${GREEN}   📊 СТАТИСТИКА ЗАЩИТЫ POSTFIX${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
echo -e "${YELLOW}🕐 $(date)${NC}"
echo ""

# 1. Количество забаненных IP и подсетей
echo -e "${BLUE}🔒 Забанено IP и подсетей:${NC}"
banned_count=$(sudo iptables -L INPUT -n 2>/dev/null | grep DROP | grep -v "ADDRTYPE" | grep -v "recent" | wc -l)
echo "   $banned_count"
echo ""

# 2. Список последних 10 забаненных
echo -e "${BLUE}📋 Последние 10 забаненных:${NC}"
sudo iptables -L INPUT -n 2>/dev/null | grep DROP | grep -v "ADDRTYPE" | grep -v "recent" | tail -10 | while read line; do
    echo "   $line"
done
echo ""

# 3. Логи бана (последние 5)
echo -e "${BLUE}📝 Логи бана (последние 5):${NC}"
if [[ -f /var/log/ban-attacks.log ]]; then
    sudo tail -5 /var/log/ban-attacks.log 2>/dev/null | while read line; do
        echo "   $line"
    done
else
    echo "   ❌ Лог еще не создан"
fi
echo ""

# 4. Всего атак в логах
echo -e "${BLUE}📊 Всего атак в логах:${NC}"
total_attacks=$(sudo grep -c "SASL.*authentication failed" /var/log/mail.log 2>/dev/null || echo "0")
echo "   $total_attacks"
echo ""

# 5. Топ атакующих IP
echo -e "${BLUE}🔍 Топ атакующих IP:${NC}"
sudo grep "SASL.*authentication failed" /var/log/mail.log 2>/dev/null | \
    grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | \
    sort | uniq -c | sort -rn | head -5 | \
    while read count ip; do
        # Проверяем, забанен ли IP
        if sudo iptables -L INPUT -n 2>/dev/null | grep -q "$ip"; then
            status="✅ ЗАБАНЕН"
        else
            status="❌ НЕ ЗАБАНЕН"
        fi
        echo "   $ip - $count атак $status"
    done
echo ""

# 6. Проверка cron
echo -e "${BLUE}🔄 Статус cron:${NC}"

# Проверяем /etc/crontab
if grep -q "ban-attackers" /etc/crontab 2>/dev/null; then
    cron_line=$(grep "ban-attackers" /etc/crontab 2>/dev/null | head -1)
    echo "   ✅ Cron настроен в /etc/crontab"
    echo "      $cron_line"
    
    # Проверяем, что cron запущен
    if systemctl is-active --quiet cron 2>/dev/null || service cron status 2>/dev/null | grep -q "running"; then
        echo "   ✅ Cron сервис запущен"
    else
        echo "   ⚠️ Cron сервис НЕ запущен!"
        echo "      Запустите: sudo systemctl start cron"
    fi
    
    # Проверяем, что скрипт существует
    if [[ -f /usr/local/bin/ban-attackers.sh ]]; then
        echo "   ✅ Скрипт бана существует"
        if [[ -x /usr/local/bin/ban-attackers.sh ]]; then
            echo "   ✅ Скрипт бана исполняемый"
        else
            echo "   ❌ Скрипт бана НЕ исполняемый!"
            echo "      Исправьте: sudo chmod +x /usr/local/bin/ban-attackers.sh"
        fi
    else
        echo "   ❌ Скрипт бана НЕ существует!"
    fi
    
# Проверяем crontab -e
elif sudo crontab -l 2>/dev/null | grep -q "ban-attackers"; then
    cron_line=$(sudo crontab -l 2>/dev/null | grep "ban-attackers" | head -1)
    echo "   ✅ Cron настроен (crontab -e)"
    echo "      $cron_line"
    
    # Проверяем, что cron запущен
    if systemctl is-active --quiet cron 2>/dev/null || service cron status 2>/dev/null | grep -q "running"; then
        echo "   ✅ Cron сервис запущен"
    else
        echo "   ⚠️ Cron сервис НЕ запущен!"
        echo "      Запустите: sudo systemctl start cron"
    fi
    
    # Проверяем, что скрипт существует
    if [[ -f /usr/local/bin/ban-attackers.sh ]]; then
        echo "   ✅ Скрипт бана существует"
        if [[ -x /usr/local/bin/ban-attackers.sh ]]; then
            echo "   ✅ Скрипт бана исполняемый"
        else
            echo "   ❌ Скрипт бана НЕ исполняемый!"
            echo "      Исправьте: sudo chmod +x /usr/local/bin/ban-attackers.sh"
        fi
    else
        echo "   ❌ Скрипт бана НЕ существует!"
    fi
    
else
    echo "   ❌ Cron НЕ настроен!"
    echo ""
    echo -e "${YELLOW}   Чтобы настроить cron:${NC}"
    echo "   sudo vim /etc/crontab"
    echo "   Добавьте строку:"
    echo "   */2 * * * * root /usr/local/bin/ban-attackers.sh > /dev/null 2>&1"
    echo "   Затем: sudo systemctl restart cron"
fi
echo ""

# 7. Проверка iptables
echo -e "${BLUE}🛡️ Статус iptables:${NC}"
if sudo iptables -L INPUT -n 2>/dev/null | grep -q "DROP"; then
    echo "   ✅ Правила iptables активны"
    
    # Проверяем политику INPUT
    policy=$(sudo iptables -L INPUT -n 2>/dev/null | head -1 | awk '{print $4}')
    if [[ "$policy" == "DROP" ]]; then
        echo "   ✅ Политика INPUT: DROP"
    else
        echo "   ⚠️ Политика INPUT: $policy (рекомендуется DROP)"
    fi
else
    echo "   ⚠️ Правила iptables не найдены"
fi
echo ""

# 8. Проверка fail2ban (опционально)
echo -e "${BLUE}🔧 Статус fail2ban:${NC}"
if command -v fail2ban-client &> /dev/null; then
    if systemctl is-active --quiet fail2ban 2>/dev/null || service fail2ban status 2>/dev/null | grep -q "running"; then
        echo "   ✅ Fail2ban запущен"
        
        # Проверяем jail postfix-sasl
        if sudo fail2ban-client status postfix-sasl 2>/dev/null | grep -q "Status"; then
            banned_fail2ban=$(sudo fail2ban-client get postfix-sasl banip 2>/dev/null | wc -l)
            echo "   ✅ Jail postfix-sasl активен ($banned_fail2ban IP забанено)"
        else
            echo "   ⚠️ Jail postfix-sasl не активен"
        fi
    else
        echo "   ⚠️ Fail2ban не запущен"
    fi
else
    echo "   ❌ Fail2ban не установлен"
fi
echo ""

# 9. Последние запуски cron
echo -e "${BLUE}🔄 Последние запуски cron:${NC}"
if grep -q "ban-attackers" /var/log/syslog 2>/dev/null; then
    sudo grep "ban-attackers" /var/log/syslog 2>/dev/null | tail -3 | while read line; do
        echo "   $line"
    done
else
    echo "   Нет записей в логах"
fi
echo ""

# 10. Итоговый статус
echo -e "${BLUE}=========================================${NC}"
if [[ $banned_count -gt 0 ]]; then
    echo -e "${GREEN}✅ СТАТУС: ЗАЩИЩЕН ($banned_count IP/подсетей забанено)${NC}"
else
    echo -e "${YELLOW}⚠️ СТАТУС: ТРЕБУЕТ ВНИМАНИЯ (нет забаненных IP)${NC}"
fi
echo -e "${BLUE}=========================================${NC}"

# Советы по устранению проблем
if [[ $banned_count -eq 0 ]]; then
    echo ""
    echo -e "${YELLOW}💡 Советы:${NC}"
    echo "   1. Проверьте логи атак: sudo tail -f /var/log/mail.log | grep 'SASL.*failed'"
    echo "   2. Запустите бан вручную: sudo /usr/local/bin/ban-attackers.sh"
    echo "   3. Проверьте cron: sudo systemctl status cron"
fi

echo ""
Как использовать:

Код: Выделить всё

# 1. Создаем скрипт
sudo nano /usr/local/bin/setup-postfix-protection.sh

# 2. Вставляем код выше и сохраняем (Ctrl+O, Enter, Ctrl+X)

# 3. Даем права на выполнение
sudo chmod +x /usr/local/bin/setup-postfix-protection.sh

# 4. Запускаем установку
sudo /usr/local/bin/setup-postfix-protection.sh

Что делает скрипт:
Функция Описание
Проверка зависимостей Проверяет установленные пакеты
Создание скрипта бана ban-attackers.sh - автоматический бан
Создание скрипта проверки check-ban.sh - статус защиты
Настройка cron Бан каждые 2 и 5 минут
Настройка iptables Базовые правила защиты
Настройка fail2ban Дополнительная защита (если установлен)
Первый запуск Немедленный бан всех атакующих
Вывод информации Показывает статус и полезные команды


После установки:

Код: Выделить всё

# Проверить статус
sudo /usr/local/bin/check-ban.sh

# Посмотреть логи
sudo tail -f /var/log/ban-attacks.log

# Посмотреть атаки
sudo tail -f /var/log/mail.log | grep "SASL.*failed"
Вложения
postfix_ban_install.rar
(2.13 КБ) 1 скачивание
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.
Изображение
Аватара пользователя
Padonak
padonki
Сообщения: 3831
Зарегистрирован: 14 авг 2006, 20:43
Контактная информация:

Re: ЕДИНЫЙ СКРИПТ УСТАНОВКИ ЗАЩИТЫ POSTFIX

Сообщение Padonak »

после у меня вот так вышло:

📝 Логи бана (последние 5):
2026-07-05 12:03:33 🔒 Бан: 98.122.215.23
2026-07-05 12:03:33 🔒 Бан подсети: 45.148.10.0/24 (119 атак)
2026-07-05 12:03:33 ✅ Забанено IP/подсетей: 503
2026-07-05 12:07:06 🔍 Поиск атакующих...
2026-07-05 12:07:10 ✅ Забанено IP/подсетей: 503
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.
Изображение
Ответить