Přesměrování
Obsah
Úvod
Toto je finální verze k právě dodělanému modulu přesměrování (červenec 2011). V Unartu Slavičín jsme používali přesměrování napsané s poněkud provizorním návrhem, protože jsme poměrně akutně potřebovali blokovat lidi, kteří neplatili internet. Dříve jsme k tomuto účelu používali přesměrování pomocí firewallu v Mikrotiku, ale toto bylo velmi nešťastné a nepraktické řešení. Konfigurace více než stovky Mikrotiků byla problematická a v praxi to nebylo dlouhodobě použitelné. V roce 2008 během prázdnin, kdy jsme ve Freenetisu dopsali finanční část, která je založená na podvojném účetnictví, jsme potřebovali informace získané o kreditech členů nějak využít. Rozhodli jsme se zabudovat přesměrování do Freenetisu. Výsledný modul tehdy nebyl úplně nejlíp navržený, ale velmi nám pomohl udělat pořádek. Po čase začali růst požadavky a rostla potřeba nových vlastností. Do vývoje Freenetisu se zapojil Lubomír Buben z Hkfree a jeden z modulů, na kterém chtěl pracovat, bylo právě přesměrování. Bohužel ani jemu se nepodařilo dotáhnout výsledek do konce. Dokumentace na této stránce je napsaná až v červenci 2011, kdy konečně nová verze přesměrování byla dokončená.
K čemu to je dobré?
Přesměrování lze využít k blokování přístupu členů na internet z různých důvodů. Jednak je možné takto blokovat lidi, jejichž IP adresa zařízení není v databázi. Dále je možné zablokovat internet lidem, kteří si přerušili členství, anebo nemají zaplaceny členské příspěvky. Přesměrování lze také využít k informování členů o blížící se valné hromadě, o plánovaném výpadku připojení, o možnosti přechodu na novou bezdrátovou technologii apod.
Jak to funguje?
Na jedné straně je Freenetis, ve kterém je kompletní evidence o tom, čí IP adresy mají být přesměrovány. Toto všechno spravuje administrátor Freenetisu nebo hospodář nebo jiný člověk, který tyto věci ve sdružení řeší. On si určí, kdy koho chce zablokovat, kdy komu povolí internet a kdy dá někomu privilegium, aby se na něj přesměrování nevztahovalo.
Na druhé straně je centrální router nebo také brána do internetu. Obvykle je to nějaký stroj s Linuxem, přes který teče provoz ze sítě do internetu a na kterém běží firewall, případně další služby jako DNS atd. Na tomto stroji je cronem spouštěn synchronizační skript v pravidelném intervalu (u nás jedna minuta). Tento skript si stáhne ze speciálních stránek Freenetisu dvě informace. Seznam síťových adres s maskou a seznam povolených IP adres. Skript vezme tyto rozsahy a IP adresy a naplní jimi ipsety v jádře (k tomuto je modul ipset). Následně vygeneruje pravidla pro firewall iptables, na základě kterých pak dochází k přesměrování. Firewall tedy přesměruje ty IP adresy, které chtějí jít na internet, spadají do načtených rozsahů, ale nejsou v seznamu povolených IP adres. To znamená, že přesměrování se uplatňuje jen pro ty podsítě v systému, pro které chce administrátor. Přesměrovány jsou jednak neznámé IP adresy (jinak by byly poslány s v seznamu povolených) a pak ty, které chceme přesměrovat (z pohledu centrálního routeru jde o vyřazení ze seznamu povolených). Toto přesměrování provádí firewall na jiný port (u nás to je 36000) centrálního routeru. Na tomto portu běží lehký webový server, který na tomto portu dělá jednoduchý HTTP redirect na jinou stránku. V našem případě jde o stránku Freenetisu vyhrazenou k tomuto účelu, např. freenetis.domena.cz/redirection.
Vracíme se zpět k Freenetisu. Freenetis si podle IP adresy návštěvníka na této stránce dohledá ve své databázi důvod přesměrování a uživateli zobrazí příslušnou zprávu. Některé zprávy si může uživatel sám zrušit, toto se hodí pro zprávy pouze informativního charakteru. Uživatel v tomto případě klikne na příslušný odkaz a je mu zobrazen rozcestník, na kterém může pokračovat do internetu. Musí ovšem počkat dobu trvání synchronizačního cyklu (u nás jedna minuta) než dojde k aktualizaci informace přesměrování na centrálním routeru.
Typy zpráv
Existuje několik zpráv, které mají různé vlastnosti. Po instalaci obsahuje systém pouze systémové zprávy. Není možné je mazat, protože jsou vázané na konkrétní funkcionalitu v systému.
- Neznámé zařízení
- Přerušené členství
- Dlužník
- Upozornění na placení - člen ho může sám vypnout oproti přesměrování "Dlužník"
- Uživatelské zprávy - administrátor si může nadefinovat vlastní zprávy s libovolnými vlastnostmi
Při úpravě zpráv je možné použít html tagy i speciální tagy Freenetisu. Například {member_name} je speciální tag napsaný v editoru zprávy. Uživateli se však místo toho zobrazí jeho jméno, v případě, že IP adresa návštěvníka patří nějakému členovi, jinak jsou zobrazeny tři otazníky ???. Lze použít tagy
- {ip_address} - IP adresa návštěvníka
- {subnet_name} - jméno podsítě IP adresy návštěvníka
- {member_name} - jméno člena
- {member_id} - ID člena
- {balance} - stav kreditu člena
- {variable_symbol} - variabilní symbol člena
- {comment} - osobní komentář přesměrovanému konkrétnímu členovi od administrátora
Dalším konceptem je bílá listina. Na bílou listinu jsou umísťovány IP adresy členů, na něž se nemá přesměrování používat. Existuje trvalá bílá listina určená pro důležité partnery, obecní úřady apod.
Dále pak dočasná bílá listina, kdy člen je přesměrován, protože neměl zaplaceno. On ale potřebuje aktivovat internet hned, aby mohl zaplatit třeba přes internetové bankovnictví nebo i z jiného důvodu. Je proto umístěn na dočasnou bílou listinu, ze které bude smazán při příštím importu výpisu. Výhledově je možné tuto funkcionalitu rozšířit o nějaký pevný čas, např. 3 dny při každodenním importu plateb nebo o individuální čas. Účel bílé listiny ale zůstává stejný.
Co je potřeba nastavit na straně Freenetisu?
Je potřeba vyplnit nastavení v menu Přesměrování. Informace o jednotlivých položkách je v programové nápovědě. Dále je potřeba napsat texty minimálně pro systémové zprávy. Je možné využít html tagů i speciálních tagů ve složených závorkách.
Pokud máte již Freenetis nainstalovaný, tak musíte ještě upravit váš soubor .htaccess. V něm přidejte povolení přístupu pro stránku redirection a smažte povolení přístupu pro stránku static. Výsledné pravidlo pak může vypadat např. takto:
# URL containing these strings will not be rewrited. RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|media|redirection|backuppc) RewriteRule ^(.*)$ - [PT,L]
Toto se netýká nových instalací Freenetisu, jim by už měl být .htaccess vygenerován správně instalátorem.
Co je potřeba nastavit na straně centrálního routeru?
Toto nastavení je už komplikovanější, ale člověk trochu znalý Linuxu by to měl zvládnout. Je potřeba nainstalovat
- ipset (v Debianu 6 je už dostupný přes repozitář, jinak je nutná ruční instalace)
- lighttpd (nebo jiný nenáročný web server pro HTTP redirect)
Do vhodného umístění (např. /usr/local/sbin) umístit synchronizační skript a nastavit jeho pravidelné spouštění v cronu.
Náš současný skript obsahuje zastaralé funkce a zatím nám na starém Debianu funguje. V novém Debianu bude potřebovat menší upgrade, aby fungoval. Současné verze je ve složce
application/redirection/vendors/frnts_ipset
Co se týče nastavení skriptu je potřeba určit vnitřní a veřejné IP adresy brány a port, na který bude firewallem přesměrován uživatel. Seznam rozsahů je stahován z adresy
<domena>/cs/web_interface/redirected_ranges
Seznam povolených IP adres pak z adresy
<domena>/cs/web_interface/allowed_ip_addresses