Iptables構建ssh安全一例
這兩天對iptables這塊做溫習,受其他網友的啟發,發現recent這個模塊在線上的環境做ssh防護還是挺受用的。
recent的使用實際也很簡單,咱們先來看看其各個常用的參數
--name #設定列表名稱,默認DEFAULT。
--rsource #源地址,此為默認。
--rdest #目的地址
--seconds #指定時間內
--hitcount #命中次數
--set #將地址添加進列表,並更新信息,包含地址加入的時間戳。
--rcheck #檢查地址是否在列表,以第一個匹配開始計算時間。
--update #和rcheck類似,以最後一個匹配計算時間。
--remove #在列表裏刪除相應地址,後跟列表名稱及地址。
ok,廢話不多說,咱們直接以實例來看下相應的效果。
一.圖解
1.服務器端進行recent模塊規則定義
(1). 指定一個基於recent的規則。
iptables -t filter -A INPUT -p icmp --icmp-type 8 -m length --length 128 -m recent --set --name SSH_ALLOW -j ACCEPT
###制定一個規則,當一個請求是基於icmp協議且其長度是128的請求時會將“source-ip”放入到 ###--name所指定的規則容器中。
(2). 將ssh進行recent規則認證
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --name SSH_ALLOW --seconds 15 -j REJECT
### 使用--rcheck對ssh的新連接進行認證,即會將發起請求的source-ip與--name容器中的Ip進行比 ###對,如果存在返回True,則在--seconds所定義的時間內(單位秒)允許ssh登陸連接
2.在客戶端未實現recent認證的情況下,直接telnet ssh端口顯示失敗;隨後借助ping進行recent模塊的icmp認證
註:本處ping指定-l(長度)為100 是由於包頭中 ip頭部占用了20個字節,而icmp包頭占用了8個字節。
3.再次telnet ssh端口,已經可以正常接入
二。優點
(1).隱藏ssh端口,只有當滿足特定條件,並且在一定時間內才允許ssh操作
(2).不需要限定特定的source-ip地址。
Iptables構建ssh安全一例