LINUX.ORG.RU

аутентификация трафика от машин из LAN на шлюзе с помощью IPSEC


0

0

На протяжении длительного времени пытаюсь решить проблему
аутентификации и авторизации траффика LAN<->INET
от максимиум 50 машин Win98/2000/XP/2003 через Linux 2.6.x-шлюз.
Общая мысль - сделать так, чтобы на шлюзе можно было
определить от кого/кому (а не от какой машины (IP,MAC-адреса))
проходит данный IP-пакет и принять решение что с ним делать
основываясь на этой информации, а не по IP/MAC-адресам.
А так же интересует подсчет траффика так же по пользователям.

Проблема стара, на форуме читал пару дискуссий на эту тему,
но "окончательного" решения пока не смог реализовать.
В кратце проблема и "способ" (VPN) описаны здесь
http://www.flowix.com/.
Однако это за деньги - неинтересно, а главное хочется
понять как это сделать самому.

Варианты типа:
1. По IP адресу
Проблемы: подмена адреса, угоны сессий,
невозможно определить пользователя
если одним компьютером пользуется несколько человек.
2. По МАС адресу - подмена адреса
Проблемы: подмена адреса, угоны сессий,
невозможно определить пользователя
если одним компьютером пользуется несколько человек.
3. Пользователь открывает свой IP
подключившись к шлюзу через SSH2
(добавление правила в NETFILTER через iptables).
Проблемы: явное открытие/закрытие
(особенно закрытие - забыл закрыть и
ушел - кто-то себе открытый адрес поставит и усё),
угоны сессий,
невозможно определить пользователя
если одним компьютером пользуется несколько человек.
4. Всякие прокси отпадают так как на все
протоколы их просто не существует,
а контролировать надо весь трафик.
5. http://www.nufw.org/
Это уже почти то что надо.
На шлюзе ставится сервер отвечающий за аутентификацию
пакетов, а на пользовательской машине клиент, который
отсылает запрос на сервер на каждое новое соединение
(типа от кого это соединение).
http://www.nufw.org/Principles.html
Естественно, сначала надо залогиниться этим клиентом на
nufw сервере.
Контролируются только пакеты SYN (инициализация подключения),
остальное отслеживается CONNTRACK ядра Linux.
И все вроде зашибись. Но вся проблема в клиенте под винды.
Эти сволочи его только продают, а свободнораспространяемого нет.
Так что...
6. VPN. А именно хотелось бы:
- как в SSH2 на каждого, кто может подключиться через шлюз,
можно было бы сгенерить ключи для ipsec-соединения,
или просто задать пароли
- лучше без всяких IKE-демонов, руками куда-нибудь сложил на шлюзе
публичные ключи пользователей, пользователям дал ключ сервера
- траффик между клиентскими машинами и шлюзом аутентифицировался
(AH протокол) по сгенеренным ключам (ключ=пользователю),
шифрование как таковое не нужно.
- на шлюзе (т.е. в Linux iptables) можно было определить от
кого (кем подписан) данный пакет.
Предположительно это SPI (Security Parameter Index).
- чтобы "это" работало с win98 (PGPNet), Win2000/XP/2003
иначе смысла нет заводлить эту бодягу.
Пробую уже, но остается много неясностей:
- будет транспорт или туннель?
- PGPNet и Linux IPSEC совместимы вообще?
- с ключами и IKE не ясно, можно ли без IKE-демона?
как с SSH2 - сгенерить и рассовать по клиентам и в шлюз,
и никаких автоматических обменов ключами и смены через промежутки времени.
- как же в iptables определить кто подписывал данный пакет
(думаю, что по SPI, но так ли это)?
- а если без IKE-демона нельзя
(т.е. ключи будут автоматически генериться) как же
определить кто подписывал данный пакет, ведь SPI для
каждого я уже не смогу задать?

Главный вопрос: возможно ли в принципе, то что описано в 6 пункте.
Т.е. аутентификация трафика от машин из LAN на шлюзе с помощью IPSEC.
Если кто может, ппроясните сей вопрос.
Может есть более простые и не менее надежные способы?


Поставь PPTP-сервер на 2.6, пропиши ему в chap-secrets юзеров, пароли и адреса (из другой подсети), которые они будут получать устанавливая соединение с сервером. Бань на файерволе все внутренние подсети, разрешай выход только для айпишников, которые выдает сервер.

Вот, например, http://poptop.sourceforge.net/dox/

Виндовый клиент стандартный: 'Удаленный доступ к сети'->'Подключение к виртуальной частной сети через интернет' или кк там, в зависимости от версий.

boatman
()
Ответ на: комментарий от boatman

А как в этом случае быть с NETFILTER/iptables? Т.е. не NETFILTER же будет ограничивать кого пропускать а кого нет. Возможно ли будет идентифицировать в iptables чей именно это пакет?

gapsf2
() автор топика
Ответ на: комментарий от boatman

Кажись, понял.
Пользователь сможет подключиться к PPTP-серверу только имея аккаунт и зная пароль, причем при установлении соединения ему будет выдан определенный IP (на виртуальный интерфейс?). А так как пароли не передаются plaintext и трафик шифруется, то затруднительно там что-то сделать.
В iptables соответственно можно предположить:
выданый_IP == пользователь.
Так?

gapsf2
() автор топика
Ответ на: комментарий от boatman

Не очень понятно про "адреса (из другой подсети)". Если у шлюза LAN-интерфейс 192.168.0.1, а клиенты будут получать адреса 192.168.1.0/24 они ж не "увидят" друг друга. Дело в том что все клиенты и шлюз (с одним LAN интерфейсом ) у меня должны быть в одной (192.168.0.0/24) сети (на шлюзе ftp,pop3,http сервера для LAN). Я так понимаю, в этом случае придется выдавать адреса из 192.168.0.0/24?

gapsf2
() автор топика
Ответ на: комментарий от gapsf2

ну и что, что увидят? хоть из 10.0.0.0/8 адреса выдавай... да хоть те же самые (правда сам так не пробовал). Есть пул адресов, которым разрешено выходить в ИНет, всем остальным - запрещено. Чтобы выйти в ИНет - нужно поднять ВПН-соединение, в этот момент в файервол вставляется разрешающее правило (имеется ввиду что шлюз в ИНет, ВПН-сервер и файервол на одной машине). Трафик между сервером и клиентом аутентифицируется средствами самого ВПН, вклиниться между ними не получится т.к. между сервером и легальным клиентом уже поднят туннель и ходят gre-пакеты со всякими там контрольными суммами, номерами пакетов и т.п.. Даже если кто-то поставит себе такой же адрес - сервер его отбросит т.к. тот второй не знает логин-пароль легального юзера. Даже если левый юзер знает логин и пасс в работающее соединение ему вклиниться будет крайне тяжко.

в общем, криво объяснил, сам вмижу, но истина где-то рядом.

boatman
()
Ответ на: комментарий от boatman

"в этот момент в файервол вставляется разрешающее правило".
Когда соединение установлено - понятно почему с ним трудно что-то сделать, и в этот период в iptables есть правило для выданного адреса.

Но вот правило должно (может быть) статическим (тогда не понимаю что мешает не подключаясь к PPTP-серверу, поставить себе разрешенный адрес и получить траффик чз него), или оно вставляется при подключении
(а как оно будет убираться - там есть возможность убрать при отключении?)

gapsf2
() автор топика
Ответ на: комментарий от gapsf2

Нет, правило вставляется тогда, когда юзер поднимает ВПН-соединение.

А мешает подключиться незнание логина/пароля.

boatman
()
Ответ на: комментарий от boatman

И будем иметь по нтерфейсу (ppp,ppp1,ppp2...) на каждое подключение? А это сильно жрет ресурсы? Спасибо.

gapsf2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.