如何在Linux中使用knockd隐藏应用端口

时间:2020-03-05 15:28:22  来源:igfitidea点击:

作为系统管理员,我们应该尽一切努力保护服务器免受攻击者的侵害。
随着互联网的发展,对我们服务器的威胁也在增长。
攻击我们的服务器的热门入口之一是通过服务器上打开的端口。
如果SSH服务器正在计算机上运行,则通常SSH端口正在侦听。
这意味着它是打开的,正在等待连接。

不建议将端口开放24小时,因为它很容易受到攻击。
因为我们可以扫描机器以查看打开的端口。
Nmap是最流行的端口扫描程序之一,任何人都可以使用它来扫描计算机。

如果不使用时可以打开按需端口并关闭端口,该怎么办?
听起来不错。
现在,我们可以使用已敲除的应用程序来执行此操作。

knockd是什么

Knockd是端口断开服务器。
它侦听以太网(或者PPP)接口上的所有流量,以查找端口命中的特殊“knockd”序列。

knockd怎么运作

每个应用程序都需要一个端口作为“门”,以“监听”其他客户端的请求。
此端口通常处于打开状态或者关闭状态。
服务器上有很多可用的端口。
但是,有些端口已经达成共识,例如SSH(22),Web(80)和FTP(21)。

服务器安全性的基本规则是仅打开使用的端口,然后关闭其余端口。
我们可能有一些有时不使用的端口。
不建议在不使用时将这些端口保持打开状态。

当我们安装基因敲除后,我们可以让客户端使用模式“敲除”服务器。
敲门顺序可以由我们自定义。
因此,这种爆震模式将是彼此唯一的。
如果模式匹配,那么将打开我们需要的端口一段时间,然后请求可以进入服务器。

完成应用程序后,我们可以手动或者自动关闭端口。

如何安装knockd

在本文上,我们使用基于Ubuntu 14.04 LTS的Zorin 9 OS。
如果我们使用的是其他发行版,请根据发行版的安装方法进行调整。

Knockd在Ubuntu存储库上可用。
然后我们可以使用apt-get来安装knockd。

$sudo apt-get install knockd

只需等待几分钟,然后knockd就已经设置好了。

配置knockd

knockd配置文件位于/etc/knockd.conf中。
示例配置简单易懂。

我们可以看到配置分为三个部分。
[选项]部分,[openSSH]部分打开SSH端口,[closeSSH]部分关闭SSH端口。

默认情况下,[options]部分仅包含1行。
它告诉我们,knockd的日志将使用操作系统日志应用程序进行记录。
在Ubuntu上,我们将在/var/log/syslog中看到日志;文件夹。

当然,我们可以选择不使用SysLog。
如果要使用自定义日志,可以将其更改为这一行。

logfile = /var/log/knockd.log

上一行,将把knockd日志文件放在/var/log/knockd.log中

[openSSH]部分与[closeSSH]部分具有相同的命令。

序列= 1200,1300,1400这是爆震模式。
它将触发以下部分中的命令。
此参数的值是完全自定义的。
我们可以选择另一个随机数。

seq_timeout = 10这将告知knockd模式必须完成多长时间。

command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 此参数将打开端口22上的SSH端口

tcpflags = syn此参数指示客户端将向服务器发送TCP SYNchronize数据包

设置防火墙

如我们之前所知,knockd将暂时打开特定的端口。
因此,我们必须确保防火墙正在服务器上运行。
基本上,我们将关闭所有端口。
我们正在使用iptables语法来做到这一点。
步骤如下。

第一个命令将允许当前正在进行的会话通过防火墙。

第二个命令,将允许服务器能够通过另一台计算机ping通。

第三个命令将拒绝每个请求。

为了测试终止的服务,我们希望我们的防火墙将删除所有ssh连接。
然后敲开将按需临时打开。

测试服务器端的knockd

防火墙和隔离设置完成后,接下来我们就可以对其进行测试。

要测试防火墙,请尝试通过SSH从另一台计算机远程服务器。
(在本文上,客户端IP为10.1.6.14,服务器IP 10.0.76.224)

$ssh -l pungki 10.0.76.224

使用:-l =登录名pungki =目标服务器上的用户名

如果防火墙正常工作,则我们将收到“拒绝连接”错误消息。

我们收到错误消息的原因是10.1.6.14不允许进入服务器。
如果使用此命令,将看不到任何结果。

$sudo /sbin/iptables -L -n |grep 10.1.6.14

稍后,我们将看到实施敲敲后的区别。

下一步,是测试已终止的服务。

要运行敲除的文件,我们需要更改/etc/default/knockd中的敲除的默认文件。
将START_KNOCKD参数的值从0更改为1.

保存文件。
然后输入:

$sudo service knockd start

*说明:我试图使用/etc/init.d/knockd start运行服务,但始终无法启动

客户端测试失败

在客户端,我们需要敲客户来“敲”服务器。
在客户端,我们使用Centos 5.2.
然后,我们从http://pkgs.repoforge.org/knock/knock-0.5.3.el5.rf.i386.rpm安装kick-client

然后运行以下命令来关闭服务器:

$knock -v 10.0.76.224 1200 1300 1400

-v =详细10.0.76.224 =服务器IP 1200 1300 1400 =敲除配置中定义的敲除序列

敲响服务器后,现在我们将看到客户端IP现在被允许进入服务器。

$sudo /sbin/iptables -L -n |grep 10.1.6.14

然后,我们可以运行SSH来远程服务器。

如上图所示,的主机名不同。
在建立到远程计算机的SSH之后,主机名将从@ web01更改为@ dev-machine。

关闭端口

客户端完成对服务器的远程操作后,客户端需要关闭端口。
为此,我们可以使用以下命令:

$knock -v 10.0.76.224 1400 1300 1200

请注意,在关闭端口时,我们将knockd顺序设为相反的顺序。

敲响服务器后,我们将再次看到提示。
要检查knockd是否成功,我们再次使用iptables命令。
如果成功的话,我们将看到IP 10.1.6.14将会消失。

在上一个端口上,敲开端口后,我们看到客户端IP地址10.1.6.14被防火墙允许进入服务器。
现在,敲门关闭端口后,如果使用相同的iptables命令进行检查,则该规则已删除。

自动关闭端口

由于关闭端口活动是由客户端触发的,因此我们有可能客户端忘记关闭端口。
我们不希望它发生。
因此,我们可以配置knockd以自动关闭端口。

为此,我们需要自定义knockd的配置文件。
这是修改后的knockd配置文件的示例。

该命令看起来仍然相同。
与以前的配置的不同之处在于,我们将[openSSH]部分和[closeSSH]部分放在同一块中。

然后,我们添加cmd_timeout = 10行以告诉服务器在执行start_command后10秒钟执行stop_command。
该端口将自动关闭,但已建立的连接将保持连接状态。