Руководство администратора Linux по безопасности

       

Два сервера с защищенным соединением


В нашем примере мы будем иметь следующую сеть:

Сервер 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
Теперь перезагрузитесь с ядром 2.2.10.

Теперь мы должны отредактировать правила 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
Сервер B:



ipchains -P forward DENY

ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0
Не забудьте поместить эти правила в последними в Ваш скрипт для firewall. Вы также должны разрешить IP-forwarding, отредактировав файл /etc/sysconfig/network и заменив строку:



FORWARD_IPV4="no"
на строку:



FORWARD_IPV4="yes"
Вы должны теперь быть способны на ping сервер B из сети A (ping 5.6.7.8), и ping сервер A из сети B (ping 1.2.3.4).

Если все работает, можно начать установку 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
Удостоверьтесь, что Вы сохраняете настройки ядра, даже при том, что параметры выбраны, они не были сохранены. Вам возможно также придется восстанавливать ядро, поскольку команда "make menugo" иногда выполняет "make zImage", а она обычно терпит неудачу из-за больших размеров ядеер серии 2.2.x. Сразу после комиляции в таком случае будет выдано сообщение об ошибке. Если оно есть, просто скомандуйте:



cd /usr/src/linux

make bzImage

cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.10-ipsec
Теперь поправьте lilo.conf, запустите lilo и перезагрузитесь с новым ядром.



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
При запуске lilo должен вывести нечто вроде:



linux-ipsec *

linux
После перезагрузки Вы получите ядро 2.2.10 с поддержкой IPSec. При перезагрузке будут сообщения об ошибках. Дело в том, что по умолчанию IPSEC установлен так, чтобы использовать интерфейс eth999, который конечно не существует. Вы должны также добавить /usr/local/lib/ipsec к Вашей инструкции path, или Вы будете должны каждый раз набирать полный путь.

Настройка 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=
Замените espenckey и espauthkey на новые ключи (используя ranbits для генерации чисел, не забудьте вписать префикс 0x, который указывает, что число шестнадцатиричное):



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
Удостоверьтесь, что эти правила появляются перед правилом masquerading, это должно выглядеть следующим образом:

#

# 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
На сервере B в основном повторите процесс:



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
Удостоверьтесь, что эти правила появляются перед правилом masquerading, это должно выглядеть следующим образом:



#

# 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
Для проверки попробуйте ping 192.168.0.2 с клиента 10.0.0.2 (Вы не можете сделать ping 192.168.0.1 на 10.0.0.1 или на внешние адреса шлюза, так как Вы не сконфигурировали туннели, чтобы обработать такие пакеты). Если это работает, Вы все установили правильно.


Содержание раздела