
這是一個初學者問題,但我瀏覽了該網站上的許多問題,但沒有找到簡單直接的答案:
我正在設定一個運行 Ubuntu 的 Linux 伺服器來儲存 MySQL 資料庫。
該伺服器盡可能安全非常重要,據我所知,我主要擔心的是傳入的 DoS/DDoS 攻擊和對伺服器本身的未經授權的存取。
資料庫伺服器僅在連接埠 3000 上接收來自一個特定 IP (101.432.XX.XX) 的傳入資料。
我想知道:
阻止我的資料庫伺服器僅從 101.432.XX.XX 發出傳出請求和接收傳入請求的最佳方法是什麼?將關閉所有連接埠。 3000對實現這個目標有幫助嗎?
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 yes
andPasswordAuthentication no
- 限制透過
pam
in登入/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強化希望這些有幫助