К основному контенту

Настройка IPSec


Ман написан в 2011 году, про актуальность его в 2018 ничего не могу сказать.

IPSec (сокращение от IP Security) — набор протоколов для обеспечения защиты данных, передаваемых по межсетевому протоколу IP, позволяет осуществлять подтверждение подлинности и/или шифрование IP-пакетов. IPsec также включает в себя протоколы для защищённого обмена ключами в сети Интернет.

Делюсь с тем, с чем предоставилось познакомиться в ходе обучения на работе. Тут, конечно, далеко не всё, но я постарался расписать подробно, чтобы была ясна логика работы IPSec.
Система — Debian 6.0.2.1. Ставим на машины ipsec-toolsracoon. Для анализа сетевого трафика можно поставить tcpdump.
2 вида соединения: туннельный и транспортный.
Туннельный режим предполагает шифрование всего пакета, включая заголовок сетевого уровня. Туннельный режим применяется в случае необходимости скрытия информационного обмена организации с внешним миром.
Транспортный режим используется для шифрования поля данных IP пакета, содержащего протоколы транспортного уровня (TCP, UDP, ICMP), которое, в свою очередь, содержит информацию прикладных служб.
Правим /etc/sysctl.confРаскоменчиваем строчку
net.ipv4.ip_forward=1
Убираем ipv6 (мы его просто не используем, поэтому, чтобы не болтался, вырезаем):
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Настройки туннельного соединения:
Допустим, в нашем распоряжении 2 машины с двумя сетевыми интерфейсами с адресами 172.16.0.х и 10.0.х.х. Также имеется роутер, но не суть. В туннельном режиме связь между машинами реализуется так:
Например, нужно соединить машину 1 с адресами 172.16.0.2 и 10.0.100.1 с машиной 2 с адресами 172.16.0.3 и 10.0.101.1.
Во-первых:
На машине 1:
ip route add 10.0.101.0/24 via 10.0.100.1
На машине 2:
ip route add 10.0.100.0/24 via 10.0.101.1
Легче всего прописать это в автозагрузку. В Debian это файл /etc/rc.local. Пишем туда строчку:
/bin/ip route add 10.0.101.0/24 via 10.0.100.1
— на машине 1.
/bin/ip route add 10.0.101.0/24 via 10.0.100.1
— на машине 2.
Теперь перейдём к настройке IPSec. Главный конфигурационный файл — /etc/ipsec-tools.conf
Раскомментируем строчки:
flush;
spdflush;
Настраиваем шифрование:
Машина 1:
#ESP
add 172.16.0.2 172.16.0.3 esp 15701 -E 3des-cbc -m tunnel "13terrghe55634fhwg45wfeq";
add 172.16.0.3 172.16.0.2 esp 24501 -E 3des-cbc  -m tunnel  "13terrghe55634fhwg45wfeq";
Машина 2:
#ESP
add 172.16.0.3 172.16.0.2 esp 24501 -E 3des-cbc  -m tunnel  "13terrghe55634fhwg45wfeq";
add 172.16.0.2 172.16.0.3 esp 15701 -E 3des-cbc  -m tunnel  "13terrghe55634fhwg45wfeq";
Пояснение: ESP (Encapsulating Security Payload) — обеспечивает конфиденциальность данных. Здесь мы указываем адреса соединяемых машин, индексы, метод шифрования, ключ. Длина ключа, кстати, равняться должна 24, иначе не пойдёт (по крайней мере, с шифрованием 3des).

Ну и, соответственно, при туннельном режиме параметр -m tunnel обязателен.
Настраиваем SPD:
Машина 1:
spdadd 10.0.100.1 10.0.101.1 any -P out ipsec
esp/tunnel/172.16.0.2-172.16.0.3/require;

spdadd 10.0.101.1 10.0.100.1 any -P in ipsec
esp/tunnel/172.16.0.3-172.16.0.2/require;
Машина 2:
spdadd 10.0.101.1 10.0.100.1 any -P out ipsec
esp/tunnel/172.16.0.3-172.16.0.2/require;

spdadd 10.0.100.1 10.0.101.1 any -P in ipsec
esp/tunnel/172.16.0.2-172.16.0.3/require;
Как видно, настройки зеркальные.
Рестартуем службу: /etc/init.d/setkey restart
Пингуем машины, убеждаемся, что пинги идут, выполняем команду tcpdump (для исключения ssh-трафика набираем tcpdump | grep -v ssh), и если видим строчки вида
17:52:08.868024 IP 172.16.0.2 > 172.16.0.3: ESP(spi=0x00003d56,seq=0x1687), length 112
то всё хорошо.
Также можно посмотреть системный лог:
tail -f /var/log/syslog
При таких настройках, если в сети есть машина 3, настроенная, например, в туннельном режиме с машиной 2, то машина 3 никак не увидит машину 1 и наоборот.
Транспортный режим
Допустим, имеется 3 машины. Создаем GRE-туннель на всех машинах:
ip tunnel add mgre0 mode gre key 0xfffffffe ttl 255
Прописываем IP-адреса (для каждой машины, соответственно, свой IP):
На машине 1:
ip addr add 10.0.100.1/24 dev mgre0
На машине 2:
ip addr add 10.0.101.1/24 dev mgre0
На машине 3:
ip addr add 10.0.102.1/24 dev mgre0
Чтобы машины видели друг-друга, прописываем на машине 1 (в нашем случае добавляем адреса 2 машин):
ip neigh add 10.0.101.1 lladdr 172.16.0.3 dev mgre0
ip neigh add 10.0.102.1 lladdr 172.16.0.4 dev mgre0
На машине 2:
ip neigh add 10.0.100.1 lladdr 172.16.0.2 dev mgre0
ip neigh add 10.0.102.1 lladdr 172.16.0.4 dev mgre0
На машине 3:
ip neigh add 10.0.100.1 lladdr 172.16.0.2 dev mgre0
ip neigh add 10.0.101.1 lladdr 172.16.0.3 dev mgre0
В общем, смысл должен быть ясен.
Также не забываем про ip route:
На машине 1:
ip route add 10.0.101.0/24 dev mgre0
ip route add 10.0.102.0/24 dev mgre0
На машине 2:
ip route add 10.0.100.0/24 dev mgre0
ip route add 10.0.102.0/24 dev mgre0
На машине 3:
ip route add 10.0.100.0/24 dev mgre0
ip route add 10.0.101.0/24 dev mgre0
Ну и, естественно, прописываем всё это в /etc/rc.local (пример машины 1):
/bin/ip tunnel add mgre0 mode gre key 0xfffffffe ttl 255
/bin/ip link set mgre0 up
/bin/ip addr add 10.0.100.1/24 dev mgre0
/bin/ip route add 10.0.101.0/24 dev mgre0
/bin/ip route add 10.0.102.0/24 dev mgre0
/bin/ip neigh add 10.0.101.1 lladdr 172.16.0.3 dev mgre0
/bin/ip neigh add 10.0.102.1 lladdr 172.16.0.4 dev mgre0
ip link set mgre0 up — поднимает наше устройство mgre0.
Вроде бы организационные моменты сделаны, перейдём к настройке IPSec.
Настроим так, чтобы каждая машина знала друг о друге. Так будет выглядеть секция шифрования для машины 1:
#ESP
add 172.16.0.2 172.16.0.3 esp 15701 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.3 172.16.0.2 esp 24501 -E 3des-cbc "13terrghe55634fhwg45wfeq";

add 172.16.0.2 172.16.0.4 esp 15702 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.4 172.16.0.2 esp 24502 -E 3des-cbc "13terrghe55634fhwg45wfeq";
Для машины 2:
#ESP
add 172.16.0.3 172.16.0.2 esp 24501 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.2 172.16.0.3 esp 15701 -E 3des-cbc "13terrghe55634fhwg45wfeq";

add 172.16.0.3 172.16.0.4 esp 15703 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.4 172.16.0.3 esp 24503 -E 3des-cbc "13terrghe55634fhwg45wfeq";
Для машины 3:
#ESP
add 172.16.0.4 172.16.0.3 esp 24503 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.3 172.16.0.4 esp 15703 -E 3des-cbc "13terrghe55634fhwg45wfeq";

add 172.16.0.4 172.16.0.2 esp 24502 -E 3des-cbc "13terrghe55634fhwg45wfeq";
add 172.16.0.2 172.16.0.4 esp 15702 -E 3des-cbc "13terrghe55634fhwg45wfeq";
Обратите внимание на индексы esp xxxxx. Для одинаковых записей они должны совпадать.
Настраиваем SPD:
Машина 1:
spdadd 172.16.0.2 172.16.0.3 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.3 172.16.0.2 any -P in ipsec
esp/transport//require;

spdadd 172.16.0.2 172.16.0.4 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.4 172.16.0.2 any -P in ipsec
esp/transport//require;
Машина 2:
spdadd 172.16.0.3 172.16.0.2 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.2 172.16.0.3 any -P in ipsec
esp/transport//require;

spdadd 172.16.0.3 172.16.0.4 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.4 172.16.0.3 any -P in ipsec
esp/transport//require;
Машина 3:
spdadd 172.16.0.4 172.16.0.2 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.2 172.16.0.4 any -P in ipsec
esp/transport//require;

spdadd 172.16.0.4 172.16.0.3 any -P out ipsec
esp/transport//require;

spdadd 172.16.0.3 172.16.0.4 any -P in ipsec
esp/transport//require;
Рестартуем службу: /etc/init.d/setkey restart
Опят пингуем машины, убеждаемся, что пинги идут, выполняем команду tcpdump (для исключения ssh-трафика набираем tcpdump | grep -v ssh), и если видим строчки вида
17:52:08.868024 IP 172.16.0.2 > 172.16.0.3: ESP(spi=0x00003d56,seq=0x1687), length 112
то всё хорошо.
Также можно посмотреть системный лог:
tail -f /var/log/syslog

Комментарии

  1. У вас в начале написано /etc/init.d/setkey restart
    зачем? если в него никаких настроек не внесено,
    и куда писать эти команды?
    add 172.16.0.2 172.16.0.3 esp 15701 -E 3des-cbc -m tunnel "13terrghe55634fhwg45wfeq";
    add 172.16.0.3 172.16.0.2 esp 24501 -E 3des-cbc -m tunnel "13terrghe55634fhwg45wfeq";
    В конфиге /etc/ipsec-tools.conf такого нет.

    ОтветитьУдалить
  2. И как добавить марштур, вот результат выполнение команды
    root@PIVO:/# ip route add 10.200.1.0/24 via 192.168.251.0
    RTNETLINK answers: No such process

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Неттоп как медиацентр

Всё-таки сбылась мечта идиота. использовать неттоп в качестве медиаплеера была отличной идеей. Да, обычный медиаплеер раза в 2 дешевле, но и гибкости у него меньше. А тут полноценный компьютер который спокойно скушает любой формат аудио и видео. Nvidia ion для воспроизведения тяжёлого видео идеальное решение.

Полугодичный опыт с бюджетным аппаратом на Android

Итак, прошло около полугода с того момента, как я стал пользователем смартфона с операционной системой Android на борту.  В своё время был даже лютым хейтером данной системы. Хотя, первые релизы были действительно, не ахти. И потом, системой можно начинать пользоваться без особых плевков лишь с версии 2.2. Но ладно, тут у каждого свои мнения на этот счёт, поэтому, перейду быстрее к сути.