iptables的recent模塊

看到文章中用recent模塊控制對主機的訪問。html

配置方法以下:linux

iptables -A INPUT -p icmp --icmp- type 8 -m length --length 78 -j LOG --log-prefix "SSHOPEN: "
#記錄日誌,前綴SSHOPEN:
iptables -A INPUT -p icmp --icmp- type 8 -m length --length 78 -m recent -- set --name sshopen --rsource -j ACCEPT
#指定數據包78字節,包含IP頭部20字節,ICMP頭部8字節。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping -s 50 host #Linux下解鎖
ping -l 50 host #Windows下解鎖
 
在配置的過程當中我按照這樣配置沒法ssh到指定主機。
仔細研究了下,須要一個前提即:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
且該條規則須要放在上面第三條以前。
 
整理後的配置規則:
  1. iptables -F
  2. iptables -X
  3. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  4. iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix 'SSH_OPEN_KEY'
  5. iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --name openssh --set --rsource -j ACCEPT
  6. iptables -A INPUT -p tcp --dport 22 --syn -m state --name openssh --rcheck --seconds 60 --rsource -j ACCEPT
  7. iptables -P INPUT DROP
  8. 在客戶側,若是須要ssh到主機,須要先ping -l 50 ip(windows), ping -s 50 ip (linux),並在一分鐘以內ssh到主機,這樣在/proc/net/xt_recent/目錄下生成openssh文件
    文件內容以下:
    src=112.1x3.2x7.24 ttl: 53 last_seen: 42963x6778 oldest_pkt: 1 4296376778, 4295806644, 4295806895, 4295807146, 4295826619, 4295826870, 4295827122, 4295827372, 4295833120, 4295833369, 4295834525, 4295834777, 4295872016, 4295872267, 4295872519, 4295872769, 4295889154, 4295889406, 4295889658, 4295889910

解釋:windows

1,2清空原有的iptables規則bash

3,代表已經創建成功的鏈接和與主機發送出去的包相關的數據包都接受,若是沒有這一步,後面的tcp鏈接沒法創建起來ssh

4,出現長度爲78字節icmp迴響包在/var/log/syslog生成log,log以SSH_OPEN_KEY開頭tcp

5,出現長度爲78字節icmp迴響包,將源地址信息記錄在openssh文件中,並接受學習

6,對於openssh文件中的源地址60s之內發送的ssh鏈接SYN請求予以接受調試

7,將INPUT鏈的默認策略設置爲drop
調試過程:沒有設置3,則沒法創建ssh鏈接
在沒有3的狀況下,設置6若是不加--syn,則能夠ssh鏈接一下子,過一下子又自動斷線,除非ping一下目的地址,原理是:ping目的地址,則會更新openssh的時間,這樣ssh鏈接還在60s以內,因此能夠通訊,過一下子,60s超時,則就會斷開ssh鏈接。若是加了--syn,只能進行開始的syn,沒法正常鏈接(具體過程不熟悉,有待進一步學習)。
 
給一個參考:
相關文章
相關標籤/搜索