F5 SNAT i X-Forwarded

wszystko inne - NIE licząc sprzętu typu SOHO!!!
Wiadomość
Autor
martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

F5 SNAT i X-Forwarded

#1

#1 Post autor: martino76 »

Witam,

Mam nastepujaca topologie

Obrazek

Z klienta za pomoca ponizszej komendy dodaje info o X-Forwarded i wysylam zapytanie do google.com

Kod: Zaznacz cały

curl --header "X-Forwarded-For: 192.168.1.125" http://google.com
Na F5 mam skonfigurowany SNAT i probuje podmienic IP tak by na serwerze HEE za F5 bylo widac IP Client a nie IP F5.

TCPDUMP na serwerze za F5 pokazuje ze source IP jest F5, probowalem roznych iRule i nie moge zmusic F5 by podmieniala IP na IP klienta

Kod: Zaznacz cały

[root@vlb-hee]# tcpdump -i eth0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:38:12.562615 IP 172.16.100.201.38151 > par10s21-in-f14.1e100.net.http: Flags [S], seq 36750211, win 65535, options [mss 1460,sackOK,TS val 1650307283 ecr 0,nop,wscale 12], length 0
Na F5 mam nastepujacy wpis dla iRule probowalem z remote_addr oraz local_addr i nie moge podpienic IP na F5 w taki sposob by na serwerze HEE prezentowac sie IP klienat.

Kod: Zaznacz cały

when HTTP_REQUEST {
  if { [HTTP::header exists "X-Forwarded-For"] } {
    HTTP::header remove "X-Forwarded-For"
  }
  HTTP::header replace X-Forwarded-For [IP::remote_addr]
}

Ktos ma jakis pomysl jak to obejsc i czy wogole jest sposob by podmienic IP na F5?


Pozdro,

stavros
wannabe
wannabe
Posty: 51
Rejestracja: 16 lip 2007, 08:49

#2

#2 Post autor: stavros »

Nie wiem czy taka konfiguracja w ogóle ma sens. XFF jest właśnie po to, że podczas NAT-owania gubiąc informacje o IP dzięki temu polu jesteś w stanie w logach dojść do źródła zapytania. Wstawienie adresu klienta zamiast F5 mogłoby skutkować tym, że serwer będzie routował do klienta z ominięciem load balancera.

Jeśli dobrze zrozumiałem Twój zamysł :P

t0m4szek
wannabe
wannabe
Posty: 62
Rejestracja: 19 lis 2007, 20:09

#3

#3 Post autor: t0m4szek »

Tak jak napisał stavros: jak masz SNAT to F5 może wstrzyknąć XFF (nie musisz robić iRulki - wystarczy modyfikacja w profilu HTTP) w nagłówek HTTP z adresem źródłowym klienta, później jest to widziane w logach aplikacji (pewnie musi być skonfigurowana, aby czytała ten nagłówek). Drugim sposobem jak chcesz zachować adres klienta to nie rób SNATa na F5, tylko wtedy będziesz miał:
- Direct Server Return - aby sesja się nie rozjeżdżała, potrzebna dodatkowa konfiguracja na F5 na Virtual Serverze
- lub F5 powinna być bramą domyślną dla serwera

martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

#4

#4 Post autor: martino76 »

stavros pisze:Nie wiem czy taka konfiguracja w ogóle ma sens. XFF jest właśnie po to, że podczas NAT-owania gubiąc informacje o IP dzięki temu polu jesteś w stanie w logach dojść do źródła zapytania. Wstawienie adresu klienta zamiast F5 mogłoby skutkować tym, że serwer będzie routował do klienta z ominięciem load balancera.

Jeśli dobrze zrozumiałem Twój zamysł :P
Witam,

Robie po stronie klienta

Kod: Zaznacz cały

curl --header "X-Forwarded-For: 192.168.1.125" http://google.com
daje XFF ale jesli proboje to zmienic na F5 nie widze zadnej zmiany i na serwerze za F5 ciagle widze XFF jako 192.168.1.125. Probowalem iRule ale bez powodzenia ciagle widze orginalna wartosc 192.168.1.125.

Ogolnie zamysl jest taki, ze klient wysyla jakis request www np do cnn.com client----->F5----->Server (na ktorym aplikacja robi enhancement naglowkow HTTP) i dalej do serwera docelowego cnn.com.

Problem Polega na tym ze server za F5 nie jest docelowy on dziala jak transparent proxy, na ktorym robiony jest enhancment HTTP i apliakacja dodaje swoje informacje a nastepnie trafik jest wywalany do internetu.

Dlatego zalezy mi na tym by podmienic IP na F5.

