Назад | Перейти на главную страницу

Как заблокировать 443 сайта или разрешено

Я знаю, что здесь, на serverfault, это был очень часто задаваемый вопрос, тем не менее, у меня нет точного ответа (или я недостаточно читал: D), я также знаю, что некоторые из вас могут подумать, что это практика анти-менеджера (вероятно, так) но дело в том, что это нужно сделать ...

в настоящее время я применял политику блокировки iptables в сочетании с squid, но это не сработало, потому что нам нужен доступ к определенным сайтам Google или сервису Skype, и они доступны по https, а также обмениваются своими ip-адресами, очень сложно отслеживать ...

Мой друг порекомендовал мне Astaro, я его еще не видел, вы можете посоветовать инструмент, который выполняет фильтрацию / домен по сайту порта?

Редактировать вопрос

Есть ли способ заблокировать HTTPS-сайты по домену или лучший подход для этого? Astaro казался альтернативой, но в значительной степени выглядел как простой старый веб-прокси.

Уловка состоит в том, чтобы использовать Squid с аутентифицированными пользователями. SSL-трафик нельзя проксировать, если вы используете прозрачный прокси. Squid может работать в обоих направлениях одновременно (на разных портах):

http_port <ip>:3128 transparent
http_port <ip>:8080

Очевидно, вам придется добавить некоторые правила, чтобы разрешить и запретить аутентифицированным пользователям переходить туда, где это разрешено или запрещено. Тем не менее, пользователям, которые имеют прозрачный доступ в Интернет, будет запрещен доступ к HTTPS, если он заблокирован вашим брандмауэром.

Другой способ (более грязный) - получить разрешенные сайты из файла, получить их записи DNS и обновить / удалить правила, например:

Установите такое правило:

iptables -N SSL_FORWARD
iptables -A FORWARD -s <NET> -p tcp --dport 443 -j SSL_FORWARD
iptables -A FORWARD -s <NET> -p tcp --dport -j DROP

Это создаст новую цепочку SSL_FORWARD и отправит пакеты, приходящие из вашей сети, на порт 443 для оценки в этой новой цепочке. Если пакет не соответствует какому-либо правилу внутри этой цепочки, он будет отброшен.

Затем регулярно выполняйте этот небольшой скрипт:

# Flush SSL_FORWARD chain
iptables -F SSL_FORWARD

# Iterate through each line of this file, and then get
# it DNS records
for domain in `cat /path/to/allowed.domains`; do

  for line in `dig ${domain} +short` ; do
    [ -z "`echo ${line} | grep '^[0-9.]*$'`" ] && continue
    iptables -A SSL_FORWARD -s <NET> -d ${line} -p tcp --dport 443 -j ACCEPT
  done

done

Похожая ситуация со мной. Я использую сценарий bash для преобразования списка доменных имен, например:

www.youtube.com
www.vimeo.com
www.facebook.com

В список IP-адресов. Затем я отправил список IP-адресов в ipset:

ipset -N Blacklist iphash
for ip in ${iplist[@]}; do
    ipset -A Blacklist $ip
done

Наконец, я применяю IPset к iptables:

iptables -A FORWARD -p tcp --dport 443 -m set --match-set Blacklist dst -j DROP

Преимущество: Каждое утро задание cron повторно преобразовывает список доменов в список IP-адресов и обновляет Blacklist set, и мне вообще не нужно трогать правило iptables. Сценарий обновления использует -F вместо того -N для своей первой строки.