The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

LDAP + динамические iptables (iptables ldap firewall linux gateway dhcp samba)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: iptables, ldap, firewall, linux, gateway, dhcp, samba,  (найти похожие документы)
From: Першин Сергей <029ah@mail.ru.> Date: Wed, 2 Aug 2007 18:21:07 +0000 (UTC) Subject: LDAP + динамические iptables Оригинал: http://www.invask.ru/linuxtools/ldap-iptables/ Введение -------- Дано: * Центральный сервер под linux, на котором установлены [main.org.int]: * База данных LDAP * Контроллер домена на Samba 3.x.x, со списком пользователей в БД LDAP * DHCP-сервер с конфигом в БД LDAP Шлюз в интернет под linux + прозрачный прокси [gate.org.int] Итак, все настроено и работает через обычный NAT, но хочется большего +). Задача состояла в том, чтобы пользователь, садясь за любую машину в домене, входил под своим именем и паролем, и шлюз тут же получал информацию о том, можно ли этому пользователю пользоваться интернетом, и с какими правилами. Настройка шлюза Подготовка iptables Для динамического переконфигурирования необходимо создать 6 цепочек, в которые скриптом будут добавляться правила, не влияя на общие настройки. Цепочки, оканчивающиеся на _fixed - для хостов, которые всегда должны иметь доступ в интернет (сервера, машины, не входящие в домен, ...). Остальные - для машин в домене Samba. root# iptables -N dynamic_squid_fixed root# iptables -N dynamic_squid root# iptables -I dynamic_squid 1 -j REJECT root# iptables -t nat -N dynamic_nat_prerouting root# iptables -t nat -N dynamic_nat_prerouting_fixed root# iptables -t nat -N dynamic_nat_postrouting root# iptables -t nat -N dynamic_nat_postrouting_fixed root# iptables -t nat -I PREROUTING 1 -j dynamic_nat_prerouting_fixed root# iptables -t nat -I PREROUTING 2 -j dynamic_nat_prerouting root# iptables -t nat -I POSTROUTING 1 -j dynamic_nat_postrouting_fixed root# iptables -t nat -I POSTROUTING 2 -j dynamic_nat_postrouting В цепочки dynamic_squid и dynamic_squid_fixed будут добавляться хосты, которым разрешено выходить в интернет и, соостетственно, пользоваться прокси. Поэтому в цепочке INPUT нужно сделать ссылку на них, чтобы проверить, разрешено ли соединение. Важен порядок прохождения - сначала все соединения на порт squid'а 3128 нужно завернуть в цепочку dynamic_squid_fixed, в которой все разрешенные хосты будут приняты правилом -j ACCEPT. Остальные - вернутся и должны быть завернуты в цепочку dynamic_squid. В ней все разрешенные хосты будут возвращены из цепочки правилом -j RETURN, а остальные - обработаны правилом -j REJECT, которое было добавлено при создании цепочки. Поэтому после ссылок на цепочки нужно разрешить соединения на порт 3128. $INET_IF - имя сетевого интерфейса, смотрящего в интернет. iptables -A INPUT -i ! $INET_IF -p tcp --dport 3128 -j dynamic_squid_fixed iptables -A INPUT -i ! $INET_IF -p tcp --dport 3128 -j dynamic_squid iptables -A INPUT -i ! $INET_IF -p tcp --dport 3128 -j ACCEPT Цепочки dynamic_nat_* - будут содержать правила MASQUERADE для простых хостов, DNAT, SNAT для хостов с реальными IP, и REDIRECT для прозрачного прокси. не забудьте сохранить настройки iptables +) Статически разрешенные хосты Первый скрипт - /usr/local/sbin/[1]ldap-inet-fixed отвечает за занесение хостов с постоянно разрешенным интернетом в цепочки iptables. Эти хосты должны быть записаны в БД LDAP как объекты с классами dhcpHost и hostInternetAccess, имеющие фиксированный IP (атрибут dhcpStatements, со значением "fixed-address: xx.xx.xx.xx"). Класс hostInternetAccess - дополнительный класс, который приведен ниже, в настройках основного сервера. Его конфигурационный файл - /etc/ldap-inet/ldap-inet-fixed.conf: host main.org.int dn cn=ldaptools,ou=Services,dc=org,dc=int password SECRET_WORD base cn=Network,dc=org,dc=int inet_if eth1 здесь dn - имя учетной записи в БД LDAP, имеющая права чтения на ветку с конфигурацией DHCP, password - пароль, base - ветка с конфигурацией, inet_if - интерфейс, смотрящий в интернет Запускать этот скрипт имеет смысл при загрузке системы, и раз в сутки, ночью. Динамически разрешенные хосты Скрипт /usr/local/sbin/ldap-inet-dynamic - должен запускаться при входе пользователя в домен. Ему передаются два параметра - логин пользователя, и IP-адрес хоста, на котором он залогинился. Его конфигурационный файл - /etc/ldap-inet/ldap-inet-dynamic.conf: host main.org.int dn cn=ldaptools,ou=Services,dc=org,dc=int password SECRET_WORD base cn=People,dc=org,dc=int inet_if eth1 Совпадает с конфигом предыдущего хоста, за исключением base - здесь указывается ветка, в которой Samba хранит пользователей домена. Удаленный запуск скрипта Скрипт /usr/local/sbin/ldap-inet-dynamic будет вызываться пользователем rpc, заведенным на сервере специально для этих целей. Для того, чтобы запустить скрипт как суперпользователь, нужно настроить утилиту sudo. Добавим в файл /etc/sudoers запись: rpc gate.org.int=NOPASSWD: /usr/local/sbin/ldap-inet-dynamic Теперь нужно настроить ssh для того, чтобы основной сервер выполнял команды на шлюзе. Выполняем (на основном сервере!): root# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@main.org.int Passphrase задавать не нужно. Файл /home/root/.ssh/id_rsa.pub копируем на шлюз в файл /home/rpc/.ssh/authorized_keys, и все, настройка шлюза закончена. Настройка основного сервера Настройка LDAP В первую очередь необходимо в схему LDAP включить дополнительное описание. Создаем файл /etc/openldap/schema/internet-access.schema attributetype ( 1.1.2.1.1.12 NAME 'hostAllowInternet' DESC 'Allow internet' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) attributetype ( 1.1.2.2.1.3 NAME 'hostRealIP' EQUALITY caseIgnoreIA5Match DESC 'Real IP address' SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetype ( 1.1.2.1.1.4 NAME 'hostForceProxy' DESC 'Transparent proxy control' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) objectclass ( 1.1.2.2.1.1 NAME 'hostInternetAccess' SUP top AUXILIARY DESC 'Allow internet access to this object' MUST (hostAllowInternet) MAY (hostRealIP $ hostForceProxy)) Здесь атрибуты hostAllowInternet - возможность доступа в интернет и к прокси-серверу. hostRealIP - реальный IP-адрес, выдаваемый хосту. Выдается он через DNAT+SNAT - пробросом соединений на указанный адрес из интернета на хост, куда залогинился пользователь (или на фискированный адрес DHCP). hostForceProxy - дополнительный атрибут, с помощью которого можно отключить прозрачный прокси для пользователя. Если он не указан, соединения идут через прокси. в файл /etc/openldap/slapd.conf добавляем: include /etc/openldap/schema/internet-access.schema Далее нужно добавить этот objectClass DHCP- и Samba- записям в БД. Через консоль мне это делать немного лень, поэтому я использовал phpLdapAdmin, где все достаточно просто - выбираем самбовскую учетную запись cn=testuser,ou=People,dc=org,dc=int, нажимаем "добавить значение" около classObject, выбираем hostInternetAccess, указываем атрибуту hostAllowInternet значение TRUE, и сохраняемся. Впрочем, если вы настроили LDAP+Samba+DHCP, то вам наверняка известно, как это сделать, не хуже меня +) Настройка Samba Создаем скрипт, который будет вызываться при входе пользователя (или модифицируем тот, который уже есть +): /var/lib/samba/login.sh #!/bin/sh ssh rpc@gate.org.int "sudo /usr/local/sbin/ldap-inet-dynamic \"$1\" \"$3\"" Правим секцию шары [profiles] в файле /etc/samba/smb.conf (а именно - добавляем последнюю строку): [profiles] comment = Profiles path = /var/lib/samba/profiles read only = no create mask = 0600 directory mask = 0700 browseable = no root preexec = /var/lib/samba/login.sh "%u" "%g" "%I" Заключение Если я нигде не опечатался, это все должно заработать +). Но важна, наверное, не конкретно эта реализация, а то, что централизованное управление на основе БД LDAP - потрясающая штука! Так, например, помимо динамических iptables, я достаточно легко прикрутил и систему учета трафика, которая теперь считает не на основе IP-адреса, а на основе доменного имени пользователя. 029ah <029ah@mail.ru.>

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру