Безопасность

Полное руководство по защите Битрикс CENTOS: от файрвола до Telegram-уведомлений

Полное руководство по защите Битрикс CENTOS: от файрвола до Telegram-уведомлений

Безопасность сервера или даже обычного рабочего компьютера под Linux — это не разовое действие, а постоянный процесс. Сегодня я хочу поделиться полным, пошаговым руководством, которое мы прошли на реальном примере, чтобы превратить стандартную систему в хорошо защищенную крепость с автоматизированным мониторингом и мгновенными уведомлениями об угрозах.

Это практическая инструкция, которую вы сможете адаптировать для своего сервера или десктопа на базе Ubuntu, Debian или их производных.

Шаг 1: Первичная разведка. Что запущено в системе?

Прежде чем что-то защищать, нужно понять, что именно мы защищаем. Какие службы “смотрят” в сеть? Какие процессы активны?

Для этого мы использовали две ключевые команды:

  • Проверка открытых портов:
ss -tuln

Эта команда показывает все TCP и UDP порты, которые ожидают входящих подключений. В нашем случае мы обнаружили веб-сервер Apache (порт 80), базу данных MariaDB (порт 3306) и несколько других служб.

  • Проверка запущенных процессов:
ps aux

Это дает нам полный список процессов, подтверждая, что наш веб-сервер — это apache2, а база данных — mariadbd.

Шаг 2: Базовая защита. Настраиваем файрвол

Самый первый рубеж обороны — это файрвол. Мы использовали ufw (Uncomplicated Firewall) — простой и мощный инструмент.

  • Включаем файрвол: По умолчанию он все запретит.
sudo ufw enable
  • Открываем нужные порты: Мы разрешили доступ только к тем службам, которые должны быть доступны извне.
# Разрешаем доступ к веб-серверу
sudo ufw allow 80/tcp

# Разрешаем доступ для интеграции с телефоном (если нужно)
sudo ufw allow 1716

# НЕ ЗАБУДЬТЕ, если подключаетесь удаленно!
sudo ufw allow 22/tcp

Шаг 3: Тяжелая артиллерия. Устанавливаем сканеры безопасности

Теперь, когда периметр защищен, добавим несколько уровней внутренней безопасности для обнаружения уже проникших угроз.

Сканеры руткитов: rkhunter и chkrootkit

Это утилиты для поиска руткитов — вредоносных программ, которые маскируют свое присутствие.

sudo apt install rkhunter chkrootkit

Важная первоначальная настройка rkhunter:

sudo rkhunter --update
sudo rkhunter --propupd

Сканер для веб-серверов: maldet

Если у вас есть веб-сервер, этот инструмент незаменим. Он ищет вредоносные PHP-скрипты, бэкдоры и прочие угрозы.

Устанавливаем зависимость:

sudo apt install inotify-tools

Устанавливаем maldet вручную:

wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzf maldetect-current.tar.gz
cd maldetect-*
sudo ./install.sh

Шаг 4: Автоматизация. Настраиваем регулярные проверки

Запускать сканеры вручную — хорошо, но легко забыть. Настроим автоматический запуск каждые 3 дня с помощью cron.

  • Открываем редактор cron для root-пользователя:
sudo crontab -e
  • Добавляем в конец файла следующие строки:
# Запускать сканеры безопасности каждые 3 дня в 3:30 ночи
30 3 */3 * * /usr/bin/rkhunter --check --cronjob
35 3 */3 * * /usr/sbin/chkrootkit
40 3 */3 * * /usr/local/sbin/maldet -a /var/www/html

Шаг 5: Мгновенные уведомления в Telegram

Что толку от сканирования, если вы не узнаете о результатах? Настроим отправку алертов в Telegram — это быстрее и удобнее почты.

  • Создаем бота:В Telegram находим @BotFather, пишем ему /newbot и следуем инструкциям. Сохраняемтокен.

  • Узнаем Chat ID: Находим нашего нового бота, пишем ему /start. Затем открываем в браузере https://api.telegram.org/botВАШ_ТОКЕН/getUpdates и находим в ответе chat.id.

  • Создаем скрипт-отправщик:

sudo nano /usr/local/bin/notify-telegram.sh

Вставляем в него код, подставив свои данные:

#!/bin/bash
TOKEN="ВАШ_ТОКЕН"
CHAT_ID="ВАШ_CHAT_ID"
MESSAGE="$1"

curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
--data-urlencode "chat_id=$CHAT_ID" \
--data-urlencode "text=$MESSAGE"
  • Делаем скрипт исполняемым:
