3个稳定版本
1.1.2 | 2022年3月1日 |
---|---|
1.0.1 | 2022年2月25日 |
#13 在 #server-port
38KB
791 行
port-knocking-doors
这是一个作为守护进程运行的二进制程序,它允许端口敲击。
简介
基本上,它监听一些UDP端口。当客户端按照一定的顺序在这些端口上发送数据报文时,该程序将为客户端的IP地址打开网络端口一段时间。
该项目是用Rust开发的:为了减轻基于缓冲区溢出的一系列漏洞(C程序会受到影响),允许轻松为任何目标(树莓派、其他ARM卡、NAS Synology、Android、传统服务器等)构建二进制文件;构建无依赖的二进制文件;提高我在Rust语言中的技能;我已经厌倦了使用有缺陷的批处理脚本或Python脚本。
原因
端口敲击的目的是减少服务器对机会主义黑客的攻击面。默认情况下,您的SSH或SMB端口对Web客户端是关闭的。合法客户端通过端口敲击序列继续操作,从而为他们打开大门。
如何
互联网连接的路由器将UDP端口重定向到我们的服务器(它可能在DMZ中)。它还路由TCP端口以覆盖。
守护进程监听相关的UDP端口,寻找序列。它检查服务器的防火墙,并为客户端(仅限客户端IP)打开端口。
此程序与Firewalld一起工作。因此,它应该在Linux下运行。用户可以选择将其在后台运行或使用systemd或其他调度器执行所需操作。
用法
帮助信息
port-knocking-doors 1.0.0
This software manage the port knocking
USAGE:
port-knocking-doors [OPTIONS]
OPTIONS:
-c, --conf <CONF>
set configuration file path [default: ]
-h, --help
Print help information
-m, --magic-seq <MAGIC_SEQ>
this is the magic sequence (between 5 and 20 UDP ports) in the format
"port_num,port_num,port_num,port_num,port_num" (example:
"10001,10002,10003,10004,10005") [default: #####]
-p, --ports <PORTS>
this is the ports that we want to control. The format is like this "port1,port2,..."
(examples: "22", "22,80,8080") [default: #####]
--set-configuration-file-in-home
with this option, a default configuration file is set, on home path
--show-configuration-file-help
show an help for the configuration file
-V, --version
Print version information
配置文件
可以使用“--conf”参数定义配置文件。否则,将在HOME目录中搜索“.port_knocker.toml”文件。否则,将在“/etc/port_knocker.toml”中搜索文件。否则,将使用默认值。
可以使用“--set-configuration-file-in-home”参数生成最小文件。
有关可配置变量的更多信息,请使用“--show-configuration-file-help”参数。
./port-knocking-doors --show-configuration-file-help
Help for using the configuration file.
You can configure this variables in the configuration file:
ports_to_controls = [22] # It's the ports that this programme will open for knockers.
opening_sequence = [16001,16002,16003,16004,16005] # It's the sequence of port onwhiche we send UDP datagram "knock\n".
firewall_rules_check_periode_seconds=10 # [facultative] The firewall rules are periodicaly checked. This is the periode.
ignoring_period_after_knock_error=5 # [facultative] A knocker must wait this duration before send new knocks if it failed.
max_knocker_live_time=30 # [facultative] After this periode a knocker is forgotten. He have to restart the sequence.
max_opened_door_duration=10 # [facultative] When a port is opened, it's for few seconds (define this duration with this variable)
doors_cleanup_periode=10 # [facultative] The doors have to be cleaned periodicaly. This is the periode.
环境变量
您还可以使用环境变量。
KNOCKER_SEQ
用于定义至少5个UDP端口的魔幻序列(例如:export KNOCKER_SEQ=1,2,3,4,5,6,7
)KNOCKER_PORTS
用于定义要控制的端口号列表(例如:export KNOCKER_PORTS=22,80,10080
)
这两个变量仅在命令行参数中未指定相关参数时使用。
数据报
此客户端必须通过UDP在每个敲击序列端口上发送以下消息。
knock\n
历史记录
当... | 什么... |
---|---|
2022-02-25 | v 1.0.0 |
2022-02-11 | 这个仓库刚刚开始。目前还不能构建! |
依赖项
~11-21MB
~249K SLoC