iptables阻止https网站


9

我希望在我的组织中阻止一些也运行基于https的网站,例如facebook,twitter和gmail。根据高级管理层的命令,不应在此处使用Squid。我们可以使用Untangle Lite Package和iptables

除了Squid以外,还有其他选择吗?还有一些iptables规则可以阻止这种流量。

我找到了这个

iptables -t filter -I INPUT -m string --string facebook.com -j LOG --algo bm
iptables -t filter -I INPUT -m string --string facebook.com -j REJECT --algo bm

但是https仍然可以在本地计算机以外的计算机上使用。


2
您应该向公司解释,避免使用https作为个人帐户不是一个好主意,因为这可能会导致公司内部的身份被窃取,在所有计算机上部署证书并充当中间人将是检查谁身份的更好方法。连接到Facebook。我也不确定,但我认为如果没有https,就无法再连接gmail。
2014年

我可以知道您如何获取所有这些IP地址吗?
Jagadeesh

Answers:


12

尝试根据证书内容进行匹配,而不是根据URL进行匹配。

iptables -t nat -I INPUT --sport 443 -m string \
                 --string www.facebook.com --algo bm -j REJECT

您也可以在指纹上进行匹配,但是如果目的地更改或更新了他们的证书,它将使您的规则无效。


可以在html正文中阻止与www.facebook.com匹配的任何内容,但是在注释框中是合法的。可以在url级别将其阻止,但是ipaddress呢?
Nikhil Mulley 2012年

@NikhilMulley:不,它将与Facebook提供的SSL证书匹配。其他所有内容均已加密,无法看到。
bahamat 2012年

2
nat我认为您的意思是,只有连接的第一个数据包才进入表(并且nat表中没有INPUT链)filter。此外,还有它匹配的数据包,其中443是客户端端口(非常)远程机会
斯特凡Chazelas

有人使用过此解决方案吗?除了缺少-p tcp规则之外,这似乎没有什么用处
。– ivanleoncz

10

防火墙无法控制客户端尝试访问的HTTPS URL,因为URL已加密。防火墙只能使用IP地址控制客户端连接到的站点,但是如果站点的HTTP和HTTPS版本具有相同的URL,这将无济于事(即使它们不是相同的,维护大量IP地址)。

阻止HTTPS的唯一现实方法是完全阻止HTTPS。坚持所有连接必须是有效的HTTP(即,客户端通过发送HTTP线路开始,依此类推)。仅使用IPtables不能做到这一点,您需要一个真正的协议感知代理,例如Squid。(我不知道Untangle Lite的功能。)

由于几乎所有HTTPS服务器都在该端口上,因此可以通过阻止到端口443的传出流量来阻止大多数HTTPS流量。或者,按照白名单方法,仅允许传出流量到端口80(普通HTTP端口)。

另一种方法是代理所有HTTP和HTTPS连接。然后,您可以按网址进行匹配。这要求对客户端进行中间人攻击。如果您将自己的证书颁发机构部署到所有客户端计算机并将其注册为信任根,则可以执行此操作。这可能被认为是不道德的。

无论您做什么,确定的用户都将在您的环境之外设置代理,并通过HTTP或类似方式运行IP。

您似乎是在试图通过技术手段解决社会问题,而这几乎是行不通的,或者您正在尽力实现管理部门的愚蠢要求(在这种情况下,我会使用443端口,也许仅用于某些IP,无论您如何用,它都可以报告您已完成工作)。


1
像Checkpoint这样的专业防火墙允许https过滤,而无需部署最新版本的客户端证书,我不知道他们如何做到这一点,但是它可以工作。
2014年

4

我知道一个选择。

如果您有内部DNS服务器供使用,则在您的TLD区域数据中放置一些静态引用,这些静态引用会将域(您不希望建立外部连接)解析为127.0.0.1。这样,所有在网络中使用中央DNS的主机都将(facebook.com/twitter.com本身)域解析为环回地址,这将无处可去。

如果您对网络的客户端计算机解析器配置拥有完全的权威控制权,那么这将起作用。如果工作站/客户端有权更改/编辑/ etc / hosts或/etc/resolv.conf,则它们可能会绕过此选项。


+1。这可以通过在/etc/hosts文件中插入这些引用来完成。例如:127.0.0.1 www.facebook.com

2
或者,对于更文明的解决方案,设置DNS A记录(或hosts / hosts.txt条目)以引用具有Web服务器的Intranet主机,该服务器确切说明了为什么未将用户发送到Facebook等原因。请注意,这会中断HTTPS,因为预期的主机名(例如www.facebook.com)与证书CN不匹配。
Alexios 2012年

@Alexios:OpenDNS是一个很好的解决方案。
凯文M

@KevinM:谢谢,这很有用。我会记住这一点(尽管我们有自己的小型DNS服务器场在工作)
Alexios,2012年

2

一种选择是对通往网络块的路由进行黑洞处理:(列出用于FB)

ip route add blackhole 69.171.224.0/19
ip route add blackhole 74.119.76.0/22 
ip route add blackhole 204.15.20.0/22
ip route add blackhole 66.220.144.0/20
ip route add blackhole 69.63.176.0/20
ip route add blackhole 173.252.64.0/18

1
不,不是这样,要为不再与自己通信的ip范围范围进行通信的facebook twitter或google维护ip列表,将变得很复杂。
2014年

1

纯内容过滤器不能阻止ssl网站。

使用诸如snort / suricata之类的入侵防护工具

IPS规则示例:用于阻止特定IP地址的SSL URL。

drop ip any 443 -> 192.168.3.30 any (content:".facebook.com"; msg:"Simplewall Ssl block for User30 : Urls => .facebook.com " sid:26648513;rev:1;)

drop ip any 443 -> 192.168.3.30 any (content:".fbcdn.net"; msg:"Simplewall Ssl block for User30 : Urls => .fbcdn.net " ;sid:11469443;rev:1;)

drop ip any 443 -> 192.168.3.30 any (content:".youtube.com"; msg:"Simplewall Ssl block for User30 : Urls => .youtube.com " ;sid:13989722;rev:1;)

下载Simplewall:在Squid + Suricata IPS共享的simplewall策略规则中。


0

您应该将它放在FORWARD链上,例如

iptables -I FORWARD  -m string --string "facebook.com" \
                     --algo bm --from 1 --to 600 -j REJECT

它将影响网络上除防火墙之外的其他系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.