sudo chmod +x /usr/local/bin/notify-telegram.sh

Шаг 6: Интеграция и финальная проверка

Обновим наши cron задания, чтобы они вызывали скрипт только при обнаружении угрозы.

  • Снова открываем sudo crontab -e.

  • Заменяем блок сканирования на этот, с улучшенной логикой:

# Запускать сканеры и отправлять отчет в Telegram при наличии угроз
30 3 */3 * * /usr/bin/rkhunter --check --cronjob | grep -q 'Warning:' && /usr/local/bin/notify-telegram.sh "Rkhunter обнаружил угрозы! Проверьте лог /var/log/rkhunter.log"
35 3 */3 * * /usr/sbin/chkrootkit | grep -q 'INFECTED' && /usr/local/bin/notify-telegram.sh "Chkrootkit обнаружил угрозы!"
40 3 */3 * * /usr/local/sbin/maldet -a /var/www/html | grep -q '{hits}' && /usr/local/bin/notify-telegram.sh "Maldet обнаружил угрозы! Проверьте отчет."
  • Проверяем! Имитируем тревогу, чтобы убедиться, что уведомление придет:
echo "Test: [ Warning: File not found ]" | grep -q 'Warning:' && /usr/local/bin/notify-telegram.sh "Тестовая тревога: Уведомление работает!"

Пошаговая защита сервера CentOS 9 Stream: от firewalld и Fail2Ban до Telegram-алертов

Защита Linux-сервера — это не магия, а последовательный процесс. В этом руководстве мы на реальном примере по шагам укрепим безопасность сервера под управлением CentOS 9 Stream, на котором работает сложный проект (например, 1С-Битрикс). Мы настроим файрвол, установим автоматическую защиту от атак, добавим несколько сканеров безопасности и настроим мгновенные уведомления в Telegram.

Шаг 1: Аудит системы. С чего начать?

Прежде всего, нужно понять, какие службы уже работают и слушают сеть. Это наша отправная точка.

Проверяем открытые порты:

ss -tuln

Смотрим на запущенные процессы:

ps aux

Этот аудит поможет нам понять, какие порты нужно будет разрешить в файрволе.

Шаг 2: Настройка файрвола с помощью firewalld

В CentOS стандартным инструментом для управления файрволом является firewalld.

Проверяем статус и текущие правила:

sudo firewall-cmd --state
sudo firewall-cmd --list-all

Добавляем базовые разрешающие правила для SSH (удаленный доступ) и веб-сервера (HTTP/HTTPS). Флаг --permanent сохраняет правила после перезагрузки.

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Применяем изменения:

sudo firewall-cmd --reload

Примечание: Если вашим приложениям нужны другие порты, их следует добавить аналогично, например: sudo firewall-cmd --permanent --add-port=3000/tcp. Но помните: все, что не должно быть доступно извне (например, базы данных), должно быть закрыто.

Шаг 3: Автоматическая защита от атак с Fail2Ban

Если ваш сервер доступен из интернета, его SSH-порт постоянно подвергается атакам подбора пароля. Вместо ручной блокировки IP-адресов мы автоматизируем этот процесс с помощью Fail2Ban.

Устанавливаем репозиторий EPEL, в котором находится много полезных пакетов, включая fail2ban:

sudo dnf install epel-release -y

Устанавливаем Fail2Ban:

sudo dnf install fail2ban -y

Включаем и запускаем службу:

sudo systemctl enable --now fail2ban

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

sudo nano /etc/fail2ban/jail.local

Вставляем в него конфигурацию для защиты SSH:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true

Перезапускаем Fail2Ban и проверяем статус:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Теперь Fail2Ban автоматически блокирует атакующих.

Шаг 4: Установка сканеров безопасности

Добавим три мощных инструмента для поиска руткитов и вредоносного ПО.

Устанавливаем rkhunter и chkrootkit:

sudo dnf install rkhunter chkrootkit -y

Исправляем конфигурацию rkhunter: На CentOS может возникнуть проблема с обновлением. Чтобы ее исправить, откройте sudo nano /etc/rkhunter.conf, найдите строку WEB_CMD=... и замените ее на WEB_CMD="".

Проводим первоначальную настройку rkhunter:

sudo rkhunter --update
sudo rkhunter --propupd

Устанавливаем maldet (сканер для веб-серверов):

# Устанавливаем зависимость для режима мониторинга
sudo dnf install inotify-tools -y

# Скачиваем и устанавливаем maldet
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzf maldetect-current.tar.gz
cd maldetect-* && sudo ./install.sh

