
Я хочу попробовать заблокировать Facebook на своем компьютере.
Я начал использовать /etc/hosts, но он не охватывает все поддомены, поэтому я провел небольшое исследование и нашелэтот(и множество подобных решений), которые приводят к этому утверждению
/usr/bin/whois -h whois.radb.net '!gAS32934' | head -n -1 | tail -n -1 | /usr/bin/xargs --max-args=1 | /usr/bin/xargs -I {} --max-args=1 iptables -A OUTPUT -d {} -j REJECT
[править] то, что я делаю здесь, это то, что я сначала использую
whois -h whois.radb.net '!gAS32934'
чтобы получить все диапазоны IP-адресов, зарегистрированных Facebook, как предложеноэта статья. Затем я делаю некоторую обрезку, чтобы удалить нежелательные символы в начале и конце результата. Это дает мне список диапазонов IP-адресов, разделенных пробелами. Используя xarg, я затем разделяю эти диапазоны IP-адресов и создаю для каждого диапазона IP-адресов выражение типа
iptables -A OUTPUT -d {} -j REJECT
где {}
заменяется фактическим диапазоном. Я использую REJECT
, а не DROP
так как 1. это намного быстрее 2. так как я на самом деле хочу запретить соединение, это кажется мне правильным. [/edit]
теперь если я попробую ping facebook.com
я получу
From myname (xxx.xxx.xxx.xxx) icmp_seq=1 Destination Port Unreachable
что как раз то, чего я и ожидал. Но если я использую свой браузер (Firefox) для открытия facebook.com, сайт все равно открывается, чего я не ожидал. Я попробовал перезагрузить и открыть другой домен facebook (facebook.de), который я раньше не пробовал, чтобы исключить проблемы с кэшем браузера, но это не помогло.
Так как я часто вижу DROP
вместо , REJECT
я тоже попробовал это, но результат не изменился.
Теперь вопрос, почему браузер может загрузить веб-страницу, если соответствующий ip заблокирован? Как браузер может пройти, если заблокирован пинг? Очевидно, что я что-то упускаю, но не могу понять, что именно.
решение1
Получить IP-адрес хоста:
host -t a facebook.com
Найти CIDR
whois 173.252.120.68 | grep CIDR
И блокировать подсеть
iptables -A OUTPUT -p tcp -d 173.252.120.68/18 -j DROP
и блокировать домены:
iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP