środa, 1 maja 2013

Proxy Squid uwierzytelnienie Kerbelos przy pomocy LDAP dla AD (2003 / 2008 Server) - Debian Squeeze

Konfiguracja serwera Squid na Debian Squeeze dla sieci opartej na MS Windows 2003 / 2008 Server, przy pomocy LDAP oraz uwierzytelniania Kerbelos.

W tym celu musimy skonfigurować następujące rzeczy:

Domena = example.local
Podsieć = 192.168.0.0/24
Server Proxy Ddebian: IP = 192.168.0.26, Nazwa = squidproxy.example.local
Windows Server 1: IP = 192.168.0.1Nazwa = domaincontroller1.example.local (Kontroler domeny)
Windows Server 2: IP = 192.168.0.10Nazwa = server2.example.local (Stacja testowa)


Do tego musimy posiadać zainstalowane dwa serwery 2003 (wykonać pierwszą konfigurację na Server 1, czyli zainstalować DNS, DHCP oraz AD, jak to zrobić znajdziesz: http://www.3xile.pl/publikacje/artykuly/windows-server-2003-cz-1, następnie wciśnij Ctrl+F, w wyszukiwarkę wpisz:"Zarządzanie tym serwerem", od tego miejsca opisana jest konfiguracja potrzebnych nam funkcji ) oraz jeden Debian Sqeeze.
Jako, że IE po instalacji 2003 Server nie ma wyjścia do sieci (musimy włączyć Enable Integrated Windows Authentication): Opcje internetowe (Internet Options) -> Zaawansowane ustawienia (Advanced settings) -> Włączyć autodetekcję Proxy (Proxy Auto detection enabled). Prostszym wyjściem jest zainstalowanie innej nowszej przeglądarki, ja polecam Chrome'a.

1) Konfiguracja DNS - Debian Squeeze: 

apt-get install dnsutils

Następnie na serwer (2003 Server IP:1) musimy dodać rekordy A (nazwa serwera) oraz PTR (zamienia IP na nazwę), jak to zrobić w linku: dodanie rekordu A oraz PTR.

Wracamy do Debiana, dodajemy wpisy naszych serwerów DNS z 2003 Server:

nano /etc/resolv.conf


search example.local
nameserver 192.168.0.1
nameserver 192.168.0.10

W środowisku produkcyjnym, czyli jeżeli faktycznie chcemy to wszystko wrzucić, musimy podłączyć 2003 Server do internetu, następnie z Debiana sprawdźmy połączenie między naszymi maszynami:

ping domaincontroller1.example.local -c 4 && ping google.com -c 4  


Jeżeli chcemy pobawić się tylko testowo, wykonujemy tylko pierwszą część pinga do ...local -c 4

Sprawdźmy dodatkowo w jakim stanie jest rozwiązywanie nazw serwerów:


dig -x 192.168.0.1
dig -x 192.168.0.26

Jeżeli pojawią się błędy, musisz to naprawić inaczej nici z dalszej zabawy.






2) Skonfigurujmy czas wewnątrz naszej sieci (oczywiście trzeba mieć internet w sieci):


apt-get install ntp

nano /etc/ntp.conf

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server domaincontroller1.example.local
server server2.example.local

Restart usługi:


invoke-rc.d ntp restart
ntpq -p

Powinniśmy otrzymać odpowiedź, że serwery otrzymały synchronizację czasową.






3) Dodanie Kerbelos'a:



apt-get install krb5-user libkrb53

Zatwierdzamy domyślne ustawienia w trakcie instalacji

cp /etc/krb5.conf /etc/krb5.conf.default
cat /dev/null > /etc/krb5.conf
nano /etc/krb5.conf

W zależności od posiadanego serwera (2003 / 2008) komentujemy lub usuwamy komentarze w konkretnych linijkach, poniższa konfiguracja dla 2003, dodatkowo zmieniamy na własne wyróżnione ustawienia:

[libdefaults]
        default_realm = EXAMPLE.LOCAL
        dns_lookup_kdc = no
        dns_lookup_realm = no
        ticket_lifetime = 24h
        default_keytab_name = /etc/squid3/PROXY.keytab
; for Windows 2003
        default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
        default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
        permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
; for Windows 2008 with AES
;        default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;        default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;        permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
        EXAMPLE.LOCAL = {
                kdc = domaincontroller1.example.local
                kdc = server2.example.local
                admin_server = domaincontroller1.example.local
                default_domain = example.local
        }
[domain_realm]
        .example.local = EXAMPLE.LOCAL
        example.local = EXAMPLE.LOCAL   





Jeżeli macie jeden kontroler domeny, możecie usunąć wpisy kdc.






4) Instalacja Squid'a:

apt-get install squid3 ldap-utils


cd /var/cache/apt/archives/ 

wget http://fuhm.net/software/msktutil/releases/msktutil_0.4-2_i386.deb

apt-get install libsasl2-modules-gssapi-mit libsasl2-modules

dpkg -i msktutil_0.4-2_i386.deb

cd


Musimy zainicjować sesję pomiędzy Debianem a serwerem:

kinit administrator

musimy podać hasła administratora dla domeny. Nie powinniśmy dostać żadnego błędu. Możemy sprawdzić to ewentualnie poleceniem klist.

Tworzymy obiekt Proxy w AD systemu Windows:

2003 Server:


msktutil -c -b "CN=COMPUTERS" -s HTTP -k /etc/squid3/PROXY.keytab --computer-name SQUIDPROXY \
--upn HTTP/squidproxy.example.local --server domaincontroller1.example.local --verbose

2008 Server:


msktutil -c -b "CN=COMPUTERS" -s HTTP -k /etc/squid3/PROXY.keytab --computer-name SQUIDPROXY \
--upn HTTP/squidproxy.example.local --server domaincontroller1.example.local --verbose --enctypes 28




Ustawiamy odpowiednie prawa dostępu:


chgrp proxy /etc/squid3/PROXY.keytab
chmod g+r /etc/squid3/PROXY.keytab

Na serwerze musimy zresetować hasło dla konta SQUIDPROXY, następnie wracamy do Debiana i w nim resetujemy system, po ponownym uruchomieniu wpisujemy:


msktutil --auto-update --verbose

Jeżeli pojawiły się błędy dodaj do w/w polecenia:  -k /etc/squid3/PROXY.keytab.

Następnie dodajemy do crona:


crontab -e

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# m h  dom mon dow   command
00 4  *   *   *     msktutil --auto-update --verbose | logger -t msktutil


Musimy utworzyć konto w AD o następujących parametrach:

- Nazwa - Squid Proxy,
- Nazwę logowania squid@example.local
-Wpisujemy hasło,
- Zmień hasło przy pierwszym logowaniu - nie zaznaczone,
- Użytkownik nie może zmienić hasła - zaznaczone,
- Hasło nigdy nie wygasa - zaznaczone,
- Wyłącz konto - nie zaznaczone,

Nadajemy kontu prawo do odczytu (klikamy prawym na właściwości, zakładka zabezpieczenia). 

Tworzymy grupy zabezpieczeń:


Internet Users | Opis: Użytkownicy mają dostęp do internetu . Dostęp nie jest zalogowany z pełnym dostępem do strony

Internet Users Full Log | Opis: Użytkownicy mają dostęp do internetu . Pełny dostęp poprzez przeglądarkę

Internet Users Full NoLog | Opis: Użytkownicy mają dostęp do internetuDostęp nie jest zalogowany z pełnym dostępem do strony







5) Startujemy Squid'a:


nano /etc/default/squid3

Dodajemy:


KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME


cp /etc/squid3/squid.conf /etc/squid3/squid.conf.default
cat /dev/null > /etc/squid3/squid.conf
nano /etc/squid3/squid.conf

Dodajemy poniższy wpis do konfiguracji, zmieniamy na własną zaznaczone pkt :


####### /etc/squid3/squid.conf Configuration File #######
####### cache manager
cache_mgr administrator@example.com
####### kerberos authentication
auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -d -s HTTP/squidproxy.example.local
auth_param negotiate children 10
auth_param negotiate keep_alive on
####### provide access via ldap for clients not authenticated via kerberos
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R \
        -b "dc=example,dc=local" \
        -D squid@example.local \
        -w "squidpass" \
        -f sAMAccountName=%s \
        -h domaincontroller1.example.local
auth_param basic children 10
auth_param basic realm Internet Proxy
auth_param basic credentialsttl 1 minute
####### ldap authorizations
# restricted proxy access logged
external_acl_type internet_users %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        
-b "dc=example,dc=local" \


        

-D squid@example.local \

        
-w "squidpass" \
        -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        
-h domaincontroller1.example.local
# full proxy access no logging
external_acl_type internet_users_full_nolog %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        
  
-b "dc=example,dc=local" \
       
-D squid@example.local \
       
-w "squidpass" \
       -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users Full NoLog,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        
-h domaincontroller1.example.local
# full proxy access logged
external_acl_type internet_users_full_log %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        -b "dc=example,dc=local" \
        
-D squid@example.local \
        
-w "squidpass" \
        -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users Full Log,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        
-h domaincontroller1.example.local
####### acl for proxy auth and ldap authorizations
acl auth proxy_auth REQUIRED
# format "acl, aclname, acltype, acltypename, activedirectorygroup"
acl RestrictedAccessLog external internet_users Internet\ Users
acl FullAccessNoLog external internet_users_full_nolog Internet\ Users\ Full\ NoLog
acl FullAccessLog external internet_users_full_log Internet\ Users\ Full\ Log
acl whitelistsites url_regex -i "/etc/squid3/whitelistsites.txt"
acl blockedsites url_regex -i "/etc/squid3/blockedsites.txt"
####### squid defaults
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
####### enforce auth: order of rules is important for authorization levels
no_cache deny whitelistsites
http_access allow whitelistsites
http_access allow FullAccessNoLog auth
http_access allow FullAccessLog auth
http_access deny blockedsites
http_access allow RestrictedAccessLog auth
####### logging
# don't log whitelistsites, FullAccessNoLog
access_log /var/log/squid3/access.log squid !whitelistsites !FullAccessNoLog
####### squid defaults
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320



touch /etc/squid3/whitelistsites.txt



touch /etc/squid3/blockedsites.txt

invoke-rc.d squid3 restar






6) Konfiguracja Proxy:

apt-get install apache2

nano /etc/apache2/conf.d/wpad.dat

Dodajemy do niego:

AddType  application/x-ns-proxy-autoconfig .dat

nano /var/www/wpad.dat


function FindProxyForURL(url, host)
{
        $proxy = "PROXY squidproxy.example.local:3128";
        // URLs within this network are accessed direct
        if (isInNet(host, "192.168.0.0", "255.255.0.0"))        {return "DIRECT";}
        if (isInNet(host, "172.16.0.0", "255.240.0.0"))         {return "DIRECT";}
        if (isInNet(host, "10.0.0.0", "255.0.0.0"))             {return "DIRECT";}
        if (isInNet(host, "127.0.0.0", "255.0.0.0"))            {return "DIRECT";}
        //Return proxy for EVERYTHING else
        else return $proxy;
}


invoke-rc.d apache2 restart


I tak powinniśmy mieć skonfigurowanego Proxy dla naszej sieci, który będzie filtrował ruch naszych użytkowników.



Brak komentarzy:

Prześlij komentarz