iptablesaprerouting

Libor Chocholaty libor_ml1 na mts.cz
Pátek Listopad 3 17:14:01 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
> 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)
>
>   
Jeste me napadlo, jak na webserveru zaridim, aby se vyridil *jakykoli* 
pozadavek nejakou statickou strankou?
Treba prijde pozadavek na http://www.nekde.cz/peknastranka.html a ja 
potrebuju tomu cloveku naservirovat moji stranku 
http://muj.server.cz/info.html
Presmerovani na muj server udela DNAT, ale co si pak muj apache pocne s 
tim pozadovanym URL?

Libor



Další informace o konferenci Linux