УНИТе

Портал > Документация > Изграждане на IPsec stateless транспорт за услугите в инфраструктурата на УНИТе под CentOS 7 и Scientific Linux 7

Изграждане на IPsec stateless транспорт за услугите в инфраструктурата на УНИТе под CentOS 7 и Scientific Linux 7

Съдържание:

  1. Предварителна информация
  2. Изтегляне и инсталиране на пакета ipsec-tools
  3. Процедура по генериране на споделени ключове
  4. Създаване на IPsec политики и Security Association (SA) в /etc/racoon/setkey.conf
  5. Активиране на описаните в /etc/racoon/setkey.conf политики и SA
  6. Проверка дали IPsec транспорта работи

 

1. Предварителна информация

Транспортният IPsec протокол има следните предимства:

  • не се налага изграждане на тунел между системите, които ще си комуникират

    Това облекчава топологично решението, позволявайки пълна прозрачност на комуникацията.

  • IPsec транспортния протокол "маскира" протокола на комуникация и портовете, между които тя се осъществява

    По този начин, веднъж установявайки IPsec транспорт между двете системи, няма как някой, който прихваща трафика, да разбере (по номера на порта), между какви приложения се осъществява комуникацията. Забележете, че при SSL комуникация, в която SSL протокола е част от приложението, дефинирането на порта за SSL комуникация, разкрива услугата. Например, SSL комуникация от и до порт 443/tcp е явен признак, че клиента и сървъра са установили комуникация по протокола HTTPS.

  • криптирането, декриптирането и проверката на целостта на данните става в ядрото на Linux системата, а не на приложно ниво

    Това позволява да се постигне висока производителност и да се криптират големи потоци трафик с минимално влошаване на качеството на услугата, заради процеса на криптиране и декриптиране.

Транспортният IPsec протокол има следните недостатъци:

  • обменът на ключа за удостоверяване на системите, участващи в IPsec транспорта, става ръчно или от въшнно приложение

    При stateless IPsec транспорт, ключът се задава във файл локално (като споделен ключ) върху всеки един от двата участници в транспорта. Една възможност да се конфигурират автоматично ключовете е чрез Ansible. Възможно е да се използва протокола IKE за динамична договорка на ключа, но това изисква да се стартира приложение, което да слуша на порт 500/udp.

  • IPsec транспортния протокол не се анализира лесно чрез инструментите за мониторинг на трафика върху участниците в транспорта

    За да се анализира трафика в IPsec транспорта, той трябва да се декриптира. Поради това, инструментът за анализ на трафика да има достъп до ключовете. Това усложнява процедурата по мониоринг и анализ.

Приложената по-долу документа описва конфигурирането на IPsec транспорт в stateless режим под CentOS 7 и Scientific Linux 7 - в този случай ключа се обменя по независим начин (който не е част от софтуерния пакет за конфигуриране на IPsec). С малки промени тази документация може да се адаптира за всяка съвремена Linux дистрибуция.

 

2. Изтегляне и инсталиране на пакета ipsec-tools

Тази процедура трябва да изпълните на всеки един от двата участници в IPsec транспорта!

Създаването на Security Association (SA) записите в паметта на системата, се извършва на база на пакета ipsec-tools от хранилището EPEL (не използвайте *swan софтуер за целта). Инсталирайте пакета с yum:

$ sudo install epel-release
$ sudo install ipsec-tools

ВНИМАНИЕ: Не конфигурирайте systemd услугата racoon като зареждаема!

Създайте файла /usr/lib/systemd/system/setkey-once.service, със следното съдържание:

[Unit]
Description=Loads IPsec keys
After=syslog.target network.target nss-lookup.target

[Service]
Type=oneshot
ExecStart=/sbin/setkey -f /etc/racoon/setkey.conf
ExecStop=/sbin/setkey -DF
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

После създайте файла /etc/racoon/setkey.conf, като конфигурирате за него съответните права за достъп:

$ sudo touch /etc/racoon/setkey.conf
$ sudo chmod 600 /etc/racoon/setkey.conf

и поставете в началото на му следните два реда:

flush;
spdflush;

След това, активирайте услугата setkey:

$ sudo systemctl enable setkey

 

3. Процедура по генериране на споделени ключове

По-долу е показано как се генерират случайни ключове, които отговарят на дължината на криптиращия ключ, който ще се използва за съответния криптографски алгоритъм (посочен в скобите):

  • 128-bits key (AES, SHA1):

    $ echo -n "0x" && dd if=/dev/urandom count=16 bs=1 2> /dev/null | xxd -ps -c 16
  • 160-bits key (RIPEMD):

    $ echo -n "0x" && dd if=/dev/urandom count=20 bs=1 2> /dev/null | xxd -ps -c 20
  • 256-bits key (AES, SHA256):

    $ echo -n "0x" && dd if=/dev/urandom count=32 bs=1 2> /dev/null | xxd -ps -c 32
  • 448-bits key (Blowfish):

    $ echo -n "0x" && dd if=/dev/urandom count=56 bs=1 2> /dev/null | xxd -ps -c 56
  • 512-bits key (AES, SHA512):

    $ echo -n "0x" && dd if=/dev/urandom count=64 bs=1 2> /dev/null | xxd -ps -c 64

 

4. Създаване на IPsec политики и Security Association (SA) в /etc/racoon/setkey.conf

За всяка IPsec транспорт комуникация, върху всеки един от двата участници в нея, трябва да бъдат създадени записи за политики и SA във файла /etc/racoon/setkey.conf. По-долу са посочени две типизирани конфигурации, които ще са най-често използвани в инфраструктурата на УНИТе, като за примерите IPv4 и IPv6 адресите на първата система са 192.168.199.1 и 2001:67c:20d0:bb::1, а адресите за втората система ще бъдат 192.168.199.2 и 2001:67c:20d0:bb::2. Ключовете, които ще видите по-долу в примерите (това са шестнадесетичните числа след -E blowfish-cbc и -A hmac-sha512 са генерирани съгласно рецептата, която е описана по-горе (в секция 3).

  • цялата комуникация между двете системи (двата хоста) ще е подчинена на IPsec транспортна схема:

    • Създайте следните записи във файла /etc/racoon/setkey.conf на хоста с IP адреси 192.168.199.1 и 2001:67c:20d0:bb::1:

      ### host1.unite - host2.unite ###
      # IPv4 policy
      spdadd 192.168.199.1 192.168.199.2 any -P out ipsec esp/transport//require;
      spdadd 192.168.199.2 192.168.199.1 any -P in ipsec esp/transport//require;
      # IPv6 policy
      spdadd 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 any -P out ipsec esp/transport//require;
      spdadd 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 any -P in ipsec esp/transport//require;
      # SA - IPv4
      add 192.168.199.1 192.168.199.2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 192.168.199.2 192.168.199.1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
      # SA - IPv6
      add 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
    • Създайте следните записи във файла /etc/racoon/setkey.conf на хоста с IP адреси 192.168.199.2 и 2001:67c:20d0:bb::2:

      ### host2.unite - host1.unite ###
      # IPv4 policy
      spdadd 192.168.199.2 192.168.199.1 any -P out ipsec esp/transport//require;
      spdadd 192.168.199.1 192.168.199.2 any -P in ipsec esp/transport//require;
      # IPv6 policy
      spdadd 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 any -P out ipsec esp/transport//require;
      spdadd 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 any -P in ipsec esp/transport//require;
      # SA - IPv4
      add 192.168.199.1 192.168.199.2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 192.168.199.2 192.168.199.1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
      # SA - IPv6
      add 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
  • само комуникация между двете системи (двата хоста) касаеща дадена услуга ще е подчинена на IPsec транспортна схема (за примера това е услугата слушаща на порт 24009/tcp):

    • Създайте следните записи във файла /etc/racoon/setkey.conf на хоста с IP адреси 192.168.199.1 и 2001:67c:20d0:bb::1:

      ### host1.unite - host2.unite ###
      # IPv4 policy
      spdadd 192.168.199.1[24009] 192.168.199.2[0] tcp -P out ipsec esp/transport//require;
      spdadd 192.168.199.2[0] 192.168.199.1[24009] tcp -P in ipsec esp/transport//require;
      # IPv6 policy
      spdadd 2001:67c:20d0:bb::1[24009] 2001:67c:20d0:bb::2[0] tcp -P out ipsec esp/transport//require;
      spdadd 2001:67c:20d0:bb::2[0] 2001:67c:20d0:bb::1[24009] tcp -P in ipsec esp/transport//require;
      # SA - IPv4
      add 192.168.199.1 192.168.199.2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 192.168.199.2 192.168.199.1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
      # SA - IPv6
      add 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
    • Създайте следните записи във файла /etc/racoon/setkey.conf на хоста с IP адреси 192.168.199.2 и 2001:67c:20d0:bb::2:

      ### host2.unite - host1.unite ###
      # IPv4 policy
      spdadd 192.168.199.2[0] 192.168.199.1[24009] tcp -P out ipsec esp/transport//require;
      spdadd 192.168.199.1[24009] 192.168.199.2[0] tcp -P in ipsec esp/transport//require;
      # IPv6 policy
      spdadd 2001:67c:20d0:bb::2[0] 2001:67c:20d0:bb::1[24009] tcp -P out ipsec esp/transport//require;
      spdadd 2001:67c:20d0:bb::1[24009] 2001:67c:20d0:bb::2[0] tcp -P in ipsec esp/transport//require;
      # SA - IPv4
      add 192.168.199.1 192.168.199.2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 192.168.199.2 192.168.199.1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;
      # SA - IPv6
      add 2001:67c:20d0:bb::1 2001:67c:20d0:bb::2 esp 0x492072 -m transport -E blowfish-cbc 0x742f7fc03579cad34f62a84cdc88ae213e4a4fc0ad7ddce56d3951807fefbb8eaa4c5cb64798b4faa7b0b87aa806e311018aa7c15d73bb4f -A hmac-sha512 0x5bcc866f5e8cc352b9b8875d89b9faca21611fdf5c4fab75ccb66cb34e6cc88fb17a7669b0411faca7ce7738cab17656be2e5ea8af2424e2f07a9928edd8b948;
      add 2001:67c:20d0:bb::2 2001:67c:20d0:bb::1 esp 0x492073 -m transport -E blowfish-cbc 0x2154c73cd4fefc8d3863258df7a639740665116932427f993994ddf28bd37a185e293d1625acd1fece7701d54139a39d4f4c7743dc929272 -A hmac-sha512 0xfa1c550c11a9a05f4149799b1f07c454823a924d93370ca2995504f0b9e9ec1f445f19b3398ac49401999268b6876449cf78c12cca8361b622c14b16faeaa7a7;

Политиките са описани с декларациите, които започват с spdadd. Тези дакларации определят кой трафик ще бъде обект на IPsec транспорт. Това, че се използва транспортна схема се вижда по директивата transport. А указването на require прави IPsec транспортната схема задължителна за тази комуникация. Важно е да се отбележи, че всяка една от политиките има посока (което се указва с използването на in и out декларациите след -P). Посоката in или out се дефинира спрямо последователността от адреси след spdadd. Например:

spdadd 192.168.199.2[0] 192.168.199.1[24009] tcp -P out ipsec esp/transport//require;

дефинира посоката като от 192.168.199.2 (от кой и да е TCP порт - това означава [0]) до порт 24009/tcp на 192.168.199.1. В случая out прилага политиката за изходящия трафик от 192.168.199.2 към 192.168.199.1.

За всяка SA има зададени по два ключа. Единият ключ е Blowfish (448-битов) и служи за криптиране на трафика ("E" - "encryption"). Другият, след него, служи за проверка на подписа върху данните в пакета ("A" - "authentication"). И двата ключа са генерирани съгласно рецептата дадена в секция 3.

ВАЖНО: Всяка SA има уникален номер, който е шестнадесетично число и се намира след декларацията esp в описанието на SA.

 

5. Активиране на описаните в /etc/racoon/setkey.conf политики и SA

След като политиките и SA са описани така, както е показано в секция 4, те трябва да се активират. Това става чрез рестартирането на услугата setkey:

$ sudo systemctl restart setkey

 

6. Проверка дали IPsec транспорта работи

За да проверите дали политиките са успешно заредени в паметта и достъпни за Linux ядрото, може да използвате резултата от изпълнението на следния команден ред:

$ sudo ip xfrm policy

По подобен начин може да се изведе информация и за съответните SA инсталирани в паметта:

$ sudo ip xfrm state

Ако желаете да видите дали обменяния трафик наистина е подчинен на IPsec транспорт, може да използвате tcpdump и да проследите комуникацията:

$ sudo tcpdump -n -i eno1 ip6 and host 2001:67c:20d0:bb::2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
15:27:34.494441 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36f5), length 96
15:27:34.522549 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425d8), length 240
15:27:34.523054 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36f6), length 120
15:27:34.523545 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425d9), length 120
15:27:34.523826 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36f7), length 104
15:27:34.528178 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425da), length 248
15:27:35.524424 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36f8), length 120
15:27:35.524861 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425db), length 120
15:27:36.524784 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36f9), length 120
15:27:36.525245 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425dc), length 120
15:27:37.524779 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36fa), length 120
15:27:37.525209 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425dd), length 120
15:27:38.524781 IP 2001:67c:20d0:bb::1 > 2001:67c:20d0:bb::2: ESP(spi=0x00492072,seq=0x36fb), length 120
15:27:38.525209 IP 2001:67c:20d0:bb::2 > 2001:67c:20d0:bb::1: ESP(spi=0x00492073,seq=0x425de), length 120

Забележете, че след spi стои номера на SA, който сте задали във файла /etc/racoon/setkey.conf

 

 


Последна актуализация: 31 август 2019

2019 УНИТе, Веселин Колев