Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Поставь вардрайверов на колени

Andrey Matveev

Хакер, номер #082, стр. 082-106-6


% ps ax | grep authpf

3884 p1 Is+ 0:00.01 -authpf: shocker@192.168.2.2 (authpf)

# pfctl -a authpf -sA

authpf/shocker(3884)

Посмотреть рулесеты для конкретного пользователя можно так:

# pfctl -a "authpf/shocker(3884)" -s rules

pass in quick on ral0 inet from 192.168.2.2 to any

pass out log quick on fxp1 inet all keep state tagged 192.168.2.2

И по аналогии для таблицы NAT и правил перенаправления:

# pfctl -a "authpf/shocker(3884)" -s nat

nat on fxp1 inet from 192.168.2.2 to any tag 192.168.2.2 ->gt; (fxp1) round-robin

rdr pass on fxp1 inet proto tcp from any to any port = 4661 ->gt; 192.168.2.2

rdr pass on fxp1 inet proto tcp from any to any port = 4662 ->gt; 192.168.2.2

rdr pass on fxp1 inet proto udp from any to any port = 4665 ->gt; 192.168.2.2

rdr pass on fxp1 inet proto udp from any to any port = 4672 ->gt; 192.168.2.2

rdr on ral0 inet proto tcp from 192.168.2.2 to any port = ftp ->gt; 127.0.0.1 port 8021

[ipsecadm: направь криптопотоки в нужное русло]

Как вариант, можно отказаться от использования isakmpd и посмотреть в сторону ipsecadm(8) - программы управления защищенными соединениями. Чтобы проверить ее работу в действии, рассмотрим сценарий, когда и на сервере (TECHLAB), и на клиенте (HOME) установлена OpenBSD.

[ HOME ]-(fxp1)-------[ ISP ]-------(fxp0)-[ TECHLAB ]

Последовательно создаем два ключа - один для шифрования трафика (3DES, 192 bit), другой для аутентификации (SHA1, 160 bit):

# mkdir -m 700 /etc/ipsec

# openssl rand 24 | hexdump -e '24/1 "%02x"' >gt; /etc/ipsec/esp-enc-key

# openssl rand 20 | hexdump -e '20/1 "%02x"' >gt; /etc/ipsec/esp-auth-key

# chmod 600 /etc/ipsec/esp-*-key

Далее, чтобы не изобретать себе лишние сложности, можно воспользоваться шаблоном из каталога /usr/share/ipsec:

# cp /usr/share/ipsec/rc.vpn /etc/ipsec/rc.vpn

# vi /etc/ipsec/rc.vpn

/* В отладочном режиме команды выводятся на экран без исполнения, комментируем */

#DEBUG=echo

/* IP-адреса локального и удаленного компьютеров */

GW_LOCAL=81.211.1.1

GW_REMOTE=85.140.2.2

/* Не указываем CIDR-нотации внутренних подсетей */

LOCAL_NETWORKS=""

REMOTE_NETWORKS=""

/* Выбранные методы шифрования и аутентификации */

ENC=3des

AUTH=sha1

/* Специальные индексы для создания туннеля */

SPI_OUT=1000

SPI_IN=1001

/* Указываем абсолютные пути к файлам с ключами */

KEYFILE=/etc/ipsec/esp-enc-key

AUTHKEYFILE=/etc/ipsec/esp-auth-key

На стороне клиента скрипт будет выглядеть с минимальными правками:

# vi /etc/ipsec/rc.vpn

[snip]

GW_LOCAL=85.140.2.2

GW_REMOTE=81.211.1.1

[snip]

SPI_OUT=1001

SPI_IN=1000

[snip]

После того, как с помощью программы безопасного копирования scp(8) ключи (/etc/ipsec/esp-{auth,enc}-key) будут переданы клиенту, останется только запустить rc.vpn на каждом из хостов:

server# sh /etc/ipsec/rc.vpn

client# sh /etc/ipsec/rc.vpn

И при необходимости добавить его запуск в один из стартовых файлов. Например, так:

Назад на стр. 082-106-5  Содержание  Вперед на стр. 082-106-7