Важный урок: Расследование ложного срабатывания. Во время первого скана maldet может найти угрозы. В нашем случае он нашел 2 файла с сигнатурой {YARA}eval_post. Мы проверили отчет (sudo maldet --report ) и изучили код с помощью grep. Оказалось, что угрозы нет — сканер ошибочно среагировал на безопасную PHP-функцию doubleval(). Мы добавили эти файлы в исключения, чтобы избежать ложных тревог в будущем: sudo maldet --add-ignore /path/to/file. Это показывает, как важно анализировать, а не удалять все подряд.

Шаг 5: Автоматизация и уведомления в Telegram

Финальный этап — настроим автоматический запуск сканеров и отправку уведомлений в Telegram.

Создаем скрипт-уведомитель:

sudo nano /usr/local/bin/notify-telegram.sh

Вставляем код, указав свои токен и ID чата, полученные от @BotFather:

#!/bin/bash
TOKEN="ВАШ_ТОКЕН"
CHAT_ID="ВАШ_CHAT_ID"
MESSAGE="$1"

curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
--data-urlencode "chat_id=$CHAT_ID" \
--data-urlencode "text=$MESSAGE"

Делаем скрипт исполняемым:

sudo chmod +x /usr/local/bin/notify-telegram.sh

Создаем cron задания:

Сначала уточняем пути к программам: which rkhunter chkrootkit. В нашем случае для chkrootkit путь оказался нестандартным: /usr/local/bin/chkrootkit.

Открываем crontab:

sudo crontab -e

Вставляем финальную, корректную конфигурацию:

# Запускать сканеры и отправлять отчет в Telegram при наличии угроз
30 3 */3 * * /usr/bin/rkhunter --check --cronjob | grep -q 'Warning:' && /usr/local/bin/notify-telegram.sh "Rkhunter на сервере nash обнаружил угрозы! Проверьте лог /var/log/rkhunter.log"
35 3 */3 * * /usr/local/bin/chkrootkit | grep -q 'INFECTED' && /usr/local/bin/notify-telegram.sh "Chkrootkit на сервере nash обнаружил угрозы!"
40 3 */3 * * /usr/local/sbin/maldet -a /home/bitrix/www | grep -q '{hits}' && /usr/local/bin/notify-telegram.sh "Maldet на сервере nash обнаружил угрозы! Проверьте отчет."

Не забудьте сохранить и выйти (для nano: Ctrl+X, Y, Enter).

Шаг 6: Финальное тестирование

Убедимся, что уведомления работают. Имитируем тревогу:

echo "Test: [ Warning: File not found ]" | grep -q 'Warning:' && /usr/local/bin/notify-telegram.sh "Тестовая тревога с сервера nash: Уведомление работает!"

Если сообщение пришло в Telegram — все настроено верно.

🎯 УПРАВЛЕНИЕ СИСТЕМОЙ БЕЗОПАСНОСТИ ПОСЛЕ УСТАНОВКИ

📊 ОСНОВНЫЕ КОМАНДЫ ПРОВЕРКИ СТАТУСА

# Общий статус безопасности
/usr/local/bin/security_status.sh

# Проверка работы мониторинга
tail -f /var/log/security_monitor.log

# Просмотр Telegram уведомлений
tail -f /var/log/telegram_notifications.log

# Статус всех защитных сервисов
systemctl status fail2ban
systemctl status firewalld

🛡️ УПРАВЛЕНИЕ FAIL2BAN

# Посмотреть общий статус
fail2ban-client status

# Статус защиты SSH
fail2ban-client status sshd

# Посмотреть заблокированные IP
fail2ban-client status sshd | grep "Banned IP"

# Разблокировать IP адрес
fail2ban-client set sshd unbanip 192.168.1.100

# Заблокировать IP вручную
fail2ban-client set sshd banip 192.168.1.100

# Перезапустить Fail2ban
systemctl restart fail2ban

# Посмотреть логи Fail2ban
tail -f /var/log/fail2ban.log

🔍 МОНИТОРИНГ УГРОЗ

# Запустить проверку вручную
/usr/local/bin/security_monitor.sh

# Проверить cron задачи
crontab -l

# Посмотреть последние обнаруженные угрозы
grep "ALERT\|WARNING" /var/log/security_monitor.log | tail -20

# Проверить процессы на майнеры
ps aux | grep -E "xmrig|minerd|kworker.*cpu"

