Хотите защитить простой сервер Linux, на котором хранится база данных MySQL?

Хотите защитить простой сервер Linux, на котором хранится база данных MySQL?

Вопрос новичка, но я просмотрел много вопросов на этом сайте и не нашел простого и прямого ответа:

Я настраиваю сервер Linux под управлением Ubuntu для хранения базы данных MySQL.

Важно, чтобы этот сервер был максимально защищен, поскольку, насколько мне известно, больше всего меня должны беспокоить входящие DoS/DDoS-атаки и несанкционированный доступ к самому серверу.

Сервер базы данных получает входящие данные только с одного определенного IP-адреса (101.432.XX.XX) на порт 3000. Я хочу, чтобы этот сервер мог принимать входящие запросы только с этого IP-адреса, а также запретить серверу выполнять какие-либо исходящие запросы.

Я хотел бы знать:

  1. Каков наилучший способ запретить моему серверу базы данных делать исходящие запросы и получать входящие запросы только с 101.432.XX.XX? Поможет ли закрытие всех портов, например 3000, в достижении этого?

  2. Есть ли еще какие-либо дополнения к среде Linux, которые могут повысить безопасность?

Я предпринял самые элементарные шаги для защиты своего портала phpMyAdmin (связанного с базой данных MySQL), например, ограничил доступ только своим личным IP-адресом.

Для доступа к серверу базы данных требуется ключ SSH (который сам по себе защищен паролем).

решение1

Чтобы ограничить соединения с вашим IP-адресом 101.432.xx, вам следует начать с iptables. Базовая настройка брандмауэра для порта 3306 (порт mysql по умолчанию) может выглядеть примерно так:

# allow any localhost interface traffic
iptables -A INPUT -i lo -j ACCEPT
# allow any related traffic to existing connections
iptables -A INPUT -m state --state related,established -j ACCEPT
# only allow certain host to mysql
iptables -A INPUT -p tcp --dport 3306 -s 101.232.155.155 -j ACCEPT
# drop all traffic by default
iptables -P INPUT DROP
# oh, add your ssh source address to allow remote connections
iptables -I INPUT 3 -p tcp --dport 22 -s 203.203.203.203 -j ACCEPT

Если вы обеспокоены ограничением исходящего (выходного) трафика, то вы должны использовать правило в цепочке OUTPUT; однако это становится сложным. Фильтрация исходящего трафика включает правило для каждой службы, которую ваш сервер должен использовать для связи с внешним миром. , DNS, NTP( HTTP/HTTPSдля обновлений), SMTPдля административной электронной почты, трафика syslog и т. д. и т. п. Прелесть фильтрации исходящего трафика в том, что как только вы установили «нормальный» исходящий трафик, оповещение об аномалиях становится легкой победой. Простой пример для начала:

iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state related,established -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp -d 111.222.33.44 --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -P OUTPUT DROP

Вы можете захотеть отключить, 80,443пока вы действительно не выполните обновления на сервере. В противном случае вредоносное ПО просто выйдет через один из этих портов, и вы не узнаете об этом. Использование «разрешенных» IP-адресов назначения для выхода — действительно лучший способ сделать это (как в строке --dport 25выше).

В целом, укрепление сервера — гораздо более сложный процесс. Вы уже на верном пути, думая о том, как ограничить соединения только тем, что необходимо.

Также примите во внимание следующее:

  • удалить все дополнительное программное обеспечение, не необходимое для работы сервера
  • ограничить запущенные службы ( netstat -topnaveluдля исследования)
  • будьте в курсе всех текущих патчей
  • мониторинг аномалий ( iptables -A INPUT -j LOG, fail2ban и т.д.)
  • удалить ipv6, если не требуется ( ipv6.disable=1в аргументе загрузки ядра)
  • используйте PubKeyAuthentication yesи PasswordAuthentication noв sshd_config
  • ограничить входы через pamв/etc/security/access.conf
  • шифровать весь сетевой трафик тем или иным способом**
  • хранить системные журналы на удаленном сервере syslog**
  • регулярно сканировать систему на наличие вредоносных программ/плохих разрешений/SUID-файлов и т. д. (например, в /var/www)

Есть много хороших руководств, но для новичков это может оказаться непосильной задачей. Эти два руководства, похоже, хорошо охватывают основы:

https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps

https://www.rootusers.com/23-hardening-tips-to-secure-your-linux-server/

** примечание: рассмотрите возможность пропускания трафика MySQL черезСтаннел.

решение2

Если вы находитесь за NAT, в конфигурации Mysql вы можете изменить свой адрес привязки.

#Replace X's with actual IP address
bind-address=<internal-ip>
port=3000

Это заставит MySql прослушивать только этот адрес и порт.

Затем я бы добавил правило NAT назначения для преобразования адреса 101.432.XX.XX:3000 во внутренний IP.

Наконец, добавьте политику источника в вашем брандмауэре, чтобы отбрасывать все пакеты, приходящие с внутреннего IP. У меня похожая настройка с сервером, который я вижу.

Вот несколько ссылок на другие ресурсы по укреплению безопасности серверов Ubuntu.

http://bodhizazen.net/Tutorials/SSH_security- Укрепление SSH https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps- Усиление защиты MySQL Надеюсь, это поможет

Связанный контент