我已將伺服器的 sshd 配置為偵聽非標準連接埠 42。
然而,在工作中,我位於防火牆/代理後面,只允許到連接埠 21、22、80 和 443 的傳出連線。我不想將 sshd 返回到連接埠 22。
想法是這樣的:在我的伺服器上,本地將連接埠 22 轉送到連接埠 42如果來源IP與我工作網路的外部IP相符。為了清楚起見,我們假設我的伺服器的 IP 是 169.1.1.1(在 eth1 上),我的工作外部 IP 是 169.250.250.250。對於與 169.250.250.250 不同的所有 IP,我的伺服器應回應預期的“連接被拒絕”,就像對非偵聽連接埠所做的那樣。
我對 iptables 很陌生。我簡要瀏覽了冗長的 iptables 手冊和這些相關/相關問題:
然而,這些問題涉及更複雜的多主機場景,我不清楚應該使用哪些表和鏈進行本地端口轉發,以及是否應該有 2 條規則(針對“問題”和“答案”數據包) ),或者只有1個針對「問題」資料包的規則。
到目前為止,我僅透過 sysctl 啟用了轉送。我明天將開始測試解決方案,並將感謝用於實現我的簡單場景的指標或特定案例的範例。
下面的解決方案草案正確嗎?
iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp
--destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED
-j ACCEPT
我應該使用mangle
表格而不是嗎filter
?和/或FORWARD
鏈代替INPUT
?
答案1
若要轉發/重新導向內容,您必須編輯 NAT 表。
這樣的規則可能最接近您的需求。
/sbin/iptables --table nat --append PREROUTING --protocol tcp \
--source 169.250.250.250 --dport 22 \
--jump REDIRECT --to-ports 42
將 SSH 保留在標準連接埠上並適當保護它會更容易,也可能更好。使用備用連接埠只會讓有動機的攻擊者減慢幾秒鐘的速度。設定入侵防禦系統(例如 denyhosts/fail2ban)並停用基於密碼的身份驗證。或考慮對傳入 ssh 連線進行速率限制。
看:
答案2
我會使用 Shorewall 來管理 ip 表。它設置了一個不錯的基礎防火牆,並且做你想做的事情很簡單。將規則新增至 /etc/shorewall/rules,例如:
DNAT 網路:169.250.250.250 位置:169.250.250.250 tcp 42 22
和其他人一樣,我不確定為什麼你在另一個連接埠上運行 sshd。如果這是一個互聯網端口,您可能需要查看端口碰撞以保持端口關閉,除非您先訪問另一個端口。 Shorewall 可以簡單地處理這個問題。