2012年1月30日 星期一

Qos + CBQ

單一主機的上傳,即 Client的下載(如瀏覽網頁)

[ client ] <---------- ech0 -[ server ]
 
[1.] 下載 CBQ的 script,cbq.init-v0.7.3
         https://sourceforge.net/projects/cbqinit

[2.] cbq.init 的初始預設作業
         mkdir /etc/sysconfig/cbq
         chmod u+x cbq.init
         cp cbq.init /sbin
 
[3.] cd /etc/sysconfig/cbq
         vi cbq-0002.eth0-80
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
RULE=*:80,
BOUNDED=yes
ISOLATED=no
[4.] 顯示 tc格式結果
         cbq.init compile           

      啟動
         cbq.init start
 
[5.] 從 Client端測試下載 web檔,限制在10KByte/s下載
         wget http://server/xxxfiles

NAT環境,以PORT number設置內部網路的上下載
模擬頻寬 512Kbps/512Kbps
attachments/month_200611/1163513806.png

[1.] 從 eth2出去的,目的為 25、20 port,分配各為 256Kbit、256Kbit,這對內部來說是上傳
         而從 eth1出去的,來源為110、80、20 port,分配各為 128Kbit、256Kbit、128Kbit,這對內部來看是下載
[2.] 下載的設定
         vi cbq-0002.eth1-110
DEVICE=eth1,100Mbit,10Mbit
RATE=128Kbit
WEIGHT=12Kbit
PRIO=5
RULE=:110,
BOUNDED=yes
ISOLATED=yes
         vi cbq-0003.eth1-80
DEVICE=eth1
RATE=256Kbit
WEIGHT=25Kbit
PRIO=7
RULE=:80,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
         vi cbq-0004.eth1-20
DEVICE=eth1
RATE=128Kbit
WEIGHT=12Kbit
PRIO=8
RULE=:20,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
[3.] 上傳設定
         vi cbq-0102.eth2-25
DEVICE=eth2,100Mbit,10Mbit
RATE=256Kbit
WEIGHT=25Kbit
PRIO=6
RULE=:25
BOUNDED=yes
ISOLATED=yes
         vi cbq-0103.eth2-20
DEVICE=eth2
RATE=256Kbit
WEIGHT=25Kbit
PRIO=8
RULE=:20
BOUNDED=yes
ISOLATED=yes
PARENT=0102
附註1:
cbq作用在流出的封包上
依整個linux box來看,從eht2出去是限制到上傳,從eth1出去限制到下傳

附註2:
cbq設定檔中的 RULE參數,如果”沒”加逗點的話為目的,”有”加逗點為來源

參數說明:
DEVICE=,,
DEVICE=eth0,10Mbit,1Mbit               # ifname = 網卡名稱
                                                         # bandwidth = 網卡上限頻寬
                                                         # weight = bandwidth / 10

RATE=2Mbit
WEIGHT=200Kbit                              # ADSL 2Mbits/256Kbits,即下載200kbytes,上傳25kbytes

PRIO=5                                             # 優先權 ,1到8,預設為5

PARENT=0002                                   # 上層,預設沒設

LEAF=none | tbf | sfq                        # 預設為tbf

BOUNDED=yes | no                           # 設成 yes,將在超出限制的情況下不允許從它的上層借入頻寬,
                                                          # 當設成 no,為允許時,LEAF必設 none 或 sfq
                                                          # 預設為 yes

ISOLATED=yes | no                            # 設成 yes,將不會借出沒用到的頻寬給下層使用
                                                           # 預設為 no

RULE=10.1.1.0/24:80                         # 目的為10.1.1.0的網段,且port為80
RULE=10.2.2.5                                    # 目的為10.2.2.5的主機
RULE=10.2.2.5:20/0xfffe                     # 目的為10.2.2.5的主機,且port為20和21
RULE=:25,10.2.2.128/26:5000            # 來源port為25,到目的網段為10.2.2.128,且port為5000
RULE=10.5.5.5:80,                               # 來源主機為10.5.5.5,且port 為80
      附註: RULE參數可以多個設定

NAT環境(延續上面的環境),FTP passive mode,有些 FTP並非全用 port number 20來傳輸資料,大部份會動用到 port numbers 1024以上的 port
 
關於 ftp的 passive mode,需搭配 iptables的 MARK才能有效限制到流量
iptables -t mangle -A POSTROUTING -o eth2 -p tcp --dport 1024:65535 -j MARK --set-mark 30
iptables -t mangle -A POSTROUTING -o eth1 -p tcp --sport 1024:65535 -j MARK --set-mark 20
 
   vi cbq-0103.eth2-20
DEVICE=eth2
RATE=256Kbit
WEIGHT=25Kbit
PRIO=8
RULE=:20
BOUNDED=yes
ISOLATED=yes
PARENT=0102
MARK=30         # <-- 加入MARK這行
   vi cbq-0004.eth1-20
DEVICE=eth1
RATE=128Kbit
WEIGHT=12Kbit
PRIO=8
RULE=:20,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
MARK=20         # <-- 加入MARK這行
   附註: 為了限制 ftp的 passive mode,但也限制了 1024以上所有的 port
 

NAT環境
限制內部單一主機
attachments/month_200611/1163513824.png

   vi cbq-0002.eth2-host
DEVICE=eth2,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.168.1.1,
BOUNDED=yes
ISOLATED=yes
   vi cbq-0003.eth1-host
DEVICE=eth1,100Mbit,10Mbit
RATE=256Kbit
WEIGHT=25Kbit
PRIO=6
RULE=192.168.1.1
BOUNDED=yes
ISOLATED=yes
引用:
但此時上傳卻不受限制,因為封包進入 QOS EGRESS之前,
來源 IP已變成 Linux Box對外的 IP,所以 192.168.1.1主機是不受上傳限制,
所以要配合 iptables的 MARK
iptables -t mangle -A PREROUTING -i eth1 -s 192.168.1.1 -j MARK --set-mark 40
   再修改 cbq-0002.eth2檔
DEVICE=eth2,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
MARK=40         # <-- RULE拿掉,加入MARK
或者搭配方式
iptables -t mangle -A FORWARD -o eth2 -s 192.168.1.1 -j MARK --set-mark 40
或者
iptables -t mangle -A POSTROUTING -o eth2 -s 192.168.1.1 -j MARk --set-mark 40

NAT環境
分別限制入部單一主機與整個內部網段
 
全 Subnet 限制在 512k/64k,而 10.1.1.1主機則 100Mbps/10Mbit
                                                                           +---------[ 10.1.1.1 ]
                                 +-------------------+              |
[ internet ] -----ppp0 |                         | eth0-----+
                                 +-------------------+              |
                                                                           +-----------[ 10.1.1.0/24 ]
 
iptables設定
iptables -t mangle -A POSTROUTING          -s 10.1.1.1      -j MARK --set-mark 30
iptables -t mangle -A PREROUTING -i eth0 -s 10.1.1.0/24 -j MARK --set-mark 50
 
vi cbq-0002.ppp0
DEVICE=ppp0,100Mbit,10Mbit
RATE=100Mbit
WEIGHT=10Mbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
MARK=30
vi cbq-0003.eth0
DEVICE=eth0,100Mbit,10Mbit
RATE=100Mbit
WEIGHT=10Mbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
RULE=10.1.1.1
vi cbq-0007.ppp0
DEVICE=ppp0
RATE=64Kbit
WEIGHT=6Kbit
PRIO=7
BOUNDED=yes
ISOLATED=yes
parent=0002
MARK=50
vi  cbq-0008.eth0
DEVICE=eth0
RATE=512Kbit
WEIGHT=50Kbit
PRIO=7
BOUNDED=yes
ISOLATED=yes
parent=0003
RULE=10.1.1.0/24
--- 我是分隔線 ---
NAT環境
iptables的 MARK另設定方式
                                  +-----------+
[ internet ]-------eth1-|               |-eth0---------[ subnet ]
                                  +-----------+
 
限制下載
iptables -t mangle -A FORWARD -o eth0 -d 192.168.1.0/24 -j MARK --set-mark 10
 
vi cbq-0002.download
DEVICE=eth0,100Mbit,10Mbit
RATE=200Kbit
WEIGHT=20Kbit
PRIO=5
MARK=10
限制上傳
iptables -t mangle -A FORWARD -o eth1 -s 192.168.1.0/24 -j MARK --set-mark 20
 
vi cbq-0003.upload
DEVICE=eth1,100Mbit,10Mbit
RATE=50Kbit
WEIGHT=5Kbit
PRIO=5
MARK=20
--- 我是分隔線 ---

Bridge mode環境:
Br0        10.10.1.100/255.0.0.0
Eth0對外 0.0.0.0
Eth1對內 0.0.0.0
10.10.1.100 為 bridge server
10.10.1.78 透過 bridge server連外
以下為 bridge mode server的 ifconfig
br0   Link encap:Ethernet HWaddr 00:E0:81:50:36:3C
         inet addr:10.10.1.100 Bcast:10.255.255.255 Mask:255.0.0.0

eth0  Link encap:Ethernet HWaddr 00:E0:81:50:36:3D
         inet6 addr: fe80::2e0:81ff:fe50:363d/64 Scope:Link

eth1  Link encap:Ethernet HWaddr 00:E0:81:50:36:3C
         inet6 addr: fe80::2e0:81ff:fe50:363c/64 Scope:Link
情況一
外部 pc下載內部 pc 10.10.1.78上的 web檔案,即內部 pc上傳,經由 Bridge
作法一
vi cbq-0002.eth0
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
MARK=50
BOUNDED=yes
ISOLATED=yes
搭配MARK
iptables -t mangle -I POSTROUTING -o br0 -s 10.10.1.78 -j MARK --set-mark 50
 
注意 : 出去的介面是br0,才能對內部 PC上傳有限制

作法二
vi cbq-0002.eth0
# 介面需設eth0,br0無效
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
RULE=10.10.1.78,
# 或者RULE=:80,
情況二,內部 pc 10.10.1.78下載外部 pc上的web檔案,即內部 pc下傳,經由 Bridge
作法一
vi cbq-0002.eth1
DEVICE=eth1,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
RULE=10.10.1.78
# 或者可設為
#RULE=:80,
作法二
iptables -t mangle -I POSTROUTING -o br0 -d 10.10.1.78 -j MARK --set-mark 50

vi cbq-0002.eth1
DEVICE=eth1,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
MARK=50
BOUNDED=yes
ISOLATED=yes


頻寬管理/限制 QOS + HTB 指令

HOST + upload

50kbyte/s for upload
25kbyte/s for http -> class 10:100
15kbyte/s for ftp -> class 10:200
10kbyte/s for others -> class 10:20

rate = 保證頻寬
ceil = 最大頻寬
attachments/month_200611/1163600502.png


# 刪除現有的規則
tc qdisc del dev eth0 root

# 定義頂層root規則
tc qdisc add dev eth0 root handle 10: htb default 20

# 定義class 10:1,這裡的50kbps即為50KByte/s
tc class add dev eth0 parent 10: classid 10:1 htb rate 50kbps ceil 50kbps

# 定義class 10:10
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 40kbps ceil 40kbps

# 定義class 10:100
tc class add dev eth0 parent 10:10 classid 10:100 htb rate 25kbps ceil 40kbps
tc qdisc add dev eth0 parent 10:100 handle 101: pfifo
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 100 fw classid 10:100

# 定義class 10:200
tc class add dev eth0 parent 10:10 classid 10:200 htb rate 15kbps ceil 40kbps
tc qdisc add dev eth0 parent 10:200 handle 102: pfifo
tc filter add dev eth0 paent 10: protocol ip prio 100 handle 200 fw classid 10:200

# 定義class 10:20
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 10kbps ceil 50kbps
tc qdisc add dev eth0 parent 10:20 handle 103: pfifo

#
iptables -t mangle -A OUTPUT -p tcp --sport 80 -j MARK --set-mark 100
iptables -t mangle -A OUTPUT -m owner --uid-owner ftp -j MARK --set-mark 200



NAT + download

200KByte/s for download

class 10:10 prio 0 for 優先使用者或伺服器
class 10:20 prio 1 for 一般 ''
class 10:30 prio 2 for 濫用 ''

attachments/month_200611/1163600506.png


# 刪除現有的規則
tc qdisc del dev eth0 root

# root
tc qdisc add dev eth0 root handle 10: htb default 20

# root 10:1 class
tc class add dev eth0 parent 10: classid 10:1 htb rate 200kbps ceil 200kbps

# 10:10 class
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 100kbps ceil 200kbps prio 0
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
# 將 MARK為 10的歸類於 class 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10

# 10:20 class
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 70kbps ceil 150kbps prio 1
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo

# 10:30 class
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 30kbps ceil 100kbps prio 2
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
# 將 MARK為 30的歸類於 class 10:30
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30

iptables -t mangle -A POSTROUTING -d 192.168.0.135 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.0.32 -j MARK --set-mark 30



NAT + upload

25KByte/s for upload

class 20:100 for HTTP
class 20:200 for 高優先權
class 20:20  for 一般
class 20:30  for 濫用

attachments/month_200611/1163600509.png


#
tc qdisc del dev ppp0 root

#
tc qdisc add dev ppp0 root handle 20: htb default 20
tc class add dev ppp0 parent 20: classid 20:1 htb rate 25kbps ceil 25kbps
tc class add dev ppp0 parent 20:1 classid 20:10 htb rate 15kbps ceil 25kbps
tc class add dev ppp0 parent 20:1 classid 20:20 htb rate 7kbps ceil 20kbps prio 2
tc class add dev ppp0 parent 20:1 classid 20:30 htb rate 3kbps ceil 10kbps prio 3
tc class add dev ppp0 parent 20:10 classid 20:100 htb rate 8kbps ceil 25kbps prio 0
tc class add dev ppp0 parent 20:10 classid 20:200 htb rate 7kbps ceil 25kbps prio 1

#
tc qdisc add dev ppp0 parent 20:20 handle 101: pfifo
tc qdisc add dev ppp0 parent 20:30 handle 102: pfifo
tc qdisc add dev ppp0 parent 20:100 handle 201: pfifo
tc qdisc add dev ppp0 parent 20:200 handle 202: pfifo

#
tc filter add dev ppp0 parent 20: protocol ip prio 100 handle 20 fw classid 20:20
tc filter add dev ppp0 parent 20: protocol ip prio 100 handle 30 fw classid 20:30
tc filter add dev ppp0 parent 20: protocol ip prio 100 handle 100 fw classid 20:100
tc filter add dev ppp0 parent 20: protocol ip prio 100 handle 200 fw classid 20:200

#
iptables -t mangle -A OUTPUT -p tcp --sport 80 -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.135 -j MARK --set-mark 200
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.32 -j MARK --set-mark 30


find 指令 + mtime 找出時間異動的檔案

-mtime : 指定時間曾被異動過的檔案,意思是檔案內容被更改過
-ctime : 指定時間曾被更改過的檔案,意思是檔案權限被更改過
-atime : 指定時間曾被存取過的檔案,意思是檔案被讀取過

1。時間是以 24 小時為一個單位,而不是以天的

2。2009/01/10 12:00 時間開始找一天內的,會列出 2009/01/09 12:00 ~ 2009/01/10 12:00 時間內的檔案

找出 3 天"以前"被異動過的檔案 (前第三天以前 → 2009/01/07 12:00 以前的檔案) (> 72 小時)
find /var/log/ -mtime +3 -type f -print
找出 3 天內被異動過的檔案 (2009/01/07 12:00 ~ 2009/01/10 12:00 內的檔案) (0 ~ 72 小時內)
find /var/log/ -mtime -3 -type f -print
找出前第 3 天被異動過的檔案 (2009/01/06 12:00 ~ 2009/01/7 12:00 內的檔案) (72 ~ 96 小時)
find /var/log/ -mtime 3 -type f -print
找出第 3 天被異動過的檔案 (也可以這樣寫)
find /var/log/ -mtime +2 -mtime -4 -type f -print

Vim Cheat Sheet for Programmers

利用 nc 指令建立後門

只要一行簡單的指令即可達成
下載
測試環境: windows XP, Win 7
打開命令提示字元,輸入
nc -e cmd.exe -l -p 12345
再從別台 clinet 執行 telnet server 12345 就可以下 DOS 指令了


更多内容 http://ssorc.tw/rewrite.php/category-34-3.html#ixzz1kvJSACVR

iptables 模組 recent 防字典(Brute force)與port scan等攻擊

recent 是 iptables 的一個模組,可以用來作一段時間阻擋某些連線,

recent 所搭配的參數有

--name XXX  # 記錄資訊的檔案名稱,它會存在 /proc/net/ipt_recent/XXX,以下簡稱資料庫

--set # 指定符合條件的,加入或更新於XXX內

--rcheck #與資料庫比對,但不會修改更新

--update #與資料庫比對,會作修改更新

--remove # 與資料庫比對,存在就刪,不存在則否

--seconds X # 比對小於這個秒數的記錄才作動作,看是要更新還是刪除

--hitcount X # 重覆發生幾次連線


來個範例:

第一種
iptables -A INPUT -p icmp --icmp-type 8 -m recent --name ICMP_check --rcheck --seconds 60 --hitcount 6 -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name ICMP_check
第二種
iptables -A INPUT -p icmp --icmp-type 8 -m recent --name ICMP_check --update --seconds 60 --hitcount 6 -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name ICMP_check
這兩個的差別在於 --update 與 --rcheck,這先要提到 --seconds 的設定是條件觸發生時會去檢查最近60秒內的記錄,只要符合的話(多於6個ping),第七個ping會被drop掉,

而 --update 會一直更新記錄,--rcheck不會一直更新時間只會檢查而已

所以

第一種ping的結果
PING 10.10.10.168 (10.10.10.168) 56(84) bytes of data.
64 bytes from 10.10.10.168: icmp_seq=0 ttl=64 time=0.318 ms
64 bytes from 10.10.10.168: icmp_seq=1 ttl=64 time=0.293 ms
64 bytes from 10.10.10.168: icmp_seq=2 ttl=64 time=0.294 ms
64 bytes from 10.10.10.168: icmp_seq=3 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=4 ttl=64 time=0.311 ms
64 bytes from 10.10.10.168: icmp_seq=5 ttl=64 time=0.271 ms
64 bytes from 10.10.10.168: icmp_seq=60 ttl=64 time=0.312 ms
64 bytes from 10.10.10.168: icmp_seq=61 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=62 ttl=64 time=0.629 ms
64 bytes from 10.10.10.168: icmp_seq=63 ttl=64 time=0.271 ms
64 bytes from 10.10.10.168: icmp_seq=64 ttl=64 time=0.299 ms
64 bytes from 10.10.10.168: icmp_seq=65 ttl=64 time=0.285 ms
第二種ping的結果
PING 10.10.10.168 (10.10.10.168) 56(84) bytes of data.
64 bytes from 10.10.10.168: icmp_seq=0 ttl=64 time=0.318 ms
64 bytes from 10.10.10.168: icmp_seq=1 ttl=64 time=0.293 ms
64 bytes from 10.10.10.168: icmp_seq=2 ttl=64 time=0.294 ms
64 bytes from 10.10.10.168: icmp_seq=3 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=4 ttl=64 time=0.311 ms
64 bytes from 10.10.10.168: icmp_seq=5 ttl=64 time=0.271 ms
第一種會一直在每一次的60秒過後再回應ping,第二種不會,因為--rcheck是會在第7個ping就停止更新記錄,過了60秒後,才再次更新,此時發現是過了60秒了,就可以再有ping的回應了,

而--update是會一直更新為最新的時間點,除非你停止ping,否則會一直ping不到,直到停止後過了60秒。


那如果這樣子設定的話,就是把 --set 放在前面,其資料庫的記錄會隨時更新
iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name ICMP_check
iptables -A INPUT -p icmp --icmp-type 8 -m recent --name ICMP_check --rcheck --seconds 60 --hitcount 6 -j DROP

or

iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name ICMP_check
iptables -A INPUT -p icmp --icmp-type 8 -m recent --name ICMP_check --update --seconds 60 --hitcount 6 -j DROP
/proc/net/ipt_recent/XXX 的內容長這樣子
src=10.10.10.165 ttl: 64 last_seen: 306003766 oldest_pkt: 2 306003766, 306003766, 305994749, 305994749, 305995750, 305995750, 305996752, 305996752, 305997752, 305997752, 305998756, 305998756, 305999760, 305999760, 306000762, 306000762, 306001763, 306001763, 306002764, 306002764
src=10.10.10.165  # 就是來源IP囉
last_seen: 306003766 # 從英文字面看來是最新的時間記錄,但這個數值怎麼算,不了 !!!!
oldest_pkt: 2 # 記錄幾個連線,20一次回圈,從0開始
在 oldest_pkt: 2 之後的數值跟 last_seen的數值是同屬性的,可以記錄20個,如果要改變這個儲存的量要這麼作 → modprobe ipt_recent ip_pkt_list_tot=50
那可以記錄幾筆來源ip呢,預設是 100,modprobe ipt_recent ip_list_tot=1024 可以改成1024筆


更多内容 http://ssorc.tw/rewrite.php/read-1053.html#ixzz1kvGzL8Oy

Port knocking

Port knocking 目前尚未有個正式的中文翻譯名詞,但大陸有人將它翻成 "端口碰撞" 技術。我簡單的說一下它的原理,以往我們要連 22 port (ssh) 時,必須在防火牆上打洞,開放 22 port 讓人連進來。 Port knocking 的原理就是 22 port 平時是關閉的,你必須先敲某一個port,再敲某一個 port 之後,  22 port 才會為你打開。這樣就有效的保護了 22 port 的安全性了。用 port scan 等工具也掃不到 22 port ,因為平時是關閉的。


目前此法只適用 linux 的 iptables
以下內容,紅字部份皆為指令或是您需要修改的內容 ,藍字部份則為設定檔內容。

iptables 防火牆的設定如下

iptables -N door
#新增一個叫做 door 的 chain。
iptables -A door -m recent --name knock1 --remove
#把進來door chain裡的封包,除去標籤名為 knock1 的封包。
iptables -A door -m recent --set --name knock2
#把進來door chain裡的封包,貼上標籤名為 knock2 的封包。
iptables -A INPUT -p tcp --dport 168 -m recent --set --name knock1
#把連線目標埠為168的封包,貼上 knock1 的標籤。
iptables -A INPUT -p tcp --dport 978 -m recent --rcheck --name knock1 -j door
#把連線目標埠為978、同時也要有貼著 knock1標籤的封包,送到 door 處理
#===> 也就是移去knock1標籤、然後被貼上 knock2 標籤。
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name knock2 -j ACCEPT
#被貼上 knock2 標籤的封包,同時也想連我的 22 port 時,讓它通過。

它的概念是,你在5秒內正確的連168port再接978port的一個連線封包會被依次貼上 knock1再清除,再被貼上 knock2 的標籤,有著 knock2 的標籤後,才能通過22 port 。
註意:不需要再在 iptables 內特別為168 和 978 port 打洞了,所以不要再多加這樣的兩行
iptables -A INPUT -i eth0 -p tcp --dport 168 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 978 -j ACCEPT
↑這樣會使你的 port knocking 設定不會成功的。
至於要怎麼敲 168 port 和 978 port 呢?
telnet 192.168.0.136 168
telnet 192.168.0.136 978
用這樣的指令就能敲port了。


參考資料:
Portknocking 觀念與 iptables 實作技術以保護SSH等公開服務
↑此文 Port knocking 觀念介紹寫的不錯,可惜實作的指令有些錯誤,我看了好久,才看明白,重覆試了好多次並改了指令後才試成功。
Top 20 OpenSSH Server Best Security Practices
↑請看 #18 這一項,可惜它的實作指令也有些語法寫錯,我按它的指令操作,沒試成功。

How to repair and clone disk with ddrescue

  ddrescue  is a tool that can be used to repair and clone disks on a  Linux system . This includes hard drives, partitions, DVD discs, flas...