| Blokowanie HTTPS (np. Facebook) za pomocą dnsmasq i ipset | 
| shibby | Dodano 14-09-2015 11:30 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | Tytułem wstępu 
 Obsługa IPSet dla dnsmasq dostępna jest w Tomato od pewnego czasu. Od wersji v129 również Tomato-ARM również wspiera tą funkcjonalność.
 
 Blokowanie połączeń szyfrowanych, nie jest proste, gdyż nie ma idealnej metody filtrowania pakietów. Najpopularniejszą metodą jest użycie modułu string z iptables, który pozwala na przeskanowanie każdego pakietu pod kątem występowania danego słowa. Generuje to jednak 3 problemy:
 1) dodatkowe i znaczne obciążenie procesora skanowaniem każdego pakietu
 2) nie zawsze filtrowane słowo występuje z zaszyfrowanym pakiecie w czytelnej formie
 3) blokowane słowo może być częścią innego słowa, np. blokowanie nk.pl spowoduje również blokadę bank.pl, ingbank.pl itd.
 
 Znacznie lepszą metodą jest blokowanie adresów IP serwerów danej witryny. Problem w tym, że duże serwisy jak chociażby facebook stoją na farmach serwerów, które posiadają wiele adresów IP, co więcej te adresy ciągle się zmieniają. Tu z pomocą przychodzi nam funkcjonalność IPSet.
 
 W dużym skrócie: Tworzymy łańcuch IPSet, do którego DNSmasq będzie dopisywał wszystkie adresy IP jakie uda mu się rozwiązać dla danej domeny. Mają listę adresów IP w łańcuchu IPSet możemy wskazany łańcuch zablokować prostą regułką iptables.
 
 
 Do dzieła.
 
 Załóżmy, że chcemy zablokować stronę Facebook dla danego adresu IP w naszej sieci, np. 192.168.1.10.
 
 By to uczynić, do skryptu Firewall doklejamy następujące regułki:
 
 Dla Tomato Mipsel
 
 Cytat modprobe ipt_setmodprobe ip_set
 modprobe ip_set_iphash
 
 ipset --create facebook iphash
 
 iptables -I FORWARD 1 -s 192.168.1.10 -m set --match-set facebook dst,src -j DROP
 
 Dla Tomato-ARM
 
 Cytat modprobe xt_setmodprobe ip_set
 modprobe ip_set_hash_ip
 
 ipset create facebook hash:ip
 
 iptables -I FORWARD 1 -s 192.168.1.10 -m set --match-set facebook dst,src -j DROP
 pierwsze 3 linie to załadowanie wymaganych modułów kernela. Kolejna linia tworzy łańcuch ipset o nazwie "facebook" Ostania reguła blokuje pakiety, których źródłem jest ip 192.168.1.10 dla reguły "set facebook".
 
 Po tym zabiegu wydajemy jednorazowo komendę "service firewall restart" by nasze reguły zostały zaaplikowane. Po restarcie routera działo się to będzie automatycznie.
 Na tym etapie strona facebooka będzie jeszcze normalnie chodzić, ponieważ łańcuch, który blokujemy, jest póki co pusty.
 
 Teraz pora na DNSMasq. W zakładce Advanced -> DHCP/DNS -> w Custom Configuration, dopisujemy:
 
 Cytat ipset=/facebook.com/facebookipset=/fb.com/facebook
 i zapisujemy zmiany. Dzięki tym wpisom, dnsmasq będzie automatycznie "karmić" nasz łańcuch "facebook" nowymi adresami IP, jeżeli tylko odpytamy domeny facebook.com lub fb.com. Od tej pory strona powinna być już zablokowana.
 
 Oczywiście by nasz łańcuch był "karmiony", klienci muszą używać serwera DNS wbudowanego w Tomato.
 
 PS To rozwiązanie ma jeden minus: blokuje komunikację z danych adresem IP serwera, zatem wszystkie usługi na danym adresie IP przestaną działać. Przykładowo tomato.groov.pl o openlinksys.info stoją na tym samym adresie IP. Zablokowanie jednej strony spowoduje automatycznie blokadę drugiej witryny.
 Bardziej problematyczny przykład to usługi google. Blokada np. Youtuba może jednocześnie zablokować dostęp do innych usług googla np. gmail lub google docs, ponieważ Google używa tej samej farmy serwerów do różnych aplikacji.
 
 Mimo wszystko mam nadzieję, że powyższe rozwiązanie będzie dla niektórych pomocne.
 
 Pozdrawiam
 Edytowany przez shibby dnia 14-09-2015 12:05
 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| qrs | Dodano 15-09-2015 20:06 | 
|  
 Maxi User
 
  
 
 Posty: 749
 Dołączył: 02/12/2012 00:55
 
 
 | potwierdzam, działa na R7000 (ARM) 
 super!!!
 
 ---Netgear R7000 • Netgear WNR3500L v2 • MikroTik hAP ac^2 • TP-LINK M7650
 
 | 
|  | 
 
 | 
|  | 
| need_password | Dodano 16-09-2015 11:29 | 
|  
 User
 
  
 
 Posty: 100
 Dołączył: 23/09/2014 10:25
 
 
 | Ja wolę blokować za pomocą OpenDNS. Tam są całe kategorie stron, które mają być blokowane, a w panelu wygląda to tak http://i60.tinypic.com/auz6ti.jpg
 
need_password załączono następujące plik:
Nie masz uprawnień, by zobaczyć załączniki w tym wątku. 
 Asus RT-AC56UNetgear R7000
 Asus RT-N10U
 Tenda N60
 Linksys WRT54G
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 16-09-2015 12:31 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | ale korzystając z OpenDNS: 1) zmuszasz się do korzystania akurat z ich DNSów i żadnych innych
 2) jeżeli użytkownik zmieni sobie DNSy na końcówce lub wpisze danego hosta w plik hosts, to blokada openDNS przestanie działać.
 
 To rozwiązanie też oczywiście idealne nie jest ale nie podlega ono powyższym dwóm punktom.
 
 Powyższe rozwiązanie nie ma na pewno zastosowania przy filtrowaniu danych treści tematycznych. Chodzi w nim raczej o ograniczenie wybranej osobie/osobom dostępu do danej witryny (facebook, youtube), którą dana osoba w domu (np. dzieci) lub w pracy nadużywa.
 
 Sam przedstawiony przeze mnie sposób jest również przedstawieniem przykładu wykorzystania dnsmasq+ipset, o którym mało kto wie. Dla przykładu dodam, że funkcjonalność ipset używana jest przez Tomato np. w funkcjonalności Selectable routing dla OpenVPN
   
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| need_password | Dodano 17-09-2015 22:38 | 
|  
 User
 
  
 
 Posty: 100
 Dołączył: 23/09/2014 10:25
 
 
 | OPENDNS jest skuteczny, a raczej był. Pomimo że było na kompach zablokowane takie ustawienia jak zmiana DNS, to i tak jeden użyszkodnik złamał "system" i ominął ograniczenie. Jak? A bardzo łatwo. Kutafon zorientował się, że nasza sieć pracuje na DSLu. Czyli Orange. Jak Orange to wystarczy otworzyć google i wpisać "proxy tpsa". Wynik to 2 adresy serwera proxy. Wpisał je więc w firefoxa w Opcje->zaawansowane->sieć->ustawienia. I już twarzoksiążka chodzi, nk działa, a robota stoi. Firefoxa przecież nie da się zablokować tak, żeby to ustawienie było ukryte. Jutro oskarżę go o złamanie polityki bezpieczeństwa firmy i każe głównemu ekonomowi go wychłostać. Ale to jutro będzie. A dziś trzeba zablokować te proxy. Ma ktoś pomysł jak? 
 Asus RT-AC56UNetgear R7000
 Asus RT-N10U
 Tenda N60
 Linksys WRT54G
 | 
|  | 
 
 | 
|  | 
| Steel_Rat | Dodano 17-09-2015 23:09 | 
|  
 OL Maniac
 
  
 
 Posty: 1831
 Dołączył: 29/05/2011 22:24
 
 
 | Myśle, że jak tam się wpisze każde proxy nie tylko z tepsy to ominie się OPENDNS. Musiałbyś każde proxy blokować. 
 WRT3200ACN (WRT32X) + OpenWRT 18.06+światełko 150/150 Mb/sAsus RT-AC68UvE1 + RMerlin + Entware
 Netgear WNR3500Lv2 + DDWRT
 | 
|  | 
 
 | 
|  | 
| ryskonet | Dodano 04-11-2015 11:16 | 
|  
 User
 
  
 
 Posty: 10
 Dołączył: 23/01/2015 14:47
 
 
 | Pewnie pytanie banalne, ale jak tym sposobem zablokować zakres np. 10.0.0.2-10.0.0.254? 
 ASUS RT-N18UTomato Firmware 1.28.0000 -131 K26ARM USB AIO-64K
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 04-11-2015 11:18 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | zamiast -s wpisz -m iprange --src-range 10.0.0.1-10.0.0.254
 
 albo (bo w sumie twój zakres tyczy się całej podsieci) możesz użyć -s 10.0.0.0/24
 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| ryskonet | Dodano 04-11-2015 12:04 | 
|  
 User
 
  
 
 Posty: 10
 Dołączył: 23/01/2015 14:47
 
 
 | dzięki :-) 
 Połączony z 09 listopad 2015 16:51:51:
 Shibby, a czy Twój przykład możnaby zmodyfikować, by działał odwrotnie, tzn. zablokować dla tego zakresu cały ruch z internetu z wyjątkiem tego, co jest w łańcuchu (w przykładzie "facebook")
 
 z góry dzięki
 Edytowany przez ryskonet dnia 09-11-2015 16:51
 
 ASUS RT-N18UTomato Firmware 1.28.0000 -131 K26ARM USB AIO-64K
 | 
|  | 
 
 | 
|  | 
| shadowlord | Dodano 06-01-2016 23:42 | 
|  
 User
 
  
 
 Posty: 73
 Dołączył: 14/01/2012 20:02
 
 
 | po wpisaniu 
 iptables -I FORWARD 1 -s 192.168.1.10 -m set --match-set facebook dst,src -j DROP
 
 wywala mi błąd
 
 iptables v1.3.8: Unknown arg `(null)'
 
 coś mu nie pasuje w składni ?
 
 Netgear R6400 + Tomato v138ASUS RT-N16 + Tomato v138
 | 
|  | 
 
 | 
|  | 
| przemasisko | Dodano 07-01-2016 10:50 | 
|  
 Super User
 
  
 
 Posty: 550
 Dołączył: 17/05/2010 13:56
 
 
 | Załadowałeś moduły pod odpowiednią architekturę? | 
|  | 
 
 | 
|  | 
| shadowlord | Dodano 07-01-2016 11:27 | 
|  
 User
 
  
 
 Posty: 73
 Dołączył: 14/01/2012 20:02
 
 
 | pewnie do AC-66U to raczej Mipsel ? 
 Połączony z 07 styczeń 2016 11:30:04:
 obecnie działa mi to
 
 iptables -I FORWARD -p tcp -m tcp -m string --string "facebook.com" --algo bm -j DROP
 iptables -I FORWARD -p tcp -m tcp -m string --string "facebook" --algo bm -j DROP
 
 po załadowaniu
 
 modprobe -a xt_string
 
 ale metoda z tego postu bardziej mi się podoba tylko jest zonk z tym poleceniem
 
 iptables -I FORWARD 1 -s 192.168.1.10 -m set --match-set facebook dst,src -j DROP
 
 tak jak by ta wersja iptables nie rozumiała tej składni
 Edytowany przez shadowlord dnia 07-01-2016 11:30
 
 Netgear R6400 + Tomato v138ASUS RT-N16 + Tomato v138
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 07-01-2016 12:21 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | a łańcuch facebook dla ipset utworzyłeś? 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| shadowlord | Dodano 07-01-2016 12:28 | 
|  
 User
 
  
 
 Posty: 73
 Dołączył: 14/01/2012 20:02
 
 
 | jak zmienię trochę składnię na iptables -I FORWARD 1 -s 192.168.1.10 -m set --match facebook dst,src -j DROP
 to dostaje
 iptables v1.3.8: Couldn't load match `facebook':File not found
 
 Połączony z 07 styczeń 2016 12:29:33:
 tak dostaje info że już jest
 ipset v4.5: Set already exists
 Edytowany przez shadowlord dnia 07-01-2016 12:29
 
 Netgear R6400 + Tomato v138ASUS RT-N16 + Tomato v138
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 07-01-2016 12:31 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | a pokaż ipset list albo ipset --list 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| shadowlord | Dodano 07-01-2016 12:34 | 
|  
 User
 
  
 
 Posty: 73
 Dołączył: 14/01/2012 20:02
 
 
 | Name: facebook Type: iphash
 References: 0
 Header: hashsize: 1024 probes: 8 resize: 50
 Members:
 31.13.93.3
 31.13.93.36
 173.252.120.68
 31.13.81.36
 31.13.93.7
 
 Połączony z 07 styczeń 2016 12:36:22:
 coś dodaje chyba mimo że polecenie wywala błąd
 
 Połączony z 07 styczeń 2016 12:54:33:
 tylko nie wiem czy facebook będzie blokowany bo nie widzę ty adresów z ipset --list w tablicy iptables do blokowania ?
 Edytowany przez shadowlord dnia 07-01-2016 12:54
 
 Netgear R6400 + Tomato v138ASUS RT-N16 + Tomato v138
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 07-01-2016 14:57 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | Cytat iptables -I FORWARD 1 -s 192.168.1.10 -m set --match facebook dst,src -j DROP
 w tutorialu pisze --match-set a nie --match
 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 | 
|  | 
| shadowlord | Dodano 07-01-2016 18:19 | 
|  
 User
 
  
 
 Posty: 73
 Dołączył: 14/01/2012 20:02
 
 
 | wiem ale i tak nie działa, sprawdzam różne warianty, niestety w ipset --list mam adresy IP ale do blokowania ich nie dodaje przez to że wywala błąd iptables 
 Połączony z 07 styczeń 2016 18:20:58:
 ciągle dostaje
 iptables v1.3.8: Unknown arg `(null)'
 Try `iptables -h' or 'iptables --help' for more information.
 
 Połączony z 07 styczeń 2016 18:24:42:
 może brakuje jakiegoś modułu iptables, mam świeże tomato postawione ?
 
 Połączony z 07 styczeń 2016 18:35:43:
 coś takiego przyjmuje
 iptables -I INPUT -m set --set facebook src -j REJECT
 
 Połączony z 07 styczeń 2016 18:38:58:
 poszło taką formułę przyjmuje i działa blokowanie
 
 iptables -I FORWARD -m set --set facebook dst,src -j DROP
 Edytowany przez shadowlord dnia 07-01-2016 18:38
 
 Netgear R6400 + Tomato v138ASUS RT-N16 + Tomato v138
 | 
|  | 
 
 | 
|  | 
| qrs | Dodano 25-01-2016 15:21 | 
|  
 Maxi User
 
  
 
 Posty: 749
 Dołączył: 02/12/2012 00:55
 
 
 | można tworzyć kilka łańcuchów czy opierać się tylko o facebook np 
 
 
 ipset=/fb.com/facebookipset=/fbcdn.net/facebook
 ipset=/facebook.net/facebook
 ipset=/akamaihd.net/facebook
 ipset=/facebook.com/facebook
 ipset=/nk.pl/facebook
 ipset=/redtube.com/facebook
 rozumiem, że składnia jest następująca
 ipset=/[blokowana strona https]/[łańcuch]
 
 i żeby powielać łańcuchy należy również powielać wpisy w firewall
 
 
 
 ipset create [nowy łańcuch] hash:ipiptables -I FORWARD 1 -s 192.168.0.11 -m set --match-set [nowy łańcuch] dst,src -j DROP
 no i gdzie można podejrzeć zebrane IP dla blokowanych stron?
 
 Połączony z 25 styczeń 2016 15:33:04:
 po
 
 
 
 
 w logach mam
 
 
 Cytat Jan 25 15:01:35 R7000 preinit: 188: /tmp/ppp/resolv.conf can't be opened Jan 25 15:04:03 R7000 rcheck: Activating rule 1
 Jan 25 15:04:04 R7000 kernel: ip_set: protocol 6
Edytowany przez qrs dnia 25-01-2016 15:33
 
 ---Netgear R7000 • Netgear WNR3500L v2 • MikroTik hAP ac^2 • TP-LINK M7650
 
 | 
|  | 
 
 | 
|  | 
| shibby | Dodano 25-01-2016 16:26 | 
|  
 SysOp
 
  
 
 Posty: 17165
 Dołączył: 15/01/2009 20:30
 
 
 | tak, można robić kilka łańcuchów ipset. Jeżeli zaś wszystkie te domeny mają być aplikowane dla identycznej reguły iptables (dla tych samych hostów), to nie ma potrzeby je powielać. 
 zawartość łańcuchów podejrzeć można komendą "ipset list"
 
 Router: Unifi Cloud Gateway FiberSwitch: Unifi USW-Lite-16-PoE
 Switch: Unifi USW-Flex-Mini - szt. 2
 Wi-Fi: Unifi U6-Lite - szt. 2
 Proxmox VE: i5-13400T, 64GB RAM, 2x 512GB NVMe, 4x 2TB SSD
 VM #1: Synology SA6400
 VM #2: Debian, WWW
 VM #3:  Home Assistant OS
 | 
|  | 
 
 |