iptables zum Blockieren von https-Websites

9

Ich möchte einige Websites in meiner Organisation blockieren, die auch auf https ausgeführt werden, z. B. Facebook, Twitter und Google Mail. Tintenfisch soll hier nicht gemäß den Anweisungen des höheren Managements verwendet werden. Wir können Untangle Lite Package und verwenden iptables.

Gibt es eine andere Option als Squid, um dies zu tun? Auch eine iptablesRegel, um diese Art von Verkehr zu blockieren, wäre wirklich hilfreich.

ich habe das gefunden

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 funktioniert jedoch weiterhin auf Computern mit Ausnahme des lokalen Computers.

Dharmit
quelle
2
Sie sollten Ihrem Unternehmen erklären, dass das Vermeiden von https für ein persönliches Konto keine gute Idee ist, da dies zu Identitätsdiebstahl innerhalb des Unternehmens führen kann. Die Bereitstellung eines Zertifikats auf allen Computern und die Tätigkeit als Mann in der Mitte wäre eine viel bessere Möglichkeit, um zu überprüfen, wer es ist verbinde zu Facebook. Ich bin mir auch nicht sicher, aber ich denke, es ist nicht mehr möglich, Google Mail ohne https zu verbinden.
Kiwy
Darf ich wissen, wie Sie all diese IP-Adressen bekommen haben pls
Jagadeesh

Antworten:

11

Versuchen Sie, anstelle der Übereinstimmung anhand der URL eine Übereinstimmung anhand des Inhalts des Zertifikats vorzunehmen.

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

Sie können auch den Fingerabdruck abgleichen. Wenn das Ziel jedoch sein Zertifikat ändert oder aktualisiert, wird Ihre Regel ungültig.

pr0f3550r
quelle
Kann dies alles blockieren, was mit www.facebook.com übereinstimmt, auch im HTML-Text, aber das ist so legitim im Kommentarfeld. Es kann auf URL-Ebene blockiert werden, aber was ist mit der IP-Adresse?
Nikhil Mulley
@NikhilMulley: Nein, es stimmt nur mit dem von Facebook bereitgestellten SSL-Zertifikat überein. Alles andere ist verschlüsselt und kann nicht gesehen werden.
Bahamat
2
Nur das erste Paket einer Verbindung wird in die natTabelle eingegeben (und es gibt keine INPUT-Kette in der Nat-Tabelle). Ich denke, Sie haben es filterdort gemeint . Es gibt auch eine (sehr) entfernte Chance, dass es mit Paketen übereinstimmt, bei denen 443 der Client-Port ist
Stéphane Chazelas
Hat jemand diese Lösung verwendet? Abgesehen von dem -p tcp
Fehlen
10

Die Firewall kann nicht steuern, auf welche HTTPS-URLs der Client zugreifen möchte, da die URL verschlüsselt ist. Die Firewall kann nur mithilfe von IP-Adressen steuern, zu welchen Sites der Client eine Verbindung herstellt. Dies hilft jedoch nicht, wenn sich die HTTP- und HTTPS-Versionen der Site unter derselben URL befinden (und selbst wenn dies nicht der Fall ist) eine riesige Liste von IP-Adressen zu führen).

Die einzig realistische Möglichkeit, HTTPS zu blockieren, besteht darin, es insgesamt zu blockieren. Bestehen Sie darauf, dass alle Verbindungen gültiges HTTP sein müssen (dh der Client beginnt mit dem Senden einer HTTPLeitung usw.). Dies kann nicht nur mit IPtables durchgeführt werden. Sie benötigen einen tatsächlichen protokollfähigen Proxy wie Squid. (Ich weiß nicht, wozu Untangle Lite fähig ist.)

Sie können den größten Teil des HTTPS-Verkehrs blockieren, indem Sie den ausgehenden Verkehr zu Port 443 blockieren, da sich fast alle HTTPS-Server an diesem Port befinden. Oder lassen Sie nach einem Whitelist-Ansatz nur ausgehenden Datenverkehr zu Port 80 (dem normalen HTTP-Port) zu.

