Linux隐藏端口Port knocking

admin 2024年7月31日23:41:11评论30 views字数 2601阅读8分40秒阅读模式

0. 端口敲门

保持服务器特定端口关闭的情况下,仍然允许授权用户连接/访问服务器的这个特定端口。

端口敲门是一种不太常用但却很有趣的网络安全方法,它通过隐藏端点的公开服务来增加额外的防御层,直到进行特定的“敲门”。端口敲门的最早实现使用预定义的数据包序列,而更现代的实现使用称为单数据包授权(SPA)的加密签名,其利用与TLS和其他基于加密的身份验证方案相同类型的公钥基础设施。

1. 安装knockd

apt-get install update

apt-get install knockd -y

2. 配置knockd

2.1 /etc/knockd.conf

[options]        UseSyslog        Interface = ens33[openSSH]        sequence    = 7000,8000,9000        seq_timeout = 5        command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT        tcpflags    = syn[closeSSH]        sequence    = 9000,8000,7000        seq_timeout = 5        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT        tcpflags    = syn

参数解析:

参数 说明
sequence 端口号的集合,"敲门"序列
seq_timeout 序列的有效期
command 一般使用firewalld和iptables等命令,添加一个规则以限制从指定IP地址传入SSH连接。此命令仅在用户启动有效敲门序列时执行
tcpflags 定义敲门连接中接受的TCP数据包类型。在这种情况下,分配SYN类型的TCP分组
Interface 监听网卡

那么 [openSSH] 的内容将会被解析为以下内容:

依次访问7000,8000,9000端口,将会执行 /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT ,向 iptables的访问列表头部插入一条允许当前访问IP访问本机22端口的防火墙策略。

那么 [closeSSH] 的内容将会被解析为以下内容:

依次访问9000,8000,7000端口,将会执行 /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT ,向 iptables的访问列表中删除一条允许当前访问IP访问本机22端口的防火墙策略。

2.2 /etc/default/knockd

将 START_KNOCKD 参数的值设置为 1

将 KNOCKD_OPTS 参数 -i 后面的内容设置为监听网卡(此参数也可以不进行设置,默认是注释掉的)

################################################## knockd's default file, for generic sys config################################################## control if we start knockd at init or not# 1 = start# anything else = don't start## PLEASE EDIT /etc/knockd.conf BEFORE ENABLINGSTART_KNOCKD=1# command line optionsKNOCKD_OPTS="-i ens33"

3. knockd服务

systemctl start knockd.service启动knockd服务

systemctl stop knockd.service终止knockd服务

systemctl status knockd.service    查看knockd服务状态

Linux隐藏端口Port knocking

3.1 START_KNOCKD 参数设置

如果在启动后查看服务状态出现如下内容,可能是 /etc/default/knockd 文件中的 START_KNOCKD 参数并未设置为1。

Linux隐藏端口Port knocking

4. knockd实验

4.1 环境搭建

使用knockd隐藏端口,整个行为是需要动态访问的,所以在这里将要阻止对该端口的默认访问

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

向 INPUT 链添加一条规则,用于接受那些处于 ESTABLISHED 或 RELATED 状态的连接:

  • ESTABLISHED 表示已经建立的连接,即数据包的源地址和目的地址与之前跟踪的连接匹配;

  • RELATED 表示与已建立的连接相关联的连接。

然后需要将默认访问22端口的行为阻止:

iptables -I INPUT -p tcp --dport 22 -j REJECT

Linux隐藏端口Port knocking

4.2 实验过程

4.2.1 开放端口

在 /etc/knockd.conf 中我们设定了一个"敲门"序列,如果依次访问7000,8000,9000端口,那么就会方通"敲门"主机对被敲门"主机的22端口的访问。在此处我使用的时telnet对目标主机的端口进行访问,

telnet [: 服务器 IP] 7000

telnet [: 服务器 IP] 8000

telnet [: 服务器 IP] 9000

也可以通过knock命令对端口进行访问

knock -v [: 服务器 IP] 7000 8000 9000 -d 500

Linux隐藏端口Port knocking

可以看到,在kali主机上一次对Ubuntu主机的7000,8000,9000端口进行访问时,Ubuntu主机的22端口已经成功被打开。在Ubuntu主机上的iptables列表中也能够看到,在列表顶部插入了一条允许192.168.70.206(kali)主机访问本地ssh服务的策略。

Linux隐藏端口Port knocking

4.2.2 过滤访问

在 /etc/knockd.conf 中我们设定了一个"敲门"序列,如果依次访问9000,8000,7000端口,那么就会删除上一个实验中的方通策略。

Linux隐藏端口Port knocking

这一点在Ubuntu主机上的iptables列表中也能够看到:

Linux隐藏端口Port knocking

4.3 访问日志查询

可以通过访问/var/log/syslog知道敲门序列期间服务器中发生了什么

tail /var/log/syslog

Linux隐藏端口Port knocking

也可以通过查看服务状态简单了解敲门序列期间服务器中发生了什么

systemctl status knockd.service

Linux隐藏端口Port knocking

参考

[1] https://goteleport.com/blog/ssh-port-knocking/

原文始发于微信公众号(蟹堡安全团队):Linux隐藏端口--Port knocking

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月31日23:41:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux隐藏端口Port knockinghttps://cn-sec.com/archives/3019207.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息