Назад | Перейти на главную страницу

Общие процедуры межсетевого экрана / безопасности для веб-серверов и баз данных

Мой веб-сервер и сервер базы данных разделены. Все, что я сделал для защиты веб-сервера, используется ufw и запрещен для всех, кроме портов 22, 80 и 443. Что еще действительно нужно там делать?

На моем сервере базы данных я разрешаю только порты 22 и порт, который прослушивает база данных (mysql). Это заставило меня задуматься. Обычно я просто разрешаю весь трафик. В случае с базой данных я обычно делал строгих «пользователей» и говорил что-то, что касается программного обеспечения, типа «разрешать доступ к базе данных только user @ internal_ip_address». Но должен ли это быть брандмауэр? Или оба? Похоже, если брандмауэр разрешает трафик только на порт 22 и на 3306 с внутреннего IP-адреса моего веб-сервера, этого должно быть достаточно? Вы делаете и то, и другое просто из "хорошей практики"?

Какие еще общие правила брандмауэра я должен установить для них?

Это намного лучше, чем у многих людей!

На этом этапе следует сосредоточиться на некоторых вещах:

  1. Безопасность приложений. Внедрение SQL, межсайтовый скриптинг, обход каталогов и т. Д. Зависит от того, что вы запускаете, и если это не ваш код, это не то, в чем вы можете быть очень активны, но, вероятно, это ваша самая большая поверхность.
  2. Этот слушатель MySQL: действительно ли он вообще должен быть открыт для Интернета? Поскольку ваши пользователи ограничены определенными адресами, можете ли вы разрешить только их? То, что у вас есть, хорошо, если у вас нет пользователей, которым разрешено входить в систему из %, но было бы лучше заблокировать слушателя; для некоторых атак требуется только отправить созданный пакет в прослушивающий сокет без аутентификации. Можете ли вы осуществлять необходимое управление через свой SSH-доступ? Приводит меня к:
  3. SSH. По возможности используйте аутентификацию с открытым ключом. Если нет, то используйте limit режим в ufw вместо прямого allow чтобы помочь против попыток перебора. Изменение адреса слушателя на порт высокого уровня является стандартной практикой для некоторых, но фактическое значение безопасности этой неясности незначительно.

Короткий ответ:

Да. Использование всех доступных методов защиты - это хорошо, и фраза «Глубокая защита» описывает наличие нескольких перекрывающихся уровней защиты.

Менее короткий ответ:

В общем случае при создании правил брандмауэра необходимо помнить о трех вещах:

  1. Зрительская аудитория
  2. Порты назначения
  3. Протокол

Под этим мы подразумеваем, что для сервера MySQL недостаточно ограничивать только входящие соединения. к порт 3306 / tcp, но мы должны также ограничить это от клиентов MySQL. В идеале этот список клиентов должен быть как можно меньше для каждого порта, однако в действительности иногда он может быть больше. Так что подумайте о каждом из этих портов, SSH и Интернете, и определите, кто фактически необходимо получить доступ к ним.

Если ваше приложение включает собственный механизм ограничения области видимости, используйте их также, см. Короткий ответ выше. Это будет включать ограничения доступа к MySQL в форме user@internal_ip_address упомянутый в вашем вопросе, а также настройку файлов htaccess (или аналогичных) на вашем веб-сервере. Конечно, найдите время, чтобы взвесить преимущества безопасности от использования этих дополнительных шагов по сравнению с накладными расходами на управление их внедрением и обслуживанием.