2009 November

Squid with Active Directory authentication on Ubuntu

apt-get install squid3 samba winbind krb5-user ntp
usermod -G winbindd_priv --append proxy

SAMBA
/etc/samba/smb.conf:

[global]
realm =
DOMENIU.ORG                 #SUBDOMENIU.DOMENIU.ORG
workgroup = DOMENIU                 #SUBDOMENIU
security = ads
netbios name =
squidproxy           #hostname de obicei
debug timestamp = yes
encrypt passwords = yes
winbind use default domain = yes
winbind uid = 10000-20000
password server =
dc1.domeniu.org
idmap uid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind gid = 10000-20000
max log size = 50000
winbind separator = \\
client lanman auth = no
lanman auth = no
client ntlmv2 auth =
yes #in functie de ce suporta DC-ul
ntlm auth = no
restrict anonymous = 2
log level = 3 passdb:5 auth:10 winbind:5
log file = /var/log/samba/samba.log
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
##STERGE comentarii

KERBEROS
/etc/krb5.conf:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
#allow_weak_crypto=true                               #in functie de server trebuie decomentat link
ticket_lifetime = 24000
default_realm =
DOMENIU.ORG
#default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc     #in functie de server trebuie comentate
#default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc     #in functie de server trebuie comentate
default_tgs_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
default_tkt_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
#SUBDOMENIU.DOMENIU.ORG
= {
#kdc =
dc1.subdomeniu.domeniu.org:88
#admin_server =
dc1.subdomeniu.domeniu.org:749
#default_domain =
subdomeniu.domeniu.org                         

#}

DOMENIU.ORG = {
kdc =
dc1.domeniu.org:88
admin_server =
dc1.domeniu.org:749
default_domain =
domeniu.org                         
}

 

[domain_realm]
.domeniu.org = DOMENIU.ORG
domeniu.org
= DOMENIU.ORG
#.subdomeniu.domeniu.org = SUBDOMENIU.DOMENIU.ORG
#
subdomeniu.domeniu.org = SUBDOMENIU.DOMENIU.ORG

[kdc]
profile = /etc/krb5/kdc.conf
##STERGE comentarii

SQUID
/etc/squid3/squid.conf

cache_peer 10.x.x.1 parent 3128 3130 no-query round-robin
cache_peer 10.x.x.2 parent 3128 3130 no-query round-robin

shutdown_lifetime 3 seconds

visible_hostname        proxy.domeniu.org
http_port 3128
cache_mem 128 MB
maximum_object_size 4096 KB
maximum_object_size_in_memory 16 KB
cache_effective_user proxy
authenticate_ttl 24 hour
request_header_access X-Forwarded-For deny all

negative_dns_ttl 10 second

#logfiles, cache dir
strip_query_terms off
emulate_httpd_log on
coredump_dir none
cache_dir ufs /var/spool/squid3 512 16 256
access_log /var/log/squid3/access.log common
cache_store_log none

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 1025-65535 # unregistered ports

acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl ym dstdomain "/etc/squid3/ymdomain.acl"
acl noauth dstdomain "/etc/squid3/filter_noauth_domain.acl"
acl ym_ip dst "/etc/squid3/ymip.acl"
acl authpb src "/etc/squid3/auth_problems.acl"

http_access allow noauth
http_access allow ym_ip
http_access allow authpb

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp -d0
auth_param ntlm children 180
#auth_param ntlm keep_alive on #test, should be ok with newer browsers
#pe o singura linie
external_acl_type ldap %LOGIN /usr/lib/squid3/squid_ldap_group -p 3268 -D
lookup@domeniu.org -W /etc/squid3/secret -b "DC=domeniu,DC=org" -h ip_domain_controller -f "(&(member=%u)(cn=%g)(objectClass=group))" -B "dc=domeniu,dc=org" -F "(sAMAccountName=%s)" -S
#external_acl_type ldap %LOGIN /usr/lib/squid3/squid_ldap_group -p 3268 -D lookup@domeniu.org -W /etc/squid3/secret -b "DC=subdomeniu,DC=domeniu,DC=org" -h ip_domain_controller -f "(&(member=%u)(cn=%g)(objectClass=group))" -B "dc=subdomeniu,dc=domeniu,dc=org" -F "(sAMAccountName=%s)" -S

acl SquidLdapUsers proxy_auth REQUIRED

acl ldap_ALL external ldap "/etc/squid3/usrall.acl"
acl ldap_BAD external ldap "/etc/squid3/badall.acl"
acl ldap_gold external ldap "/etc/squid3/gold.acl"
acl sysadmin external ldap "/etc/squid3/sysadmin.acl"
acl ldap_im_block external ldap "/etc/squid3/imgroup.acl"
acl block dstdomain "/etc/squid3/filter_block_domain.acl"

acl downloads urlpath_regex -i "/etc/squid3/block_files.acl"
acl downloads_good urlpath_regex -i "/etc/squid3/down_good.acl"

#limitare upload la ~5MB
acl UPLIMIT req_header Content-Length [5-9][0-9]{6} [0-9]{8,}

http_access deny ldap_im_block ym
http_access allow UPLIMIT ldap_gold
http_access allow sysadmin downloads
#deny_info ERR_UPLIMIT_FILES UPLIMIT
http_access deny UPLIMIT
http_access allow ldap_gold downloads
#deny_info ERR_BLOCKED_FILES downloads
http_access allow downloads_good
http_access deny downloads
http_access allow ldap_gold block
#deny_info ERR_BLOCKED_SITES downloads
http_access deny block
#deny_info ERR_BLOCKED_USERS downloads
http_access deny ldap_BAD

http_access allow SquidLdapUsers ldap_ALL
http_access deny all
never_direct allow all

acl no_round url_regex  “/etc/squid3/noround.acl”
acl no_round2 url_regex  “/etc/squid3/noround2.acl”
acl NOCACHE url_regex  “/etc/squid3/nocache.acl”

cache_peer_access 10.x.x.1 !no_round2 !ym_ip
cache_peer_access 10.x.x.2 allow !no_round
no_cache deny no_round no_round2 NOCACHE

 

Dupa cum se observa mai sus, pe langa autentificarea userilor la Active Directory, putem crea mai multe reguli bazandu-ne pe grupurile din AD, care ne vor permite sa acordam acces granular utilizatorilor.

Sa le luam pe rand ca sa vedem ce putem face cu fiecare ACL:

1. acl ldap_ALL external ldap “/etc/squid3/usrall.acl”

Prin acest ACL, acordam acces membrilor unui grup din AD la accesarea paginilor web prin proxy. In acest grup se vor regasi toti utilizatorii care au acces “normal” la internet.

2. acl ldap_BAD external ldap “/etc/squid3/badall.acl”

Prin acest ACL ne vom folosi de un grup din AD in care membrii grupului nu vor avea acces la internet.

3. acl ldap_gold external ldap “/etc/squid3/gold.acl”

Prin acest ACL, vom putea acorda acces extins la membrii unui anumit grup de utilizatori din AD, de exemplu la administratorii de sistem, care nu vor mai avea restrictii la descarcarea fisierelor .exe sau .mp3 etc.

4. acl ldap_im_block external ldap “/etc/squid3/imgroup.acl”

Prin acest ACL ne vom folisi de un grup din AD in care membrii grulului nu vor avea acces la Yahoo Messenger

Directivele deny_info din fisierul de configurare ne permit sa definim cate o pagina personalizata care va aparea utilizatorului cand acesta va declansa un anumit ACL. De exemplu, cand va incerca sa descarce un fisier .exe, se poate afisa o pagina html in care sa se prezinte motivele pentru care accesul la aceste fisiere este restrictionat. Fiecare pagina se va crea in directorul /etc/squid3/errors/ ( pe care va trebui sa-l creati ), iar numele paginii va fi exact acela din directiva ( de ex. ERR_BLOCKED_FILES ).

Sa luam pe rand acum fisierele ACL pe care le vom crea si rolul lor:

Un caz aparte care necesita doua ACL-uri este accesul la Yahoo Messenger, care in varianta mai veche de 9.0 se conecteaza la servere gen *.msg.yahoo.com, iar in varianta mai mare de 9.0 se conecteaza la serverele yahoo dupa IP, deci nu mai putem folosi nume de domenii. Pentru a acoperi ambele situatii vom crea doua ACL-uri.

1. se creaza fisierul /etc/squid3/ymdomain.acl

Se editeaza si se scrie in el:

.msg.yahoo.com
.updates.yahoo.com
.yimg.com
.login.yahoo.com
.yeahost.com
.freewebs.com
.yahoo.com
.messenger.yahoo.com
.scd.yahoo.com
.sc5.yahoo.com
webcam.yahoo.com
filetransfer.yahoo.com
cs1.yahoo.com
cs2.yahoo.com
cs3.yahoo.com

2. se creeaza fisierul /etc/squid3/filter_noauth_domain.acl

Se foloseste pentru site-urile la care se conecteaza diverse aplicatii care nu stiu sa se autentifice corect si atunci permitem accesul fara autentificare. Din experienta, aplicatiile java nu stiu sa furnizeze proxy-ului userul si parola pentru autentificare. Un caz particular este Yahoo messenger versiuni mai vechi de 9.0, care nu stie sa furnizeze detaliile de autentificare proxy-ului.

Se editeaza fisierul si se trec domeniile necesare, fiecare pe o linie noua:

.msg.yahoo.com
.aaa.com

3. se creeaza fisierul /etc/squid3/ymip.acl

Se editeaza si in el se trec IP-urile serverelor de yahoo. Din practica, cele de mai jos au dovedit ca sunt suficiente pentru functionarea fara probleme a lui YM v. 9 , daca mai descoperiti altele puteti sa le treceti in lista:

64.157.4.0/24
66.94.224.0/22
66.94.240.0/20
66.163.168.0/21
67.195.128.0/19
67.195.128.0/20
67.195.144.0/21
67.195.152.0/21
68.180.140.0/22
68.180.144.0/21
68.180.192.0/20
68.180.200.0/22
68.180.208.0/20
69.147.64.0/21
69.147.80.0/20
72.30.22.0/24
72.30.36.0/22
72.30.40.0/22
74.6.73.0/24
74.6.224.0/22
76.13.208.0/21
76.13.244.0/22
76.13.248.0/22
8.12.145.0/24
8.12.147.0/24
8.12.148.0/22
98.136.0.0/16
98.137.32.0/19
98.137.58.0/23
98.137.128.0/19
98.137.156.0/22
98.137.224.0/19
98.138.0.0/16
98.139.0.0/16
208.67.64.0/21
209.131.32.0/20
216.155.192.0/20
216.252.112.0/20

4. se creaza fisierul /etc/squid3/usrall.acl

Trecem acum la fisierele care definesc grupurile din Active Directory. In fisierul de mai sus trecel Grupul din AD care permite accesul utilizatorilor obisnuiti la internet ( si care vor avea anumite restrictii, definite mai jos)

Spre exemplu, cream un grup in AD denumit Acces Internet in care trecem toti userii care vor avea acces la internet. Trecem numele grupului in fisierul nou creat:

Acces Internet

5. se creaza fisierul /etc/squid3/badall.acl

In acest fisier vom trece numele grupului din AD in care utilizatorii membri nu vor avea acces la proxy.

6. se creaza fisierul /etc/squid3/gold.acl si /etc/squid3/sysadmin.acl

Asa cum spuneam mai sus, avem posibilitatea sa acordam acces fara nici un fel de restrictii unor utilizatori care sunt membri ai unui grup sau mai multe, de exemplu Domain Admins, sau VIP Users etc. . Numeme grupurilor se trece in acest fisier.

7. se creaza fisierul /etc/squid3/imgroup.acl

Se va crea un grup in AD in care vor fi trecuti userii care nu vor avea acces la Yahoo Messenger, de exemplu NoYahhUsers. Numele grupului va fi trecut in acest fisier.

8. se creaza fisierul /etc/squid3/block_files.acl si /etc/squid3/down_good.acl

In acest fisier se pot introduce restrictii de download pentru utilizatorii obisnuiti, de exemplu blocam descarcarea fisierelor .exe si .mp3 ; introducem in fisierul nou creat urmatoarele:

\.exe$
\.mp3$

Pe acest model se poate face un ACL cu rep_mime_type care sa blocheze stream-urile audio/video.

Restrictiile trecute in acest ACL vor fi doar pentru utilizatorii obisnuiti, utilizatorii din grupurile speciale trecute in fisierul gold.acl vor trece peste aceste restrictii.

/etc/squid3/down_good.acl:
tracker.exe
enter.exe
signon.exe
GoogleEarthSetup.exe

9. se creaza fisierul /etc/squid3/filter_block_domain.acl

In acest fisier se pot introduce domeniile ce vor fi blocate de ex:

aabb.com

10. se creaza fisierul /etc/squid3/secret

In acest fisier trecem parola userului de AD prin intermediul caruia squid va putea sa interogheze baza de date AD dupa nume de utilizatori si grupuri.

Urmatorul pas este generarea unui fisier keytab pentru ca autentificarea prin Kerberos la Active Directory sa fie permanenta, fara a fi nevoie de a introduce un username/parola la fiecare pornirea a serviciilor.

10. se creaza fisierele /etc/squid3/noround.acl /etc/squid3/noround2.acl /etc/squid3/nocache.acl

In aceste fisiere se pot introduce domeniile pt care sa nu se faca roundrobin si sa nu fie cache-uite.

De retinut faptul ca ora si data trebuiesc sincronizate cu cele de pe AD, si serverul Proxy trebuie sa aibe inregistrare in DNS valida, pentru ca kerberos sa functioneze. De asemenea, utilitarul ktpass de pe un server Windows 2003 SP1 nu genereaza un keytab valid! Mai multe informatii despre aceasta problema gasiti la adresa http://support.microsoft.com/kb/919557

Operatiunile se vor face pe DC folosind contul cu drepturi administrative:

1. Folositi Active Directory Users and Computers pentru a crea un cont de user pentru serverul de linux:
• Selectati folderul Users, click dreapta si selectati New, apoi user.
• Introduceti numele serverului de linux (ex squidserver)

Contul de user pentru serverul de linux poate fi creat in orice container, dar este indicat sa se creeze un nou OU (Organizational Unit) si sa creati contul aici. Userul nu necesita nici un fel de drepturi speciale, trebuie doar sa poata interoga baza de date LDAP.
2. Urmati aceasi procedura pentru a crea contul lookup cu parola lookup1$#D sau ce altceva doriti, important este sa le notati si sa le folositi in fisierele de configurare al proxy-ului squid. Acest cont va fi folosit pentru autorizarea grupurilor prin intermediul LDAP.

3. Folositi ktpass pentru a crea un fisier keytab si a seta contul pentru serverul de linux apoi copiati acest fiser pe serverul de linux in folderul /etc/krb5:

C:> ktpass -princ host/squidserver.domeniu.org@DOMENIU.ORG -mapuser squidserver -pass password /crypto DES-CBC-MD5 -out squidserver.keytab

Inlocuiti squidserver cu numele serverului dvs. de linux si password cu parola setata la pasul anterior.

Copiem fisierul keytab de pe controllerul de domeniu pe serverul squid in directorul /etc/ , apoi il importam in kerberos cu ajutorul utilitarului ktutil:

# ktutil
ktutil: rkt /etc/squidserver.keytab
ktutil: list
ktutil: wkt /etc/krb5.keytab
ktutil: q
# kinit –k –t squidserver.keytab

Daca kerberos este corect configurat, ora este sincronizata, exista inregistrare DNS valida, dupa ce dati aceasta comanda nu ar trebui sa primiti nici un mesaj de eroare.

In cazul in care serverul AD este subdomeniu intr-un domeniu mai mare, este posibil ca comanda kinit sa dea eroare, in acest caz trebuie specificata identitatea serverului ( principal ):

kinit -k -t squidserver.keytab host/squidserver.subdomain.domain.org@SUBDOMAIN.DOMAIN.ORG

Operatiunea de mai sus nu mai este obligatorie.

Urmatoarea etapa consta in adaugarea serverului proxy ca membru in domeniul Windows AD:

#net ads join -U AdminAccount -S dc1.domeniu.org

In loc AdminAccount folositi contul cu drepturi administrative si parola aferenta acestuia. Rezultatul comenzii de mai sus este crearea unui cont de computer in AD.
In acest moment putem porni serverul samba:

#/etc/init.d/samba restart
#/etc/init.d/winbind restart

Teste si verificari care se pot face in acest moment:

a) testam existenta ticket-ului in Kerberos:

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: host/
squidserver.domeniu.org@DOMENIU.ORG

Valid starting Expires Service principal
03/09/09 12:49:06 03/09/09 19:29:06 krbtgt/
DOMENIU.ORG@DOMENIU.ORG

b) verificam daca Samba poate citi userii si grupurile din AD:

#wbinfo –t
checking the trust secret via RPC calls
succeeded
#wbinfo –u
......apar userii din domeniu
#wbinfo –g
..... apar grupurile din domeniu

c) verificam daca Squid se integreaza cu Samba:

#/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
DOMAIN\username password
utils/ntlm_auth.c:check_plaintext_auth(292)
NT_STATUS_OK:
Success (0×0)
OK

/usr/lib/squid3/squid_ldap_group -p 3268 -D lookup@domeniu.org -W /etc/squid3/secret -b "DC=domeniu,DC=org" -h ip_domain_controller -f "(&(member=%u)(cn=%g)(objectClass=group))" -B "dc=domeniu,dc=org" -F "(sAMAccountName=%s)" –S –d 10
user group

Connected OK
user filter '(&(sAMAccountname=username)(objectClass=User))', searchbase 'dc=domain,dc=org'
group filter '(&(member=CN=Nume\5c, Prenume,OU=IT Users,OU=Users,OU=SDC,DC=domeniu,DC=org)(cn=Acces Internet)(objectClass=group))', searchbase 'DC=domeniu,DC=org'
OK

Daca grupul care se testeaza contine spatii, acestea se va inlocui cu “%20”. De exemplu testam userul “teste” care este membru in grupul AD Acces Internet:

teste Acces%20Internet

Other info:

Reinstall:

Install new server, new hostname, new ip, configure confs, copy keytab, kinit (some err are ok), net ads join, wbinfo -t/-g should work, change ip/hostname&reboot, everything should work.

For Windows 7 you have to use at least Ubuntu Server 9.10 or use this hack:
1. In HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

If it doesn’t exist, create a DWORD value named LmCompatibilityLevel and set the value to 1 to use LM NTLM and NTLMv2 if is negociated, this is

Also it works establishing the value to 0, and 3 though for more safety the value using 3 though with old operating systems it will not work on having used obligatorily NTLMv2.

2. Reboot
http://old.nabble.com/Windows-7-beta-and-NTLM-td21377271.html

For live messenger:

1.     Start Internet Explorer.
2.     On the Tools menu, click Internet Options.
3.     On the Advanced tab, in the Security section, make sure that the Check for server certificate revocation check box is cleared. Also, make sure that the Use SSL 2.0 and the Use SSL 3.0 check boxes are selected.
4.     Click OK.
Check your Internet Explorer security settings

Errors:

– kinit -k -t squidserver.keytab
kinit: KDC has no support for encryption type while getting initial credentials
Make sure krb5.conf has allow_weak_crypto = true

- /etc/squid3/usrall.acl should not contain too many groups

 

-ntlm_auth –helper-protocol=squid-2.5-basic
DAVINCI.LOCAL+testUser testPassword159
[2009/09/28 18:45:49, 3] utils/ntlm_auth.c:check_plaintext_auth(328) NT_STATUS_PIPE_DISCONNECTED: Named pipe dicconnected (0xc00000b0)

ERR
upgrade Ubuntu Server to a newer version source


Original Slackware version
here

By WladyX on 17 November, 2009 | General, Proxy, Ubuntu | A comment?

Administration Over SSL

wp-config.php:

define(‘FORCE_SSL_ADMIN’, true);

http://codex.wordpress.org/Administration_Over_SSL

By WladyX on 12 November, 2009 | General, Wordpress | A comment?

HP 6930p sound in Karmic

By WladyX on | General, Ubuntu | A comment?

Linux DHCP client-ID same as Windows

/etc/dhcp3/dhclient.conf:

send dhcp-client-identifier 01:xx:xx:xx:xx:xx:xx; (Replace xx with the mac address you want to use)

http://blog.ioshints.info/2008/06/static-dhcp-assignment-for-clients.html

By WladyX on | General | A comment?

Postfix and Dovecot with StartSSL certificates

Dovecot:

% wget http://www.startssl.com/certs/ca-bundle.crt
% cat ssl.crt sub.class1.server.ca.pem > /etc/ssl/dovecot/dovecot_crt.pem
% ln -s ssl.key /etc/ssl/dovecot/dovecot_key.pem
% cp ca-bundle.crt /etc/ssl/apache2/

dovecot.conf:

ssl_ca = </etc/ssl/apache2/ca-bundle.crt
ssl_cert = </etc/ssl/dovecot/dovecot_crt.pem
ssl_key = </etc/ssl/dovecot/dovecot_key.pem

http://nooms.de/articles/startssl.html

Postfix:

% ln -s ssl.crt cert.pem
% ln -s ssl.key key.pem

main.cf:

## TLS parameters ##

smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/ssl/postfix/cert.pem
smtpd_tls_key_file=/etc/ssl/postfix/key.pem
smtp_tls_CAfile = /etc/ssl/apache2/ca.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

http://forum.startcom.org/viewtopic.php?t=80

Also see:

Configure PureFTPd To Accept TLS Sessions

By WladyX on 9 November, 2009 | General, Mail, Security | 3 comments

Test imaps

By WladyX on | General, Mail | A comment?

Useful Mysql Commands

By WladyX on 6 November, 2009 | General, Mysql | A comment?

How to setup Cisco VPN using VPNC Ubuntu

By WladyX on 3 November, 2009 | General, Ubuntu | A comment?

Install acrobat reader in Ubuntu 9.10 (Karmic)

First you need to download .deb package from here

for 64bit:

sudo dpkg -i --force-architecture AdbeRdr9.1.2-1_i386linux_enu.deb

http://www.ubuntugeek.com/tag/install-acrobat-reader-in-ubuntu-karmic

By WladyX on | General, Ubuntu | 1 comment

Nice themes for Ubuntu

sudo add-apt-repository ppa:bisigi
sudo aptitude update
sudo aptitude install bisigi-themes

http://www.ubuntugeek.com/nice-themes-for-ubuntu-10-10-maverick-meerkat-users.html

By WladyX on | General, Style, Ubuntu | 1 comment