# Найти подозрительные PHP файлы
find /home/bitrix/www -name "*.php" -type f -exec grep -l "eval\|base64_decode\|system" {} \; 2>/dev/null

📱 TELEGRAM УВЕДОМЛЕНИЯ

# Отправить тестовое сообщение
/usr/local/bin/notify-telegram.sh "Тест уведомления" "INFO"

# Отправить критическое уведомление
/usr/local/bin/notify-telegram.sh "Обнаружена угроза!" "CRITICAL"

# Проверить логи отправленных сообщений
tail -20 /var/log/telegram_notifications.log

🦠 АНТИВИРУС CLAMAV

# Обновить базы вирусов
freshclam

# Запустить сканирование вручную
clamscan -ri /home/bitrix/www --exclude-dir="/home/bitrix/www/bitrix/cache"

# Сканировать конкретный файл
clamscan /path/to/suspicious/file.php

# Запустить полное сканирование в фоне
/usr/local/bin/daily_av_scan.sh

# Посмотреть логи сканирования
tail -f /var/log/clamav_scan.log

📈 ОТЧЁТЫ И СТАТИСТИКА

# Ежедневный отчёт вручную
/usr/local/bin/daily_report.sh

# Статистика SSH атак за сегодня
grep "Failed password" /var/log/secure | grep "$(date '+%b %e')" | wc -l

# Топ 10 атакующих IP
grep "Failed password" /var/log/secure | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq -c | sort -rn | head -10

# Проверка нагрузки
uptime
htop
iotop

🔧 ЭКСТРЕННЫЕ КОМАНДЫ

# ЕСЛИ ОБНАРУЖЕН МАЙНЕР:
pkill -9 -f "xmrig|minerd|kworker|cryptonight"
ps aux | grep -v grep | grep -E "xmrig|minerd"

# ЕСЛИ ВЫСОКАЯ НАГРУЗКА:
top -b -n 1 | head -20
ps aux --sort=-%cpu | head -10

# ЕСЛИ ИДЁТ DDOS АТАКА:
netstat -an | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

# БЛОКИРОВКА АТАКУЮЩЕГО IP:
iptables -I INPUT -s IP_ADDRESS -j DROP
service iptables save

# РАЗБЛОКИРОВКА СЛУЧАЙНО ЗАБЛОКИРОВАННОГО:
iptables -D INPUT -s IP_ADDRESS -j DROP
fail2ban-client set sshd unbanip IP_ADDRESS

⚙️ НАСТРОЙКА И ИЗМЕНЕНИЯ

# Изменить настройки Fail2ban
nano /etc/fail2ban/jail.local
systemctl restart fail2ban

# Изменить частоту мониторинга (по умолчанию 5 минут)
crontab -e
# Измените */5 на нужное значение

# Добавить новый IP в белый список
echo "IP_ADDRESS" >> /etc/fail2ban/jail.local
# В секции [DEFAULT] добавьте в ignoreip

# Изменить токен Telegram
nano /usr/local/bin/notify-telegram.sh
# Измените TOKEN и CHAT_ID

📁 РАСПОЛОЖЕНИЕ ВАЖНЫХ ФАЙЛОВ

# Конфигурации
/etc/fail2ban/jail.local          # Настройки Fail2ban
/etc/ssh/sshd_config              # Настройки SSH
/etc/sysctl.d/99-security.conf    # Параметры ядра

# Скрипты
/usr/local/bin/security_monitor.sh    # Основной мониторинг
/usr/local/bin/notify-telegram.sh     # Telegram уведомления
/usr/local/bin/security_status.sh     # Проверка статуса
/usr/local/bin/daily_report.sh        # Ежедневный отчёт
/usr/local/bin/daily_av_scan.sh       # Антивирусное сканирование

# Логи
/var/log/security_monitor.log         # Лог мониторинга
/var/log/telegram_notifications.log   # Лог Telegram
/var/log/fail2ban.log                # Лог Fail2ban
/var/log/clamav_scan.log             # Лог антивируса
/var/log/secure                       # Системный лог безопасности

# Документация
/root/SECURITY_README.md              # Инструкция по системе

🚨 БЫСТРАЯ ДИАГНОСТИКА ПРОБЛЕМ

