使用 iptables、-m 最近(可能)和 -m 字符串(肯定)仅允许通过 HTTPS 连接到特定 URL

发布于 2024-10-11 02:05:40 字数 788 浏览 7 评论 0原文

举例来说,我想允许连接到 subdomain.mydomain.com;我已经部分工作了,但是一旦允许客户端问候,它有时会与客户端密钥交换陷入怪异的循环。啊,更烦人的是,它是一个自签名证书,页面需要身份验证,而 HTTPS 正在监听非标准端口......因此 TCP/SSL 握手体验对于许多用户来说会有很大差异。

-m 最近是正确的路线吗?是否有更优雅的方法可以在看到字符串后允许完整的 TCP 流?

这是我到目前为止所得到的:

#iptables -N SSL
#iptables -A INPUT -i eth0 -p tcp -j SSL
#iptables -A SSL -m recent --set -p tcp --syn --dport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 400
#iptables -A SSL -m recent --remove -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 400 -m string --algo kmp --string "subdomain.mydomain.com" -j ACCEPT

是的,我尝试通过 nginx 调整来解决这个问题,但是我无法让 nginx 在客户端问候之前返回 444,如果你能想出一种方法来实现这一点,我'我洗耳恭听,呃,眼睛。

Let's say that, for example, I want to allow connections only to subdomain.mydomain.com; I have it partially working, but it sometimes gets in a freaky loop with the client key exchange once the Client Hello is allowed. Ah, to make it even more annoying, it's a self-signed certificate, and the page requires authentication, and HTTPS is listening on a non-standard port... So the TCP/SSL Handshake experience will differ greatly for many users.

Is -m recent the right route? Is there a more graceful method to allow the complete TCP stream once the string is seen?

Here's what I have so far:

#iptables -N SSL
#iptables -A INPUT -i eth0 -p tcp -j SSL
#iptables -A SSL -m recent --set -p tcp --syn --dport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 400
#iptables -A SSL -m recent --remove -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 400 -m string --algo kmp --string "subdomain.mydomain.com" -j ACCEPT

Yes, I have tried to get around this with nginx tweaks, but I can't get nginx to return a 444 before the client hello, if you can think of a way to achieve this instead, I'm all ears, err, eyes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

椒妓 2024-10-18 02:05:40

正如我在 中提到的serverfault,我找到了解决方案:

iptables -A INPUT -p tcp --tcp-flags FIN,PSH,ACK PSH,ACK --dport 400 -m connbytes --connbytes 0:512 --connbytes-dir original --connbytes-mode bytes -m string --algo bm ! --string "subdomain.mydomain.com" -j REJECT --reject-with tcp-reset
iptables -A INPUT -i eth0 -p tcp --dport 400 -j ACCEPT

As I mentioned on serverfault, I have found a solution:

iptables -A INPUT -p tcp --tcp-flags FIN,PSH,ACK PSH,ACK --dport 400 -m connbytes --connbytes 0:512 --connbytes-dir original --connbytes-mode bytes -m string --algo bm ! --string "subdomain.mydomain.com" -j REJECT --reject-with tcp-reset
iptables -A INPUT -i eth0 -p tcp --dport 400 -j ACCEPT
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文