Ein anderer Ansatz wäre das Proxy aller HTTP- und HTTPS-Verbindungen. Dann können Sie nach URLs abgleichen. Dies erfordert einen Man-in-the-Middle-Angriff auf die Clients. Sie können dies tun, wenn Sie Ihre eigene Zertifizierungsstelle auf allen Clientcomputern bereitstellen und dort als Vertrauensbasis registrieren. Dies kann als unethisch angesehen werden.

Unabhängig davon, was Sie tun, richten bestimmte Benutzer einen Proxy außerhalb Ihrer Umgebung ein und führen IP über HTTP oder ähnliches aus.

Sie scheinen entweder zu versuchen, ein soziales Problem mit technischen Mitteln zu beheben, was kaum jemals funktioniert, oder Sie tun Ihr Bestes, um eine dumme Anforderung des Managements umzusetzen (in diesem Fall würde ich Port 443 blockieren, vielleicht nur für bestimmte IPs, mit denen Sie melden können, dass Sie Ihre Arbeit erledigt haben, egal wie nutzlos).

Gilles 'SO - hör auf böse zu sein'
quelle
1
Professionelle Firewall wie Checkpoint ermöglichen die https-Filterung, ohne ein Client-Zertifikat in der neuesten Version bereitzustellen. Ich weiß nicht, wie sie das schaffen, aber es funktioniert.
Kiwy
4

Ich kenne eine Option.

Wenn Sie interne DNS-Server verwenden möchten, fügen Sie in Ihre TLD-Zonendaten einige statische Verweise ein, die die Domänen (für die Sie keine externen Verbindungen herstellen möchten) auf nur 127.0.0.1 auflösen. Auf diese Weise lösen alle Hosts, die das zentrale DNS in Ihrem Netzwerk verwenden, Domänen (facebook.com/twitter.com per se) in Loopback-Adressen auf, die nirgendwohin führen.

Dies funktioniert, wenn Sie die vollständige autorisierende Kontrolle über die Resolver-Konfiguration der Client-Computer Ihres Netzwerks haben. Wenn die Arbeitsstationen / Clients Berechtigungen zum Ändern / Bearbeiten von / etc / hosts oder /etc/resolv.conf haben, können sie diese Option umgehen.

Nikhil Mulley
quelle
+1 dafür. Dies kann durch Einfügen dieser Referenzen in die /etc/hostsDatei erfolgen. Zum Beispiel:127.0.0.1 www.facebook.com
2
Oder stellen Sie für eine zivilisiertere Lösung die DNS A-Einträge (oder hosts / hosts.txt-Einträge) so ein, dass sie auf einen Intranet-Host mit einem Webserver verweisen, der genau erklärt, warum der Benutzer nicht an Facebook usw. gesendet wurde. Bitte beachten Sie, dass dies nicht funktioniert HTTPS, da der beabsichtigte Hostname (z. B. www.facebook.com) nicht mit dem Zertifikat CN übereinstimmt.
Alexios
@Alexios: OpenDNS ist eine großartige Lösung dafür.
Kevin M
@ KevinM: Danke, das ist nützlich zu wissen. Ich werde es mir merken (obwohl wir unsere eigene kleine DNS-Farm bei der Arbeit haben)
Alexios
2

Eine Option ist Blackhole-Routen zu Netzwerkblöcken: (Aufgeführt sind für 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
selbst
quelle
1
Nein, es ist nicht so, es ist viel zu kompliziert, eine IP-Liste für Facebook-Twitter oder sogar Google zu führen, die ihre eigenen IP-Bereichsbereiche nicht mehr kommunizieren.
Kiwy
1

Ein einfacher Inhaltsfilter kann die SSL-Site nicht blockieren.

Verwenden Sie Intrusion Protection Tools wie Snort / Suricata.

Beispiel-IPS-Regel : Zum Blockieren von SSL-URLs für eine bestimmte IP-Adresse.

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 herunterladen : In Simplewall-Richtlinienregeln, die von Squid + Suricata IPS gemeinsam genutzt werden.

Chetan Muneshwar
quelle
0

Sie sollten dies auf die FORWARD-Kette setzen, z

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

Dies wirkt sich auf andere Systeme im Netzwerk aus, mit Ausnahme der Firewall.

Senthamil
quelle