# Создайте скрипт быстрой проверки
cat > /root/quick_check.sh << 'EOF'
#!/bin/bash
echo "=== QUICK SECURITY CHECK ==="
echo "Fail2ban: $(systemctl is-active fail2ban)"
echo "Blocked IPs: $(fail2ban-client status sshd 2>/dev/null | grep "Currently banned" | awk '{print $NF}')"
echo "SSH attacks today: $(grep "Failed password" /var/log/secure | grep "$(date '+%b %e')" | wc -l)"
echo "Load: $(uptime | awk -F'load average:' '{print $2}')"
echo "Suspicious processes: $(ps aux | grep -E "xmrig|minerd" | grep -v grep | wc -l)"
echo "Last monitor check: $(tail -1 /var/log/security_monitor.log)"
EOF
chmod +x /root/quick_check.sh

# Запускайте для быстрой проверки:
/root/quick_check.sh

📝 ЕЖЕДНЕВНЫЕ ЗАДАЧИ АДМИНИСТРАТОРА

  • Утром:
/usr/local/bin/security_status.sh
tail -20 /var/log/security_monitor.log
  • При подозрении на взлом:
/root/quick_check.sh
fail2ban-client status sshd
ps aux | grep -E "xmrig|minerd"
  • Раз в неделю:
freshclam
clamscan -ri /home/bitrix/www
  • При высокой нагрузке:
htop
netstat -an | grep ESTABLISHED | wc -l

💡 Совет: Сохраните эту инструкцию локально - она вам пригодится для управления защитой на всех серверах!

ПРИ ВОССТАНОВЛЕНИИ ИЗ БЭКАПА:

# 1. Проверьте что система безопасности все еще работает
fail2ban-client status
systemctl status fail2ban

# 2. Убедитесь что мониторинг активен
crontab -l | grep security_monitor

# 3. После восстановления бэкапа ОБЯЗАТЕЛЬНО удалите вебшелл
rm -f /home/bitrix/www/bitrix/components/bitrix/main.field.url/79a457191b47.php

# 4. Проверьте права на файлы после восстановления
chown -R bitrix:bitrix /home/bitrix/www/
find /home/bitrix/www -type f -exec chmod 644 {} \;
find /home/bitrix/www -type d -exec chmod 755 {} \;

ПОСЛЕ ВОССТАНОВЛЕНИЯ:

# Быстрая проверка безопасности
cat > /tmp/check_after_restore.sh << 'EOF'
#!/bin/bash
echo "=== ПРОВЕРКА ПОСЛЕ ВОССТАНОВЛЕНИЯ ==="
echo ""
echo "1. Вебшелл удален: $([ ! -f /home/bitrix/www/bitrix/components/bitrix/main.field.url/79a457191b47.php ] && echo "✓" || echo "✗ ТРЕБУЕТСЯ УДАЛЕНИЕ!")"
echo "2. Fail2ban: $(systemctl is-active fail2ban)"
echo "3. Мониторинг: $(crontab -l | grep -c security_monitor) задач"
echo "4. Telegram: $([ -f /usr/local/bin/notify-telegram.sh ] && echo "✓" || echo "✗")"
echo "5. Заблокировано IP: $(fail2ban-client status sshd | grep "Currently banned" | awk '{print $NF}')"
echo ""
echo "Сервисы:"
echo "  Nginx: $(systemctl is-active nginx)"
echo "  Apache: $(systemctl is-active httpd)"
echo "  MySQL: $(systemctl is-active mysqld)"
echo ""
EOF
chmod +x /tmp/check_after_restore.sh
/tmp/check_after_restore.sh

ВАЖНЫЕ МОМЕНТЫ:

  • Сохраните настройки безопасности перед восстановлением:
# Бэкап настроек безопасности
tar -czf /root/security_backup_$(date +%Y%m%d).tar.gz \
/etc/fail2ban/jail.local \
/usr/local/bin/security_monitor.sh \
/usr/local/bin/notify-telegram.sh \
/usr/local/bin/security_status.sh \
/etc/sysctl.d/99-security.conf
  • После восстановления проверьте конфигурацию PHP/MySQL:
# Часто хостинг меняет пути к сокетам
grep -r "mysql.sock" /etc/php* /home/bitrix/www/bitrix/.settings.php
  • Документируйте изменения хостинга:
# Сохраните информацию о конфигурации
cat > /root/hosting_config_$(date +%Y%m%d).txt << EOF
Дата: $(date)
Изменения хостинга: добавление RAM
Старая конфигурация: $(free -h | grep Mem)
Новая конфигурация: [заполнить после восстановления]
Проблемы: сайт перестал работать после изменений
Решение: восстановление из бэкапа
EOF

РЕКОМЕНДАЦИИ НА БУДУЩЕЕ:

  • Перед изменениями на хостинге:

  • Делайте снапшот VDS

  • Сохраняйте конфигурации nginx/apache

  • Записывайте текущие настройки PHP

  • Создайте скрипт быстрого бэкапа:

