Omijanie blokady dzielenia Internetu - Michał Sternadel Omijanie blokady dzielenia Internetu

Światło: Zapal | Zgaś

Omijanie blokady dzielenia Internetu

Dodano: 18.11.2008, 16:59:55

Odkąd na moim blogu napisałem notkę Blokada dzielenia Internetu, ruch do niego znacznie wzrósł. Z dnia na dzien coraz więcej osób wyszukuje frazy "blokada dzielenia internetu"+"jak ominąć", co jest dla mnie znakiem wyzysku, niewolnictwa, braku wolności oraz w wielu przypadkach niezgodności z umową świadczonych usług przez providera Internetu względem klienta. Pamiętajmy: Dostęp do Internetu znaczy tyle samo co Nieograniczony dostęp do Internetu, gdyż Internetem nie są strony www, TTL=1, blokady, wymuszone proxy (transparentne), zwłaszcza w realiach, kiedy to tak na prawdę płaci się za szybkość przesyłu danych, a nie za dostęp do sieci. Dlaczego jeszcze prawnicy nie dobrali się do tych dojarek, co ściągają dodatkowe pieniądze z klienta (szczególnie centusiowi, krakowscy ISP) lub którzy nie wywiązują się z postawionych warunków umowy? Tak czy siak, czasem warto wziąć sprawy w swoje ręce, choćby tylko po to, aby zaraz po tym je umyć. Poniżej opiszę mydełka o różnych zapachach na różnego rodzaju brudy.

Blokada TTL=1 -- na każdą kieszeń.
Starsi providerzy oraz ci mniej zamożni często blokują routery w sieci za pomocą ustawienia czasu życia pakietów przychodzących ze świata do użytkonika na 1. Krótko pisząc, zgodnie z RFC 791 każdy pakiet po przejściu przez urządzenie powyżej powłoki 3 modelu OSI musi zmniejszyć swoją wartość TTL o jeden. Kiedy TTL pakietu osiągnie 0 pakiet umiera. W skrócie, pakiet umiera na komputerze użytkownika i nie przechodzi dalej przy standardowych ustawieniach NAT'u:
iptables -t nat -A POSTROUTING -o EXTDEV -j SNAT --to-source EXTIP
iptables -t nat -A POSTROUTING -s INTNET -j SNAT --to-source INTIP

lub maskarady:
iptables -t nat -A POSTROUTING -s INTNET -o EXTDEV -j MASQUERADE
Bardzo prosto jest ominąć taką blokadę, zwiększając na routerze TTL pakietu o jeden lub więcej:
iptables -t mangle -A PREROUTING -s INTNET -j TTL --ttl-inc 1
Ewentualnie ustawiając TTL od razu na inną wartość:
iptables -t mangle -A PREROUTING -s INTNET -j TTL --ttl-set 128
Do wykonania takich czynności niezbędne jest wkompilowana w jądrze obsługa ttl_target
(CONFIG_IP_NF_TARGET_TTL=y/m).
Jeżeli ktoś nie chce dodawać regułek iptables zmieniających TTL pakietów (pewnie ci, co bardzo skąpią zasoby swojego 486) może poświęcić kilka dni na kompilację (na 486) jądra Linuksa ze zmienionym plikiem net/ipv4/ip_forward.c:
ip_decrease_ttl(iph);
na
/* Decrease ttl after skb cow done */
/* ip_decrease_ttl(iph); */

Nie jest to oczywiście zgodne z RFC, ale czego się nie robi, aby być wolnym? Pozostało jeszcze dopisać, że większość obecnych routerów ma możliwość podbijania TTL, więc można nawet wykorzystać jakieś małe pudełeczko ku temu celu. Fakt ten znaczy jednak tyle samo, że administratorzy sieci zaczęli stosować inne blokady podziału łącza.

Sprawdzanie TTL
Metoda ta jest używana rzadko, niemniej jednak czasem można się z nią spotkać. Polega ona na sprawdzaniu wartości TTL pakietu wychodzącego od użytkownika w kierunku świata i porównanie go z wartością standardową dla różnych systemów operacyjnych, jeśli się nie mylę wygląda to tak:
iptables -N sprawdz_ttl
iptables -A FORWARD -p !icmp -s INTNET -j sprawdz_ttl
iptables -A sprawdz_ttl -m ttl --ttl-eq 127 -j RETURN
iptables -A sprawdz_ttl -m ttl --ttl-eq 31 -j RETURN
iptables -A sprawdz_ttl -m ttl --ttl-eq 63 -j RETURN
iptables -A sprawdz_ttl -m ttl --ttl-eq 254 -j RETURN
iptables -A sprawdz_ttl -j DROP
*

W tym momencie przekazywanie pakietów jest załączone dla standardowo działających systemów windows nt (wypuszczają pakiety z TTL=128), windows 95/98 (TTL=32), Linux (TTL=64) oraz Solaris (TTL=255). Blokada nie jest zbyt miła, gdyż każdy użytkownik może sobie sam ustawić TTL takie jakie mu się podoba, a żeby miał Internet musi mieć identyczne jak na firewall'u providera. Ten, kto chce podzielić Internet z taką blokadą może posłużyć się regułką:
iptables -t mangle -A PREROUTING -s INTNET -j TTL --ttl-set 128
lub, jak to zostało opisane powyżej, przekompilować jądro ze zmienionym plikiem ip_forward.c.
* -- dlaczego zamiast 128 jest 127, 32 jest 31... Szczerze -- nie jestem do końca pewien, czy powinno być o jedno mniej, czy dokładnie tyle, bo nie wiem, czy TTL jest zmniejszane przed łańcuchem FORWARD, czy też po. Ja nie stosuję blokad dzielenia łącza, więc nie wypowiem się w tej materii dokładniej, ktoś bardziej obeznany będzie wiedział i pewnie jemu to wystarczy.

Ohydna blokada
Szczerze się przyznam, że do tej pory nie wiem tak na prawdę na czym polega taka blokada, ale wydaje się być bardzo skuteczna. Jakimiś dziwnymi, magicznymi środkami super-administratorzy blokują możliwość dzielenia Internetu. Myślę, że lepiej nie zagłębiać się w tą tematykę (bo bardzo możliwe, że polega na podsłuchiwaniu całej zawartości pakietów), tylko od razu przystąpić do działania. Podział będzie trochę denerwujący, będzie trzeba pamiętać o programach-pomocnikach lub innych rzeczach, ale... czego się nie robi dla wolności?
Jeśli Internet dla ciebie to tylko strony www (dla większości chyba obecnie staje się to powoli prawdą) -- wystarczy instalacja na routerze jakiegoś serwera proxy. Jeśli router jest porządną maszyną można pokusić się od razu o Squid'a. Rzadko jednak router ma wystarczająco zasobów, aby uciągnąć taką krowę (nie piszę, że to złe -- sam używam i chwalę, ale na malutki router się nie nadaje). Za to bardzo lekki serwer http-proxy, jaki udało mi się znaleźć nazywa się Tinyproxy. Zużycie zasobów rośnie wraz ze zwiększaniem się ilości symultanicznych połączeń, czyli nie jest tak źle, bo na taniej maszynie można zaspokoić domowe potrzeby. Tak czy siak, idea polega na tym, aby zainstalować na routerze serwer proxy, a w przeglądarkach ustawić adres i port, na którym nasłuchuje. Genialne! Przykładowy plik konfiguracyjny tinyproxy może wyglądać tak:
User root
Group root
port 3128
Listen INTIP
Timeout 600
Syslog On
LogLevel Critical
MaxClients 60
MinSpareServers 4
MaxSpareServers 12
StartServers 6
MaxRequestPerChild 1000
Allow INTNET

Można od razu filtrować sobie niechciane treści (np. reklamy co zamulają Internet), dodając:
FilterURLs On
Filter /plik/z/definicjami

Plik z definicjami wygląda na przykład tak:
^http://*\.nasza-klasa\.pl
/reklamy/.*\.gif.*
/ads/

W swojej ulubionej przeglądarce należy ustawić serwer proxy o ip INTIP i porcie 3128 -- jest to konieczne, aby działały też połączenia szyfrowane. Jeżeli nie potrzebujemy ich, można pokusić się o zrobienie transparentnego proxy:
iptables -t nat -A PREROUTING -s INTNET -p tcp -d !INTNET --dport 80 -j DNAT --to-destination INTIP:3128
Jeżeli jednak dla ciebie Internet to Internet, są znów dwa sposoby, jeden zdumiewająco prosty, drugi troszeczkę trudniejszy, ale bardziej elastyczny. Zaczniemy od zdumiewająco prostego. Wszystko w nim sprowadza się do zainstalowania serwera http-proxy na routerze, na przykład tak jak powyżej oraz instalacji na maszynach klienckich programiku TransConnect. Umożliwia on utworzenie przezroczystej sieci korzystając z HTTP przechodzącej przez proxy. Minus jest taki, że działa tylko w Linux, FreeBSD, Solaris... ale przecież -- teraz każdy może mieć klikadełko! Po skompilowaniu i zainstalowaniu (make && make install) biblioteka zostanie przekopiowana do katalogu .tconn w katalogu domowym użytkownika. Konfiguracja jest wspaniale opisana w pliku INSTALL. Do podstawowych potrzeb wystarczy, aby tconn.conf wyglądał mniej więcej tak:
proxyserv INTIP
proxyport 3128
localnet INTNET
localnet 127.0.0.1/255.0.0.0
localnet 255.255.255.255/255.255.255.255

Aby skorzystać z ów biblioteki należy wyeksportować zmienną LD_PRELOAD ze ścieżką do pliku tconn.so:
export LD_PRELOAD=$HOME/.tconn/tconn.so
Można to oczywiście wepchać to do pliku ~/.bash_profile, co spowoduje, że po uruchomieniu powłoki BASH zmienna będzie dostępna w środowisku. I działa. Nawiasem mówiąc programik ten nadaje się również do otworzenia Internetu, gdzie działa tylko www, a zapytania do serwera DNS są również okrojone.

Trudniejszy, aczkolwiek też prosty sposób, to zainstalować na routerze serwer Socks v4/v5. Jest kilka dobrych rozwiązań. Używałem kiedyś Dante, ale potem odkryłem Srelay, który na moje ówczesne potrzeby wystarczył. Po zainstalowaniu na routerze srelay i wpisaniu INTNET any - do pliku /etc/srelay.conf, wystarczy go uruchomić:
srelay -i INTIP:1080 -a n -t -c /etc/srelay.conf
Teraz na komputerach klienckich można skonfigurować swoje ulubione oprogramowanie do korzystania z socks proxy. Niestety... Programów, które obsługują te serwery proxy jest mało. Z pomocą przyjdzie maleńki programik tsocks. Po zainstalowaniu wystarczy skonfigurować /etc/tsocks.conf:
local = INTNET
server = INTIP
port = 1080
servertype = 5

Teraz, aby odpalić programy, wymuszając łączenie przez proxy wystarczy przed ich nazwą wpisać tsocks. Dla przykładu: tsocks ssh ole.costamblah.blah -l czarustyran
Można oczywiście użyć także wspomnianego wcześniej Dantego, gdyż podobno ma obsługę klienta -- ja nie używałem.

Dla windowsa istnieje prosty i klikany zamiennik do wymuszania na programach dostępu do Internetu przez serwery socks. Nazywa się FreeCap, a jego używanie i konfiguracja jest -- jak mi się wydaje -- dziecinnie prosta, dlatego nie będę jej opisywał.

Legenda:
EXTDEV - urządzenie na którym dostajemy Internet,
EXTIP - ip zewnętrznego urządzenia, na którym dostajemy Internet,
INTDEV - urządzenie wewnętrzne, na którym chcemy łącze podzielić,
INTIP - ip wewnętrznego urządzenia,
INTNET - ip sieci lan wraz z maską tej sieci.

Mam nadzieję, że to była miła lektura, choć wiem, że trochę zbyt zagmatwana. Żeby nie posądzono mnie o bajki, napiszę, że przytoczone komendy były przeze mnie używane z wyjątkiem bloku oznaczonego *, natomiast pliki konfiguracyjne sprawdzone, wzorowane na dokumentacjach pakietów. Na wszelki wypadek dodam jeszcze, że tekst ma charakter edukacyjny i nie służy do celów niemoralnych, w szczególności zarobkowych.

Dodane obrazy:
Omijanie blokady dzielenia Internetu

Dodaj komentarz
Komentarze (5)
Publikowane komentarze są prywatnymi opiniami użytkowników witryny Michała Sternadela. Witryna Michała Sternadela nie ponosi odpowiedzialności za treść tych opinii.
#5
Data utworzenia:07.08.2009, 22:54:22
Autor:
Treść:wreszcie jakas pomoc dla uciśnionych
#4
Data utworzenia:15.06.2009, 21:56:41
Autor:ŁukaszW
Treść:wszystko fajnie, ale taka mała uwaga... Internet piszemy z  dużej litery (http://marcinmilkowski.pl/Tlumaczenie/Pisownia-wyrazu-&bdquoInternet&rdquo-&bdquointernet&rdquo.html)
#3
Data utworzenia:22.02.2009, 10:26:28
Autor:denis
Treść:wszystko bardzo ładnie, ale fajnie by było gdybyś napisał to pod bardziej zielonych uzytkowników. Gdzie wpisać te komendy?? Ale i tak wymiatasz... :-)
#2
Data utworzenia:03.12.2008, 00:49:13
Autor:kazik
Treść:hmmm to ciekawe co piszesz tylko tak sie zastanawiam ile ludzi coś ztego pojmie mało kto wogule iw oco chodzi ztymi info ja raczej kumam choc niedokońca pozdrawiam i  zapraszam na moje strony kazik.pl dosyć znana osoba na Gdowie
#1
Data utworzenia:18.11.2008, 23:42:09
Autor:pascon
Treść:Człowieku - wymiatasz!

1

Szybki kontakt:

Pozostaw zółtą karteczkę-wlepkę pod adresem:
Kraków, ul. Pawia 3 z id: #776AFFDA# oraz wiadomością. Jak nie zginie -- odczytam.

Ostatnie fotografie


Paproć
Paproć

Grzyb
Grzyb

  Więcej...