規劃
顯示jumpserver的簡單功能,大致的網絡拓撲圖如下
功能規劃 & 拓撲結構
JumpServer(堡壘機)主要功能:
- 對訪問目標服務器進行統一入口控制(例如 nginx、mysql、redis)。
- 使用
iptables
做 NAT 轉發,控制從外部進入內部服務器的流量。 - 使用
/etc/hosts.allow
和/etc/hosts.deny
做基于主機的簡單訪問控制。 - 提供腳本化的登錄菜單,方便用戶連接目標服務。
網絡拓撲圖
正式的圖結構如下:
┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ NAT客戶端 │ │ NAT路由器 │ │ 目標內網服務器們 │
│ 192.168.100.x │ <───? │ 192.168.100.202 │────?│ 192.168.200.201等 │
└──────────────┘ │ 192.168.200.250 │ └──────────────┘└─────────────┘
主機訪問控制(hosts.allow / deny)
在客戶端啟用訪問控制(防止非法 IP 直接訪問內網服務器):
# /etc/hosts.allow
sshd:192.168.200.200
# 僅允許堡壘機 IP 登錄 sshd 服務# /etc/hosts.deny
sshd:ALL
# 拒絕所有其他 IP
這樣就實現了“只有堡壘機能登錄這些服務器”。
加固堡壘機ssh
vim /etc/ssh/sshd_config
PermitRootLogin no
Port 6677
NAT 轉發規則
配置在 nat-router 上:
#開啟路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward
#SNAT
# 源地址偽裝,使內網服務器返回包能正常出去
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens32 -j MASQUERADE
#iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens32 -j SNAT --to-source 192.168.100.202# 將外網訪問堡壘機端口 2233 的請求,轉發到內網堡壘機的 6677 端口
iptables -t nat -A PREROUTING -i ens32 -d 192.168.100.202 -p tcp --dport 2233 -j DNAT --to-destination 192.168.200.200:6677[root@nat-router ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 192.168.100.202 tcp dpt:2233 to:192.168.200.200:6677Chain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.200.0/24 0.0.0.0/0
通過防火墻服務器的DNAT功能連接jumpserver服務器
堡壘機腳本(模擬登陸菜單)
#!/bin/bashwhile true; doecho "========= 堡壘機登錄系統 ========="echo "1. 連接 Redis 服務器"echo "2. 連接 MySQL 服務器"echo "3. 連接 nginx 服務器"echo "4. 退出"echo "================================="read -p "請輸入你的選擇 [1-4]:" numcase $num in1)ssh root@192.168.200.201 -p 22;;2)ssh root@192.168.200.202 -p 22;;3)ssh root@192.168.200.203 -p 22;;4)echo "已退出。"exit 0;;*)echo "無效選擇,請重新輸入!";;esac
done
測試結果