Назад | Оглавление | Вперед |
Глава 16 Серверное программное обеспечение (Сетевой сервис шифрования) - FreeS/WAN VPN (часть 2)В этой главеLinux OPENSSL сервер Конфигурации Команды Организация защиты Openssl Linux FreeS/WAN VPN Настройка RSA private keys secrets Требования по настройке сети для IPSec Тестирование инсталляции |
Здесь приводятся некоторые вещи, которые вы должны проверить для корректной работы FreeS/WAN. Они важны, если вы не хотите получить сообщения об ошибке при запуске VPN.
Шаг 1Вам нужно включить TCP/IP forwarding на обоих шлюзах. В Red Hat Linux, это в зависимости от версии делается так:
Для Red Hat Linux 6.1
Редактируйте файл network (vi /etc/sysconfig/network) и измените следующую
строку:
FORWARD_IPV4="false"
Должна быть:
FORWARD_IPV4="yes"
Вы должны перезапустить настройки сети, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/network restart
Bringing up interface lo [ OK ]
Bringing up interface eth0 [ OK ]
Bringing up interface eth1 [ OK ]
Для Red Hat Linux 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Enable packet forwardingВы должны перезапустить настройки сети, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/network restart
Bringing up interface lo [ OK ]
Bringing up interface eth0 [ OK ]
Bringing up interface eth1 [ OK ]
Помниту, что соединения с автоматическим снабжением ключами использует ключи автоматически созданные демоном согласования ключей Pluto. Этот демон стартуя устанавливает соединение с Pluto демоном на другом конце туннеля. Из этих соображений шлюх IPSEC должен иметь правила фильтра пакетов разрешающие следующие протоколы:
Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзах и добавьте следующие строки, чтобы разрешить IPSEC пакетам перемещаться между обоими концами туннеля:
# FreeS/WAN IPSec VPN
# -------------------
# Если вы используете FreeSWAN IPSec VPN, вы должны заполнить
# адреса шлюзов в IPSECSG и виртуальных интурфейсов для
# FreeS/Wan IPSEC в параметре FREESWANVI. Смотрите начало
# этого скрипта для определения этих параметров.
# IPSECSG это разделенный пробелами список удаленных шлюзов.
# FREESWANVI это разделенный пробелами список виртуальных
# интерфейсов для реализации FreeS/Wan IPSEC.
# Включите только те, которые фактически используются.
# Разрешите протокол IPSEC из удаленных шлюзов на внешнем интерфейсе
# IPSEC использует три основных типа пакетов:
# IKE использует UDP протокол и порт 500,
# ESP использует протокол номер 50 и
# AH использует протокол номер 51
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-d $IPSECSG -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p 50 \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p 50 \
-d $IPSECSG -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p 51 \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p 51 \
-d $IPSECSG -j ACCEPT
# Разрешите весь трафик к виртуальному интерфейсу FreeS/WAN
ipchains -A input -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT
ipchains -A output -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT
# Пересылка всего из виртуального интерфейса FreeS/WAN IPSEC туннеля
ipchains -A forward -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT
где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс к Интернет.
где ANYWHERE="any/0" # имеет значение все 0.0.0.0/0.
где IPSECSG="208.164.186.2" # разделенный пробелами список удаленных VPN шлюзов.
где FREESWANVI="ipsec0" # разделенный пробелами список виртуальных интерфейсов для FreeS/Wan.
ЗАМЕЧАНИЕ. Смотрите главу 7, "Сетевой брандмауэр" для большей информации. Не забудьте добавить эти правила на других шлюзах.
Шаг 3Подсистема rp_filter (связанная с защитой от IP spoofing) должна быть
выключена на обоих шлюзах для корректной работы IPSEC. Это достигается
проверкой значения содержащегося в файлах
"/proc/sys/net/ipv4/conf/ipsec0/rp_filter и "/proc/sys/net/ipv4/conf/eth0/rp_filter".
Оно должно быть равно 0:
ЗАМЕЧАНИЕ. Подкаталог "ipsec0" в нашем примере будет создан только после перезагрузки системы. Так, что проверить значение файла "rp_filter" в каталоге "ipsec0" можно будет только когда система перезагрузится.
Для установки значения 0 (off) в оба файла вручную используйте команды:
[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filterТакже можно добавить эти строки в скрипт файл firewall (/etc/rc.d/init.d/firewall) на обоих шлюзах, чтобы значение 0 (off) устанавливалось автоматически при каждой загрузке системы:
# Disable IP spoofing protection to allow IPSEC to work properlyЗАМЕЧАНИЕ. В нашем примере мы предполагаем что для установления соединений используется интерфейс eth0. Конечно, если вы используете eth1 вам надо просто заменить eth0 на eth1.
Если вы забудете сделать этот шаг, то получите на вашем терминале следующие сообщения об ошибках при запуске FreeSWAN IPSEC:
ipsec_setup: WARNING: ipsec0 has route filtering turned on, KLIPS may not workВажно заметить, что любые правила маскарадинга для внутренней сети, которая использует IPSEC, должны находится после правил разрешающих трафик связанный с IPSEC (шаги 2 и 3 выше), или машина будет маскарадить трафик вместо пропускания его через IPSEC.
Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзовых машинах и добавьте следующие строки позволяющие маскарадить пакеты направляемые на удаленный шлюз и обратно:
# Маскарадинг внутреннего трафика.где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс в Интернет.
где LOCALNET_1=" 192.168.1.0/24" # диапазон внутренних адресов который вы
используете.
ЗАМЕЧАНИЕ. Смотрите главу 8 "Сетевой брандмауэр с поддержкой маскарадинга и форвардингом" для большей информации.
Сейчас, вы можете перезагрузить вашу систему, и машины за шлюзом A должны без проблем обмениваться информацией с машинами за шлюзом B.
Изучите файл "/var/log/secure" для выявления возникших трудностей. Если все хорошо, то вы должны увидеть нечто подобное:
Feb 21 14:45:42 deep Pluto[432]: Starting Pluto (FreeS/WAN Version 1.3)Интерфейсы IPSEC должны быть подключены поверх определенных
физических интерфейсов.
Проверьте что:
Сейчас выполните следующую команду для получения минимальной отладочной информации и проверьте, что полученный результат выглядит примерно так:
[root@deep /]# ipsec lookВыполните команду ping 192.168.1.2 из 192.168.1.1. Если она работает, тогда вы все установили корректно. Если не работает, то проверьте, что с машины 208.164.186.1 видна 208.164.186.2, что включен TCP-IP forwarding, и что на вашем брандмауэре нет правил блокирующих пакеты и правила маскарадинга находятся после правил, связанных с трафиком IPSec.
208.164.186.1 ---- 205.151.222.250 ---- 205.151.222.251 ---- 208.164.186.2
| |
192.168.1.0/24 192.168.1.0/24
| |
192.168.1.1 192.168.1.2
Последнее замечание об инсталляции FreeSWAN IPSEC, если вы столкнулись с проблемами с которыми не можете разобраться, то вы можете использовать следующую команду для просмотра отладочной информации, связанной с системой шифрования/аутентификации IPSEC, которую вы можете послать в список рассылки Linux-IPSEC (linux-ipsec@clinet.fi) с просьбой помочь вам:
[root@deep /]# ipsec barf > resultЭта команда первично предоставляла возможность удаленной отладки; единичная команда упаковывает (и помечает) всю информацию, которая могла бы быть уместна для диагностирования проблем в IPSEC.
Для получения большей информации вы можете ознакомиться со страницами руководства перечисленными ниже:
$ man ipsec (8) - вызов утилит IPSEC
$ man ipsec atoaddr, addrtoa (3) - конвертирование Интернет адресов в и из ASCII
$ man ipsec atoasr (3) - конвертирование ASCII в Интернет адреса, подсети и диапазоны
$ man ipsec atobytes, bytestoa (3) - конвертирование байтов двоичных данных в и из ASCII формат
$ man ipsec atodata, datatoa (3) - конвертирование двоичных данных из и в ASCII формат
$ man ipsec atosa, satoa (3) - конвертирует IPSEC Security Association IDs в и из ASCII
$ man ipsec atosubnet, subnettoa (3) - конвертирует подсеть/маска в ASCII форме в и из адрес
$ man ipsec atoul, ultoa (3) - конвертирует unsigned-long числа в и из ASCII
$ man ipsec auto (8) - контролирует автоматическое снабжение ключами соединений IPSEC
$ man ipsec barf (8) - выделение набора отладочной информации IPSEC
$ man ipsec bitstomask (3) - конвертирование набора единиц и нулей в маску подсети Интернет
$ man ipsec eroute (8) - манипулирование таблицами маршрутизации IPSEC
$ man ipsec goodmask (3) - является ли эта маска правильной?
$ man ipsec hostof (3) - получает Интернет адрес и маску подсети и возвращает часть связанную с хостом
$ man ipsec klipsdebug (8) - устанавливает отладочные возможности и уровень Klips (ядерная поддержка IPSEC)
$ man ipsec look (8) - выводит минимальную отладочную информацию
$ man ipsec manual (8) - поднимает и опускает IPSEC соединения с ручным снабжением ключами
$ man ipsec masktobits (3) - конвертирует маску подсети Интернет в набор нолей и единиц
$ man ipsec optionsfrom (3) - читает дополнительные опции командной строки из файла
$ man ipsec pluto (8) - демон манипуляции ключами IPsec IKE
$ man ipsec ranbits (8) - генератор случайного набора битов в виде ASCII
$ man ipsec rangetoa (3) - конвертирует диапазон Интернет адресов в ASCII
$ man ipsec rsasigkey (8) - создает сигнатурный ключ RSA
$ man ipsec setup (8) - контролирует подсистему IPSEC
$ man ipsec spi (8) - управляет IPSEC Security Associations
$ man ipsec spigrp (8) - группирует/расгруппирует IPSEC Security Associations
$ man ipsec subnetof (3) - получает Интернет адрес и маску подсети и вохвращает часть связанную с подсетью
$ man ipsec tncfg (8) - ассоциирует виртуальный интерфейс IPSEC с реальным интерфейсом
$ man ipsec whack (8) - контролирует интерфейс для демона управления ключами IPSEC
$ man ipsec.conf (5) - конфигурация и соединения IPSEC
$ man ipsec.secrets (5) - секреты для IKE/Ipsec аутентификации
> /etc/rc.d/init.d/ipsec
> /etc/rc.d/rc0.d/K68ipsec
> /etc/rc.d/rc1.d/K68ipsec
> /usr/man/man3/ipsec_atoasr.3
> /usr/man/man3/ipsec_rangetoa.3
> /usr/man/man3/ipsec_atodata.3
> /etc/rc.d/rc2.d/S47ipsec
> /etc/rc.d/rc3.d/S47ipsec
> /etc/rc.d/rc4.d/S47ipsec
> /etc/rc.d/rc5.d/S47ipsec
> /etc/rc.d/rc6.d/K68ipsec
> /etc/ipsec.conf
> /etc/ipsec.secrets
> /usr/lib/ipsec
> /usr/lib/ipsec/spi
> /usr/lib/ipsec/eroute
> /usr/lib/ipsec/spigrp
> /usr/lib/ipsec/tncfg
> /usr/lib/ipsec/klipsdebug
> /usr/lib/ipsec/pluto
> /usr/lib/ipsec/whack
> /usr/lib/ipsec/ipsec
> /usr/lib/ipsec/barf
> /usr/lib/ipsec/manual
> /usr/lib/ipsec/auto
> /usr/lib/ipsec/look
> /usr/lib/ipsec/showdefaults
> /usr/lib/ipsec/_include
> /usr/lib/ipsec/_confread
> /usr/lib/ipsec/_keycensor
> /usr/lib/ipsec/_secretcensor
> /usr/lib/ipsec/_updown
> /usr/lib/ipsec/ranbits
> /usr/lib/ipsec/rsasigkey
> /usr/lib/ipsec/setup
> /usr/man/man3/ipsec_atoaddr.3
> /usr/man/man3/ipsec_addrtoa.3
> /usr/man/man3/ipsec_atosubnet.3
> /usr/man/man3/ipsec_subnettoa.3
> /usr/man/man3/ipsec_atobytes.3
> /usr/man/man3/ipsec_bytestoa.3
> /usr/man/man3/ipsec_datatoa.3
> /usr/man/man3/ipsec_atosa.3
> /usr/man/man3/ipsec_satoa.3
> /usr/man/man3/ipsec_atoul.3
> /usr/man/man3/ipsec_ultoa.3
> /usr/man/man3/ipsec_goodmask.3
> /usr/man/man3/ipsec_masktobits.3
> /usr/man/man3/ipsec_bitstomask.3
> /usr/man/man3/ipsec_optionsfrom.3
> /usr/man/man3/ipsec_subnetof.3
> /usr/man/man3/ipsec_hostof.3
> /usr/man/man3/ipsec_broadcastof.3
> /usr/man/man5/ipsec.secrets.5
> /usr/man/man5/ipsec.conf.5
> /usr/man/man8/ipsec_spi.8
> /usr/man/man8/ipsec.8
> /usr/man/man8/ipsec_eroute.8
> /usr/man/man8/ipsec_spigrp.8
> /usr/man/man8/ipsec_tncfg.8
> /usr/man/man8/ipsec_klipsdebug.8
> /usr/man/man8/ipsec_pluto.8
> /usr/man/man8/ipsec_whack.8
> /usr/man/man8/ipsec_barf.8
> /usr/man/man8/ipsec_look.8
> /usr/man/man8/ipsec_manual.8
> /usr/man/man8/ipsec_auto.8
> /usr/man/man8/ipsec_setup.8
> /usr/man/man8/ipsec_ranbits.8
> /usr/man/man8/ipsec_rsasigkey.8
> /usr/sbin/ipsec
Назад | Оглавление | Вперед |