端口敲除 (Port Knocking) 和 URL 敲除 (URL Knocking) 有什么区别?

端口敲除 (Port Knocking) 和 URL 敲除 (URL Knocking) 有什么区别?

我知道是什么Port Knocking。但我读到过某处写的URL Knocking。我没有找到任何有用的链接URL Knocking。现在我真的很想知道它是什么以及它与有什么区别Port Knocking。提前谢谢。

答案1

URL 敲击持续读取 apache(或其他 Web 服务器)的日志,如果发现某个 URL(例如https://example.com/TheSecretStringHere/)绕过与服务器端预设的“TheSecretStringHere”字符串匹配的请求 URL,则只需通过打开对服务器端指定端口的访问来操纵防火墙规则即可。此解决方案无需任何第三方软件,只需使用操作系统实用程序即可安装。

这种方法的优点是,如果您使用https协议,那么它可以消除中间人监视者,因为实际 URL 是不可见的,因为它是加密的。另一个优点是,它很容易根据您的工作流程实施您自己的解决方案。

缺点——一切都基于实施。

在我提供的链接中,脚本使用
tail -f(利用)的有效功能不断读取 Web 服务器的日志通知内核文件更改通知)并使用 过滤 URL grep。如果 URL 与秘密字符串匹配,则脚本触发某些操作。

还有一些额外的实用程序可以在用户空间中使用,比如inotifywait可以有效地监视 Web 服务器日志,如果有任何更改,则启动一些操作(可能不仅仅是打开端口)。

Port Knocking相比之下,通常是专用的第三方程序,并且没有中间人保护,但功能与相同URL Knocking

总之,如果您设置了任何可以创建日志文件和支持的 Web 服务器,https那么 IMOURL Knocking是按需打开端口的更安全的方式。


URL 敲击示例(来自上面的链接):

#!/bin/sh

open_port() {
    /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 22  
    /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
}

close_port() {
    /sbin/iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 22 
    /sbin/iptables -D INPUT -p tcp --dport 22 -j ACCEPT 
}

tail -n0 --follow=name /var/log/apache2/access.log | 
(while read line; do 
    if echo $line | grep "/SOME SECRET THING/"; then
        echo OPEN
        open_port
        sleep 60
        echo CLOSE    
        close_port
    fi
done)

剧本归功于:杰森·斯帕谢特

答案2

URL 敲击与端口敲击的理念相同,但它不是监视对一系列秘密端口的连接尝试,而是查找对一系列秘密 URL 的 HTTP 请求。它是为了以下情况而发明的:执行敲击的外部设备位于具有限制性出口规则的防火墙后面,因此它无法敲击除 80 和 443 之外的任何端口。因此,它通过 HTTP[S] 进行连接,并通过请求一系列神奇的 URL 来“敲击”。

相关内容