Защищённые подключения к базе данных
Настройте защищённые подключения к базе данных с использованием SSL/TLS и ограничьте доступ по IP-адресам для повышения безопасности.
«Защищённые подключения к базе данных» — бесплатный урок Linux Server Deployment & SSH Mastery на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Linux Server Deployment & SSH Mastery, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Linux Server Deployment & SSH Mastery содержит 4 уроков всего.
Зачем защищать подключения к базе данных
Когда приложения подключаются к базе данных, конфиденциальные данные часто передаются по сети. Без надлежащей защиты эти данные могут быть перехвачены или изменены.
- Конфиденциальность: предотвращает несанкционированный просмотр данных.
- Целостность: гарантирует, что данные не будут изменены во время передачи.
- Аутентификация: подтверждает личность клиента и сервера.
В этом уроке рассматриваются два ключевых метода: шифрование SSL/TLS и ограничения доступа на основе IP.
SSL/TLS для баз данных
SSL/TLS (Secure Sockets Layer/Transport Layer Security) — стандартная технология для создания зашифрованного соединения между веб-сервером и клиентом, а в нашем случае — между сервером базы данных и клиентом.
- Она шифрует все передаваемые данные и защищает их от перехвата.
- Она использует цифровые сертификаты для проверки подлинности сервера и, при необходимости, клиента.
- Она необходима для защиты таких данных, как пароли, финансовые сведения и персональная информация, во время передачи.
Создание сертификатов SSL/TLS
Для использования SSL/TLS серверу базы данных нужны цифровой сертификат и закрытый ключ. Они подтверждают подлинность сервера.
- Самоподписанные сертификаты: их проще всего создавать для тестирования или внутренних сетей, но по умолчанию им не доверяют.
- Сертификаты, подписанные CA: выдаются центром сертификации (CA) и признаются доверенными во всём мире; это идеальный вариант для рабочей среды.
В этом уроке будем считать, что у вас уже есть сертификат сервера (server.crt) и закрытый ключ (server.key).
PostgreSQL: включение SSL
Чтобы включить SSL в PostgreSQL, необходимо отредактировать файл postgresql.conf. Он указывает серверу принимать защищённые подключения и задаёт расположение сертификатов.
Основные параметры:
ssl = on: включает SSL.ssl_cert_file: путь к сертификату сервера.ssl_key_file: путь к закрытому ключу сервера.
После внесения изменений перезапустите PostgreSQL.
# Snippet from postgresql.conf
ssl = on
ssl_cert_file = '/etc/ssl/certs/postgresql/server.crt'
ssl_key_file = '/etc/ssl/private/postgresql/server.key'
ssl_crl_file = '' # Optional: Certificate Revocation List
# Remember to restart PostgreSQL after changes!MySQL: включение SSL/TLS
Для MySQL настройте SSL/TLS в файле my.cnf (или my.ini в Windows), обычно в разделе [mysqld].
Укажите пути к сертификату сервера, закрытому ключу и, при необходимости, сертификату центра сертификации (CA), если он используется для проверки сертификатов клиентов.
После внесения изменений перезапустите службу MySQL, чтобы они вступили в силу.
# Snippet from my.cnf
[mysqld]
ssl_ca = /etc/mysql/certs/ca.pem
ssl_cert = /etc/mysql/certs/server-cert.pem
ssl_key = /etc/mysql/certs/server-key.pem
# Restart MySQL after changes!Подключение клиента с использованием SSL/TLS
После настройки сервера клиентам нужно указать, что при подключении следует использовать SSL/TLS. Обычно для этого задают параметры SSL в строке подключения или команде.
Вот пример с использованием клиента psql для PostgreSQL, в котором режим SSL требуется явно:
sslmode=require: принудительно устанавливает SSL-подключение.sslrootcert: путь к сертификату CA для проверки сервера.
psql "host=your_db_host user=your_user dbname=your_db \
sslmode=require sslrootcert=/path/to/ca.crt"Ограничение доступа по IP-адресу
Помимо шифрования, ограничение доступа по IP-адресу клиента — важная мера безопасности. Это гарантирует, что даже попытаться подключиться к базе данных смогут только доверенные компьютеры.
Настроить это можно:
- На уровне сервера базы данных (например, с помощью
pg_hba.confв PostgreSQL или операторовGRANTв MySQL). - С помощью межсетевого экрана (например, UFW или firewalld), блокируя трафик к порту базы данных от неавторизованных IP-адресов.
Совместное использование обоих методов обеспечивает многоуровневую защиту.
PostgreSQL: ограничение IP-адресов с помощью pg_hba.conf
PostgreSQL использует файл pg_hba.conf для аутентификации на основе узла. В каждой строке указываются типы подключений, базы данных, пользователи и разрешённые IP-адреса.
Распространённые поля:
- TYPE:
host(TCP/IP),local(сокет Unix). - DATABASE:
all, имя конкретной базы данных. - USER:
all, имя конкретного пользователя. - ADDRESS: диапазон IP-адресов (например,
192.168.1.0/24) или отдельный IP-адрес. - METHOD:
scram-sha-256,md5,peerи другие.
Не забудьте перезапустить PostgreSQL после редактирования.
# Snippet from pg_hba.conf
# Allow connections from localhost for all users/databases
host all all 127.0.0.1/32 scram-sha-256
# Allow 'app_user' from specific IP range to 'app_db'
host app_db app_user 192.168.1.0/24 scram-sha-256
# Deny all other connections (implicit if no other rules match)MySQL: ограничение IP-адресов с помощью GRANT
В MySQL доступ пользователя ограничивают, указывая узел, с которого ему разрешено подключаться, при создании или изменении пользователя с помощью оператора GRANT.
Ключевое значение имеет синтаксис 'user'@'host':
'localhost': только с самого сервера.'192.168.1.100': только с указанного IP-адреса.'%': с любого узла (используйте с особой осторожностью!).'192.168.1.%': с любого IP-адреса в диапазоне 192.168.1.x.
Всегда используйте максимально ограниченный узел.
CREATE USER 'app_user'@'192.168.1.10' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.10';
FLUSH PRIVILEGES;Рекомендации по обеспечению безопасности
Защита подключений к базам данных — непрерывный процесс. Вот несколько рекомендаций:
- Минимальные привилегии: предоставляйте пользователям и приложениям только необходимые разрешения.
- Надёжные пароли: требуйте сложные пароли и регулярно меняйте их.
- Правила межсетевого экрана: используйте межсетевой экран сервера (UFW/firewalld), чтобы разрешить доступ к портам баз данных (например, 5432 для PostgreSQL и 3306 для MySQL) только доверенным IP-адресам.
- Регулярные проверки: периодически просматривайте журналы базы данных и настройки доступа.
- Своевременное обновление программного обеспечения: оперативно устанавливайте исправления безопасности для сервера базы данных и операционной системы.
Проверьте свои знания
Какие из перечисленных способов действительно повышают безопасность подключений к базам данных?
Итоги: защитите свои данные
В этом уроке мы рассмотрели важные способы защиты подключений к базам данных:
- SSL/TLS: шифрует данные при передаче, обеспечивая конфиденциальность и целостность. Мы узнали, как включить его в PostgreSQL и MySQL, а также как клиенты подключаются безопасно.
- Ограничения по IP-адресам: ограничивают круг тех, кто может подключаться к базе данных, с помощью
pg_hba.confв PostgreSQL и операторовGRANTв MySQL. - Рекомендации: мы также рассмотрели общие советы по безопасности, например использование надёжных паролей и регулярные проверки.
Применяя эти меры, вы значительно снижаете риск несанкционированного доступа и утечек данных.
Часто задаваемые вопросы
Урок «Защищённые подключения к базе данных» бесплатный?
Да — полный текст урока «Защищённые подключения к базе данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Linux Server Deployment & SSH Mastery, подпишись на CoddyKit PRO. Курс Linux Server Deployment & SSH Mastery содержит 4 уроков всего.
Чему я научусь в уроке «Защищённые подключения к базе данных»?
Настройте защищённые подключения к базе данных с использованием SSL/TLS и ограничьте доступ по IP-адресам для повышения безопасности. Ты практикуешь Linux Server Deployment & SSH Mastery с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Linux Server Deployment & SSH Mastery?
Предыдущий опыт не требуется. Linux Server Deployment & SSH Mastery на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Защищённые подключения к базе данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Linux Server Deployment & SSH Mastery?
Да. Каждый урок Linux Server Deployment & SSH Mastery включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Установка PostgreSQL/MySQL
- Пользователи базы данных и управление доступом
- Защищённые подключения к базе данных
- Стратегии резервного копирования и восстановления баз данных