Debian/Ubuntu:使用Knockd和Iptables设置端口敲门
时间:2019-11-20 08:53:10 来源:igfitidea点击:
端口敲门Port Knocking
在计算机中,端口敲门是通过在一组预先指定的关闭端口上生成连接尝试来从外部打开防火墙上的端口的一种方法。一旦接收到正确的连接尝试序列,防火墙规则将被动态修改,以允许发送连接尝试的主机通过特定端口进行连接。
例如,默认防火墙是不开放22端口的。 我们想远程临时打开该端口。
那么我们可以定义一组端口号序列,通过发送这组端口号敲门(相当于钥匙),让防火墙打开端口22。
安装knockd
使用root执行以下apt-get命令:
$ sudo apt-get install knockd
输出示例:
[sudo] password for Hyman: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: knockd 0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded. Need to get 27.6 kB of archives. After this operation, 168 kB of additional disk space will be used. Get:1 http://mirrors.kernel.org/debian/ stable/main knockd amd64 0.5-3 [27.6 kB] Fetched 27.6 kB in 1s (19.5 kB/s) Selecting previously deselected package knockd. (Reading database ... 352407 files and directories currently installed.) Unpacking knockd (from .../knockd_0.5-3_amd64.deb) ... Processing triggers for man-db ... Setting up knockd (0.5-3) ... knockd disabled: not starting. To enable it edit /etc/default/knockd ... (warning).
配置
配置文件/etc/knockd.conf:
$ sudo vi /etc/knockd.conf
如下更新配置文件。请根据需求将2022、3022、4022改成你想定义的序列端口号(相当于密码):
[options] UseSyslog [openSSH] sequence = 2022,3022,4022 seq_timeout = 5 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 4022,3022,2022 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
保存并关闭文件。
当我们发送2022,3022,4022
这个端口密码时,将会执行 /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
。也就是防火墙打开端口22。
所以,我们也可以将命令换成其他命令。比如重启某个服务器等。
编辑文件/etc/default/knockd
$ sudo vi /etc/default/knockd
将
START_KNOCKD=0
改成:
START_KNOCKD=1
修改接口名称
KNOCKD_OPTS="-i eth0"
保存并关闭文件。
如何启动/停止/重启 knockd?
执行以下命令:
sudo service knockd start #<-- 启动knockd服务 sudo service knockd stop #<-- 停止knockd服务 sudo service knockd restart #<-- 重启knockd服务 sudo service knockd status #<-- 查看knockd服务状态
或者
sudo /etc/init.d/knockd start sudo /etc/init.d/knockd stop sudo /etc/init.d/knockd restart sudo /etc/init.d/knockd status
如何敲开端口?
使用knock命令。
在192.168.1.100 ip地址为sshd打开tcp端口22
$ knock -v 192.168.1.100 2022 3022 3022
输出示例:
hitting tcp 192.168.1.100:2022 hitting tcp 192.168.1.100:3022 hitting tcp 192.168.1.100:4022
如何关闭knock端口?
语法为:
$ knock -v 192.168.1.100 4022 3022 2022
如何打开UDP端口?
使用-u选项。
语法为:
$ knock -v -u 192.168.1.100 9090
您还可以如下组合TCP和UDP端口:
$ knock server1.theitroad.local 2022:tcp 9090:udp 4022:tcp
如何验证服务器是否已打开或关闭端口?
使用ssh客户端,如下所示:
$ ssh [email protected]
或者查看防火墙状态
# iptables -L INPUT -v -n # iptables -L INPUT -v -n | grep :22