#port #binary #udp #sequence #server-port #knocking #daemon

app port-knocking-doors

这是一个端口敲击门。它可以在Linux服务器上与firewalld一起工作。

3个稳定版本

1.1.2 2022年3月1日
1.0.1 2022年2月25日

#13#server-port

GPL-3.0-only

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