使用ping鑰匙臨時開啟SSH:22端口,實現遠程安全SSH登錄管理就這么簡單


設置防火牆策略時,關於SSH:22訪問權限,我們常常會設置服務器只接受某個固定IP(如公司IP)訪問,但是當我們出差或在家情況需要登錄服務器怎么辦呢?

常用兩種解決方案:1.通過VPN操作登錄主機; 2.使用ping鑰匙臨時開啟遠程主機SSH:22端口;

我們今天就討論第2種方案,闡述如何通過ping鑰匙來臨時打開SSH:22的訪問權限

原理: recent 模塊可以記錄最近訪問者IP,常利用此功能做DROP策略應對syn-flood及ddos攻擊。但在本例中我們反其道,利用recent模塊做ACCEPT策略,就是創建一個sshKeyList列表,當此列表內的IP地址達到命中次數后,讓服務器放行此IP地址對SSH:22端口的訪問,我們要做的就是想辦法將我們當前客戶端這個動態IP記錄進去,怎么記錄進去呢?利用ping命令就可以,ping命令可以把源IP帶給遠程服務器啊!ping命令就好比一把臨時打開遠程服務器SSH:22的鑰匙。

方案: 是鑰匙就得有鑰匙齒,要有一定的安全級別,不能讓人那么容易猜出規律,怎么造鑰匙齒呢?length模塊可以匹配報文總長度,所以第1個鑰匙齒就是ping包大小必須是我們自定義的,第2個齒就是ping的次數也是我們自定義的,第3個齒就是要在指定的時間內登錄SSH:22。
小結一下,服務器只有在“指定時間內收到固定大小的ping包+ping次數”才臨時為此源IP放行SSH:22端口訪問權。


實施: 任一客戶端向服務器發送Data大小為1050字節的ping包,發5次,服務器就自動為此客戶端開啟SSH:22端口訪問權限(30秒內有效)

注意:ICMP報文結構: IP頭部(20Bytes) + ICMP頭部(8Bytes) + 數據部分Data

計算:若按此方案服務器端實際接收的ICMP數據包總大小為 20+8+1050=1078Bytes

規則: 共5條規則

# 規則1 只接受Data為1078字節的ping包,並將源IP記錄到自定義名為sshKeyList的列表中
# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 1078 -m recent --name sshKeyList --set -j ACCEPT

# 規則2 若30秒內發送次數達到6次(及更高),當發起SSH:22新連接請求時拒絕
# iptables -A INPUT -p tcp -m tcp --dport 22 --syn -m recent --name sshKeyList --rcheck --seconds 30 --hitcount 6 -j DROP

# 規則3 若30秒內發送次數達到5次,當發起SSH:22新連接請求時放行
# iptables -A INPUT -p tcp -m tcp --dport 22 --syn -m recent --name sshKeyList --rcheck --seconds 30 --hitcount 5 -j ACCEPT

# 規則4 對於已建立的連接放行
# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

# 規則5 老規矩:最后的拒絕
# iptables -A INPUT -j DROP

 

測試效果

Windows下默認ping次數為4次,默認ping包大小為32字節

C:\Users\Administrator>ping 192.168.137.66 -l 1050 -n 5

正在 Ping 192.168.137.66 具有 1050 字節的數據:
來自 192.168.137.66 的回復: 字節=1050 時間<1ms TTL=64
來自 192.168.137.66 的回復: 字節=1050 時間<1ms TTL=64
來自 192.168.137.66 的回復: 字節=1050 時間<1ms TTL=64
來自 192.168.137.66 的回復: 字節=1050 時間<1ms TTL=64
來自 192.168.137.66 的回復: 字節=1050 時間<1ms TTL=64


Linux下默認ping次數為無限次,默認ping包大小為56字節

[root@martin ~]# ping 192.168.137.66 -s 1050 -c 5
PING 192.168.137.66 (192.168.137.66) 1050(1078) bytes of data.
1058 bytes from 192.168.137.66: icmp_seq=1 ttl=64 time=0.711 ms
1058 bytes from 192.168.137.66: icmp_seq=2 ttl=64 time=1.00 ms
1058 bytes from 192.168.137.66: icmp_seq=3 ttl=64 time=0.629 ms
1058 bytes from 192.168.137.66: icmp_seq=4 ttl=64 time=1.32 ms
1058 bytes from 192.168.137.66: icmp_seq=5 ttl=64 time=1.02 ms


然后呢,就可以登錄SSH了(30秒內有效,動作快點),由於有"--state ESTABLISHED -j ACCEPT"護駕,所以也不用擔心被踢,OK,實現遠程安全SSH登錄管理就這么簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM