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

Print Friendly, PDF & Email

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.


Print Friendly, PDF & Email

Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT