Archiwum kategorii ‘RTR / FW’

Nowy FortiOS

środa, 26 Sierpień 2009

Oczywiście czuwam (czyt. aktualizuję), ale jestem na szkoleniu i nie mam czasu na opisywanie tego co robię. Niemniej nadrabiam teraz: Fortinet wydał nową wersję FortiOS – oznaczoną jako 4.0MR1 (v400-build0178). Poniżej odpowiednie odnośniki:

Wszystko działa (nie ma problemu ze zdalną aktualizacją z 4.0).
fwi

PS C:\> Get-WmiObject -Class Win32_Product -computername DC | Where-Object { $_.name -like “Forti*” }
IdentifyingNumber : {8BB826C4-4CB5-42B0-A124-AA9B69F8CB41}
Name : Fortinet Server Authentication Extension (FSAE)
Vendor : Fortinet Inc.
Version : 3.5.047
Caption : Fortinet Server Authentication Extension (FSAE)

Nowa akcja w filtrze pakietów OpenBSD

środa, 19 Sierpień 2009

Wczoraj coś wspomniałem o nowej akcji match w pf, dziś nie mogę nie rozwinąć tematu. Tym bardziej, że nie znalazłem żadnych dodatkowych informacji ani na spryciarze.pl, ani na jaktosierobi.tv (a na tym drugim przejrzałem wszystkie filmy).

Fakty, które znamy (-release):

  • reguły przetwarzane są z góry do dołu (a w każdej linii od lewej do prawej),
  • ostatnia pasująca reguła wygrywa,
  • wyjątkiem jest słowo kluczowe quick.

Powyższe oznacza, że każdy pakiet przejdzie po kolei pełny zestaw reguł. Co w przypadku, gdy logujemy (log)? Niejako jest to powiązane z akcją, więc pakiet zalogowany będzie tylko raz. Poniżej przykład:

block log all
pass in log on $int_if inet proto tcp from any to ($int_if) port ssh flags S/SA modulate state

tcpdump pokaże nam:

07:30:44.227293 rule 3/(match) pass in on xl0: 192.168.1.131.61392 > 192.168.1.64.22: S 738501558:738501558(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK> (DF)

Nowa akcja match (-current) po prostu dopasowuje pakiet i może go zalogować lub oznakować (tag), ale nie zrobi z nim nic więcej (nie zaakceptuje i nie odrzuci). Zmieniony zestaw reguł:

block log all
match in log on $int_if inet proto tcp from any to ($int_if) port ssh
pass in log on $int_if inet proto tcp from any to ($int_if) port ssh flags S/SA modulate state

da następujące wyniki:

07:36:55.505154 rule 4/(match) pass in on xl0: 192.168.1.131.61403 > 192.168.1.64.22: S 3714164883:3714164883(0) win 8192 (DF)
07:36:55.505168 rule 3/(match) match in on xl0: 192.168.1.131.61403 > 192.168.1.64.22: S 3714164883:3714164883(0) win 8192 (DF)

Czyli jeden pakiet (patrz numer sekwencyjny) dwukrotnie zalogowany. Co ważne – w logach pierw mamy pass, a potem match (niezależnie jak reguły ułożymy).

Przydatne? Myślę, że tak. Wracamy do NetFlow (oczywiście z najeżkowatą w tle – pamiętać należy, że w Polsce nie wolno wprowadzać ich do obrotu).

OpenBSD: pf: scrub: syntax error

wtorek, 18 Sierpień 2009

peeper ~ # pfctl -nf /etc/pf.conf
/etc/pf.conf:7: syntax error
peeper ~ # head -n 7 /etc/pf.conf |tail -n 1
scrub in all
peeper ~ # uname -a
OpenBSD peeper.mbs.dmz 4.6 GENERIC#0 i386

Kto podąża za -current, powinien czytać też o zmianach. Czyli:

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!

OpenBSD : pf : route-to

poniedziałek, 10 Listopad 2008

Nie zawsze o tym pamiętam, inni może też, więc tutaj takie krótkie info odnośnie route-to. Ważne jest, że przy używaniu tej opcji pakiety zawsze są ‘pchane’ do granicznego routera. Połączenia z sąsiadami (:network) mogą nam w takiej sytuacji nie wyjść. W takim wypadku potrzebna będzie kolejna reguła tylko dla tych połączeń.
Przy okazji pomocne mogą być wyrażenia dodawane do interfejsów sieciowych:

  • :network – określa sieć, do której należy interfejs,
  • :broadcast – adres rozgłoszeniowy podsieci,
  • :peer – adres IP po drugiej stronie połączenia point-to-point,
  • :0 – adres IP interfejsu (nie alias).

Polecam cały podręcznik do pf, a w szczególności (uszczegóławiając powyższe :>):

OpenBSD: pf: per-rule statistics

poniedziałek, 21 Lipiec 2008

$ man 8 pfctl
-s modifier
Show the filter parameters specified by modifier (may be abbrevi-
ated):
-s labels      Show per-rule statistics (label, evaluations,
packets total, bytes total, packets in, bytes in,
packets out, bytes out) of filter rules with la-
bels, useful for accounting.
-z      Clear per-rule statistics.

pf w OpenBSD może gromadzić statystyki dla każdej reguły z osobna. Możliwe to jest po dodaniu słowa kluczowego label i nazwy do reguły. Np.

pass in log on $int_if inet proto tcp from any to <web_hosts> flags S/SA modulate state label web_hosts

Statystyki wyświetlić możemy za pomocą pfctl (stosowny wycinek z podręcznika u samej góry). Wyniki pokazują: nazwę etykiety, ilość ewaluacji danej reguły (ile razy pakiet był do niej dopasowywany), ogólną ilość pakietów, ogólną ilość bajtów pakiety i bajty przychodzące oraz wychodzące (we wcześniejszej wersji tylko liczba dopasowań, pakietów oraz bajtów). Poniżej przykład:

# pfctl -s labels
web_hosts 127242 3955855 3814318564 1422110 83633676 2533745 3730684888

Uwaga! Czasami wynik może być zdublowany:

# pfctl -s labels
klnt001 127242 3955855 3814318564 1422110 83633676 2533745 3730684888
klnt001 63327 0 0 0 0 0 0

Dzieje się tak, gdy w etykietowanej regule używamy list (nawiasów klamrowych). Każda reguła (z listą) rozwiązywana jest na dwie lub więcej osobnych reguł, ale nazwa etykiety pozostaje taka sama. Stąd sugestia, by rozdzielić reguły już przy definicji – pozwoli to ‘połapać’ się w statystykach.

Do poczytania (oprócz wspomnianych FAQ i podręcznika):