使用SSH通道登入Mysql 提高資料庫的安全性


使用SSH通道登入Mysql 提高資料庫的安全性

有些時候為了方便性而造成資訊安全上的問題

例如我們為想使用本地的資料庫軟體ex. MySQL Workbench等來登入資料庫做管理

當然只使用帳號密碼的方式登入肯定是有機會被入侵的

所以可以考慮使用SSH通道(SSH Tunnel)來對資料庫連線

使用SSH遠程訪問:
考慮使用SSH隧道,這樣只有SSH訪問被允許,然後通過SSH隧道來訪問MySQL服務。
  1. 防火墻的部分只需要開啟ssh的port號即可
$ apt-get install firewalld
$ sudo firewall-cmd --permanent --add-service=ssh
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
  1. 在本地端建立連線
$ ssh -NL 3309:localhost:3306 [email protected]

這個命令使用SSH隧道(tunnel)將本地端口(3309)與SSH伺服器(ssh_server_ip)上的MySQL伺服器的端口(3306)連接起來。

  • N 連線後不執行指令
  • f 連線後背景執行
  • L 是啟用SSH Tunnel
  1. 當建立連線後可以使用mysql對其進行登入測試
$ mysql -h 127.0.0.1 -P 3309 -u root -p

-–

因為我的主機內是使用docker去跑mysql,當我設定完成時

發現不管怎麼試 防火牆看似無效,我一樣可以單純使用帳密登入該資料庫

試了好一陣子發現,dokcer會自己增加防火牆規則所以要做點修改

做法一 (推薦) 20231113 修正

在啟動container時就設定好該服務是否對外開放

若不對外開放則使用127.0.0.1

好處是可以避免做法二關閉docker防火牆後引發的其他問題

ex.

database:
    image: mysql:5.6
    ports:
      - 127.0.0.1:3306:3306
    env_file:
      - .env
    restart: always

Ref:

Publishing docker ports to 127.0.0.1 instead of 0.0.0.0

做法二

關閉docker自動設定的防火牆 在/lib/systemd/system/docker.service內找到ExecStart這行並增加--iptables=false

$ vim /lib/systemd/system/docker.service

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd --iptables=false

$ systemctl daemon-reload
$ systemctl restart docker

Ref:

Linux防火墙firewalld不生效,无法拦截Docker映射端口

[迷你好兔] 利用 SSH Tunnel 保護你的 MySQL 連線 (一)

使用 ssh tunnel 與 MySQL 連線

ssh-port-forward連MySQL方法

mysql