有些時候為了方便性而造成資訊安全上的問題
例如我們為想使用本地的資料庫軟體ex. MySQL Workbench等來登入資料庫做管理
當然只使用帳號密碼的方式登入肯定是有機會被入侵的
所以可以考慮使用SSH通道(SSH Tunnel)來對資料庫連線
使用SSH遠程訪問:
考慮使用SSH隧道,這樣只有SSH訪問被允許,然後通過SSH隧道來訪問MySQL服務。
- 防火墻的部分只需要開啟ssh的port號即可
$ apt-get install firewalld
$ sudo firewall-cmd --permanent --add-service=ssh
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
- 在本地端建立連線
$ ssh -NL 3309:localhost:3306 [email protected]
這個命令使用SSH隧道(tunnel)將本地端口(3309)與SSH伺服器(ssh_server_ip
)上的MySQL伺服器的端口(3306)連接起來。
- N 連線後不執行指令
- f 連線後背景執行
- L 是啟用SSH Tunnel
- 當建立連線後可以使用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 連線 (一)