Différences entre les versions de « Proxy squid sous windows »
| (2 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
Le but de cette configuration est qu'un user connecté à un windows dans un domaine puisse utiliser le proxy d une machine linux en s'authentifiant automatiquement avec son compte windows AD | Le but de cette configuration est qu'un user connecté à un windows dans un domaine puisse utiliser le proxy d une machine linux en s'authentifiant automatiquement avec son compte windows AD | ||
Toutes les configurations sont à faire sur la machine linux qui porte le squid et le proxy et la mécanisme qui interroge l'AD | |||
= Pre requis = | = Pre requis = | ||
yum install sssd-tools realmd squid samba-common.noarch samba-common-tools samba-winbind samba-winbind-clients krb5-workstation sssd-ad sssd sssd-common sssd-client sssd-krb5-common sssd-krb5 | |||
= Création et opérations sur le ".keytab". = | = Création et opérations sur le ".keytab". = | ||
Sur '''srv78dc01.csn-interne.fr''' : | Sur '''srv78dc01.csn-interne.fr''' : | ||
''cmd'' ou ''powershellcmd'' ( en admin du comaine ) => | ''cmd'' ou ''powershellcmd'' ( en admin du comaine ) => cd <le répertoire souhaité>, puis | ||
ktpass -out srv78squid01b.csn-interne.fr.keytab -mapUser squid@CSN-INTERNE.FR +rndPass -mapOp set +DumpSalt -crypto ALL -ptype KRB5_NT_PRINCIPAL -princ HTTP/srv78squid01b.csn-interne.fr@CSN-INTERNE.FR | |||
ensuite, rapatrier le '''srv78squid01b.csn-interne.fr.keytab''' sur le serveur '''srv78squid01b.csn-interne.fr''' (''Ma technique perso pour les nouveaux arrivants: copier/coller sur votre desktop du rdsh puis via putty click droit "upload to CWD" pour ramener le fichier sur le serveur'' ) et le mettre dans le dossier '''''/etc/squid/''''' . | ensuite, rapatrier le '''srv78squid01b.csn-interne.fr.keytab''' sur le serveur '''srv78squid01b.csn-interne.fr''' (''Ma technique perso pour les nouveaux arrivants: copier/coller sur votre desktop du rdsh puis via putty click droit "upload to CWD" pour ramener le fichier sur le serveur'' ) et le mettre dans le dossier '''''/etc/squid/''''' . | ||
| Ligne 16 : | Ligne 16 : | ||
Puis on duplique ensuite les entrées du keytab dans la keytab par default de krb5 et reciproquement. ( mieux pour quand faut debug ) | Puis on duplique ensuite les entrées du keytab dans la keytab par default de krb5 et reciproquement. ( mieux pour quand faut debug ) | ||
<pre> | |||
ktutil | ktutil | ||
read_kt /etc/krb5.keytab | read_kt /etc/krb5.keytab | ||
| Ligne 22 : | Ligne 22 : | ||
write_kt /etc/krb5.keytab | write_kt /etc/krb5.keytab | ||
write_kt /etc/squid/srv78squid01b.csn-interne.fr.keytab | write_kt /etc/squid/srv78squid01b.csn-interne.fr.keytab | ||
</pre> | |||
= Fichiers system non standards Agarik = | = Fichiers system non standards Agarik = | ||
| Ligne 28 : | Ligne 28 : | ||
== /etc/hosts == | == /etc/hosts == | ||
<pre> | |||
127.0.0.1 localhost localhost.localdomain srv78squid01b.csn-interne.fr srv78squid01 | 127.0.0.1 localhost localhost.localdomain srv78squid01b.csn-interne.fr srv78squid01 | ||
::1 localhost6 localhost6.localdomain6 | ::1 localhost6 localhost6.localdomain6 | ||
| Ligne 38 : | Ligne 38 : | ||
# Necessaire a squid | # Necessaire a squid | ||
172.30.102.33 svr78dc01.csn-interne.fr | 172.30.102.33 svr78dc01.csn-interne.fr | ||
svr78dc01 10.1.2.1 svr75dc01.csn-interne.fr | svr78dc01 10.1.2.1 svr75dc01.csn-interne.fr | ||
</pre> | |||
== /etc/resolv.conf == | == /etc/resolv.conf == | ||
<pre> | |||
# Generated by NetworkManager | # Generated by NetworkManager | ||
search csn-interne.fr | search csn-interne.fr | ||
nameserver 172.30.102.33 | nameserver 172.30.102.33 | ||
nameserver 10.1.2.1 | nameserver 10.1.2.1 | ||
</pre> | |||
== /etc/chrony.conf == | == /etc/chrony.conf == | ||
<pre> | |||
# Use public servers from the pool.ntp.org project. | |||
# Please consider joining the pool (http://www.pool.ntp.org/join.html). | # Please consider joining the pool (http://www.pool.ntp.org/join.html). | ||
#pool 2.rhel.pool.ntp.org iburst | #pool 2.rhel.pool.ntp.org iburst | ||
| Ligne 89 : | Ligne 92 : | ||
pool svr78dc01.csn-interne.fr iburst | pool svr78dc01.csn-interne.fr iburst | ||
# END ANSIBLE MANAGED BLOCK | # END ANSIBLE MANAGED BLOCK | ||
</pre> | |||
= Finalisation - Instalation de Squid et des autres = | = Finalisation - Instalation de Squid et des autres = | ||
| Ligne 97 : | Ligne 99 : | ||
Extraire les fichiers du rpm puis récupérer celui qu'il nous faut | Extraire les fichiers du rpm puis récupérer celui qu'il nous faut | ||
cd /root/install && rpm2cpio ./squid-helpers-4.1-5.el7.centos.x86_64.rpm | cpio -idmv | cd /root/install && rpm2cpio ./squid-helpers-4.1-5.el7.centos.x86_64.rpm | cpio -idmv | ||
cp /root/install/usr/lib64/squid/negotiate_wrapper_auth /usr/lib64/squid/ | |||
cp /root/install/usr/lib64/squid/negotiate_wrapper_auth /usr/lib64/squid/ | |||
Une dépendance a changé de nom, il faut créer un lien symbolique. | Une dépendance a changé de nom, il faut créer un lien symbolique. | ||
ln -s /usr/lib64/libnsl.so.2 /lib64/libnsl.so.1 | |||
== /etc/squid/squid.conf == | == /etc/squid/squid.conf == | ||
<pre> | |||
# | # | ||
# Recommended minimum configuration: | # Recommended minimum configuration: | ||
| Ligne 197 : | Ligne 200 : | ||
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 | refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 | ||
refresh_pattern . 0 20% 4320 | refresh_pattern . 0 20% 4320 | ||
</pre> | |||
== /etc/krb5.conf == | == /etc/krb5.conf == | ||
<pre> | |||
[logging] | |||
Default = FILE:/var/log/krb5.log | Default = FILE:/var/log/krb5.log | ||
[libdefaults] | [libdefaults] | ||
| Ligne 223 : | Ligne 226 : | ||
.csn-interne.fr = CSN-INTERNE.FR | .csn-interne.fr = CSN-INTERNE.FR | ||
csn-interne.fr = CSN-INTERNE.FR | csn-interne.fr = CSN-INTERNE.FR | ||
</pre> | |||
== /etc/samba/smb.conf == | == /etc/samba/smb.conf == | ||
<pre> | |||
# See smb.conf.example for a more detailed config file or | |||
# read the smb.conf manpage. | # read the smb.conf manpage. | ||
# Run 'testparm' to verify the config is correct after | # Run 'testparm' to verify the config is correct after | ||
| Ligne 242 : | Ligne 244 : | ||
realm = CSN-INTERNE.FR | realm = CSN-INTERNE.FR | ||
security = ads | security = ads | ||
</pre> | |||
== /usr/lib/realmd/realmd-defaults.conf == | == /usr/lib/realmd/realmd-defaults.conf == | ||
<pre> | |||
# Default values for realmd | |||
[service] | [service] | ||
debug = no | debug = no | ||
| Ligne 289 : | Ligne 290 : | ||
example-administrator = Administrator | example-administrator = Administrator | ||
example-password = bureaucracy | example-password = bureaucracy | ||
</pre> | |||
== /etc/sssd/sssd.conf == | == /etc/sssd/sssd.conf == | ||
<pre> | |||
[sssd] | |||
domains = csn-interne.fr | domains = csn-interne.fr | ||
config_file_version = 2 | config_file_version = 2 | ||
| Ligne 310 : | Ligne 311 : | ||
krb5_store_password_if_offline = True | krb5_store_password_if_offline = True | ||
access_provider = simple | access_provider = simple | ||
</pre> | |||
Apres faut joindre la machine au domaine. | Apres faut joindre la machine au domaine. | ||
net ads join -U admin-agarik | |||
(Le compte est renseigné dans la fiche AO de srv78dc01.csn-interne.fr ) | (Le compte est renseigné dans la fiche AO de srv78dc01.csn-interne.fr ) | ||
= Les services qui doivent tourner et leurs roles = | = Les services qui doivent tourner et leurs roles = | ||
- squid => le service de proxy. | - squid => le service de proxy. | ||
systemctl enable squid.service | |||
- sssd/realmd/winbind => sssd est le service qui fait le mapping pour squid aupres de l'AD ( il l'interroge en LDAP/AD grace au compte de service à la keytab indiqué dans la conf de squid pour connaitre la correspondance "Ticket kerberos" <=> "Nom d'utilisateur". Pour faire ça il utilise comme outil kerberos client et le service winbind pour interroger l'AD. Le service Winbind utilise la configuration de realmd ( samba ) pour trouver le nom de domaine , le DC, etc .... | - sssd/realmd/winbind => sssd est le service qui fait le mapping pour squid aupres de l'AD ( il l'interroge en LDAP/AD grace au compte de service à la keytab indiqué dans la conf de squid pour connaitre la correspondance "Ticket kerberos" <=> "Nom d'utilisateur". Pour faire ça il utilise comme outil kerberos client et le service winbind pour interroger l'AD. Le service Winbind utilise la configuration de realmd ( samba ) pour trouver le nom de domaine , le DC, etc .... | ||
systemctl enable sssd.service | |||
systemctl enable realmd.service | |||
systemctl enable winbind.service | |||
| Ligne 334 : | Ligne 333 : | ||
= Ajout de SquidGuard ( + mise en place d'un page de redirection pour les sites bloqués en http ) = | = Ajout de SquidGuard ( + mise en place d'un page de redirection pour les sites bloqués en http ) = | ||
yum install squidGuard httpd | |||
cd /var/squidGuard/ && tar -xzvf blacklists.tar.gz | |||
- fichier /etc/squid/squidGuard.conf | - fichier /etc/squid/squidGuard.conf | ||
<pre> | |||
# | # | ||
# CONFIG FILE FOR SQUIDGUARD | # CONFIG FILE FOR SQUIDGUARD | ||
| Ligne 385 : | Ligne 383 : | ||
} | } | ||
} | } | ||
</pre> | |||
[[Catégorie:windows]] | [[Catégorie:windows]] | ||
Version actuelle datée du 13 juillet 2021 à 10:46
Le but de cette configuration est qu'un user connecté à un windows dans un domaine puisse utiliser le proxy d une machine linux en s'authentifiant automatiquement avec son compte windows AD Toutes les configurations sont à faire sur la machine linux qui porte le squid et le proxy et la mécanisme qui interroge l'AD
Pre requis[modifier]
yum install sssd-tools realmd squid samba-common.noarch samba-common-tools samba-winbind samba-winbind-clients krb5-workstation sssd-ad sssd sssd-common sssd-client sssd-krb5-common sssd-krb5
Création et opérations sur le ".keytab".[modifier]
Sur srv78dc01.csn-interne.fr :
cmd ou powershellcmd ( en admin du comaine ) => cd <le répertoire souhaité>, puis
ktpass -out srv78squid01b.csn-interne.fr.keytab -mapUser squid@CSN-INTERNE.FR +rndPass -mapOp set +DumpSalt -crypto ALL -ptype KRB5_NT_PRINCIPAL -princ HTTP/srv78squid01b.csn-interne.fr@CSN-INTERNE.FR
ensuite, rapatrier le srv78squid01b.csn-interne.fr.keytab sur le serveur srv78squid01b.csn-interne.fr (Ma technique perso pour les nouveaux arrivants: copier/coller sur votre desktop du rdsh puis via putty click droit "upload to CWD" pour ramener le fichier sur le serveur ) et le mettre dans le dossier /etc/squid/ .
Puis on duplique ensuite les entrées du keytab dans la keytab par default de krb5 et reciproquement. ( mieux pour quand faut debug )
ktutil read_kt /etc/krb5.keytab read_kt /etc/squid/srv78squid01b.csn-interne.fr.keytab write_kt /etc/krb5.keytab write_kt /etc/squid/srv78squid01b.csn-interne.fr.keytab
Fichiers system non standards Agarik[modifier]
/!\ Les modifications sont indispensables sinon ça marche pas. /!\
/etc/hosts[modifier]
127.0.0.1 localhost localhost.localdomain srv78squid01b.csn-interne.fr srv78squid01 ::1 localhost6 localhost6.localdomain6 # BEGIN ANSIBLE MANAGED BLOCK 192.168.26.15 ntp1.agarik.com 172.26.0.15 ntp2.agarik.com # END ANSIBLE MANAGED BLOCK 10.252.42.27 supervision.agarik.com # Necessaire a squid 172.30.102.33 svr78dc01.csn-interne.fr svr78dc01 10.1.2.1 svr75dc01.csn-interne.fr
/etc/resolv.conf[modifier]
# Generated by NetworkManager search csn-interne.fr nameserver 172.30.102.33 nameserver 10.1.2.1
/etc/chrony.conf[modifier]
# Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #pool 2.rhel.pool.ntp.org iburst # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. makestep 1.0 3 # Enable kernel synchronization of the real-time clock (RTC). rtcsync # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # the system clock. #minsources 2 # Allow NTP client access from local network. #allow 192.168.0.0/16 # Serve time even if not synchronized to a time source. #local stratum 10 # Specify file containing keys for NTP authentication. keyfile /etc/chrony.keys # Get TAI-UTC offset and leap seconds from the system tz database. leapsectz right/UTC # Specify directory for log files. logdir /var/log/chrony # Select which information is logged. #log measurements statistics tracking # BEGIN ANSIBLE MANAGED BLOCK pool svr78dc01.csn-interne.fr iburst # END ANSIBLE MANAGED BLOCK
Finalisation - Instalation de Squid et des autres[modifier]
Récupérer ( mais /!\ Ne pas l'installer, mais on a juste besoin d'un fichier dedans /!\ ) sur le net rpm squid-helpers-4.1-5.el7.centos.x86_64.rpm et le placer dans le repertoire /root/install
Extraire les fichiers du rpm puis récupérer celui qu'il nous faut
cd /root/install && rpm2cpio ./squid-helpers-4.1-5.el7.centos.x86_64.rpm | cpio -idmv
cp /root/install/usr/lib64/squid/negotiate_wrapper_auth /usr/lib64/squid/
Une dépendance a changé de nom, il faut créer un lien symbolique.
ln -s /usr/lib64/libnsl.so.2 /lib64/libnsl.so.1
/etc/squid/squid.conf[modifier]
# # Recommended minimum configuration: # #Authentification automatique via Kerberos auth_param negotiate program /usr/bin/sg wbpriv -c "/usr/lib64/squid/negotiate_wrapper_auth --ntlm /usr/bin/ntlm_auth -i --diagnostics --helper-protocol=squid-2.5-ntlmssp --domain=CSN-INTERNE.FR --kerberos /usr/lib64/squid/negotiate_kerberos_auth -d -k /etc/squid/srv78squid01b.csn-interne.fr.keytab -s HTTP/srv78squid01b.csn-interne.fr@CSN-INTERNE.FR" auth_param negotiate children 20 startup=20 auth_param negotiate keep_alive off # Authentification LDAP pour ceux qui ne sont pas en Kerberos auth_param basic program /usr/lib64/squid/basic_ldap_auth -R -b "dc=csn-interne,dc=fr" -D "cn=squidLDAP,ou=Applicatif,ou=Utilisateurs - Service,ou=CSNStandard,dc=csn-interne,dc=fr" -W /etc/squid/ldap_passwd.txt -f "sAMAccountName=%s" -h svr78dc01.csn-interne.fr -v 3 acl authenticated_user proxy_auth REQUIRED http_access deny !authenticated_user logformat timereadable %tl %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt access_log daemon:/var/log/squid/access.log timereadable # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines 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 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 3128 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # # Add any of your own refresh_pattern entries above these. # 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
/etc/krb5.conf[modifier]
[logging]
Default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = CSN-INTERNE.FR
clock_skew = 300
ticket_lifetime = 24000
default_tkt_enctypes = arcfour-hmac
permitted_enctypes = des-cbc-crc des-cbc-md5 arcfour-hmac aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac arcfour-hmac-md5
rdns = false
udp_preference_limit = 0
dns_lookup_realm = true
dns_lookup_kdc = true
forwardable = yes
[realms]
CSN-INTERNE.FR = {
kdc = svr78dc01.csn-interne.fr
admin_server = svr78dc01.csn-interne.fr
default_domain = CSN-INTERNE.FR
}
[domain_realm]
.csn-interne.fr = CSN-INTERNE.FR
csn-interne.fr = CSN-INTERNE.FR
/etc/samba/smb.conf[modifier]
# See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = CSN-INTERNE client signing = yes client use spnego = yes kerberos method = secrets and keytab log file = /var/log/samba/%m.log password server = SRV78DC01.CSN-INTERNE.FR realm = CSN-INTERNE.FR security = ads
/usr/lib/realmd/realmd-defaults.conf[modifier]
# Default values for realmd [service] debug = no automatic-install = yes [paths] net = /usr/bin/net winbindd = /usr/sbin/winbindd smb.conf = /etc/samba/smb.conf sssd.conf = /etc/sssd/sssd.conf adcli = /usr/sbin/adcli ipa-client-install = /usr/sbin/ipa-client-install pam_winbind.conf = /etc/security/pam_winbind.conf krb5.conf = /etc/krb5.conf [active-directory] default-client = sssd os-name = os-version = [providers] sssd = yes samba = yes example = no [samba-packages] [winbind-packages] [sssd-packages] [adcli-packages] [commands] [users] default-shell = /bin/bash default-home = /home/%U@%D [example.com] example-administrator = Administrator example-password = bureaucracy
/etc/sssd/sssd.conf[modifier]
[sssd] domains = csn-interne.fr config_file_version = 2 services = nss, pam [domain/csn-interne.fr] id_provider = ad ad_domain = csn-interne.fr realmd_tags = manages-system joined-with-samba cache_credentials = True ldap_id_mapping = True auth_provider = krb5 krb5_server = svr78dc01.csn-interne.fr krb5_realm = CSN-INTERNE.FR krb5_store_password_if_offline = True access_provider = simple
Apres faut joindre la machine au domaine.
net ads join -U admin-agarik
(Le compte est renseigné dans la fiche AO de srv78dc01.csn-interne.fr )
Les services qui doivent tourner et leurs roles[modifier]
- squid => le service de proxy.
systemctl enable squid.service
- sssd/realmd/winbind => sssd est le service qui fait le mapping pour squid aupres de l'AD ( il l'interroge en LDAP/AD grace au compte de service à la keytab indiqué dans la conf de squid pour connaitre la correspondance "Ticket kerberos" <=> "Nom d'utilisateur". Pour faire ça il utilise comme outil kerberos client et le service winbind pour interroger l'AD. Le service Winbind utilise la configuration de realmd ( samba ) pour trouver le nom de domaine , le DC, etc ....
systemctl enable sssd.service systemctl enable realmd.service systemctl enable winbind.service
Ajout de SquidGuard ( + mise en place d'un page de redirection pour les sites bloqués en http )[modifier]
yum install squidGuard httpd cd /var/squidGuard/ && tar -xzvf blacklists.tar.gz
- fichier /etc/squid/squidGuard.conf
#
# CONFIG FILE FOR SQUIDGUARD
#
dbhome /var/squidGuard
logdir /var/log/squidGuard
dest adult {
domainlist blacklists/porn/domains
urllist blacklists/porn/urls
}
dest drugs {
domainlist blacklists/drugs/domains
urllist blacklists/drugs/urls
}
dest warez {
domainlist blacklists/warez/domains
urllist blacklists/warez/urls
}
dest spyware {
domainlist blacklists/spyware/domains
urllist blacklists/spyware/urls
}
dest suspect {
domainlist blacklists/suspect/domains
urllist blacklists/suspect/urls
}
dest hacking {
domainlist blacklists/hacking/domains
urllist blacklists/hacking/urls
}
acl {
default {
pass !adult !drugs !warez !spyware !suspect !hacking any
redirect http://172.30.104.195/access-denied.html?site=%u
}
}