Pozdro,

t0m4szek
wannabe
wannabe
Posty: 62
Rejestracja: 19 lis 2007, 20:09

#5

#5 Post autor: t0m4szek »

Marcin,

Czy Ty chcesz na F5 zmienić adres IP źródłowy pakietu, czy wartość nagłówka XFF w requescie przechodzącym przez F5?

martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

#6

#6 Post autor: martino76 »

t0m4szek pisze:Marcin,

Czy Ty chcesz na F5 zmienić adres IP źródłowy pakietu, czy wartość nagłówka XFF w requescie przechodzącym przez F5?
Probowalem zmienic najpierw XFF na F5 ale nie dziala mi to kiedy uzywam iRule, pytalem wojka google o to ale przyklady, ktore byly za wiele nie pomogly.

Pozniej probowalem zmienic src IP tez za pomoca iRule ale to sobie odpuscilem.

W tej chwili chcialbym zmienic wartos XFF w przychodzacym HTTP request za pomoca iRule. Znalazlem taka iRule ale nic sie nie dzieje kiedy ja przypisze do VS oraz zrobie enable dla HTTP Profile

Kod: Zaznacz cały

when HTTP_REQUEST {
  if { [HTTP::header exists "X-Forwarded-For"] } {
    HTTP::header remove "X-Forwarded-For"
  }
  HTTP::header replace X-Forwarded-For [IP::remote_addr]
}
Pozdro,

t0m4szek
wannabe
wannabe
Posty: 62
Rejestracja: 19 lis 2007, 20:09

#7

#7 Post autor: t0m4szek »

1. src IP pakietu na IP klienta nie zmienisz - chcesz mieć src IP klienta to wyłącz SNAT z VS, ale wtedy LB musi być postawiony inline.
2. Jak pakiet wychodzi z komputera/klienta to domyślnie nie zawiera pola XFF w nagłówku HTTP. Ustawiając na F5 w HTTP profile X-forwarded-for" na "enable" F5 sama wrzuca nagłówek XFF z source IP klienta, zatem żadnych iRulek nie trzeba
3. Jeżeli już sam na siłę curlem wstrzykujesz XFF na kliencie i chcesz to manipulować na F5 to wyłącz XFF w profilu HTTP. Prawdopodobnie jak masz ustawione to w profilu HTTP i dodatkowo iRulką to jedno drugie nadpisuje.
4. Co do samej iRulki to się jeszcze przyjrzę :)

EDIT:
W tym ifie jak już jest XFF to go usuwasz, więc jak wyjdziesz z ifa to raczej "replace" nic nie zrobisz, spróbuj z "insert" zamiast "replace"

Edit2:
i chyba powinno być "IP::client_addr", sam nie pamiętam - najlepiej sprawdź poprzez dodanie do iRuli np.

Kod: Zaznacz cały

log local0. "IP: [IP::client_addr] IP2: [IP::remote_addr]"
i patrz co się pojawia w pliku /var/log/ltm

martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

#8

#8 Post autor: martino76 »

t0m4szek pisze:1. src IP pakietu na IP klienta nie zmienisz - chcesz mieć src IP klienta to wyłącz SNAT z VS, ale wtedy LB musi być postawiony inline.
Dzieki za odpowiedz zrobilem in-line i pozbylem sie SNAT, nie musze kombinowac z iRule oraz XFF. Dodatkowo zrobilem default route na F5 wskazujac na POOL w ktorej mam dwa nody odpowiedzialne za enhancment HTTP i widze, ze trafik leci na oba urzadzenia a pozniej do Inetrnetu.

Dziala tak jak chcialem.


Pozdro,

stavros
wannabe
wannabe
Posty: 51
Rejestracja: 16 lip 2007, 08:49

#9

#9 Post autor: stavros »

Pamiętaj tylko o jednym mankamencie trybu in-line - F5 to nie firewall - nie synchronizuje stanu sesji w klastrze (z defaulta). Jeżeli fikniesz klaster - możesz mieć problemy z aplikacjami, które nie odbudowują sobie same połączeń.

"Friendly reminder" :P

martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

#10

#10 Post autor: martino76 »

stavros pisze:Pamiętaj tylko o jednym mankamencie trybu in-line - F5 to nie firewall - nie synchronizuje stanu sesji w klastrze (z defaulta). Jeżeli fikniesz klaster - możesz mieć problemy z aplikacjami, które nie odbudowują sobie same połączeń.

"Friendly reminder" :P
To jest lab wiec się nie martwię o to, poza tym na razie nie mam drugiej F5 :)

Pozdro,

ODPOWIEDZ