Jusene's Blog

knockd 敲敲门

字数统计: 951阅读时长: 4 min
2017/10/27 Share

knockd

为自己留个后门,为了可以在不同的环境中连上服务器,为了方便管理,总希望这么做,但是如此一来又得担心安全问题。所以一般我们针对特定的服务都是固定ip访问,所以想要即安全又可以任何环境都可以访问,我们就需要让防火墙在特定的时刻开放目前ip的访问,而我们既无法连接上服务器又要让服务器开放端口,这似乎是不可能的事。而knock就为我们提供了这样的服务,knock与防护墙通过端口访问形成特定的规则,从而使防护墙验证来源安全而自动开放防火墙规则,而knock就是敲门的意思。

knockd的安装

项目地址:http://www.zeroflux.org/projects/knock (需要翻墙)

本站下载:Source Tarball GitHub: https://github.com/jvinet/knock

1
~]# tar xf knock-0.7.tar.gz
2
~]# cd knock-0.7
3
~]# ./configure --prefix=/usr/local/knock
4
~]# make && make install

knocked 选项:

  • -i,–interface 监听的网口
  • -d,–daemon 守护模式运行
  • -c,–config 指定一个配置文件
  • -D,–debug 输出debug信息
  • -l,–lookup dns解析
  • -p,–pidfile 指定pidfile
  • -g,–logfile 指定logfile
  • -v,–vebose 输出详细信息

knockd配置文件

默认配置内容

1
~]# vim /usr/local/knock/etc/knockd.conf
2
[options]                         
3
        logfile = /var/log/knockd.log
4
5
[openSSH]
6
        sequence    = 7000,8000,10000
7
        seq_timeout = 5
8
        command     = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
9
        tcpflags    = syn
10
11
[closeSSH]
12
        sequence    = 10000,8000,7000
13
        seq_timeout = 5
14
        command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
15
        tcpflags    = syn
16
17
-----------------------------------------------------------------------------------------------------------------------
18
19
20
[options] 全局配置:
21
UseSyslog: 日志输出到系统syslog,即/var/log/messages
22
LogFile = /path/to/file: 指定日志的输出文件
23
PidFile = /path/to/file: 指定pid的输出文件
24
Interface = interface_name : 指定监听的网口
25
26
[section] 定义knockd的规则:
27
Sequence = port1[:tcp|udp],port2[:tcp|udp]...: 定义特殊的端口队列,如果相同的flag的不同端口队列接受,整个队列都会被丢弃。
28
One_Time_Sequences = /path/to/one_time_sequences_file :一次性敲门队列,可以在一个文件中定义一些一次性的敲门队列,每次敲门后,将会在在正在使用的敲门队列前加上#,并启用下一个敲门队列,一旦队列耗尽,整个程序就会退出
29
Seq_Timeout = timeout: 敲门队列完成的超时时间
30
TCPFlags = fin|syn|rst|psh|ack|urg: 验证tcp的敲门信号的flag标志位
31
Start_Command = command: 当收到正确的敲门队列的情况下,执行的命令
32
Cmd_Timeout = timeout: 在Start_Command and Stop_Command之间的执行的超时时间
33
Stop_Command = command: 在Start_Command已经执行,并且Cmd_Timeout已经超时执行

knocked测试

1
#服务端
2
~]# ./knockd -D -c ../etc/knockd.conf 
3
config: new section: 'options'
4
config: log file: /var/log/knockd.log
5
config: new section: 'openSSH'
6
config: openSSH: sequence: 7000:tcp,8000:tcp,9000:tcp
7
config: openSSH: seq_timeout: 5
8
config: openSSH: start_command: echo '%IP%' >> /tmp/test.txt
9
config: tcp flag: SYN
10
config: new section: 'closeSSH'
11
config: closeSSH: sequence: 9000:tcp,8000:tcp,7000:tcp
12
config: closeSSH: seq_timeout: 5
13
config: closeSSH: start_command: /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
14
config: tcp flag: SYN
15
ethernet interface detected
16
Local IP: 172.19.122.250
17
Adding pcap expression for door 'openSSH': (dst host 172.19.122.250 and (((tcp dst port 7000 or 8000 or 9000) and tcp[tcpflags] & tcp-syn != 0)))
18
Adding pcap expression for door 'closeSSH': (dst host 172.19.122.250 and (((tcp dst port 9000 or 8000 or 7000) and tcp[tcpflags] & tcp-syn != 0)))
19
20
21
#客户端
22
~]# ./knock -v 10.211.55.6 7000 8000 9000
23
hitting tcp 10.211.55.6:7000
24
hitting tcp 10.211.55.6:8000
25
hitting tcp 10.211.55.6:9000
26
27
28
#服务端
29
~]# ./knockd -D -c ../etc/knockd.conf 
30
....
31
2017-09-28 09:23:51: tcp: 112.10.95.255:1060 -> 10.211.55.6:7000 78 bytes
32
2017-09-28 09:23:51: tcp: 112.10.95.255:1061 -> 10.211.55.6:8000 78 bytes
33
2017-09-28 09:23:51: tcp: 112.10.95.255:1062 -> 10.211.55.6:9000 78 bytes
34
~]# iptables -L -n
35
Chain INPUT (policy ACCEPT)
36
target     prot opt source               destination         
37
ACCEPT     tcp  --  112.10.95.255        0.0.0.0/0            tcp dpt:22
38
......

该工具的客户端支持多种平台使用,甚至手机端也是支持的。

CATALOG
  1. 1. knockd
  2. 2. knockd的安装
  3. 3. knockd配置文件
  4. 4. knocked测试