V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
testcaoy7
V2EX  ›  奇思妙想

密码学敲门:防止对特定的网络服务进行探测和扫描

  •  
  •   testcaoy7 · 2023-08-10 10:42:13 +08:00 · 1300 次点击
    这是一个创建于 504 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在逛 Arch Wiki 的时候(虽然我不是 Arch 用户),看到了一个有意思的 Topic:Port Knocking

    然后文章的最底下提到了一个叫 fwknopd 的程序,它可以实现基于发送单个数据包,完成用户身份认证,并让防火墙自动开放端口

    然后很巧的是,这个程序 Ubuntu/Debian 都有打包,用 apt 安装就是了,于是乎就拿来玩一下,以下是过程:

    1 、在客户端执行:fwknop -D 11.22.33.44 -k --use-hmac --save-rc-stanza
    -D ,即服务器地址,可以是域名,也可以是 ip
    -k ,生成密钥
    --use-hmac ,生成消息认证码
    --save-rc-stanza ,保存参数到配置文件(.fwknoprc )

    2 、在服务器上编辑/etc/fwknop/access.conf 文件
    首先在文件靠近底部的地方有填写密钥和消息认证码的地方,把客户端刚刚生成的 BASE64 编码的密钥和 HMAC 都填写进去;然后在下面再加一行 FW_ACCESS_TIMEOUT 3600;(注意;符号不要漏掉),不加的话,默认敲门后只开门 30 秒

    3 、在服务器上编辑/etc/fwknop/fwknopd.conf 文件
    在文件的末尾加上 PCAP_INTF ens5; 这是设置监听的网卡,如果要保护服务的网卡不是 eth0 ,则要加

    4 、配置防火墙默认丢弃数据包(这里要保护的协议/端口是 tcp/443 )
    iptables -I INPUT 1 -i ens5 -p tcp --dport 443 -j DROP
    iptables -I INPUT 1 -i ens5 -p tcp --dport 443 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    5 、在服务器运行 fwknop 服务器( fwknopd ),可以用 fwknopd -S 来检查服务器是否已运行

    6 、敲门前,在客户端运行 nmap -sS -p 443 11.22.33.44 ,由于没有敲门,结果应该是 filtered

    7 、敲门,在客户端运行 fwknop -n 11.22.33.44 -A tcp/443 -s
    -n 查询.fwknoprc 文件中的主机名
    -A 要访问的协议和端口
    -s 告诉服务器在敲门成功的情况下为敲门数据包的来源地址开门

    敲了门之后运行在 11.22.33.44 ,tcp/443 上的服务应该可以被正常访问了,按照之前的设置,3600 秒之后需要重新敲门,所以可以用 crontab 每小时敲门

    fwknop 默认使用 UDP/62201 进行敲门,可以配置为其他协议( tcp, tcp_raw_socket, icmp ),以及其他端口,具体可以看 manpage

    这里需要特别说明,敲门时指定的参数-s 相当于告诉服务器,只要身份核验通过,就为敲门数据包的来源地址放行,方便,但可以被 MiTM 攻击,当很清楚自己的出口 ip 的时候,应该将-s 参数替换为 -a <自己的公网 ip>
    2 条回复    2023-08-11 01:37:15 +08:00
    iqoo
        1
    iqoo  
       2023-08-10 22:45:13 +08:00
    其实都不用客户端命令,Web 版都可以实现: https://www.etherdream.com/port-knocking/
    azio7
        2
    azio7  
       2023-08-11 01:37:15 +08:00
    很老的技术了,几年在一本旧书上见过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1351 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:51 · PVG 07:51 · LAX 15:51 · JFK 18:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.