cat > /root/quick_backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
echo "Creating quick backup..."
# Конфигурации
tar -czf /root/configs_$DATE.tar.gz /etc/nginx /etc/httpd /etc/php* /etc/my.cnf
# База данных
mysqldump --all-databases > /root/all_databases_$DATE.sql
echo "Backup completed: /root/configs_$DATE.tar.gz"
EOF
chmod +x /root/quick_backup.sh

Вижу проблему с отображением цветов - escape-последовательности не интерпретируются. Давайте исправим:

ИСПРАВЛЯЕМ ОТОБРАЖЕНИЕ ЦВЕТОВ:

# Исправленная версия menu.sh с правильными цветами
cat > /root/menu.sh << 'EOF'
#!/usr/bin/bash

# Функция для цветного вывода
print_color() {
local color=$1
local text=$2
case $color in
red)    echo -en "\e[31m${text}\e[0m" ;;
green)  echo -en "\e[32m${text}\e[0m" ;;
yellow) echo -en "\e[33m${text}\e[0m" ;;
blue)   echo -en "\e[34m${text}\e[0m" ;;
magenta) echo -en "\e[35m${text}\e[0m" ;;
cyan)   echo -en "\e[36m${text}\e[0m" ;;
*)      echo -en "${text}" ;;
esac
}

# Быстрая проверка безопасности
quick_security_check() {
local fail2ban_status=$(systemctl is-active fail2ban 2>/dev/null || echo "не установлен")
local blocked_ips=$(fail2ban-client status sshd 2>/dev/null | grep "Currently banned" | awk '{print $NF}' || echo "0")
local ssh_attacks=$(grep "Failed password" /var/log/secure 2>/dev/null | grep "$(date '+%b %e')" | wc -l)

if [ "$fail2ban_status" = "active" ]; then
print_color green "🛡️ Защита активна"
echo -n " | Заблокировано: "
print_color red "$blocked_ips"
echo -n " IP | SSH атак сегодня: "
print_color yellow "$ssh_attacks"
echo ""
else
print_color red "⚠️ Защита не активна!"
echo ""
fi
}

show_enhanced_menu() {
clear
print_color cyan "╔════════════════════════════════════════════════════════════╗\n"
print_color cyan "║              BITRIX ENVIRONMENT + SECURITY                 ║\n"
print_color cyan "╚════════════════════════════════════════════════════════════╝\n"

echo -n "  Статус: "
quick_security_check

echo ""
print_color blue "  ОСНОВНОЕ МЕНЮ:\n"
echo -n "  "; print_color green "B"; echo ") 📦 Bitrix Menu          - Стандартное меню Bitrix"

echo ""
print_color magenta "  БЕЗОПАСНОСТЬ:\n"
echo -n "  "; print_color green "S"; echo ") 🛡️  Security Panel       - Полное меню безопасности"
echo -n "  "; print_color green "C"; echo ") 🔍 Quick Check          - Быстрая проверка"
echo -n "  "; print_color green "L"; echo ") 📜 Security Logs        - Просмотр логов"
echo -n "  "; print_color green "F"; echo ") 🚫 Fail2ban Status      - Статус блокировок"

echo ""
print_color yellow "  БЫСТРЫЕ КОМАНДЫ:\n"
echo -n "  "; print_color green "T"; echo ") 📱 Test Telegram        - Тест уведомлений"
echo -n "  "; print_color green "R"; echo ") 📊 Daily Report         - Отчёт за день"
echo -n "  "; print_color green "A"; echo ") 🦠 AntiVirus Scan      - Быстрое сканирование"

echo ""
echo -n "  "; print_color red "0"; echo ") Exit"
echo ""
print_color cyan "════════════════════════════════════════════════════════════\n"
echo -n "Выберите опцию: "
}

# Основной цикл
while true; do
show_enhanced_menu
read -n1 choice
echo ""

