Affichage des articles dont le libellé est proxy. Afficher tous les articles
Affichage des articles dont le libellé est proxy. Afficher tous les articles

lundi 18 juin 2012

Nginx reverse proxy avec SSL


Nginx est toujours plus populaire et est utilisé comme : serveur HTTP bien sûr, reverse proxy avec ou sans cache, réécriture d’URL, de protéger et masquer son infrastructure.

Dernièrement, je l'ai utilisé comme reverse proxy afin de regrouper sur un même adresse IP plusieurs sites web (plusieurs serveurs et technos : IIS, Apache, Tomcat) et de préparer une future migration de data center.

Utilisé comme reverse proxy la config est très simple.

Sous Debian télécharger la dernière version.


Ajouter à  /etc/apt/sources.list
deb http://nginx.org/packages/debian/ squeeze nginx 
deb-src http://nginx.org/packages/debian/ squeeze nginx


Puis installer nginx et openssl
apt-get install nginx openssl

Configurer nginx

/etc/nginx/nginx.conf

user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
send_timeout 5m;
}

Créer le site 

dans /etc/nginx/sites-available
server {
listen 80;
server_name www.nomdusite.com *.nomdusite.com nomdusite.com;
access_log /var/log/nginx/nomdusite .com.log;
error_log /var/log/nginx/nomdusite .com.error.log notice;
location / {
proxy_pass http://www.nomdusite.com;
}
}

J'ai déclarer dans le /etc/hosts l'adresse privée de nomdusite.com
192.168.0.1 www.nomdusite.com

Utiliser SSL

Pour gérer le reverse proxy avec SSL

Créer  une répertoire contenant le certificat SSL.
mkdir -p /etc/nginx/ssl/nomdusite
cd /etc/nginx/ssl/nomdusite

Générer le certificat SSL à faire signer par une autorité de confiance.
openssl req -new -newkey rsa:2048 -nodes -keyout nomdusite.com.key -out nomdusite.com.csr

Copier le contenu du fichier nomdusite.com.csr au près de votre CA, dans mon cas Godaddy.

Récupérer le certificat nomdusite.com.crt et déclarer le dans la configuration de Nginx avec la clé nomdusite.com.key obtenue lors de la génération du fichier csr.

server {
listen 443;
ssl on;
server_name www.nomdusite.com *.nomdusite.com nomdusite.com;
ssl_certificate /etc/nginx/ssl/nomdusite/nomdusite.com.crt;
ssl_certificate_key /etc/nginx/ssl/nomdusite/nomdusite.key;
access_log /var/log/nginx/nomdusite .com.log;
error_log /var/log/nginx/nomdusite.com.error.log notice;
location / {
proxy_pass https://www.nomdusite.com:443;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Il est parfois nécessaire de chaîner les certificats, je vous renvoi à la documentation de Nginx.


Pour tester la syntaxe de la configuration de nginx :
nginx -t

Pour activer le site, créer un alias dans /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/nomdusite.com /etc/nginx/sites-enabled/nomdusite.com

Puis ensuite pour appliquer la nouvelle configuration :

/etc/init.d/nginx reload

lundi 12 décembre 2011

Squid authentification LDAP

Configuration de l'authentificacion de Squid avec Active directory Microsoft

On valide la connexion
# Active Directory configuration
auth_param basic program /usr/lib/squid/squid_ldap_auth -R -v 3 -b "dc=foo,dc=corp" -D "cn=Proxy1,cn=Users,dc=foo,dc=corp" -w "xxx" -f sAMAccountName=%s -h 192.168.11.206
auth_param basic children 5
auth_param basic realm Squid Proxy Server
auth_param basic credentialsttl 5 minutes

On authorize un groupe
#ldap authorizations
#full proxy access logger
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R \
-b "dc=foo,dc=corp" \
-D "cn=Proxy1,cn=Users,dc=foo,dc=corp" \
-w "xxx" \
-f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,cn=users,DC=foo,DC=corp))" \
-h 192.168.11.206

On renvoit vers Squidguard, on pourrait aussi associe des autorizacions par groupe LDAP
#Squidguard
redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard.conf

########################
####### acls locales####
########################
acl manager proto cache_object
#acl all src 0.0.0.0/0.0.0.0
acl to_localhost src 127.0.0.1/32
acl localhost dst 127.0.0.0/8
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 Safe_ports port 8522 # otros ssh
acl Safe_ports port 22
acl CONNECT method CONNECT
acl ldap-group proxy_auth REQUIRED
#acl redlocal src 192.168.10.0/23
acl Proxy external ldap_group ProxyFULL


########################
####### Restricciones###
########################
http_access allow Proxy
http_access allow Accesorestringido
http_access deny manager
http_access allow MonarcaTestProxy
http_access deny !Safe_ports
http_access allow manager localhost
http_access deny CONNECT !SSL_ports
http_access allow localhost

http_access deny all

icp_access allow all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
access_log /var/proxy/log/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
#broken_vary_encoding allow apache
coredump_dir /var/spool/squid
visible_hostname [My HOSTNAME]


Commande utile pour verifier l'appartenance 
C:\Windows\system32>dsget USER "CN=foouser,OU=foo,DC=foo,DC=corp" -memberof

Commande Squid pour tester le proxy
squidclient -h 127.0.0.1 -u user -w password http://sysadmin10.blogspot.com

jeudi 26 mai 2011

Proxy et configuration WPAD

Dernièrement je me suis escrimé à configurer et fignoler Squid et WPAD.

Jusqu'à présent j'avais toujours utilisé Squid en proxy transparent mais cette fois je ne voulais pas me placer entre le backbone et le FW.
J'ai donc configurer squid en proxy/gateway mais comment obliger tous les navigateurs à passer par lui ?

Ok, j'ai la GPO pour les postes du domaine mais les autres ? Les linux, les smartphone, ...
Solution WPAD (Web Proxy Autodiscovery Protocol).

Pour ce faire on place un petit proxy.pac ou wpad.dat.
Mais petite subtilité je souhaite que les accès aux ressources locales ne passent pas par le proxy.

Petite config :
function FindProxyForURL(url, host)
{
// variable strings to return
var proxy_yes = "PROXY 192.168.51.70:3128"; //Mon proxy
var proxy_no = "DIRECT";
if (isPlainHostName(host)) { return proxy_no; } //Ne pas utiliser le proxy pour les adresses locales comme http://intranet
if (shExpMatch(url, "localhost")) { return proxy_no; }
if (shExpMatch(url, "http://*.mondomain.com/*")) { return proxy_no; } //Ne pas utiliser le proxy pour les adresses en mondomain.com
if (shExpMatch(url, "http://192.168.*.*")) { return proxy_no; } //Ne pas utiliser le proxy pour le réseau 192.168.0.0
if (shExpMatch(url, "https://192.168.*.*")) { return proxy_no; } //Idem pour le https
if (shExpMatch(url, "http://127.0.0.1")) { return proxy_no; } //Idem pour le local
// Proxy anything else
return proxy_yes;
}
Et ça marche !