Debian/Ubuntu:使用Knockd和Iptables设置端口Knocking
时间:2020-01-09 10:38:02 来源:igfitidea点击:
我的基于iptables的防火墙仅允许端口TCP 80和443。
我还需要tcp端口22,但是我家里没有静态IP。
如何在基于Debian或Ubuntu Linux的服务器系统上按需打开和关闭TCP端口22?
如何安装名为壁挂的端口敲服务器,并用iptables配置它以打开tcp端口22或任何其他端口?
Debian或Ubuntu Linux自带。
这是一个端口断开服务器。
它侦听由VPN /拨号pppd创建的以太网和/或PPP接口上的所有流量,以查找端口命中的特殊中断序列。
"knock"客户端通过将TCP或UDP数据包发送到服务器上的端口来进行端口命中。
该端口不需要打开,因为被敲的在链路层级别侦听,即使目的地为封闭端口,它也可以看到所有流量。
当服务器检测到特定的端口命中顺序时,它将运行在其配置文件中定义的命令。
这可用于在防火墙中打开漏洞以便快速访问。
安装Knockd
使用ssh客户端打开终端或登录到远程服务器。
以超级用户身份执行以下apt-get命令以安装knockd服务器:
$ 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. 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
保存并关闭文件。
编辑文件/etc/default/knockd
,输入:
$ sudo vi /etc/default/knockd
将:
START_KNOCKD=0
修改成:
START_KNOCKD=1
可选:根据您的设置设置接口名称,例如eth0或ppp0:
KNOCKD_OPTS="-i eth0"
保存并关闭文件。
如何启动/停止/重启kknockd?
执行以下命令:
sudo service knockd start #<-- start server sudo service knockd stop #<-- stop server sudo service knockd restart #<-- restart server sudo service knockd status #<-- see status server
或者
sudo /etc/init.d/knockd start #<-- start server sudo /etc/init.d/knockd stop #<-- stop server sudo /etc/init.d/knockd restart #<-- restart server sudo /etc/init.d/knockd status #<-- see status server
我该如何敲开端口?
您需要使用knock命令。
它是一个端口断开的客户端。
要在203.1.2.3 ip地址为sshd打开tcp端口#22,请输入:
$ knock -v 203.1.2.3 2022 3022 3022
输出示例:
hitting tcp 203.1.2.3:2022 hitting tcp 203.1.2.3:3022 hitting tcp 203.1.2.3:4022
如何关闭端口?
语法为:
$ knock -v 203.1.2.3 4022 3022 2022
如何打开UDP端口?
语法为:
$ knock -v -u 203.1.2.3 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