iptables для блокування веб-сайтів https


9

Я хочу заблокувати декілька веб-сайтів, які також працюють на https, наприклад, у Facebook, Twitter та Gmail, у моїй організації. Кальмари не повинні використовуватися тут відповідно до наказів вищого керівництва. Ми можемо використовувати пакет Untangle Lite і iptables.

Чи є інший варіант, крім кальмарів, щоб це зробити? Також 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. також я не впевнений, але я думаю, що більше неможливо підключити gmail без https.
Ківі

Чи можу я знати, як ви отримали всі ці IP адреси pls
Jagadeesh

Відповіді:


12

Замість відповідності на основі URL-адреси спробуйте відповідати відповідно до вмісту сертифіката.

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

Ви також можете відповідати за відбитками пальців, але якщо місце призначення змінить або оновить їх сертифікат, це визнає недійсним ваше правило.


може блокувати все, що відповідає www.facebook.com, навіть у тілі html, але це законно, як це у вікні коментарів. Його можна заблокувати на рівні URL-адреси, але як бути з ipaddress?
Nikhil Mulley

@NikhilMulley: Ні, це відповідатиме лише сертифікату SSL, який подає Facebook. Все інше зашифроване і його не можна побачити.
bahamat

2
У natтаблицю входить лише перший пакет з'єднання (а в таблиці nat немає ланцюга INPUT), я думаю, ви це мали на увазі filter. Крім того, є (дуже) віддалений шанс, що він відповідає пакетам, де 443 є клієнтським портом
Stéphane Chazelas

Хтось використовував це рішення? Окрім відсутності -p tcpправила, це, здається, не є корисним ..
ivanleoncz

10

Брандмауер не може керувати URL-адресами HTTPS, до яких намагається отримати клієнт, оскільки URL-адреса зашифрована. Брандмауер може контролювати лише ті сайти, до яких підключається клієнт, використовуючи IP-адреси, але це не допомагає, якщо версії HTTP та HTTPS на сайті є однією URL-адресою (і навіть якщо їх немає, у вас буде для підтримки величезного списку IP-адрес).

Єдиний реалістичний спосіб блокувати HTTPS - це повністю заблокувати його. Наполягайте на тому, що всі з'єднання повинні бути дійсними HTTP (тобто клієнт починає надсилати HTTPлінію тощо). Це неможливо зробити лише за допомогою IPtables, вам потрібен власний проксі-сервер, як-от Squid. (Я не знаю, на що здатний Untangle Lite.)

Можна заблокувати більшість трафіку HTTPS, заблокувавши вихідний трафік до порту 443, оскільки майже всі сервери HTTPS є на цьому порту. Або, дотримуючись білого підходу, дозволяти тільки вихідний трафік до порту 80 (звичайний HTTP-порт).

Іншим підходом було б проксі всіх HTTP та HTTPS-з'єднань. Тоді ви можете відповідати за URL-адресами. Для цього потрібно провести атаку на клієнтів. Це можна зробити, якщо ви розгорнете власний сертифікаційний центр на всіх клієнтських машинах і зареєструєте його там як корінь довіри. Це може вважатися неетичним.

Незалежно від того, що ви робите, визначені користувачі встановлять проксі поза вашим оточенням та запускатимуть IP через HTTP або щось подібне.

Ви, здається, або намагаєтеся виправити соціальну проблему технічними засобами, які навряд чи колись спрацьовують, або робите все можливе, щоб реалізувати дурну вимогу керівництва (у такому випадку я б пішов із блокуванням порту 443, можливо, лише для певні IP-адреси, які дозволять вам повідомити, що ви зробили свою роботу, незалежно від того, наскільки це марно).


1
Професійний брандмауер на зразок Checkpoint дозволяє фільтрувати https, не розгортаючи сертифікат клієнта в останній версії, я не знаю, як їм це вдається, але це працює.
Ківі

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.txt), щоб посилатися на хост внутрішньої мережі з веб-сервером, який точно пояснює, чому користувач не був надісланий у Facebook тощо. Зверніть увагу, що ця помилка HTTPS, оскільки призначене ім'я хоста (наприклад, www.facebook.com) не відповідає сертифікату CN.
Олексій

@Alexios: OpenDNS - чудове рішення для цього.
Кевін М

@KevinM: спасибі, це корисно знати. Я маю це пам’ятати (хоча у нас є своя маленька ферма DNS на роботі)
Олексій

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.
Ківі

1

Звичайний фільтр вмісту не може блокувати сайт ssl.

Використовуйте засоби захисту від вторгнення, наприклад, морди / сурікати.

Приклад IPS-правила : для блокування ssl URL-адрес для конкретної IP-адреси.

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 : у правилах політики simplewall, якими ділиться IPS Squid + Suricata.


0

Ви повинні покласти це на ланцюг FORWARD, наприклад

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

Це вплине на інші системи в мережі, крім брандмауера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.