腾讯云主机上部署端口敲门Knock服务

本文涉及的产品
云防火墙,500元 1000GB
简介: 腾讯云主机上部署端口敲门Knock服务

端口敲门简单介绍


knock: A port-knocking implementation


端口敲门(knock):个人觉得叫芝麻开门更形象,指的是自己的客户端设备向服务器IP发送一系列实现预定好的暗号,而服务器上需要安装相对应接收暗号的服务knockd,服务器在接收到正确的暗号后,会临时性的为敲门者(客户端)开一段时间的门并随后关上,敲门者(客户端)要在这段时间内登录成功并且保持连接,如果断了连接就要重新敲门。


客户端相当于访客,服务端knockd相当于门童,暗号对上后门童临时开门给访客放行,待访客进入后又关上门


这种方法可以作为一种安全隐藏手段


640.png


  • 项目官网地址


http://www.zeroflux.org/projects/knock
  • GitHub地址


https://github.com/jvinet/knock


640.jpg


具体原理可以参考 《鳥哥的 Linux 私房菜》中的链接


http://linux.vbird.org/linux_security/knockd.php


下面介绍在腾讯云主机上部署端口敲门Knock服务


1、服务端安装knock-server


CentOS7操作系统的腾讯云轻量服务器一台用于本文的演示

640.jpg

配置EPEL源,可以在EPEL源中查找到knock


yum search knock


yum安装


yum  -y install knock-server



640.jpg


man knockd


查看配置样例说明及语法手册


640.jpg


2、配置sshd监听端口


为了演示方便,我这里设置SSHD服务监听端口5522


vi /etc/ssh/sshd_config
新增如下两行
ListenAddress 0.0.0.0:22
#新增SSHD服务监听端口5522
ListenAddress 0.0.0.0:5522

640.jpg

640.jpg


3、修改/etc/knockd.conf配置文件


vi /etc/knockd.conf
[options]
        #UseSyslog
        Interface = eth0
        LogFile = /var/log/knockd.log
[opencloseSSH]
        sequence      = 1122:tcp,2233:tcp,3344:tcp
        seq_timeout   = 20
        tcpflags      = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 5522 -j ACCEPT
        cmd_timeout   = 60
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 5522 -j ACCEPT


640.jpg

其中sequence      = 1122:tcp,2233:tcp,3344:tcp可以理解为暗号序列

[options]中Interface 指定相应的网卡名,如果不配置Interface则默认为eth0


4、启动knockd服务并设置成开机自启动


systemctl enable knockd.service 
systemctl restart knockd.service

640.jpg


查看knockd.log服务日志 tail -f /var/log/knockd.log


5、云主机安全组规则配置


我这里是腾讯云轻量服务器,操作系统为CentOS7

640.jpg

640.jpg

640.jpg

6、客户端配置及knock功能测试


比如CentOS7主机,测试主机IP 192.168.31.52

  • 1)、配置epel源后yum install方式安装knock

640.jpg


  • 2)、先敲门
knock -v HOST_IP 1122:tcp 2233:tcp 3344:tcp


这时可以在腾讯云主机上tail -f /var/log/knockd.log


640.jpg


可以看到Stage1->Stage2->Stage3阶段完成后,执行iptables命令,插入一条允许客户端IP访问5522端口的防火墙规则


iptables -nvL | grep 5522 可以知道规则生效

640.jpg


3)、然后再客户端SSH登录

640.jpg


4)、1分钟后自动删除防火墙规则 knockd服务在1分钟后会自动执行iptables命令,删除客户端IP访问5522端口的防火墙规则

640.jpg

可以在/var/log/knockd.log中看到,所以客户端在敲门成功后,需要在这一分钟内登录成功 SSH登录成功后连接不断开就行,如果断了连接就要重新敲门knock


640.jpg


当然1分钟(60S)你觉得太短,你可以在配置文件中调整cmd_timeout


7、/etc/knockd.conf配置文件改用firewalld


CentOS7默认使用的firewalld防火墙服务,其实这时可以用rich-rule来做 修改成如下配置文件


vi /etc/knockd.conf
 [options]
        #UseSyslog
        Interface = eth0
        LogFile = /var/log/knockd.log
[opencloseSSH]
        sequence      = 1122:tcp,2233:tcp,3344:tcp
        seq_timeout   = 20
        tcpflags      = syn
        start_command = /usr/bin/firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="%IP%" port port="5522" protocol="tcp" accept';/usr/bin/firewall-cmd --reload
        cmd_timeout   = 60
        stop_command  = /usr/bin/firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="%IP%" port port="5522" protocol="tcp" accept';/usr/bin/firewall-cmd --reload


640.jpg


同样1分钟后自动删除防火墙规则

640.jpg


8、Tips


1)、客户端可以使用&&命令


knock -v HOST_IP:tcp 2233:tcp 3344:tcp && ssh [-p sshd_port] root@HOST_IP


2)、Windows版本的knock客户端程序 knock也提供了Windows版本的knock客户端程序

640.jpg

相关文章
|
3月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
30天前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
1月前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
|
1月前
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
121 0
|
3月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
3月前
|
Docker 容器
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
|
3月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?
【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?
|
3月前
|
网络协议 Ubuntu Linux
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
|
6月前
|
弹性计算 关系型数据库 MySQL
数据传输DTS腾讯云上的mysql同步到阿里云上的mysql可以操作吗?
数据传输DTS腾讯云上的mysql同步到阿里云上的mysql可以操作吗?
311 0
|
存储 云安全 大数据
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
438 0
下一篇
无影云桌面