iptablesaprerouting

d.petr d.petr na post.cz
Pátek Listopad 3 17:00:37 CET 2006


d.petr na post.cz wrote:
>>------------ Původní zpráva ------------
>>Od: Petr Cacka <cacka na domica.cz>
>>----------------------------------------
>>
>>>>Chci ale provádět filtraci uživatelů na základě jejich MAC adresy (wifi síť)
>>
>>a
>>
>>>>neznámé MAC adresy přesměrovat na lokální webserver, kdy by byla stránka s
>>>>informacemi o možnosti připojení.
>>>>Tj. potřebuji v PREROUTINGu přesměrovávat pakety vyhovující pravidlu na
>>
>>squida,
>>
>>>>nevyhovující na webserver. A to je kámen úrazu, nevím jestli jde udělat dvě
>>>>přesměrování v rámci PREROUTINGu.
>>>
>>>Snad nebudu uplne placat, ale ja bych asi zkusil v PREROUTING nejdrive vyresit
>>
>>vsechny ostatni, tj. ty, co neprichazeji z eth0 na port tcp 80.
>>
>>>Zbyly by tedy zadosti z eth0 na tcp 80.
>>>Pak bych uvedl ta pravidla s mac (porad primo v PREROUTING; uz neni potreba
>>
>>opisovat eth0 a tcp a port) s presmerovanim na proxy, no a cely zbytek (tj.
>>nezname mac z eth0 na tcp 80) bych presmeroval na apache (jestli je na stejnem
>>PC, tak jen ACCEPT).
>>
>>>Sedim ted na widlich a nemuzu si tu myslenku overit. Takze jestli to nejde
>>
>>(nebo jestli jsem nepochopil zadost), nemlatte me.
>>
>>>Petr
>>>
>>
>>zkusím tedy zda bude fungovat toto (trosku modifikovany vas postup, protoze
>>potrebuji aby fw pustil vse od povolenych MAC adres, nejen co jde na port 80:
>>nejprve
>>IPTABLES -t nat -A PREROUTING -p tcp eth0 -m mac --mac-source 00:00:00:00:00
>>--dport 80 -j REDIRECT --to-port 3128   (1)
>>...
>>jednotlivě pro všechny "povolené" MAC adresy, tj vse povolene co je na port 80
>>
>>pak postupně pravidla (2)+(3)+(4) abych povolil oprávněným uživatelům i všechny
>>ostatní pakety (nejen ty co smeruji na port 80)
>>IPTABLES -t nat -N povoleniklienti (2)
>>IPTABLES -t nat -A PREROUTING -i eth0 -j povoleniklienti (3) (jen z vnitrni site
>>=eth0)
>>IPTABLES -t nat -A povoleniklienti -i eth0 -m mac --mac-source 00:00:00:00:00:00
>>-j ACCEPT (4) (pro každého registrovaného klienta)
>>
>>no a následně přesměrování (5) pro dotazy na port 80 pro neznámé MAC adresy a
>>ještě je třeba nastavit defaultní politiku PREROUTINGu na DROP, aby vše ostatní
>>zahazoval (např připojení na FTP pro neznámé MAC)
>>IPTABELS -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination
>>192.168.1.1:80 (5) (přesměrování na webserver)
>>
>>Teoreticky :-) by to mělo fungovat, zkusím to večer
>>
>>Jenom mě štve, že musím MAC adresy zapisovat 2x, poprvé v pravidlech (1) a pak v
>>(4), ale když to bude fungovat... tak proč ne
>>PetrC
> 
> 
> No, myslim, ze neni nutne psat mac dvakrat, mozna bych ...:
> 0) vytvorte si ten Vas retez "povoleniklienti" v -t nat
> 1) Nejdriv vyberte zname mac (klidne vsechny protokoly) a prevedte je do "povoleniklienti", tam je pak vyridime
> iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source 00:00:00:00:00 -j povoleniklienti
> Zbydou neznami klienti.
> 2) Neznamym presmerujem port 80 na webserver
> iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
> pripadna pravidla pro dalsi protokoly/porty neznamych uzivatelu by se psala zde, nejspis vse DROP

	Malá oprava: Tak jak jsem to napsal, tady nezbývají jen pakety 
neznámých uživatelů z eth0, ale taky pakety ze všech ostatních rozhraní. 
Takže generální DROP by asi zapůsobil dost nechtěně. DROPnout by se tady 
muselo buď jen vše z eth0 a zbytek pořešit (asi ACCEPT), nebo ostatní 
rozhraní vyřešit hned na začátku před bodem 1).

	Petr


> 3) Do "povoleniklienti" zapsat pravidlo pro presmerovani na proxy; zde jsou uz jen povoleni, tedy nemusime znovu kontrolovat mac, presmerujem je vsechny naraz
> iptables -t nat -A povoleniklienti -p tcp --dport 80 -j REDIRECT --to-port 3128
> ted se muzou napsat dalsi pravidla pro jine protokoly/porty znamych klientu, pripadne vse ACCEPT
> 
> (doufam, ze to takto jde)
> 
> Petr



Další informace o konferenci Linux