case ${choice,,} in
b)
print_color green "\nЗапуск Bitrix Menu...\n"
. /opt/webdir/bin/bitrix_utils.sh
/opt/webdir/bin/pool_menu.sh
;;
s)
print_color magenta "\nЗапуск Security Panel...\n"
if [ -f /root/security_menu.sh ]; then
/root/security_menu.sh
else
print_color red "Security menu не найдено!\n"
read -p "Нажмите Enter..."
fi
;;
c)
print_color blue "\nБыстрая проверка безопасности:\n"
echo "═══════════════════════════════════════"
/usr/local/bin/quick_check 2>/dev/null || /usr/local/bin/security_status.sh
echo "═══════════════════════════════════════"
read -p "Нажмите Enter для продолжения..."
;;
l)
print_color blue "\nПоследние записи логов безопасности:\n"
tail -30 /var/log/security_monitor.log
echo ""
read -p "Нажмите Enter для продолжения..."
;;
f)
print_color yellow "\nСтатус Fail2ban:\n"
fail2ban-client status
echo ""
echo "Заблокированные IP в SSH:"
fail2ban-client status sshd 2>/dev/null | grep "Banned IP"
read -p "Нажмите Enter для продолжения..."
;;
t)
print_color green "\nОтправка тестового уведомления...\n"
/usr/local/bin/notify-telegram.sh "✅ Тест из расширенного меню $(hostname)" "INFO"
echo "Проверьте Telegram!"
read -p "Нажмите Enter для продолжения..."
;;
r)
print_color blue "\nГенерация отчёта...\n"
/usr/local/bin/daily_security_report.sh 2>/dev/null || {
echo "SSH атак сегодня: $(grep "Failed password" /var/log/secure | grep "$(date '+%b %e')" | wc -l)"
echo "Заблокировано IP: $(fail2ban-client status sshd 2>/dev/null | grep "Currently banned" | awk '{print $NF}')"
}
read -p "Нажмите Enter для продолжения..."
;;
a)
print_color red "\nЗапуск быстрого антивирусного сканирования...\n"
echo "Сканируем критические директории..."
clamscan -ri /home/bitrix/www/bitrix/admin/ --max-filesize=5M 2>/dev/null | tail -10
read -p "Нажмите Enter для продолжения..."
;;
0|q)
print_color green "До свидания!\n"
exit 0
;;
*)
print_color red "Неверный выбор!\n"
sleep 1
;;
esac
done
EOF

chmod +x /root/menu.sh

АЛЬТЕРНАТИВНЫЙ ВАРИАНТ БЕЗ ЦВЕТОВ (если не работают):

cat > /root/menu_simple.sh << 'EOF'
#!/usr/bin/bash

show_menu() {
clear
echo "========================================================"
echo "        BITRIX ENVIRONMENT + SECURITY                  "
echo "========================================================"

# Статус
local fail2ban_status=$(systemctl is-active fail2ban 2>/dev/null || echo "не установлен")
local blocked_ips=$(fail2ban-client status sshd 2>/dev/null | grep "Currently banned" | awk '{print $NF}' || echo "0")
local ssh_attacks=$(grep "Failed password" /var/log/secure 2>/dev/null | grep "$(date '+%b %e')" | wc -l)

echo "  Статус: Защита $fail2ban_status | Заблокировано: $blocked_ips IP | Атак: $ssh_attacks"
echo ""
echo "  ОСНОВНОЕ МЕНЮ:"
echo "  [B] Bitrix Menu          - Стандартное меню Bitrix"
echo ""
echo "  БЕЗОПАСНОСТЬ:"
echo "  [S] Security Panel       - Полное меню безопасности"
echo "  [C] Quick Check          - Быстрая проверка"
echo "  [L] Security Logs        - Просмотр логов"
echo "  [F] Fail2ban Status      - Статус блокировок"
echo ""
echo "  БЫСТРЫЕ КОМАНДЫ:"
echo "  [T] Test Telegram        - Тест уведомлений"
echo "  [R] Daily Report         - Отчёт за день"
echo "  [A] AntiVirus Scan       - Быстрое сканирование"
echo ""
echo "  [0] Exit"
echo "========================================================"
echo -n "Выберите опцию: "
}

while true; do
show_menu
read -n1 choice
echo ""

case ${choice,,} in
b) /opt/webdir/bin/pool_menu.sh ;;
s) /root/security_menu.sh ;;
c) /usr/local/bin/quick_check; read -p "Enter..." ;;
l) tail -30 /var/log/security_monitor.log; read -p "Enter..." ;;
f) fail2ban-client status sshd; read -p "Enter..." ;;
t) /usr/local/bin/notify-telegram.sh "Test" "INFO"; read -p "Enter..." ;;
r) /usr/local/bin/daily_security_report.sh; read -p "Enter..." ;;
a) clamscan -ri /home/bitrix/www/bitrix/admin/ --max-filesize=5M | tail -10; read -p "Enter..." ;;
0|q) exit 0 ;;
*) echo "Неверный выбор!"; sleep 1 ;;
esac
done
EOF

