成事不说,遂事不谏,既往不咎。
导航
- 1 工具介绍
- 2 示例配置
- 3 杂七杂八
1、工具介绍
knock 是一个 Linux 下的“端口敲门(Port Knocking)” 服务,它的主要作用是:通过监听特殊端口访问顺序,动态修改防火墙规则,从而隐藏真实服务的端口。
工作原理:它相当于是一个数据包监听器,会时刻监听指定的网卡,捕获 TCP/UDP 包。对于捕获到的每一个数据包,它都会检查包的目的端口、TcpFlag、以及包的到访顺序,若成功匹配到了配置文件中指定的规则,便开始执行配置文件中指定的 command 命令。
2、示例配置
注意:安装 knock 服务之后,首先确保防火墙的 INPUT 链的策略是不是 DROP,若是 ACCEPT 则 knock 是无法发挥其真正作用的,因为 iptable 默认放行了所有的包。
注:(1)iptables 防火墙 INPUT 链的默认策略修改命令
iptables -P INPUT DROP。(2)不建议通过添加丢弃全部包规则的方式处理iptables -A INPUT -j DROP,因为配置规则先后顺序的原因,这样做会导致后面添加进来的 ACCEPT 规则无法生效。
【1】手动关闭:开启目标端口需要敲一下,关闭目标端口也需要敲一下。
[options] #UseSyslog # 日志被统一保存在了 /var/log/syslog 中 Interface = eth0 logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 seq_timeout = 10 tcpflags = syn command = /sbin/iptables -A INPUT -s %IP% --dport 22 -j ACCEPT [closeSSH] sequence = 9000,8000,7000 seq_timeout = 10 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% --dport 22 -j ACCEPT【2】自动关闭:开启目标端口需要敲一下,在等待 cmd_timeout 秒之后,knock 会自动关闭目标端口。
[options] logfile = /var/log/knockd.log Interface = eth0 [opencloseSSH] sequence = 2222:udp,3333:tcp,4444:udp seq_timeout = 15 tcpflags = syn,ack start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --syn -j ACCEPT cmd_timeout = 600 stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --syn -j ACCEPT3、杂七杂八
(1)python 版的 knock 客户端,可适用于 Windows:knock
(2)knock 的替代品:fwknop
(3)如何判断通过 knock 客户端python knock.py -v 1.1.1.1 7000 8000 9000敲击的包是否被 knock 服务端接收到?可通过journalctl -u knockd -f动态查看其日志,成功示例如下图:
(4)knock 的 command 不光可以执行 iptables 规则,还可以让其执行其它的命令。于是乎:我们似乎就可以借助 knock 的这个功能,来实现一些通过网络触发事件的任务。
不光可以执行 iptables 规则,还可以让其执行其它的命令。于是乎:我们似乎就可以借助 knock 的这个功能,来实现一些通过网络触发事件的任务。
| 我的博客园 |
|---|