Передо мной стояла следующая задача. Есть два удаленных офиса: Офис_А и
Офис B. Необходимо объединить эти офисы посредством установки
защищенного VPN IPSEC туннеля через интернет соединение в единую сеть.
Обе стороны офисов должны предоставлять сервисы в своих подсетях.
При этом на стороне Офиса_А:
IP_A_Ext: 194.168.23.12 (внешний IP адрес) IP_A_Local: 10.0.0.0/8 (Локальная подсеть) IP_A_local_gate: 10.0.0.1 (локальный гейт) Тип сетевого оборудования: Cisco PIX
При этом на стороне Офиса_B:
IP_B_Ext: 213.168.22.6 (внешний IP адрес) IP_B_local: 192.168.2.0/24 (Локальная подсеть) IP_B_local_gate: 192.168.2.1 (локальный гейт) Тип сетевого оборудования: OpenSuse Linux 9.2
Офис_B
будет подключаться к Офису_А. Настройки оборудования Cisco PIX Офиса_A
приводиться не будут. В данном примере будем настраивать VPN IPSEC на
стороне Офис_B. Схема соединения двух офисов следующая:
Офис_B <-> Linux <-> INTERNET <-> Cisco <-> Офис_A.
Все
сотрудники Офиса_B должны иметь доступ к сервисам Офиса_А и наоборот.
Соединение VPN IPSEC выбираем по pre-shared_keys (%1as$2Hgdgs&545)
выданным нам администратором Офиса_A.
1.
Для установления соединения выбираем и устанавливаем пакет IpSec Tools
0.4rc1-3, которые идет в составе OpenSuSe Linux 9.2.
#> rpm –Uhv ipsec-tools-0.4rc1-3.i586.rpm
Все конфигурационные файлы находятся в /etc/racoon. В нем находяться следующие файлы:
Psk.txt – файл содержащий секретные ключи; Setkey.conf – политики соединения; Racoon.conf – основной конфигурационный файл.
2. Редактируем файл ключей psk.txt. Вставляем в него наш секретный ключ.
--------------------psk.txt ------------------------------ 194.168.23.12 %1as$2Hgdgs&545 --------------------psk.txt ------------------------------
Если такого файла нет, то создайте его:
#> vi /etc/racoon/psk.txt #> chown root.wheel /etc/racoon/psk.txt #> chmod 0600 /etc/psk.txt
3. Конфигурирование файла setkey.conf
Подправим и дополним дефолтный файл конфигурации.
#!/sbin/setkey –f # Flush the SAD and SPD flush; spdflush;
Команды spdflush и flush очищают от записей базы данных SPD и SAD, соответственно; Команды spdadd и add добавляют записи в базы данных SPD и SAD, соответственно.
#Secure outgoind communications spdadd 192.168.2.0/24 10.0.0.0/8 any –P out ipsec esp/tunnel/213.168.22.6 -194.168.23.12 /require; spdadd 192.168.2.0/24 10.0.0.0/8 any –P fwd ipsec esp/tunnel/213.168.22.6 -194.168.23.12 /require;
# Secure ingoing communications spdadd 10.0.0.0/8 192.168.2.0/24 any –P in ipsec esp/tunnel/194.168.23.12 -213.168.22.6 /require; spdadd 10.0.0.0/8 192.168.2.0/24 any –P fwd ipsec esp/tunnel/194.168.23.12 -213.168.22.6 /require;
[!] Для информации:
man setkey
-f filename – загрузка конфигурационного файла KAME. -DP и -FP – отобразить и очистить текущие правила. -D и -F – отобразить и очистить текущие ключи.
4. Конфигурирование файла Racoon.conf
Является
основным конфигурационным файлом VPN IPSEC соединения. Рассмотрим его
подробней. Здесь прописаны параметры соединения, которые должны быть
идентичными на серверах двух офисов. Используем следующую политику
соединений, которую мы получили от администратора Офиса_A:
authentication method | pre-shared secret keys (%1as$2Hgdgs&545) | encryption algorithm | 3des | authentication algorithm | HMAC-SHA1 | encryption mode | tunnel
| DH group | 2
| PFS | Yes
| Phase 1 lifetime
| 24 hour
| Phase 2 lifetime | 60 min
|
Согласно
этой таблице произведем все дополнения в наш конфигурационный файл
Racoon.conf. В качестве информации, предоставляю сводную таблицу
возможных параметров Racoon:
Authentication Methods
| rsasig preshared-key gssapi_krb
| Encryption Algorithms
| 3DES (default phase1) DES (default phase2) blowfish CAST128 idea 3idea rc5 rc4 twofish rijndael
| Integrity Algorithms
| HMAC-SHA1 (default) HMAC-MD5
| Encryption Modes
| transport tunnel
| DH Groups
| 1 (default phase2) 2 (default phase1) 5
| PFS
| supported
| IKE SA default lifetime
| 1 minute
| IPSEC SA default lifetime
| 30 seconds
|
# Racoon IKE daemon configuration file. # See 'man racoon.conf' for a description of the format and entries. #Путь к настройкам racoon path include "/etc/racoon";
#Путь к секретному файлу с ключами path pre_shared_key "/etc/racoon/psk.txt";
#Закомментирована т.к. мы не будем использовать соединение по сертификатам #path certificate "/etc/racoon/certs";
#Включаем логирование в /var/log/messages. "log" specifies logging level. It is #followed by either "notify", "debug" log debug;
# "padding" defines some parameter of padding. You should not touch these.
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.
# if no listen directive is specified, racoon will listen to all available interface addresses. listen { #isakmp ::1 [7000]; isakmp 213.168.22.6 [500]; #admin [7002]; # administrative's port by kmpstat. #strict_address; # required all addresses must be bound.
# Specification of default various timer. timer { # These value can be changed per remote node. counter 5;# maximum trying count to send. interval 20 sec;# maximum interval to resend. persend 1;# the number of packets per a send.
# timer for waiting to complete each phase. phase1 30 sec; phase2 15 sec; } # IKE phase 1 §
Фаза 1 (Main Mode) – Используется метод шифрования открытым ключом для
создания двустороннего соглашения безопасности ISAKMP (Internet
Security Association and Key Management Protocol). Далее этот
безопасный канал будет использоваться для согласования новых ключей.
Можно использовать множество методов аутентификации, но мы остановимся
на основных, совместно используемых ключах. remote 194.168.23.12 { exchange_mode main,aggressive; doi ipsec_doi; lifetime time 24 hour; # sec,min,hour # nat_traversal on; # отключаем т.к. используем статические IP адреса
proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 2; } }
# IKE phase 2 §
Фаза 2 (Quick Mode) – Используется ISAKMP первой фазы для обмена
ключами безопасности при одновременном обновлении SADB. Согласованные
ключи можно запросить через дамп SADB командой setkey -D на Linux. sainfo address 192.168.2.0/24 any address 10.0.0.0/8 any { pfs_group 2; lifetime time 3600 sec; encryption_algorithm 3des; authentication_algorithm hmac_sha1; compression_algorithm deflate; }
5. Настройка правил маршрутизации двух подсетей и файрволла.
ip route add 10.0.0.0/8 via 192.168.2.1 src 192.168.2.1
и добавим ее в загрузку /etc/init.d/boot.local.
если этого файла нет то создайте его:
#>vi /etc/init.d/boot.local #>chmod 744 /etc/init.d/boot.local
Проверяем маршрутизацию:
#>route –n 10.0.0.0 192.168.2.1 255.0.0.0 UG 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 213.168.22.6 0.0.0.0 UG 0 0 0 eth1
Где, eth0 – локальная сеть, eth1 – внешняя сеть.
Настройки правила файрволла SuSefirewall2-custom в /etc/sysconfig/scripts (Разрешим подсети 10.0.0.0/8 обращаться ко всем ресурсам подсети 192.168.2.0/24 и наоборот):
iptables -t nat -I POSTROUTING -d 10.0.0.0/8 -j ACCEPT iptables -I FORWARD -p all -d 10.0.0.0/8 -s 192.168.2.0/24 -j ACCEPT iptables -I FORWARD -p all -s 10.0.0.0/8 -d 192.168.2.0/24 -j ACCEPT
перегружаем файрволл
#> /sbin/SuSefirewall2
6. Тестирование VPN IPSEC соединения.
Установим автоматическое поднятие сервиса racoon после перезагрузки системы Linux
#>chkconfig –a racoon
racoon 0:off 1:off 2:off 3:on 4:off 5:on 6:off
стартуем Racoon сервис:
#> /etc/init.d/racoon start
#>setkey –D
194.168.23.12 213.168.22.6 esp mode=tunnel spi=92283250(0x05802172) reqid=0(0x00000000) E: 3des-cbc e2b2536a 157689fa 9183459c aad0f468 b31d46e7 4462176c A: hmac-sha1 d61eea48 1728d7db 5492456c b8671b76 8c80b6c2 seq=0x00000000 replay=4 flags=0x00000000 state=mature created: May 13 13:24:49 2009 current: May 13 13:26:28 2009 diff: 99(s) hard: 3600(s) soft: 2880(s) last: hard: 0(s) soft: 0(s) current: 0(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 0 hard: 0 soft: 0 sadb_seq=1 pid=11758 refcnt=0
213.168.22.6 194.168.23.12 esp mode=tunnel spi=4060139395(0xf200cf83) reqid=0(0x00000000) E: 3des-cbc 6cef14c9 c303c606 c25b81fc 4884f2c8 47eff1f1 020313e9 A: hmac-sha1 171200d0 3deaaafe 8452c125 4e7ada3e 9cc0aed5 seq=0x00000000 replay=4 flags=0x00000000 state=mature created: May 13 13:24:49 2009 current: May 13 13:26:28 2009 diff: 99(s) hard: 3600(s) soft: 2880(s) last: May 13 13:25:29 2009 hard: 0(s) soft: 0(s) current: 12288(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 111 hard: 0 soft: 0 sadb_seq=0 pid=11758 refcnt=0
Туннель наш поднят, и пакеты идут.
Иногда
(но редко), соединение по VPN IPSEC установлено, но пакеты, почему то
не заворачиваются в туннель. Для этого я создал небольшой скрипт для
автоматической перезагрузки racoon сервиса:
файл: vpn_restore
ping -c 3 10.9.0.1 if [ $? != 0 ] then echo "not ping" /etc/init.d/racoon restart ping -c 5 -i 3 10.9.0.1 else echo "ping ok" fi
и поместил его в /etc/crontab (каждые 10 минут скрипт проверяет состояние туннеля)
*/10 9-21 * * * root /usr/sbin/vpn_restore > /var/log/vpn_restore.log |