linux 利用防火牆(firewall)轉發實現外網伺服器透過中間伺服器訪問內網資料庫

php_yt發表於2021-11-23

資料庫一般不建議開啟外網地址,外網伺服器需要一臺內網伺服器作為中間伺服器實現從內網訪問資料庫。

除了防火牆外還有像 rinetd 三方軟體,配置簡單,但要考慮安全性。

總體思路是,中間伺服器開放一個埠如 9501,只對外網伺服器開放,同時開啟 firewall 轉發 9501 請求到雲資料庫的 ipport

第一步:如果雲伺服器未開啟防火牆,開啟後注意新增使用到的埠以免影響線上。相關常用命令附另一篇文章:
雲伺服器埠和防火牆埠配置

第二步:防火牆開放 9501

firewall-cmd --add-port=9501/tcp --permanent

如果對來源 ip 有所限制(此處我未驗證)

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="8.4.2.3" port protocol="tcp" port="9501" accept'

第三步: 將9501的請求轉發至10.5.5.5:3306

firewall-cmd --permanent --add-forward-port=port=9501:proto=tcp:toaddr=10.5.5.5:toport=3306

相關知識點

  1. 每步操作後,都需要 firewall-cmd --reload 才生效
  2. --permanent 是永久
  3. firewall-cmd --list-all 檢視所有規則
    linux 防火牆(firewall)轉發實現外網伺服器透過中間伺服器訪問內網資料庫
  4. 新增和移除是 --add-{key}={value} --remove-{key}={value}
    下方的 {} 是為了說明實際是操作key-value,實際是沒有的。
    例如新增
    --add-{port}={9501/tcp}
    --add-{forward-port}={port=9501:proto=tcp:toaddr=10.5.5.5:toport=3306}
    刪除:
    --remove-{port}={9501/tcp}
    --remove-{forward-port}={port=9501:proto=tcp:toaddr=10. 5.5.5:toport=3306}
    同理,刪除 rich rules 裡的項也是一樣,但注意 value中有空格,需要單引號包圍
    --remove-rich-rule='rule family="ipv4" source address="8.4.2.3" port protocol="tcp" port="9501" accept'
  5. 若不能轉發,可能需要將上圖中的 masquerade 設定為 yes,它的作用我沒有搞懂,僅供參考
    firewall-cmd --permanent --zone=public --add-masquerade
本作品採用《CC 協議》,轉載必須註明作者和本文連結
welcome come back

相關文章