понедельник, 22 октября 2012 г.

Настрока IPSec между PFSense и FreeBSD

PFSense - дистрибутив основанный на FreeBSD очень удобен при потребности быстрого разворачивания сетей. Все настраивается через вебинтерфейс, работает стабильно, функций имеет довольно много. При наличии сети филиалов которая разрастается довольно быстро, оправданно его использование.
Шлюз основной сети можно поднять на FreeBSD поскольку сдесь может понадобится более гибкая управляемость, а на остальных офисах ставить PFSense и обьединить все посредством IPsec.

Сначала настройка FreeBSD (Версия 9.0)


Для поддержки IPsec компилируем ядро со следующими опциями:


options  IPSEC
options IPSEC_NAT_T
device crypto

Также должно быть включено устройство:

device gif 
#(В GENERIC оно включено по умолчанию, но не будет лишним проверить)

После компиляции устанавливаем IPsec:

cd /usr/ports/security/ipsec-tools/
make config

Включаем следующие опции:


















make install clean

Если все успешно установилось создаем папку /usr/local/etc/racoon и в ней создаем три конфигурационных файла:

racoon.conf
spd.conf
psk.txt

В файле psk.txt будут храниться ключи, поэтому ограничиваем к нему доступ

chown root:wheel psk.txt
chmod 600 psk.txt

В racoon.conf записываем конфигурацию:


path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #путь к нашему файлу с ключами
log debug2; # уровень логирования
path certificate  "/usr/local/etc/racoon"; # путь к сертификатам, для нас необязателен


listen
{
adminsock "/var/db/racoon/racoon.sock" "root" "wheel" 0660;
isakmp 8.8.8.8 [500]; #адресс внешнего интерфейса с тунелем
isakmp_natt 8.8.8.8 [4500]; #
}


remote 9.9.9.9 # адресс и далее секция с опциями удаленной стороны
{
ph1id 1;
exchange_mode aggressive;
my_identifier address 8.8.8.8; # наш внешний адресс
peers_identifier address 9.9.9.9; # адресс удаленного сервера
ike_frag on;
generate_policy = off;
initial_contact = on;
nat_traversal = off;
support_proxy on;
proposal_check claim;

proposal # аутентификация и шифрование
{
authentication_method pre_shared_key;
encryption_algorithm 3des;
hash_algorithm md5;
dh_group 1;
lifetime time 28800 secs;
}
}

sainfo subnet 1.1.1.1/24 any subnet 2.2.2.2/24 any #внутренние подсети 1 наша 2 удаленная
{
remoteid 1;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
lifetime time 28800 secs;
compression_algorithm deflate;
}




#И так повторяем для кажого соединения начиная с опции remote

Теперь файл spd.conf


flush;
spdflush;
spdadd 1.1.1.1/32 1.1.1.1/32 any -P in none;
spdadd 1.1.1.1/32 1.1.1.1/32 any -P out none;

#следующие две строки нужно добавлять для кажого соединения 
#с соответвущими адрессами
spdadd 1.1.1.0/24 2.2.2.0/24 any -P out ipsec esp/tunnel/8.8.8.8-9.9.9.9/unique;
spdadd 2.2.2.0/24 1.1.1.0/24 any -P in ipsec esp/tunnel/9.9.9.9-8.8.8.8/unique;



Далее нуждо создать интерфейс для тунеля, для этого добавляем в rc.conf


gif_interfaces="gif0"
gifconfig_gif0="8.8.8.8 9.9.9.9"
ifconfig_gif0="inet 1.1.1.1 2.2.2.2 netmask 255.255.255.0"

#Включаем IPSec

ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/spd.conf"
racoon_enable="YES"
racoon_flags="-f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log" #Для логов



#добавляем маршрут 

static_routes="remote"
route_remote="2.2.2.0 2.2.2.1 255.255.255.0"


в файл psk.txt записываем адресс удаленного сервера и секретный ключ

9.9.9.9    psk@key

Теперь можно стартовать сервис для этого достаточно перегрузиться или же набираем ряд следующих комманд:

/etc/netstart

setkey –P –f /usr/local/etc/racoon/setkey.conf

route add 2.2.2.0 2.2.2.1 255.255.255.0

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



На основном сервере все работает.


Настройка PFSense.

В секции VPN выбираем IPsec и создаем новое подключение с такими же настройками как на FreeBSD:















Рис.2







Добавляем фазу 2















Рис.3






Ставим галочку Enable IPsec и все готово.
Конечно не забываем добавить правила для фаерволлов обеих сторон, в соответствии со своими нуждами.

Дополнение.

Появился шлюз на CISСO RV042G Gigabit Dual WAN VPN Router. С  ним туннель поднялся тоже довольно легко, не сервере ничего не пришлось править, только создать новое подключение по примеру выше но без gif.
Ну и настройки на роутере:

Тип - Gateway To Gateway



сохраняем. Жмем Connect и через пару минут ожидания все готово.