Linux中,想對特定的端口加密訪問,可使用iptables的ping方式。服務器
訪問被限制的端口,必需先ping發送對應的字節包(字節包大小可自行設置,此爲密鑰)才能訪問成功!
其它端口可自行修改設定ssh
1) iptables-recent 配置
# 設置 iptables 規則,要先登陸服務器就必須先 ping 一個 128 字節的包tcp
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128 -m recent --name sshkey --rsource --set -j ACCEPT iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshkey --rcheck --rsource --seconds 15 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
2) 先發送一個長度爲 128 字節的 ICMP 請求包(100 字節加上 IP 頭、ICMP 頭 28 字節):加密
ping -c 1 -s 100 SERVER_IP # Linux ping -n 1 -l 100 SERVER_IP # Windows
3) 而後在 15 秒內可正常登陸:spa
ssh -p 1234 user@SERVER_IP
## iptables-recent 能夠理解爲一張記錄 IP 地址的列表 '--set' '--remove' # 添加、刪除 IP '--rsource' '--rdest' # 記錄源地址(默認)、目標地址 '--rcheck' '--update' # 檢查地址是否在列表中 '--seconds' # 設置時間條件 '--hitcount' # 設置命中次數 ## rcheck、update 區別 # rcheck 僅僅檢查地址是否在列表中 # update 和 rcheck 同樣,不過會刷新時間戳 ## 放在上面的例子: # 1. 記錄長度爲 128 字節的 ICMP_Request 包的源地址,命名爲 sshkey # 2. 容許來自 sshkey 列表中的地址在 15 秒內登陸 SSH(端口 1234) # 3. 而其餘不在 sshkey 列表中的地址的 SSH 握手將被 DROP 掉