konto usunięte

Temat: Analiza pakietów i kształtowanie ruchu

Witam!

Mam taką zagwostkę: jest sobie maszyna z Freeradiusem. Standardowo słucha na porcie 1812. Każdy pakiet który przyjdzie na ten port zostaje normalnie obsłużony - norma :)

Natomiast jest drugi port, powiedzmy 2812 i pakiety przychodzące na ten port powinny być analizowane pod kątem nazwy użytkownika (są to pakiety RADIUSowe). Powiedzmy że szukam pakietów które mają user-name lukasz. Jeżeli jest taki user-name to przerzucam sobie pakiet na port 1812 i RADIUS się nim zajmuje. Jeżeli nie, to chciałbym cały ruch przerzucić do drugiej maszyny radiusowej na jej port 1812.

W skrócie:

Pakiet RADIUS
User-Name: lukasz ---port 2812--> user się zgadza -- redirect na port 1812 --> radius lokalny

Sytuacja 2:

Pakiet RADIUS
User-Name: marek ---port 2812 --> user się nie zgadza -- redirect na inny ip --> radius zdalny

Udało mi się taki efekt osiągnąć za pomocą iptables i parametru string:

iptables -t nat -A PREROUTING -p udp -m string --string "lukasz" --algo bm -d 192.168.1.202 --dport 2812 -j REDIRECT --to-port 1812
iptables -t nat -A PREROUTING -p udp -d 192.168.1.202 --dport 2812 -j DNAT --to-destination 192.168.1.110:1812
iptables -t nat POSTROUTING -s 192.168.1.33 -o eth0 -j SNAT --to-source 192.168.1.203

Niestety nie jest on zbyt dokładny, ponieważ powyższa reguła zostanie wykonana zarówno w przypadku loginu lukasz jak i lukasz68 a mogą być to dwie zupełnie różne osoby.

Zastanawiałem się czy można by wykorzystać jakoś do tego tsharka albo snorta, ale niestety nie przychodzi mi do głowy żadne sensowne rozwiązanie.
Z pewnych względów nie chcę tego także robić za pomocą konfiguracji samego radiusa - potrzebuję żeby pakiety wychodziły ode mnie różnymi interfejsami sieciowymi w zależności od tego z jakiego hosta przyszły.

Będę bardzo wdzięczny za wszelką pomoc :)

Łukasz