drixter’s blog

…przygody informatyka…

IPSec pomiędzy FreeBSD i Netscreen

Konfiguracja IPSEC pomiędzy firewall’em Netscreen a FreeBSD.
Celem niniejszego artykułu jest skonfigurowanie tunelu IPSec (VPN) pomiędzy serwerem FreeBSD a firewall’em Netscreen. W tym przypadku zastosowano technikę host<->lan. Artykuł nie opisuje autoryzacji typu Extended Auth., jest to typowe zestawienie połączenia przy poprawnych polisach oraz użyciu PassPhrase (PSK) po stronie firewall’a Netscreen.

  • Konfiguracja kernela FreeBSD

Sam proces pobierania źrodeł, konfigracji, kompilacji i instalacji jądra jak i ’swiata’ w FreeBSD można znaleźć w Handbook’u. Ważna rzeczą jest aby w pliku konfiguracyjnym dodać opcje:

options         IPSEC
options         IPSEC_ESP
  • Instalacja racoon (ipsec-tools)

Analogicznie jak wszystkie porty, instalujemy poprzez wejście do katalogu /usr/ports/security/ipsec-tools/ i wydaniu komend:

make config install clean
  • Konfiguracja setkey

Tworzymy plik /etc/ipsec.conf gdzie:

flush;
spdflush;
spdadd NASZ_ADRES_IPV4/32[any] SIEC_LAN_DO_KTOREJ_SIE_LACZYMY/24[any] any -P out ipsec
esp/tunnel/NASZ_ADRES_IPV4-NETSCREEN_ADRES_IPV4/require;
spdadd SIEC_LAN_DO_KTOREJ_SIE_LACZYMY/24[any] NASZ_ADRES_IPV4/32[any] any -P in ipsec
esp/tunnel/NETSCREEN_ADRES_IPV4-NASZ_ADRES_IPV4/require;

następnie wczytujemy plik konfiguracyjny:

setkey -f /etc/ipsec.conf

WAŻNE: Należy dobrze ustawić uprawnienia do tego pliku żeby niepowołana osoba nie mogła tego odczytać!

  • Konfiguracja racoon (ipsec-tools)

W katalogu /usr/local/etc/racoon tworzymy dwa pliki, racoon.conf oraz psk.txt

racoon.conf

WAŻNE: Należy dobrze ustawić uprawnienia do tego pliku zeby niepowołana osoba nie mogla tego odczytać!

path include "/usr/local/etc/racoon";
path pre_shared_key "/usr/local/etc/racoon/psk.txt";
path certificate "/usr/local/etc/racoon/cert";

padding
{
maximum_length 20;      # maximum padding length.
randomize off;          # enable randomize length.
strict_check off;       # enable strict check.
exclusive_tail off;     # extract last one octet.
}
listen
{
#isakmp ::1 [7000];
#isakmp 202.249.11.124 [500];
#admin [7002];          # administrative port for racoonctl.
#strict_address;        # requires that all addresses must be bound.
}
timer
{
# These value can be changed per remote node.
counter 5;              # maximum trying count to send.
interval 2 sec; # maximum interval to resend.
persend 1;              # the number of packets per send.

# maximum time to wait for completing each phase.
phase1 10 sec;
phase2 5 sec;
}
remote anonymous
{
exchange_mode main;
doi ipsec_doi;
situation identity_only;
nonce_size 16;
initial_contact on;
proposal_check obey;    # obey, strict, or claim
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
}
sainfo anonymous
{
#pfs_group 2;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

psk.txt

WAŻNE: Należy dobrze ustawić uprawnienia do tego pliku zeby niepowołana osoba nie mogla tego odczytać!

NETSCREEN_ADRES_IPV4 haslo_psk
  • Konfiguracja skryptów startowych

Teraz do wyboru, albo modyfikujemy plik /usr/local/etc/rc.d/racoon.sh albo dopisujemy poniższą linię do /etc/rc.conf

racoon_enable="YES"
  • Sprawdzenie poprawności działania

Uruchamiamy racoon (ipsec-tools) komendą:

/usr/local/etc/rc.d/racoon.sh start

powiniśmy otrzymać coś podobnego do:

fido# /usr/local/etc/rc.d/racoon.sh start
Starting racoon.

Sprawdzamy regułki ipsec poprzez polecenie

setkey -D

powiniśmy otrzymać coć podobnego do:

fido# setkey -D
NASZ_ADRES_IPV4 NETSCREEN_ADRES_IPV4
esp mode=tunnel spi=xxxxxxxxxx(0xxxxxxxx) reqid=0(0x00000000)
E: 3des-cbc  xxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
A: hmac-sha1  xxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
seq=0x0000000x replay=x flags=0x00000000 state=mature
created: Feb 18 17:28:51 2006   current: Feb 18 17:29:02 2006
diff: xx(s)     hard: xxxxx(s)  soft: xxxxx(s)
last: Feb 18 17:28:58 2006      hard: 0(s)      soft: 0(s)
current: xxx(bytes)     hard: 0(bytes)  soft: 0(bytes)
allocated: x    hard: 0 soft: 0
sadb_seq=x pid=xxxxx refcnt=x
NETSCREEN_ADRES_IPV4 NASZ_ADRES_IPV4
esp mode=tunnel spi=xxxxxxxxx(0xxxxxxxxx) reqid=0(0x00000000)
E: 3des-cbc  xxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
A: hmac-sha1  xxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
seq=0x0000000x replay=x flags=0x00000000 state=mature
created: Feb 18 17:28:51 2006   current: Feb 18 17:29:02 2006
diff: xx(s)     hard: xxxxx(s)  soft: xxxxx(s)
last: Feb 18 17:28:58 2006      hard: 0(s)      soft: 0(s)
current: x(bytes)     hard: 0(bytes)  soft: 0(bytes)
allocated: x    hard: 0 soft: 0
sadb_seq=x pid=xxxxx refcnt=1

Jeżeli widzimy status “mature” to znaczy ze wszystko działa. Teraz juz możemy się łączyc do naszego LAN’u po drugiej stronie tunelu :-)

Jak już nam się znudzi, wyłączamy tunel poleceniem:

fido# /usr/local/etc/rc.d/racoon.sh stop
Stopping racoon.
Waiting for PIDS: xxxxx.

Wpis “IPSec pomiędzy FreeBSD i Netscreen” skomentowano 2 razy

  1. Cys pisze:

    Pytanie, do racoon.conf dodany został wpis:
    path certificate “/usr/local/etc/racoon/cert”;
    To trzeba generowac osobne certyfikaty do racoona?

  2. drixter pisze:

    Nie używałem certyfikatów do IPsec. Autoryzacja szła przez preshared-key

Dodaj komentarz

boinkme