如何在 Ubuntu 上使用 Port Knocking 来隐藏 SSH 端口如何在 Ubuntu 上使用 Port Knocking 来隐藏 SSH 端口如何在 Ubuntu 上使用 Port Knocking 来隐藏 SSH 端口如何在 Ubuntu 上使用 Port Knocking 来隐藏 SSH 端口
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 上使用 Port Knocking 来隐藏 SSH 端口

在此页

  1. 第 1 步:确保安装了所有必需的软件包
  2. 第 2 步:向 iptables 添加规则
  3. 第 3 步:在 knockd 运行时访问服务器
    1. 使用 telnet 客户端测试敲门

    你们都知道那些老黑帮电影里,一个人用敲门的顺序进入吗?端口敲门就是这样,仅适用于您的服务器。更改您的默认 ssh 端口并不能保证您不会被黑客攻击。黑客在攻击服务器之前经常使用工具对开放端口进行自动扫描。端口敲门是一种保护自己免受端口扫描器攻击的方法。它拒绝访问受保护的端口,直到客户端以正确的顺序预先访问一系列其他端口。

    在 Ubuntu 上安装 port knocking 很容易。我将在本文中向您展示如何安装和设置端口碰撞。本教程中的步骤也适用于 Debian 8。

    第 1 步:确保安装了所有必需的软件包

    以下所有命令均未以 root 用户身份运行。我不想对所有命令都使用 sudo,所以我使用:

    sudo su

    成为根用户。第一步是更新 Ubuntu 软件包列表:

    apt-get update

    然后安装 SSH 服务器(如果尚未安装)。

    apt-get install openssh-server

    现在安装 knockd 软件,它是控制端口碰撞的守护进程。

    apt-get install knockd
    Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]
    Get:2 http://security.debian.org wheezy/updates Release [102 kB]
    Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
    Hit http://mirrors.linux教程 wheezy Release.gpg
    Hit http://mirrors.linux教程 wheezy Release
    Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
    Hit http://mirrors.linux教程 wheezy/main amd64 Packages
    Hit http://mirrors.linux教程 wheezy/main Translation-en
    Fetched 635 kB in 1s (358 kB/s)
    Reading package lists... Done
    :~# apt-get install openssh-server
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following extra packages will be installed:
    openssh-client
    Suggested packages:
    ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
    The following packages will be upgraded:
    openssh-client openssh-server
    2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
    Need to get 1,364 kB of archives.
    After this operation, 0 B of additional disk space will be used.
    Do you want to continue [Y/n]? 

    按 Y 然后输入继续。

    安装软件包后,您必须安装 iptables 内核防火墙。跑步:

    apt-get install iptables

    第 2 步:向 iptables 添加规则

    首先,我们刷新现有的防火墙规则并确保传出连接不会被丢弃。

    iptables --flush
    iptables -t nat --flush
    iptables -t mangle --flush
    iptables --policy OUTPUT ACCEPT

    我们要确保允许所有已建立的连接和正在进行的会话通过防火墙,否则,防火墙会阻止当前的 SSH 会话:

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

    注意:上述规则在 STABLISHED,RELATED 中的逗号两边没有空格。

    然后使用以下规则阻止传入端口 22 (SSH):

    iptables -A INPUT -p tcp --destination-port 22 -j DROP

    建立 iptables 规则后,您可以使用 iptables-persistent 在重启时自动执行恢复过程。我们可以从 Ubuntu 的默认存储库下载:

    apt-get install iptables-persistent
    Current iptables rules can be saved to the configuration file ?
    ? /etc/iptables/rules.v4. These rules will then be loaded automatically ?
    ? during system startup. ?
    ? ?
    ? Rules are only saved automatically during package installation. See the ?
    ? manual page of iptables-save(8) for instructions on keeping the rules ?
    ? file up-to-date. ?
    ? ?
    ? Save current IPv4 rules?
    Current iptables rules can be saved to the configuration file ?
    ? /etc/iptables/rules.v6. These rules will then be loaded automatically ?
    ? during system startup. ?
    ? ?
    ? Rules are only saved automatically during package installation. See the ?
    ? manual page of ip6tables-save(8) for instructions on keeping the rules ?
    ? file up-to-date. ?
    ? ?
    ? Save current IPv6 rules?

    安装过程中,程序会提示你保存当前的iptables规则(ipV4和ipV6),两者都选择是即可。

    使用 iptables-save 命令将当前规则集保存到一个文件中。 iptables-restore 稍后可以使用此文件来恢复相同的 iptables 设置:

    iptables-save
     # Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016
    *filter
    :INPUT ACCEPT [1:40]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [17:1976]
    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 22 -j DROP
    COMMIT
    # Completed on Tue Feb 23 04:59:28 2016

    现在,您将保持与现有连接的连接,同时阻止 SSH 端口上的其他连接。

    接下来,我们必须配置 knockd。

    要配置服务,我们必须编辑配置文件 /etc/knockd.conf。使用 nano 打开文件:

    nano /etc/knockd.conf

    您将看到如下所示的部分。

    [options]
    UseSyslog

    [openSSH]
    sequence = 7000,8000,9000
    seq_timeout = 5
    command = /sbin/iptables -A 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

    • 在“选项”部分,我们看到指令名称 UseSyslog。日志文件相当明显——它记录了所有敲门尝试
    • 在下面,我们有两个部分:openSSH 和 closeSSH。第一个将允许门环访问端口 22 (SSH),第二个将在门环完成时关闭端口。
    • knockd 自动将 %IP% 替换为发送敲门的客户端的 IP 地址,因此您可以只向授权客户端打开端口。

    sequence = 9000,8000,7000

    这意味着如果同一 IP 在端口 7000 上请求连接,然后直接请求端口 8000,最后请求端口 9000,则这组规则将匹配。强烈建议更改默认端口及其顺序,因为默认顺序很好攻击者也知道。

    seq_timeout = 5

    \seq_timeout\ 选项以秒为单位定义您有多少时间为敲门提供所有数字。如果您自动生成敲击声,此默认值应该没问题,不会成为问题。

    command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

    指定当客户端进行正确的端口敲门时要执行的命令。 %IP% 的所有实例都将替换为门环 IP 地址。

    tcpflags = syn

    注意必须用于设置此标志的数据包,在本例中为 syn 数据包。使用 TCP 标志时,knockd 将忽略与标志不匹配的 tcp 数据包。

    现在启用敲门声。使用 nano 编辑文件 /etc/default/knockd:

    nano /etc/default/knockd
    START_KNOCKD=0
    

    到

    START_KNOCKD=1
    

    保存并退出后。如果您有多个网络适配器或遇到 knockd 在系统启动期间未自动启动的问题,您可以通过取消注释并修改第二行 KNOCKD_OPTS 来手动指定要监听的网络接口。

    然后手动启动 knockd:

    service knockd start

    这将启动守护进程并允许您通过敲击端口序列来更改 iptables 规则集。

    您已经安装了所需的软件包,如果您与服务器断开连接,要重新连接,您必须按正确的顺序敲击您定义的端口以建立 SSH 连接。

    第 3 步:在 knockd 运行时访问服务器

    如果您按照上述步骤进行操作,那么您将无法在不进行端口敲门的情况下直接连接到 SSH 服务器。

    您应该没有收到来自服务器的响应,并且 SSH 客户端应该超时。这是因为我们的 SSH 守护进程当前被 iptables 阻止了。如果没有自动超时,请键入 ctrl-C 结束 SSH 尝试。

    使用 telnet 客户端测试敲门

    对于 Linux 用户:使用 apt 安装 telnet 包。

    对于 Windows 用户:您可以通过访问“程序”部分安装 Telnet 客户端,搜索“打开或关闭 Windows 功能”,从那里启用 Telnet 客户端。

    在您的命令提示符中键入以下命令(将端口序列替换为您的自定义序列):

    telnet youripaddress 7000
    telnet youripaddress 8000
    telnet youripaddress 9000

    您必须在 5 秒内完成所有这些,因为这是配置的时间限制。现在,尝试通过 SSH 连接到您的服务器。您将能够访问该连接。

    以相反顺序运行上述命令以关闭 SSH 服务器。

    telnet youripaddress 9000
    telnet youripaddress 8000
    telnet youripaddress 7000

    端口敲门最好的部分是您可以将其与私钥身份验证一起配置。如果您同时配置两者,那么几乎没有人可以访问或连接,除非他们知道端口和私钥。

©2015-2025 艾丽卡 support@alaica.com