如何在Linux中使用knockd隐藏应用端口
作为系统管理员,我们应该尽一切努力保护服务器免受攻击者的侵害。
随着互联网的发展,对我们服务器的威胁也在增长。
攻击我们的服务器的热门入口之一是通过服务器上打开的端口。
如果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。
该端口将自动关闭,但已建立的连接将保持连接状态。