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

Настройка 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

    ОтветитьУдалить
  3. Las Vegas Casino to Reopen for COVID-19 Day on June 25
    The casino 태백 출장샵 will remain closed until Monday and will reopen on 공주 출장마사지 June 25. The casino 고양 출장마사지 will 군산 출장마사지 remain open 전라남도 출장마사지 until Friday night. Casino owner Sylvester Stallone

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

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

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

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

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

Jabber от РБК

Зарегистрировал я себе домен. Ну и, естественно, захотел прикрутить туда почту, джаббер, блог.. С почтой прекрасно справляется Google Apps. Я попробовал воспользоваться всеми его сервисами, но наткнулся на неприятность, которая многим знакома по Google Talk — отсутствие метаконтактов, закладок, вменяемой информации о пользователе и, конечно, отправке статуса каждые пять минут от моего аккаунта. Немного погуглив, я узнал о нескольких Российских хостинговых компаниях, которые на данный момент предоставляют Jabber при аренде у них виртуального хостинга, либо как отдельную услугу. Отдельно Jabber оказалось возможным заказать только на hc.ru, при этом пока это бесплатно и вряд ли в дальнейшем цена будет превышать 50-100 рублей в месяц, а географическое местоположение серверов предоставляет более быстрый коннект, нежели Google. Подробно о регистрации под катом.