1

Temat: [howto] Blokowanie facebooka

Poradnik jest bezpośrednią interpretacją tekstu shibby: https://openlinksys.info/forum/viewthre … d_id=19569

IPset (http://ipset.netfilter.org/) jest narzędziem pozwalającym używać tablic danych w regułach iptables. Brzmi to może skomplikowanie ale zastosowanie jest proste: np. mamy 500 adresów które chcemy zablokować w iptables. Możemy utworzyć 500 odpowiednich łańcuchów dla FORWARD i będzie to działać, ale bardzo spowolni działanie firewalla bo każdy z tych łańcuchów będzie musiał być przeszukany. Przy pomocy ipset możemy utworzyć tablicę 500 adresów w przestrzeni kernela a następnie doczepić do tego tylko jedną regułę iptables. Korzyści są namacalne w postaci szybkości działania.

Dane do ipset można podać "ręcznie", ale można także kazać dnsmasq aby sam rozwiązywał nazwy i dodawał adresy do ipset. Ten sposób został wykorzystany do blokowania właśnie facebooka - odwołując się do strony facebook.com następuje przełożenie nazwy na adres ip, dnsmasq daje go do ipset, a przy pomocy odpowiedniej reguły iptables korzystającej z ipset blokujemy ten ruch.

Zalety:
- szybkie działanie
- skuteczne działanie na poziomie adresu domeny

Wady:
- blokuje wszytko co na danym adresie pracuje, więc jest problem z wirtualnymi hostami (np. blokując google-analytics można zablokować tym samym youtube)
- komputery muszą używać serwera dns ma routerze (lub można wymusić żeby go używały)

Instalacja
Domyślnie w OpenWrt jest dnsmasq kompilowany bez wsparcia dla ipset. Normalną wersję należy odinstalować, a zainstalować jego pełną wersję:

# opkg update
# opkg remove dnsmasq
# opkg install dnsmasq-full
# /etc/init.d/dnsmasq enable

Instalujemy także pakiet ipset

# opkg install ipset

Następnie dodajemy odpowiednią regułę ipset:

# ipset create facebook hash:ip

(można to dodać np. do /etc/rc.local), oraz odpowiedni łańcuch do blokowana facebooka w iptables:

# iptables -I FORWARD -m set --match-set facebook dst,src -j REJECT

(to z kolei można dodać do /etc/firewall.user). Zostaje tylko poinformowanie dnsmasq że ma uzupełniać dane dla ipset rozwiązując nazwy domenowe facebook.com i fb.com:

# uci add_list dhcp.@dnsmasq[0].ipset='/fb.com/facebook'
# uci add_list dhcp.@dnsmasq[0].ipset='/facebook.com/facebook'
# uci commit

I restartujemy dnsmasq:

# /etc/init.d/dnsmasq restart

W komputerze w przeglądarce wpisujmy facebook.com - powinien pojawić się komunikat o odrzuceniu połączenia.

Możemy też na routerze zweryfikować czy ipset dostał adresy:

# ipset list
Name: facebook
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8312
References: 4
Members:
31.13.93.3
173.252.120.6
69.171.230.5
173.252.74.22
...

oraz czy faktycznie łapie się to na łańcuchach iptables:

# iptables -v -L FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   18  2368 REJECT     all  --  any    any     anywhere             anywhere             match-set facebook dst,src reject-with icmp-port-unreachable
 5988 4445K delegate_forward  all  --  any    any     anywhere             anywhere
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

2

Odp: [howto] Blokowanie facebooka

A ja użyłem takiej reguły:

dla całego zakresu sieci wewnętrznej:
/sbin/iptables -A FORWARD -s 192.168.1.0/24 -m string --string "facebook" --algo bm --to 65535 -j DROP

lub dla wybranego zakresu sieci wewnętrznej:
/sbin/iptables -A FORWARD -m iprange --src-range 192.168.1.40-192.168.1.125 -m string --string "facebook" --algo bm --to 65535 -j DROP

Nie trzeba wymuszać DNS-ów routera
Działa dla http i https

3

Odp: [howto] Blokowanie facebooka

Jak to ma się do zablokowania np. Youtube, czy reszta usług Google będzie działać?

4

Odp: [howto] Blokowanie facebooka

Jeżeli chodzi o mój sposób, to możesz tak również zablokować youtube.
Reszta googlowych gadżetów będzie działała

5 (edytowany przez simono 2015-09-18 11:02:10)

Odp: [howto] Blokowanie facebooka

ciecio napisał/a:

A ja użyłem takiej reguły:

dla całego zakresu sieci wewnętrznej:
/sbin/iptables -A FORWARD -s 192.168.1.0/24 -m string --string "facebook" --algo bm --to 65535 -j DROP

lub dla wybranego zakresu sieci wewnętrznej:
/sbin/iptables -A FORWARD -m iprange --src-range 192.168.1.40-192.168.1.125 -m string --string "facebook" --algo bm --to 65535 -j DROP

Nie trzeba wymuszać DNS-ów routera
Działa dla http i https

Jak usunąć ewentualnie regułę i jak powinna wyglądać tylko dla jednego adresu IP? Jak sprawa wygląda z obciążeniem o którym pisał Cezary?

6

Odp: [howto] Blokowanie facebooka

SORRY , nie sprawdziłem na openwrt
Iptables w openwrt nie obsługuje modułu string

Co do samej zasady działania to nie istnieje w tym przypadku problem nadmiernego obciążenia opisywany przez Cezarego.
A to dlatego, ze nie blokujemy adresów IP a słowo kluczowe w zapytaniu DNS
Z blokowaniem youtube według sposobu Cezarego byłby problem, ponieważ na tych samych adresach IP co youtube pracują też inne googlowe usługi.
Dlatego sposób z wykorzystaniem modułu string jest optymalny.
Niestety przynajmniej na razie niedostępny w openwrt

7

Odp: [howto] Blokowanie facebooka

A dało by się popełnić kompilację paczki do Iptables (do CC ) co obsługuje moduł string lub coś w stylu weburl w gargoyle ?
Myślę że sporo użytkowników jest zainteresowanych "Parental controls" lub zwyczajnym blokowaniem durnych stron.
Wielu moich znajomych zainstalowało gargoyle tylko i wyłącznie dla filtrowania stron za pomocą modułu weburl a w CC nie mogę znaleźć podobnego rozwiązania poza transparentnym proxy itd.

A tak z innej beczki: to po jakim czasie od zbutowania się CC powinien zaktualizować się czas za pomocą ntp ?
U mnie to się nigdy nie dzieje choć opcję aktualizacji czasu mam zaznaczoną. Muszę to ręcznie robić lub za pomocą wpisu w cronie. Z tego co pamiętam to aktualizacja czasu w gargoyle była by default w cronie. Takie drobne rzeczy a cieszą smile

wdr3600, wndr3700v2, wl500w

8

Odp: [howto] Blokowanie facebooka

Natychmiast jak wan wstaje. W openwrt jest osobny demon do tego, w gargoyle jest tak samo. W cronie był tylko zapisane czasu do pliku.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: [howto] Blokowanie facebooka

a jest jakis sposob w przypadku gdy posiadamy serwer AD i dns'y musza wskazywac na niego?

10

Odp: [howto] Blokowanie facebooka

Dnsy AD skieruj na te z routera smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11 (edytowany przez morfik 2015-09-19 23:34:26)

Odp: [howto] Blokowanie facebooka

ciecio napisał/a:

SORRY , nie sprawdziłem na openwrt
Iptables w openwrt nie obsługuje modułu string

Obsługuje, trza tylko sobie doinstalować: kmod-ipt-filter i iptables-mod-filter .

Poza tym, ja bym unikał blokowania poprzez dopasowanie stringów w zawartości pakietów -- wystarczy przejść się po necie i masz sporo pakietów zablokowanych i to bez odwiedzania strony fejsa. Teoretycznie działa ale co psuje w praktyce, to tego nie wiem. big_smile Na pewno coś nie działa na wszystkich tych stronach co mają takie pakiety przyblokowane. Trzeba by raczej sniffera zapuścić i ustalić jakie to są pakiety, mam nadzieję, że zrobiłeś to i nie radzisz ludziom, by blokowali sobie stringi youtube i inne tak mało zwięzłe dopasowania, które mogą naprawdę rozwalić komuś net. big_smile

Tak sobie popatrzyłem na zawartość pakietów i głównie http ma problemy bo tutaj wszystko leci otwartym textem i jak jest obrazek co ma nazwę facebook, to się nie wyświetli. big_smile Także jak ktoś będzie przeglądał newsy o prywatności i tam coś będzie zawierać czystym textem słowo facebook, to będą problemy z wyświetleniem zawartości. W https, to jedyne pakiety jakie widzę, to mają adres www.facebook.com przy nawiązywaniu tunela TLS, także jeśli by tę regułę ograniczyć jedynie do protokołu https, to będzie już o wiele lepiej, a face i tak nie da rady przeglądać po http.

Generalnie to bym tę regułę przepisał do

iptables -I FORWARD -p tcp --dport 443 -m string --string "www.facebook" --algo bm --to 65535 -j DROP
Morfitronik -- blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android