Wpisy otagowane ‘OpenBSD’

OpenBSD: pf – zmiany

piątek, 4 Wrzesień 2009

1 września część społeczeństwa cofała się 70 lat w czasie, część paliła w toalecie z dawno nie widzianymi znajomymi, a Henning Brauer na grupie openbsd-misc opublikował informację na temat sporej zmiany w kodzie pf (3’000 linii różnic odchudza kod o 800 linii). Zmiana dotyczy składni translacji i przekierowania adresów – nie będę one osobnymi regułami, a akcjami na regułach match / pass / block. Więcej w oryginalnej wiadomości:

a także w dokumencie Following -current, gdzie znajduje się również informacja z następnego dnia o zmianie składni reguł z opcjami route-to, reply-to, dup-to and fastroute.

Osobiście uważam, że obie zmiany sprawią, że plik konfiguracyjny będzie bardziej czytelny. Zaczynam testowanie!

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:

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 – grupowanie interfejsów

poniedziałek, 17 Listopad 2008

IFCONFIG(8) OpenBSD System Manager's Manual            IFCONFIG(8)

NAME
ifconfig – configure network interface parameters

SYNOPSIS
ifconfig [-AaCm] [interface] [address_family] [address [dest_address]]
[parameters]
[...]

The following parameters may be set with ifconfig:

[...]

group group-name
Assign the interface to a „group”.  Any interface can
be in multiple groups.

For instance, such a group could be used to create a
hardware independent pf(4) ruleset (i.e. not one based on
the names of NICs) using existing (egress, carp, etc.) or
user-defined groups.

Some interfaces belong to specific groups by default:

-       All interfaces are members of the all interface
group.
-       Cloned interfaces are members of their interface
family group.  For example, a PPP interface such
as ppp0 is a member of the ppp interface family
group.
-       The interface(s) the default route(s) point to
are members of the egress interface group.
-       IEEE 802.11 wireless interfaces are members of
the wlan interface group.
-       Any interfaces used for network booting are mem-
bers of the netboot interface group.

-group group-name
Remove the interface from the given „group”.
[...]

Bardzo przydatnym parametrem w ifconfig jest group – grupowanie interfejsów. W przypadku interfejsów klonowanych dodawane są one automatycznie do grupy oznaczającej rodzinę, np. VLAN:

vlan150: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:80:1e:15:78:ab
vlan: 150 priority: 0 parent interface: rl0
groups: vlan egress
[...]
vlan5: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:80:1e:15:78:ab
vlan: 5 priority: 0 parent interface: rl0
groups: vlan
[...]

Z kolei interfejsy bezprzewodowe mają grupę wlan, a wszystkie są w grupie all.
Możemy również tworzyć samodzielnie własne grupy, a interfejsy mogą jednocześnie należeć do wielu grup.
Aby wyświetlić interfejsy należące do danej grupy należy podać jej nazwę, np.

# ifconfig phy
rl0: flags=8943 mtu 1500
lladdr 00:80:1e:15:78:ab
groups: phy
media: Ethernet autoselect (100baseTX full-duplex)
status: active
[...]
xl0: flags=8843 mtu 1500
lladdr 00:0a:5e:5f:de:77
groups: phy
media: Ethernet autoselect (100baseTX full-duplex)
status: active
[...]
xl1: flags=8943 mtu 1500
lladdr 00:50:da:18:eb:79
groups: phy
media: Ethernet autoselect (100baseTX full-duplex)
status: active
[...]
xl2: flags=8943 mtu 1500
lladdr 00:01:02:1d:c4:6d
groups: phy
media: Ethernet autoselect (100baseTX full-duplex)
status: active
[...]

Przy okazji w Solaris groupname oznacza interfejsy należące do grupy IPMP.

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 :>):

Popsuty ifconfig w OpenBSD -current

piątek, 1 Sierpień 2008

Coś nie działa jak ma działać:

[root@bastard-bis ~]# ifconfig em0 inet
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:15:17:0b:c9:ba
groups: egress
media: Ethernet autoselect (1000baseT full-duplex)
status: active
inet 172.17.3.2 netmask 0xfffffffc broadcast 172.17.3.3
inet A.B.C.9 netmask 0xfffffc00 broadcast A.B.E.255

Czyli widzimy tylko dwa adresy. No to dodajmy kolejny alias:

[root@bastard-bis ~]# ifconfig em0 alias A.B.C.108/32
ifconfig: SIOCAIFADDR: File exists

Usługi mogą nasłuchiwać na adresie, którego `nie ma’.
Po restarcie wszystko poszło jak powinno. Prawdopodobnie w ten sposób doprowadziłem do tego:

  • uruchomienie maszyny (konfiguracja interfejsów przy starcie, włączenie usług sieciowych),
  • ifconfig em0 -alias A.B.C.108,
  • ręczna konfiguracja sieci (sh /etc/netstart lub ifconfig em0 alias A.B.C.108) – zakończone błędem.

Wygląda na to, że nie chce to działać przez usługi, które zbindowane były do tego adresu. Nie mam chęci / czasu, by drążyć temat, niemniej udało mi się zasymulować taką sytuację i po zabiciu wszystkich demonów, które mogły słuchać na tym adresie, alias został dodany.