保護一個保存 MySQL 資料庫的簡單 Linux 伺服器?

保護一個保存 MySQL 資料庫的簡單 Linux 伺服器?

這是一個初學者問題,但我瀏覽了該網站上的許多問題,但沒有找到簡單直接的答案:

我正在設定一個運行 Ubuntu 的 Linux 伺服器來儲存 MySQL 資料庫。

該伺服器盡可能安全非常重要,據我所知,我主要擔心的是傳入的 DoS/DDoS 攻擊和對伺服器本身的未經授權的存取。

資料庫伺服器僅在連接埠 3000 上接收來自一個特定 IP (101.432.XX.XX) 的傳入資料。

我想知道:

  1. 阻止我的資料庫伺服器僅從 101.432.XX.XX 發出傳出請求和接收傳入請求的最佳方法是什麼?將關閉所有連接埠。 3000對實現這個目標有幫助嗎?

  2. Linux 環境中是否還有其他可以提升安全性的附加功能?

我已經採取了非常基本的步驟來保護我的 phpmyadmin 入口網站(連結到 MySQL 資料庫),例如限制僅存取我的個人 IP 位址。

要存取資料庫伺服器需要 SSH 金鑰(本身受密碼保護)。

答案1

要限制與 101.432.xx IP 的連接,您可以從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用於管理電子郵件、系統日誌流量等。出口過濾的優點在於,一旦您建立了「正常」出口流量,對異常情況發出警報就變得輕而易舉。一個簡單的入門範例:

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在核心啟動參數中)
  • 在 sshd_config 中使用PubKeyAuthentication yesandPasswordAuthentication no
  • 限制透過pamin登入/etc/security/access.conf
  • 以一種或另一種方式加密所有網路流量**
  • 將系統日誌儲存在遠端系統日誌伺服器上**
  • 定期掃描系統中的惡意軟體/錯誤權限/SUID 檔案等(例如 /var/www 中)

那裡有很多很好的指南,但對於剛接觸這一切的人來說可能會不知所措。這兩個似乎很好地涵蓋了基礎:

https://www.digitalocean.com/community/tutorials/an-introduction-to-secure-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強化希望這些有幫助

相關內容