11:25 Squid и авторизация пользователей в AD |
Вступление Очень часто в средних и крупных организациях используют AD (здесь и далее AD - Active Directory). Но, как правило, на шлюзах ставят unix системы freebsd/linux и т.п. Для выхода в интернет локальной сети используют два варианта: NAT (Network Adress Translation) и прокси сервер. Рассмотрим второй случай, когда для выхода используется прокси сервер (squid). Для ограничения доступа к прокси серверу необходимо настроить аутентификацию пользователей. Squid поддерживает очень много схем аутентификации, но при наличии AD самым разумным и оптимальным было бы сделать так, чтобы squid брал информацию прямо из AD. При таком методе мы получаем единое хранилище учетных записей. При большом количестве пользователей 50 и более это очень удобно и эффективно. Так как нам не надо заводить для каждого пользователя отдельную учетную запись на шлюзе. Для реализации данной задачи нам понадобятся следующие пакеты: samba - необходима для аутентификации пользователей в AD. [1] squid - кэширующий прокси сервер. [2] Исходные данные Контроллер домена - windows 2000 server SP4, Native mode. freebsd 5.4 - шлюз, на котором мы и будем настраивать прокси сервер. 192.168.127.0/24 - наша локальная сеть. 192.168.127.1 - ip контроллера домена. 192.168.127.230 - внутренний ip шлюза. Перед началом настройки данной связки рекомендую обновить дерево портов. Как это сделать, читаем здесь Samba Итак, начнем по порядку. Собираем самбу. # cd /usr/ports/net/samba3/ # make config Options for samba 3.0.21a,1 [X] LDAP With LDAP support [X] ADS With Active Directory support [ ] CUPS With CUPS printing support [X] WINBIND With WinBIND support [ ] ACL_SUPPORT With ACL support [ ] AIO_SUPPORT With experimental AIO support [ ] SYSLOG With Syslog support [ ] QUOTAS With Quota support [ ] UTMP With UTMP support [ ] MSDFS With MSDFS support [ ] SAM_XML With XML support smbpasswd backend [ ] SAM_MYSQL With MYSQL smbpasswd backend [ ] SAM_PGSQL With PostgreSQL support smbpasswd backend [ ] SAM_OLD_LDAP With Samba2.x LDAP smbpasswd backend [ ] PAM SMBPASS With SMB PAM module [ ] POPT With installed POPT library # make install clean # rehash При конфигурации обращаем внимание на следующие строчки ... checking for LDAP support... yes ... checking whether LDAP support is used... yes checking for Active Directory and krb5 support... yes ... checking whether Active Directory and krb5 support is used... yes ... Создаем конфигурационный файл и настраиваем самбу # cd /usr/local/etc # cp smb.conf.default smb.conf # # /usr/local/etc/smb.conf # #======================= Global Settings ======================= [global] # netbios имя домена workgroup = TURBOGAZ # Строка комментария server string = Turbogaz Proxy Server # Режим безопасности, в нашем случае ads security = ads # Разрешаем доступ только с нашей сети hosts allow = 192.168.127. # расположение лог файла и его размер log file = /var/log/samba/samba.log max log size = 500 # Здесь необходимо указать dns имя или ip контроллера домена, # если указываете dns имя необходимо убедиться, что разрешение # имен работает правильно password server = server.turbogaz.net # dns имя Active Directory realm = turbogaz.net # Тип хранилища. passdb backend = tdbsam # Сетевые настройки. socket options = TCP_NODELAY # Указываем, что самба не является PDC local master = no domain master = no preferred master = no domain logons = no os level = 0 # Настройка кириллицы display charset = koi8-r unix charset = koi8-r dos charset = cp866 # Использовать шифрованные пароли encrypt passwords = yes # Настройки winbind winbind use default domain = no winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes Теперь необходимо изменить nsswitch.conf, чтобы winbind смог получать информацию из AD # cat /etc/nsswitch.conf | grep winbind group: files winbind passwd: files winbind Проверяем работу dns и производим синхронизацию времени # nslookup server.turbogaz.net Server: 192.168.127.1 Address: 192.168.127.1#53 Name: server.turbogaz.net Address: 192.168.127.1 # net time set Tue Jan 31 22:04:51 EET 2006 Теперь у нас все готово для ввода машины в домен # net ads join -U DomoradovA%123456 Using short domain name -- TURBOGAZ Joined 'FREEBSD' to realm 'TURBOGAZ.NET' Примечание !!! Пользователь DomoradovA - должен обладать правом добавлять машины в домен. Естественно вы должны использовать своего пользователя. Во избежание проблем настоятельно рекомендую не использовать русские символы в логине и пароле. Как видно из сообщения машина добавлена в домен. Для того, чтобы убедиться в этом необходимо открыть оснастку - "Active Directory - пользователи и компьютеры" Настраиваем запуск winbind вместе с системой, а также включаем режим отладки, облегчающий найти и устранить неисправность. # echo 'winbindd_enable="YES"' >> /etc/rc.conf # echo 'winbindd_flags="-d 3"' >> /etc/rc.conf Примечание !!! Для работы данной связки запускать smbd и nmbd нет необходимости. Поэтому для экономии ресурсов я специально не прописывал их. Примечание !!! На время тестирования и поиска неисправностей лучше указывать большой уровень информативности 7-9. При этом уровне, в логах будет очень много полезной информации, которая в 95% случаев поможет найти ошибку. После того, как вы полнсотью настроили данную связку, отладку можно вообще выключить или задать самый маленький уровень информативности - 1. Запускаем winbind. # /usr/local/etc/rc.d/samba.sh start Starting winbindd. Теперь для проверки работоспособности winbind проведем ряд тестов. Для этого воспользуемся программой wbinfo # wbinfo -p Ping to winbindd succeeded on fd 4 # wbinfo -t checking the trust secret via RPC calls succeeded # wbinfo -u TURBOGAZ\domoradova TURBOGAZ\администратор TURBOGAZ\гость TURBOGAZ\tsinternetuser TURBOGAZ\krbtgt TURBOGAZ\freebsd$ TURBOGAZ\server$ # wbinfo -g TURBOGAZ\компьютеры домена TURBOGAZ\контроллеры домена TURBOGAZ\администраторы схемы TURBOGAZ\администраторы предприятия TURBOGAZ\издатели сертификатов TURBOGAZ\администраторы домена TURBOGAZ\пользователи домена TURBOGAZ\гости домена TURBOGAZ\владельцы-создатели групповой политики TURBOGAZ\серверы ras и ias TURBOGAZ\dnsadmins TURBOGAZ\dnsupdateproxy Если у вас такие же результаты, то значит все нормально и winbind работает правильно. Теперь просмотрим информацию о домене и AD. # wbinfo -D TURBOGAZ Name : TURBOGAZ Alt_Name : turbogaz.net SID : S-1-5-21-220523388-842925246-839522115 Active Directory : Yes Native : Yes Primary : Yes Sequence : 3143 # net ads info LDAP server: 192.168.127.1 LDAP server name: server Realm: TURBOGAZ.NET Bind Path: dc=TURBOGAZ,dc=NET LDAP port: 389 Server time: Tue, 31 Jan 2006 22:34:27 EET KDC server: 192.168.127.1 Server time offset: -7 Проверим аутентификацию # wbinfo --authenticate=TURBOGAZ\\DomoradovA%123456 plaintext password authentication succeeded challenge/response password authentication succeeded Проверим утилитой id доменного пользователя # id TURBOGAZ\\DomoradovA uid=10000(TURBOGAZ\domoradova) gid=10005(TURBOGAZ\администраторы домена) groups=10005(TURBOGAZ\администраторы домена), 10006(TURBOGAZ\пользователи домена) Если у вас такие же результаты, то поздравляю, самбу мы настроили. Теперь осталось только указать пользователя, от имени которого будет проходить аутентификация. # wbinfo --set-auth-user=TURBOGAZ\\DomoradovA%123456 # wbinfo --get-auth-user TURBOGAZ\DomoradovA%123456 Squid Собираем и настраиваем squid # cd /usr/ports/www/squid/ # make config Options for squid 2.5.12_3 [ ] SQUID_LDAP_AUTH Install LDAP authentication helpers [X] SQUID_DELAY_POOLS Enable delay pools [X] SQUID_SNMP Enable SNMP support [ ] SQUID_CARP Enable CARP support [X] SQUID_SSL Enable SSL support for reverse proxies [X] SQUID_PINGER Install the icmp helper [ ] SQUID_DNS_HELPER Use the old 'dnsserver' helper [X] SQUID_HTCP Enable HTCP support [ ] SQUID_VIA_DB Enable forward/via database [X] SQUID_CACHE_DIGESTS Enable cache digests [X] SQUID_WCCP Enable Web Cache Coordination Protocol [ ] SQUID_UNDERSCORES Allow underscores in hostnames [X] SQUID_CHECK_HOSTNAME Do hostname chechking [ ] SQUID_STRICT_HTTP Be strictly HTTP compliant [X] SQUID_IDENT Enable ident (RFG 931) lookups [ ] SQUID_USERAGENT_LOG Enable User-Agent-header logging [X] SQUID_ARP_ACL Enable ACLs based on ethernet address [ ] SQUID_PF Enable transparent proxying with PF [ ] SQUID_IPFILTER Enable transp. proxying with IPFilter [ ] SQUID_FOLLOW_XFF Follow X-Forfarded-For headers [ ] SQUID_ICAP Enable ICAP client functionality [ ] SQUID_AUFS Enable the aufs storage scheme [ ] SQUID_COSS Enable the COSS storage scheme [ ] SQUID_LARGEFILE Support log and cache files >2GB [ ] SQUID_STACKTRACES Create backtraces on fatal errors [X] SQUID_RCNG Install an rcNG startup script # make install clean Производим минимальную настройку squid. Все изменения необходимо вводить после соответствующих тегов. # # /usr/local/etc/squid/squid.conf # # TAG: http_port # Указываем squid на каком порту и интерфейсе он будет работать. Именно эти # параметры необходимо будет указывать в настройках интернет проводника. http_port 192.168.127.230:3128 # TAG: maximum_object_size_in_memory (bytes) # Объекты больше этого размера не будут сохраняться в памяти. # По умолчанию 8КБ что очень мало на текущий момент, т.к. средний объем # web странички ~75-100 КБ maximum_object_size_in_memory 102400 # TAG: cache_dir # Объем кеша и его месторасположение. Объем задается в мегабайтах. (4096 ~ 4Гб) cache_dir ufs /usr/local/squid/cache 4096 16 256 # TAG: dns_nameservers # Здесь необходимо указать днс сервер(а). В принципе если ничего не указывать, # то squid автоматически добавит сервер(а), которые указаны в /etc/resolv.conf # Я указал адрес самого сервера, т.к. у меня на нем работает кеширующий днс. # Если у вас нет своего днс сервера, то необходимо указывать днс провайдера. dns_nameservers 192.168.127.230 # TAG: auth_param # Здесь мы указываем squid как следуею производить аутентификацию и настраиваем # соответствущие схемы аутентифиуации. Внимание: порядок описания схем имеет # значение, поэтому первой должна идти ntlm аутентификация. # C помощью таких настроек мы разрешили доступ к прокси серверу только для # пользователей группы InternetUsers. Если нам необходимо закрыть доступ # определенному человеку, мы просто удалим его из группы InternetUsers. auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol= squid-2.5-ntlmssp --require-membership-of=TURBOGAZ\\InternetUsers auth_param ntlm children 5 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 2 minutes auth_param ntlm use_ntlm_negotiate off auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol= squid-2.5-basic --require-membership-of=TURBOGAZ\\InternetUsers auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off # TAG: acl # ACL - Access Control List. Списки доступа к нашему прокси серверу. # Здесь мы указываем кто имеет право, а кто нет, использовать наш прокси. # ACL очень гибкое и мощное средство разграничения прав, но лично я для этих # целей использую редиректор squidGuard. # Разрешаем использовать наш прокси только прошедшим авторизацию. acl TURBOGAZ proxy_auth REQUIRED http_access allow TURBOGAZ http_access deny all # TAG: cache_effective_user # Пользователь и группа, от которых работает squid cache_effective_user squid # TAG: cache_effective_group cache_effective_group squid # TAG: visible_hostname # Данное имя будет указываться в различных сообщениях (об ошибках и т.п.) # По умолчанию будет подставляться значение, возвращаемое функцией gethostname() visible_hostname turbogaz.proxy.server Примечание !!! Это лишь минимальная настройка, на самом деле, squid имеет очень много параметров конфигурации. К счастью squid.conf имеет очень хорошие комментарии к каждому из параметров. О том, как настроить squidGuard читаем здесь - http://jober.do.am/blog/2009-09-29-32 Если вы впервый раз запускаете squid, то перед запуском необходимо создать иерархию папок для кеша. Для этого запускаем squid со следующими ключами: При этом в логах должно быть следующее |
|
Всего комментариев: 0 | |