Archiwum kategorii ‘FortiGate’

FortiGate i równoważenie obciążenia

czwartek, 28 Maj 2009

Równoważenie obciążenia (LB + HA) w FortiGate sprawdzone! Działa. Na razie w środowisku mocno testowym, produkcyjnie na razie nie mam potrzeby używania. Zanim opiszę jak używać, odnośniki do alternatywnych rozwiązań:

Produkcyjnie wykorzystywałem relayd, LVS i mod_jk. Heartbeat testowałem bardzo krótko.
Konfiguracja w FortiGate jest dość prosta (pomijam politykę zapory):

  1. Konfigurujemy Virtual Server
    W CLI konfigurujemy podobnie jak Virtual IP. Jako typ VIP ustawiamy server-load-balance. Rodzaj LB (server-type) możemy ustawić na: HTTP, TCP lub UDP oraz IP. Metod rozkładu obciążenia mamy do wyboru sześć: Static, Round Robin, Weighted, First Alive, Least RTT i Least Session. Do konfiguracji sprawdzania obecności (Health Check) trzeba wrócić później.
  2. Definiujemy rzeczywiste serwery
    Oprócz nazwy i adresu IP podajemy port usługi, a także wagę i maksymalną liczbę połączeń. Serwery rzeczywiste przypisujemy serwera wirtualnego.
  3. Definiujemy sposób sprawdzania obecności (przypisać go należy do wirtualnego serwera)
    Określamy typ (HTTP, TCP lub PING) i interwał oraz liczbę powtórzeń. W przypadku typu TCP podajemy port usługi, dla HTTP – URL i cią jaki ma być dopasowany do zawartości.
  4. …no i możemy cieszyć się gotowym rozwiązaniem.

lb1

Przykładowa konfiguracja może wyglądać tak:

config firewall ldb-monitor
edit "DEV-HCH"
set type tcp
set port 80
next
end
config firewall vip
edit "DEV"
set type server-load-balance
set extip 192.168.1.230
set extintf "wan1"
set server-type tcp
set monitor "DEV-HCH"
set ldb-method first-alive
set extport 80
config realservers
edit 1
set ip 10.1.0.1
set port 80
next
edit 2
set ip 10.1.0.2
set port 80
next
edit 3
set ip 10.1.0.3
set port 80
next
end
next
end

Jedyny minus jaki dotychczas dostrzegłem, to brak jakiejkolwiek informacji w logach (pamięć, FortiAnalyzer) o tym, że dany serwer nie działa lub zmienił swój stan.

Poniżej wykres z JMeter – duży skok na początku to wyłączenie pierwszego serwera; metoda rozkładania obciążenia: First Alive i 10 sekund pomiędzy kolejnymi testami.
spline-visualizer
Innych testów nie chciało mi się robić. Środowisko testowe jeszcze trochę będzie stało (planuję m. in. testy MySQL w klastrze), więc jak ktoś chce wyniki testów LB przy konkretnych ustawieniach, proszę o kontakt.

Po co mi FortiGate?

środa, 20 Maj 2009

W związku z moimi problemami z FortiGate zacząłem się zastanawiać po co go w ogóle używam i czy na pewno nie da się go zastąpić innym urządzeniem. I tak:

  • router / (S|D)NAT – można zastąpić czymkolwiek,
  • filtrowanie stron WWW – kiedyś przyglądałem się SquidGuard, myślę, że można wrócić do tematu i przyjrzeć się temu,
  • IDS  – Snort + SnortSam,
  • uwierzytelnianie użytkowników w Active Directory – nie znalazłem niczego takiego!

I z racji ostatniego kryterium, postanowiłem zaprojektować sobie coś takiego samemu. Ze względu na uwielbienie pf wybrałem OpenBSD (i żeby noszenie koszulki miało uzasadnienie), który służył mi przed FortiGate. Wzorowałem się trochę na dokumentacji Fortinet (prezentacja MS Power Point), bo model, który oferują nie jest zły. Cały proces składa się z następujących kroków:

  1. Użytkownik uruchamia swój komputer i loguje się do domeny.
  2. Agent zdobywa informację z serwera o nazwie użytkownika (i przynależności do grup) i nazwie maszyny, z której nastąpiło logowanie (FQDN).
  3. Agent sprawdza IP maszyny i odpowiedź klienta (Fortinet proponuje testowanie portu TCP:139 lub TCP:445).
  4. Dane o użytkowniku przesyłane są do zapory – FortiGate dostaje nazwę użytkownika i grupy oraz adres IP. Wydaje mi się, że wystarczający jest sam adres sieciowy, natomiast pozostałe dane jedynie do prezentacji.
  5. Zapora buduje sobie odpowiednie reguły.
  6. Ruch od klienta jest przepuszczany.

Oczywiście świadomie rezygnuję z ‘wyklikanego’ interfejsu, bo z autopsji wiem, że takich reguł nie ma wiele i nie zmienia się ich praktycznie w ogóle. Idea tego rozwiązania od początku polegała na tym, że ktoś robi zaporę raz, a zarządzanie dostępem zrzuca się na osobę administrującą kontrolerem domeny (lub mającą oddelegowane prawa).

Pomocniczy schemat wygląda tak:

fw + AD

Elementami potrzebnymi będą:

  • agent wyciągający dane z kontrolera domeny i przesyłający je dalej,
  • demon działający na OpenBSD i modyfikujący odpowiednio reguły.

Zabieram się za podsłuchiwanie ruchu pomiędzy FortiGate, a AD, żeby przyjrzeć się jak wygląda komunikacja pomiędzy tymi elementami. Może to pomoże przy własnym rozwiązaniu, ew. uda się skorzystać z FSAE i stworzyć rozwiązanie przejściowe.

Co do programowania, to otwarcie szukam ludzi, którzy mogli by zająć się dowolnym elementem tego rozwiązania. Pomocą przy pisaniu demona pod OpenBSD mogą być źródła np. relayd (komunikacja z pf). Jeśli chodzi o Windows, to szukam sposobu na uzyskiwanie danych z AD.

Każdy palec potrafiący przycisnąć coś na klawiaturze mile widziany!