Безопасная настройка MariaDB и MySQL на VPS

Безопасность · 19.04.2026
Безопасная настройка MariaDB и MySQL на VPS

База данных — самый ценный актив большинства веб-приложений. Её компрометация означает утечку пользовательских данных, паролей и коммерческой информации. Правильная конфигурация MySQL/MariaDB критически важна.

Первичная защита: mysql_secure_installation

mysql_secure_installation
# Отвечаем:
# Validate password: Y (включить проверку сложности)
# Remove anonymous users: Y
# Disallow root login remotely: Y
# Remove test database: Y
# Reload privilege tables: Y

Создание пользователей с минимальными правами

mysql -u root -p

-- Создать пользователя только для одной БД
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'webapp'@'localhost';

-- Только для чтения (для аналитики)
CREATE USER 'analytics'@'localhost' IDENTIFIED BY 'ReadOnlyPass!';
GRANT SELECT ON myapp.* TO 'analytics'@'localhost';

FLUSH PRIVILEGES;
SHOW GRANTS FOR 'webapp'@'localhost';

Настройка my.cnf для безопасности

# /etc/mysql/mariadb.conf.d/99-security.cnf

[mysqld]
# Привязать только к localhost (запретить внешние подключения)
bind-address = 127.0.0.1

# Отключить LOCAL INFILE (защита от LFI-атак)
local-infile = 0

# Скрыть версию MariaDB
skip-show-database

# Максимальное количество ошибочных подключений
max_connect_errors = 100

# Логировать медленные запросы
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

Шифрование соединений (SSL/TLS)

# Проверить поддержку SSL
mysql -u root -p -e "SHOW VARIABLES LIKE '%ssl%';"

# Требовать SSL для пользователя
ALTER USER 'webapp'@'%' REQUIRE SSL;

# В my.cnf включить SSL
ssl-ca = /etc/mysql/ssl/ca-cert.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem

Автоматические бэкапы с шифрованием

cat > /etc/cron.daily/mysql-backup << 'SCRIPT'
#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u root -p'RootPass' --all-databases --single-transaction   | gzip | gpg --batch --passphrase "BackupKey123" -c   > /backup/mysql-$DATE.sql.gz.gpg
find /backup/ -name "mysql-*.sql.gz.gpg" -mtime +30 -delete
SCRIPT
chmod +x /etc/cron.daily/mysql-backup
Принцип минимальных привилегий для БД: Каждое приложение должно иметь своего пользователя БД только с теми правами, которые необходимы. Никогда не используйте root-пользователя для веб-приложений.
Проверьте bind-address! По умолчанию MariaDB в некоторых дистрибутивах слушает все интерфейсы (0.0.0.0). Это открывает доступ из интернета. Установите bind-address = 127.0.0.1 если внешний доступ не нужен.
← Назад в базу знаний Задать вопрос поддержке