Практические рекомендации по защите сервера Apache для криптовалютного обменника
Apache — мощный и гибкий веб-сервер, но его стандартная конфигурация не предназначена для отражения целевых атак на финансовые сервисы. Установка скрипта обменника валют требует проактивного подхода к безопасности. Данное руководство содержит пошаговые инструкции по усилению защиты вашего Apache-сервера, чтобы минимизировать риски взлома и компрометации средств.
1. Базовая настройка и обновления
1.1. Актуальные версии
Используйте последние стабильные версии Apache и PHP. Устаревшее ПО — главный вектор атак.
# Для Ubuntu/Debian
sudo apt update && sudo apt upgrade apache2 libapache2-mod-php -y
# Для CentOS/RHEL
sudo yum update httpd mod_php -y
1.2. Скрытие информации о сервере
Скрывайте версии Apache и PHP в заголовках ответов, чтобы усложнить идентификацию для злоумышленников.
В основном файле конфигурации Apache (например, /etc/apache2/apache2.conf или /etc/httpd/conf/httpd.conf) добавьте:
ServerTokens Prod
ServerSignature Off
Для скрытия версии PHP в заголовках создайте или отредактируйте файл /etc/php/*/apache2/php.ini (путь может отличаться):
expose_php = Off
1.3. Защита от информационного сбора
Ограничьте доступ к служебным и чувствительным файлам вашего скрипта с помощью директив .htaccess или в виртуальном хосте.
В конфигурации виртуального хоста (или в .htaccess в корне сайта) добавьте:
# Блокируем доступ ко всем скрытым файлам и директориям (начинающимся с точки)
Require all denied
# Блокируем доступ к конкретным чувствительным файлам
Require all denied
# Запрещаем просмотр содержимого директорий
Options -Indexes
# Блокируем выполнение скриптов в директориях с пользовательским контентом (например, загрузки)
Require all denied
2. Настройка SSL и безопасного соединения
2.1. Использование современных протоколов и шифров
Отключите устаревшие и небезопасные протоколы и шифры. Включите только TLS 1.2 и TLS 1.3.
В конфигурации SSL виртуального хоста (обычно в ) добавьте:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLSessionTickets off
2.2. Обязательное перенаправление на HTTPS
Настройте перенаправление всего HTTP-трафика на защищенное соединение.
Добавьте отдельный виртуальный хост для порта 80:
ServerName your-exchange.com
ServerAlias www.your-exchange.com
# Перенаправление на HTTPS
Redirect permanent / https://your-exchange.com/
2.3. HTTP-заголовки безопасности
Добавьте критически важные security-заголовки для защиты от XSS, clickjacking и других атак.
Включите модуль headers и добавьте в конфигурацию виртуального хоста:
# Активация модуля (если не активен)
sudo a2enmod headers
# В конфигурации виртуального хоста:
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';"
# Внимание! Тщательно настройте CSP под ваш скрипт.
3. Ограничение запросов и защита от DDoS
3.1. Ограничение частоты запросов с помощью mod_security и mod_evasive
Установите и настройте модули для защиты от брутфорса и DDoS.
mod_evasive (для базовой защиты от DDoS):
# Установка
# Для Ubuntu/Debian:
sudo apt install libapache2-mod-evasive
# Для CentOS/RHEL:
sudo yum install mod_evasive
# Настройка в /etc/apache2/mods-enabled/evasive.conf
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
mod_security (WAF - Веб-прикладной брандмауэр):
# Установка
# Для Ubuntu/Debian:
sudo apt install libapache2-mod-security2
# Для CentOS/RHEL:
sudo yum install mod_security
Активируйте основные правила OWASP CRS для защиты от SQL-инъекций, XSS и других атак.
3.2. Ограничение размера и времени запроса
Защитите сервер от атак на исчерпание ресурсов.
LimitRequestBody 1048576 # Ограничение тела запроса до 1 МБ
TimeOut 60 # Таймаут для запросов
4. Контроль доступа и файловая система
4.1. Минимальные привилегии для процесса Apache
Запускайте Apache под отдельным пользователем с минимальными правами (обычно www-data или apache).
Убедитесь в конфигурации (файл envvars или httpd.conf):
User www-data
Group www-data
4.2. Настройка правильных прав доступа к файлам
Владелец файлов скрипта — ваш пользователь (например, deploy).
Права на файлы: 644, на директории: 755.
Пользователь Apache (www-data) должен иметь право только на чтение большинства файлов и запись только в конкретные директории (uploads, tmp, logs).
4.3. Блокировка доступа по IP к административной панели
Ограничьте доступ к админке только с доверенных IP-адресов.
Require ip 192.0.2.100 203.0.113.50
# Или, если используете аутентификацию:
# AuthType Basic
# AuthName "Restricted Area"
# AuthUserFile /etc/apache2/.htpasswd
# Require valid-user
5. Конфигурация PHP для безопасности
Поскольку большинство обменников написаны на PHP, его безопасность не менее важна.
5.1. Безопасные настройки php.ini
Отредактируйте файл php.ini, используемый Apache:
; Отключение опасных функций
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source
; Ограничение доступа к файловой системе вне корня сайта
open_basedir = /var/www/your-exchange.com/:/tmp/
; Включение безопасного режима для обработки файлов
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 3
; Логирование ошибок (без вывода на экран)
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
6. Мониторинг и логирование
6.1. Детальное логирование
Настройте расширенный формат логов в Apache для лучшего анализа.
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D" extended
CustomLog ${APACHE_LOG_DIR}/access.log extended
ErrorLog ${APACHE_LOG_DIR}/error.log
6.2. Регулярный анализ логов
Используйте fail2ban для автоматического блокирования IP по шаблонам атак в логах Apache. Пример конфигурации для fail2ban для блокировки при множественных ошибках 404 или попытках входа.
Чек-лист быстрой проверки
- ServerTokens Prod и ServerSignature Off установлены.
- expose_php = Off в php.ini.
- Настроено перенаправление с HTTP на HTTPS.
- Используются только TLS 1.2/1.3 и современные шифры.
- Критические security-заголовки добавлены.
- Доступ к чувствительным файлам (.env, .git, логам) запрещен.
- Модуль mod_evasive и/или mod_security установлены и настроены.
- Доступ к /admin ограничен по IP.
- В php.ini отключены опасные функции и настроен open_basedir.
- Права доступа к файлам сайта установлены правильно.
Заключение
Безопасность Apache для криптовалютного обменника — это многоуровневый процесс, требующий внимания к деталям. Представленные настройки создают прочный фундамент, способный противостоять большинству автоматизированных атак и значительно повышающий стоимость взлома для злоумышленников.
Важно: После любых изменений в конфигурации Apache или PHP обязательно проверяйте их синтаксис и перезагружайте службу:
# Проверка синтаксиса Apache
sudo apache2ctl -t
# Перезагрузка Apache
sudo systemctl reload apache2
# Или для CentOS/RHEL
sudo httpd -t
sudo systemctl reload httpd
Регулярный аудит и обновления — залог поддержания высокого уровня безопасности вашего обменного сервиса.