Два сервера с защищенным соединением
В нашем примере мы будем иметь следующую сеть:
Сервер A, где eth0 соединен с Internet и имеет IP-адрес 1.2.3.4, и eth1 соединен с внутренней сеткой и имеет IP-адрес 10.0.0.1.
Сеть A внутренняя: состоит из сервера A и машин подсети 10.0.0.*.
Сервер B, где eth0 соединен с Internet и имеет IP-адрес 5.6.7.8, и eth1 соединен с внутренней сеткой и имеет IP-адрес 192.168.0.1.
Сетьk B внутренняя: состоит из сервера B и машин подсети 192.168.0.*.
Сеть C Internet, с ним связаны серверы серверы A и B (по T1, давайте быть щедрыми).
Основная настройка серверов
На каждой машине установлена Red Hat Linux 6.1 со стандартным для нее ядром 2.2.12, удостоверьтесь что Вы устанавливаете ipchains, по умолчанию он обычно не ставится.
Идите на ftp.linux.org (или на Ваше любимое зеркало) и загрузите полное ядро Linux 2.2.10. Идите в /usr/src и удалите существующую ссылку linux, распакуйте ядро 2.2.10, переместите его в /usr/src/linux-2.2.10 и создайте ссылку "linux" на него. Теперь перейдите в каталог /usr/src/linux, настройте ядро, скомпилируйте и поставьте его. Удостоверьтесь, что Вы выбрали все элементы для IP-masquerading, и где возможно компилируйте их как статические компоненты, а не модули. Не забудьте использовать "make bzImage", так как новое ядро, вероятно, слишком большое для lilo, чтобы загрузиться.
cd /usr/src rm linux tar ?zvvxf /path/to/tarball/linux-2.2.10.tar.gz mv linux linux-2.2.10 chown ?R root:root linux-2.2.10 ln ?s linux-2.2.10 linux cd linux make menuconfig make dep make bzImage make modules make modules_install cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.10 rm /boot/System.* cp /usr/src/linux/System.map /boot/System.map |
Теперь мы должны редактировать lilo.conf, выполнить lilo и перезагрузиться для работы с новым ядром. Удостоверьтесь что сеть работает перед попыткой установить программное обеспечение IPSec.
Lilo.conf должен напоминать:
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=100 image=/boot/vmlinuz-2.2.10 label=linux root=/dev/hda1 read-only image=/boot/vmlinuz-2.2.5-12 label=linuxold root=/dev/hda1 read-only |
при перезапуске lilo Вы должны видеть нечто вроде:
linux * linuxold |
Теперь мы должны отредактировать правила firewall, на обеих серверах для использования masquerading для внутренних машин и применения запрета на forwarding:
Сервер A:
ipchains -P forward DENY ipchains -A forward -p all -j MASQ -s 10.0.0.0/24 -d 0.0.0.0/0 |
ipchains -P forward DENY ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0 |
FORWARD_IPV4="no" |
FORWARD_IPV4="yes" |
Если все работает, можно начать установку IP Security.
Установка IPSec
Загрузите последний IPSec snapshot (версия 1.0 НЕ работает с ядрами 2.2.x). Перейдите в /usr/local/src (или куда Вы его положили), распакуйте исходники и запустите программу установки (обычно для ncurses-версий make menugo). Ядро будет пропатчено, после чего будет запущена настройка ядра и построение утилит IPSec и самого нового ядра.
cd /usr/local/src tar ?zvvxf /path/to/tarball/snapshot.tar.gz chown ?R root:root freeswan-snap1999Jun14b cd freeswan-snap1999Jun14b make menugo |
cd /usr/src/linux make bzImage cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.10-ipsec |
Lilo.conf должен выглядеть примерно так:
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=100 image=/boot/vmlinuz-2.2.10-ipsec label=linux-ipsec root=/dev/hda1 read-only image=/boot/vmlinuz-2.2.10 label=linux root=/dev/hda1 read-only |
linux-ipsec * linux |
Настройка IPSec
Мы первоначально используем ручной режим (то есть, пока мы игнорируем pluto IKE daemon) поскольку это делает жизнь более простой. Вы должны отредактировать файлы ipsec.conf и ipsec.conf. Эти два файла затем должны быть скопированы на другой сервер безопасным способом (ssh, гибким диском и т.д.).
Диаграмма сети:
Вы должны отредактировать файл ipsec.conf, большинство значений по умолчанию прекрасно, но Вы должны изменить следующее:
conn sample type=tunnel # left security gateway (public-network address) left= # next hop to reach right leftnexthop= # subnet behind left (omit if there is no subnet) leftsubnet= # right s.g., subnet behind it, and next hop to reach left right= rightnexthop= rightsubnet= # spibase=0x200 # (manual) encryption/authentication algorithm and parameters to it esp=3des-md5-96 espenckey= espauthkey= |
conn my-tunnel type=tunnel # left security gateway (public-network address) left=1.2.3.4 # next hop to reach right leftnexthop=1.2.3.1 # subnet behind left (omit if there is no subnet) leftsubnet=10.0.0.0/24 # right s.g., subnet behind it, and next hop to reach left right=5.6.7.8 rightnexthop=5.6.7.1 rightsubnet=192.168.0.0/24 # spibase=0x200 # (manual) encryption/authentication algorithm and parameters to it esp=3des-md5-96 espenckey=some_auth_key_here (ranbits 192) espauthkey=some_other_key_here (ranbits 128) |
Скоируйте исправленные файлы ipsec.conf и ipsec.secrets на другой сервер каким- нибудь безопасным способом. Теперь все, что остается, это добавление некоторых правил firewall так, чтобы пакеты не получили masqueraded (мы просто хотим их послать).
На сервере A добавьте такие правила:
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24 ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24 |
# # FORWARD RULES # ipchains -P forward DENY # ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24 ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24 ipchains -A forward -p all -j MASQ -s 10.0.0.0/24 -d 0.0.0.0/0 |
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24 ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24 |
# # FORWARD RULES # ipchains -P forward DENY # ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24 ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24 ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0 |
Теперь Вы должны быть способны создать ipsec туннель на обеих машинах вручную и машины в сети A должны быть способны разговаривать с машинами в сети B без проблем.
ipsec manual ?up my-tunnel |
/usr/local/lib/ipsec/spi: message size is 36 /usr/local/lib/ipsec/spi: message size is 132 /usr/local/lib/ipsec/spi: message size is 132 |