chmod +x /root/menu_simple.sh

Теперь запустите:

# Основное меню с цветами
/root/menu.sh

# Или простое меню без цветов
/root/menu_simple.sh

Рекомендую выбрать опцию Fчтобы посмотреть кто атакует, илиR для полного отчёта.

Добавляем в .bashrc

cat >> /root/.bashrc << ‘EOF’

Security aliases

alias menu=‘/root/menu.sh’ alias bmenu=‘/opt/webdir/bin/pool_menu.sh’ # Bitrix original menu alias security=‘sec’ alias check=‘sec check’ alias seclog=‘sec log’ alias banned=‘sec ban’

Функция для красивого вывода статуса при входе

show_security_status() { local fail2ban=$(systemctl is-active fail2ban 2>/dev/null) local blocked=$(fail2ban-client status sshd 2>/dev/null | grep “Currently banned” | awk ‘{print $NF}’ || echo “0”) local attacks=$(grep “Failed password” /var/log/secure 2>/dev/null | grep ”$(date ’+%b %e’)” | wc -l)

if [ "$fail2ban" = "active" ]; then
echo -e "\033[0;32m✅ Security: Active\033[0m | Blocked: \033[0;31m$blocked\033[0m IPs | Attacks: \033[0;33m$attacks\033[0m today"
else
echo -e "\033[0;31m⚠️  Security: Not Active!\033[0m"
fi

}

Показываем статус при входе

echo -e “\033[0;36m═══════════════════════════════════════\033[0m” show_security_status echo -e “\033[0;36m═══════════════════════════════════════\033[0m” echo “Commands: menu | sec | sec help” echo "" EOF

source /root/.bashrc

cat > /usr/local/bin/sec << ‘EOF’

#!/bin/bash

Цвета

RED=‘\033[0;31m’ GREEN=‘\033[0;32m’ YELLOW=‘\033[1;33m’ BLUE=‘\033[0;34m’ NC=‘\033[0m’

case “$1” in "")

# Без аргументов - показываем меню
/root/security_menu.sh 2>/dev/null || /root/menu.sh
;;
check|c)
/usr/local/bin/quick_check 2>/dev/null || {
echo "🔍 Быстрая проверка:"
echo "Fail2ban: $(systemctl is-active fail2ban)"
echo "Blocked: $(fail2ban-client status sshd 2>/dev/null | grep "Currently banned" | awk '{print $NF}') IPs"
echo "Attacks today: $(grep "Failed password" /var/log/secure | grep "$(date '+%b %e')" | wc -l)"
}
;;
status|s)
/usr/local/bin/security_status.sh
;;
log|l)
tail -f /var/log/security_monitor.log
;;
ban|b)
fail2ban-client status sshd
;;
unban|u)
if [ -z "$2" ]; then
echo "Usage: sec unban IP_ADDRESS"
else
fail2ban-client set sshd unbanip $2
fail2ban-client set sshd-aggressive unbanip $2 2>/dev/null
echo -e "${GREEN}✅ IP $2 разблокирован${NC}"
fi
;;
telegram|t)
shift
/usr/local/bin/notify-telegram.sh "$*" "INFO"
;;
report|r)
/usr/local/bin/daily_security_report.sh
;;
help|h)
echo -e "${BLUE}Security Commands:${NC}"
echo "  sec [menu]    - Security menu"
echo "  sec check     - Quick security check"
echo "  sec status    - Full status report"
echo "  sec log       - View security logs"
echo "  sec ban       - Show banned IPs"
echo "  sec unban IP  - Unban specific IP"
echo "  sec telegram MESSAGE - Send Telegram notification"
echo "  sec report    - Generate daily report"
echo "  sec help      - Show this help"
;;
*)
echo -e "${RED}Unknown command: $1${NC}"
echo "Use 'sec help' for available commands"
;;

esac EOF

chmod +x /usr/local/bin/sec

Посмотрим реальное меню

head -100 /opt/webdir/bin/pool_menu.sh

Сделаем бэкап

cp /opt/webdir/bin/pool_menu.sh /opt/webdir/bin/poolmenu.sh.backup$(date +%Y%m%d)

Найдем где пункты меню

grep -n “Sites|EXIT|exit” /opt/webdir/bin/pool_menu.sh | head -10


Беспокоитесь о безопасности вашего сайта или сервера? Мы проводим полный аудит безопасности, устраняем уязвимости, лечим вирусы на 1С-Битрикс и настраиваем надежную защиту. Свяжитесь с нами, чтобы защитить ваш бизнес.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →