FROM: http://jamyy.dyndns.org/blog/2010/08/2596.html
目的: 使用 knockd 保護指定埠口
作法: 使用者連線前必須先依序 '敲擊' 指定埠號 (port knocking), knockd 才開放受到保護的埠口
環境: Fedora 10
安裝 knockd
cd /tmp
wget http://www.zeroflux.org/proj/knock/files/knock-0.5.tar.gz
tar zxf knock-0.5.tar.gz
cd knock-0.5
vi src/knockd.c
找到 #define SEQ_MAX 32, 於其下加入一行:
#define PATH_MAX 255
yum install libpcap-devel
./configure --prefix=/opt/knock
make
make install
設定 knockd
vi /etc/knockd.conf
01[options]
02    logfile = /var/log/knockd.log
03 
04[openSSH]
05    sequence      = 7000,8000,9000
06    seq_timeout   = 5
07    start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
08    tcpflags      = syn
09    cmd_timeout   = 15
10    stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
說明:
  • sequence = 接受敲擊的埠號順序, 預設 tcp, 可 tcp/udp 混用, 如: 1234:udp,5678:tcp
  • seq_timeout = 設定幾秒鐘以內必須敲擊完 sequence 所列示的埠號
  • start_command = 完成埠號敲擊後所執行的指令
  • cmd_timeout = 執行完 start_command 幾秒鐘後自動執行 stop_command
也就是說, 使用者必須先依序敲擊 tcp port: 7000, 8000 與 9000, knockd 就會開放 tcp 22 接受主動連線封包 (SYN package), 此時使用者必須在 15 秒內連入 tcp 22 port, 因為 cmd_timeout 時間一到, knockd 又會把 tcp 22 port 關掉.
執行 knockd
#以 daemon 方式運行
/opt/knock/sbin/knockd -d
#除錯模式
/opt/knock/sbin/knockd -v -D
在 Linux Client 使用 knock
  1. 取得 Server 的 /opt/knock/bin/knock, 將其複製到 Linux Client 的 /usr/local/bin
  2. 敲門: knock -v your.linux.host 7000 8000 9000
  3. 連線: ssh someone@your.linux.host
在 Win32 Client 使用 knock
  1. 下載 Native Win32 Client
  2. 將 knock.exe 解包到 C:\Windows 或 C:\Windows\System32
  3. (敲門) 在命令提示字元視窗操作: knock -v your.linux.host 7000 8000 9000
  4. (連線) 在命令提示字元視窗操作: putty -ssh someone@your.linux.host
-
參考資料