Главная > Операционные системы > UNIX > Linux
Требования по настройке сети для IPSecЗдесь приводятся некоторые вещи, которые вы должны проверить для корректной работы FreeS/WAN. Они важны, если вы не хотите получить сообщения об ошибке при запуске VPN. Шаг 1Вам нужно включить TCP/IP forwarding на обоих шлюзах. В Red Hat Linux, это в зависимости от версии делается так: Для Red Hat Linux 6.1 Редактируйте файл network (vi /etc/sysconfig/network)
и измените следующую
строку: Вы должны перезапустить настройки сети, чтобы изменения вступили в силу: [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 forwardingnet.ipv4.ip_forward = 1 Вы должны перезапустить настройки сети, чтобы изменения вступили в силу: [root@deep /]# /etc/rc.d/init.d/network restart Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ] Шаг 2 Помниту, что соединения с автоматическим снабжением ключами использует ключи автоматически созданные демоном согласования ключей 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" # Ваш внешний интерфейс
к Интернет. ЗАМЕЧАНИЕ. Смотрите главу 7, "Сетевой брандмауэр" для большей информации. Не забудьте добавить эти правила на других шлюзах. Шаг 3Подсистема rp_filter (связанная с защитой от IP
spoofing) должна быть
выключена на обоих шлюзах для корректной работы IPSEC. Это достигается
проверкой значения содержащегося в файлах
"/proc/sys/net/ipv4/conf/ipsec0/rp_filter и
"/proc/sys/net/ipv4/conf/eth0/rp_filter". 0 [root@deep /]# cat /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[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter Также можно добавить эти строки в скрипт файл firewall (/etc/rc.d/init.d/firewall) на обоих шлюзах, чтобы значение 0 (off) устанавливалось автоматически при каждой загрузке системы: # Disable IP spoofing protection to allow IPSEC to work properlyecho 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter ЗАМЕЧАНИЕ. В нашем примере мы предполагаем что для установления соединений используется интерфейс eth0. Конечно, если вы используете eth1 вам надо просто заменить eth0 на eth1. Если вы забудете сделать этот шаг, то получите на вашем терминале следующие сообщения об ошибках при запуске FreeSWAN IPSEC: ipsec_setup: WARNING: ipsec0 has route filtering turned on, KLIPS may not workipsec_setup: (/proc/sys/net/ipv4/conf/ipsec0/rp_filter = `1', should be 0) ipsec_setup: WARNING: eth0 has route filtering turned on, KLIPS may not work ipsec_setup: (/proc/sys/net/ipv4/conf/eth0/rp_filter = `1', should be 0) Шаг 4 Важно заметить, что любые правила маскарадинга для внутренней сети, которая использует IPSEC, должны находится после правил разрешающих трафик связанный с IPSEC (шаги 2 и 3 выше), или машина будет маскарадить трафик вместо пропускания его через IPSEC. Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзовых машинах и добавьте следующие строки позволяющие маскарадить пакеты направляемые на удаленный шлюз и обратно: # Маскарадинг внутреннего трафика.# Весь внутренний трафик будет выглядеть. ipchains -A forward -i $EXTERNAL_INTERFACE -s $LOCALNET_1 -j MASQ где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс
в Интернет. ЗАМЕЧАНИЕ. Смотрите главу 8 "Сетевой брандмауэр с поддержкой маскарадинга и форвардингом" для большей информации. Сейчас, вы можете перезагрузить вашу систему, и машины за шлюзом A должны без проблем обмениваться информацией с машинами за шлюзом B. Тестирование инсталляцииПерезагрузите оба шлюза для запуска FreeS/WAN.Просмотрите файл "/var/log/messages" для выявления сообщений о возникших трудностях. Если все хорошо, то вы должны увидеть что-то подобное: Feb 2 05:22:35 deep ipsec_setup: Starting FreeS/WAN IPSEC snap2000jan31b... Feb 2 05:22:35 deep ipsec_setup: KLIPS debug `none' Feb 2 05:22:35 deep ipsec_setup: KLIPS ipsec0 on eth0 192.168.1.1/255.255.255.0 broadcast 192.168.1.255 Feb 2 05:22:36 deep ipsec_setup: Disabling core dumps: Feb 2 05:22:36 deep ipsec_setup: Starting Pluto (debug `none'): Feb 2 05:22:37 deep ipsec_setup: Loading Pluto database `deep-mail': Feb 2 05:22:37 deep ipsec_setup: Enabling Pluto negotiation: Feb 2 05:22:37 deep ipsec_setup: Routing for Pluto conns `deep-mail': Feb 2 05:22:37 deep ipsec_setup: Initiating Pluto tunnel `deep-mail': Feb 2 05:22:39 deep ipsec_setup: 102 "deep-mail" #1: STATE_MAIN_I1: initiate Feb 2 05:22:39 deep ipsec_setup: 104 "deep-mail" #1: STATE_MAIN_I2: from STATE_MAIN_I1; sent MI2, expecting MR2 Feb 2 05:22:39 deep ipsec_setup: 106 "deep-mail" #1: STATE_MAIN_I3: from STATE_MAIN_I2; sent MI3, expecting MR3 Feb 2 05:22:39 deep ipsec_setup: 004 "deep-mail" #1: STATE_MAIN_I4: SA established Feb 2 05:22:39 deep ipsec_setup: 110 "deep-mail" #2: STATE_QUICK_I1: initiate Feb 2 05:22:39 deep ipsec_setup: 004 "deep-mail" #2: STATE_QUICK_I2: SA established Feb 2 05:22:39 deep ipsec_setup: ...FreeS/WAN IPSEC started Изучите файл "/var/log/secure" для выявления возникших трудностей. Если все хорошо, то вы должны увидеть нечто подобное: Feb 21 14:45:42 deep Pluto[432]: Starting Pluto (FreeS/WAN Version 1.3)Feb 21 14:45:43 deep Pluto[432]: added connection description "deep-mail" Feb 21 14:45:43 deep Pluto[432]: listening for IKE messages Feb 21 14:45:43 deep Pluto[432]: adding interface ipsec0/eth0 192.168.1.1 Feb 21 14:45:43 deep Pluto[432]: loading secrets from "/etc/ipsec.secrets" Feb 21 14:45:43 deep Pluto[432]: "deep-mail" #1: initiating Main Mode Feb 21 14:45:44 deep Pluto[432]: "deep-mail" #1: ISAKMP SA established Feb 21 14:45:44 deep Pluto[432]: "deep-mail" #2: initiating Quick Mode POLICY_RSASIG+POLICY_ENCRYPT+POLICY_AUTHENTICATE+POLICY_T UNNEL+POLICY_PFS Feb 21 14:45:46 deep Pluto[432]: "deep-mail" #2: sent QI2, IPsec SA established Feb 21 14:45:47 deep Pluto[432]: "deep-mail" #3: responding to Main Mode Feb 21 14:45:49 deep Pluto[432]: "deep-mail" #3: sent MR3, ISAKMP SA established Feb 21 14:45:49 deep Pluto[432]: "deep-mail" #4: responding to Quick Mode Feb 21 14:45:50 deep Pluto[432]: "deep-mail" #4: IPsec SA established На обоих шлюзах, должны существовать следующие элементы в каталоге "/proc/net/": [root@deep /]# ls -l /proc/net/ipsec_* -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_eroute -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_klipsdebug -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spi -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spigrp -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spinew -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_tncfg -r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_version Интерфейсы IPSEC должны быть подключены поверх
определенных
физических интерфейсов. ipsec0 -> eth0 mtu=16260 -> 1500 ipsec1 -> NULL mtu=0 -> 0 ipsec2 -> NULL mtu=0 -> 0 ipsec3 -> NULL mtu=0 -> 0 Сейчас выполните следующую команду для получения минимальной отладочной информации и проверьте, что полученный результат выглядит примерно так: [root@deep /]# ipsec lookdeep.openna.com Fri Feb 4 17:25:17 EST 2000 ============-============ 192.168.1.1/32 -> 192.168.1.2/32 => tun0x106@192.168.1.2 esp0x4450894d@192.168.1.2 ah0x4450894c@192.168.1.2 ------------=------------ ah0x3350f551@192.168.1.1 AH_HMAC_MD5: dir=in ooowin=32 seq=115 bit=0xffffffff alen=128 aklen=16 life(c,s,h)=bytes(16140,0,0)add(51656,0,0)use(54068,0,0)packets(115,0,0) idle=499 ah0x4450894c@192.168.1.2 AH_HMAC_MD5: dir=out ooowin=32 seq=2828 alen=128 aklen=16 life(c,s,h)=bytes(449488,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6 esp0x3350f552@192.168.1.1 ESP_3DES: dir=in ooowin=32 seq=115 bit=0xffffffff eklen=24 life(c,s,h)=bytes(13380,0,0)add(51656,0,0)use(54068,0,0)packets(115,0,0) idle=499 esp0x4450894d@192.168.1.2 ESP_3DES: dir=out ooowin=32 seq=2828 eklen=24 life(c,s,h)=bytes(381616,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6 tun0x105@192.168.1.1 IPIP: dir=in 192.168.1.2 -> 192.168.1.1 life(c,s,h)=add(51656,0,0) tun0x106@192.168.1.2 IPIP: dir=out 192.168.1.1 -> 192.168.1.2 life(c,s,h)=bytes(327581,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ipsec0 192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.1.2 192.168.1.2 255.255.255.255 UGH 0 0 0 ipsec0 Destination Gateway Genmask Flags MSS Window irtt Iface Выполните команду 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 Инсталлированные файлы> /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
Главная > Операционные системы > UNIX > Linux |