Posts Tagged configurazione
HAProxy e gestione dei VirtualHost
L’unico modo per gestire i virtualhost su HAProxy (o meglio per legare un preciso vhost ad uno o piu’ precisi backend server) è quello di usare le ACL, mi appunto qui di seguito un conf di test (autoesplicativo) dove le ACL vengono implementate:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind *:80
acl is_www_example_com hdr_end(host) -i example.com
acl is_www_domain_com hdr_end(host) -i domain.com
use_backend www_example_com if is_www_example_com
use_backend www_domain_com if is_www_domain_com
default_backend www_example_com
backend www_example_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 10.1.1.1:80 cookie A check
server Server2 10.1.1.2:80 cookie B check
backend www_domain_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 192.168.5.1:80 cookie A check
server Server2 192.168.5.2:80 cookie B check
Load Balancing in High availability
Dopo aver usato per un bel po’ di tempo Pound come bilanciatore di carico per i miei server web, ho deciso di testare una nuova (si fa per dire) soluzione, dato che il suddetto progetto pare non sia piu’ mantenuto. Il candidato ideale mi è sembrato Haproxy che pare essere (oltre che mantenuto), molto piu’ performante di Pound e già che c’ero ho deciso di testarlo in accoppiata con Keepalived per prevenire eventuali failover. Eccovi un esempio di implementazione su Debian:
shared IP=192.168.0.99
192.168.0.100 192.168.0.101 192.168.0.102 192.168.0.103
+——————-+————–+————+———-
| | | |
+–+–+ +—+–+ +—-+–+ +——-+—-+
| lb1 | | lb2 | | http1 | | http2 |
+—–+ +——-+ +——–+ +————-+
haproxy haproxy 2 web servers (Apache)
keepalived keepalived
L’IP (virtuale) shared 192.168.0.99 sarà l’indirizzo pubblico del cluster che in un primo tempo sarà del master (lb1), in caso di failover verrà automaticamente attivato su lb2 tramite appunto Keepalived.
1) Preparazione dei backend web servers Apache (da effettuare su http1/http2):
Dopo aver installato apache2 è necessario procedere con una piccola modifica del file /etc/apache2/apache2.conf modificando il parametro LogFormat nel seguente modo per avere Haproxy configurato come trasparent peoxy:
[...]
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\
"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\
" \"%{User-Agent}i\"" combined
[...]
Adesso sarà necessario creare un piccolo file di testo: ‘/var/www/check.txt’ che verrà controllato da haproxy per capire se il nodo è attivo o meno. A questo punto è necessario risolvere il problema delle statistiche (se presenti) in quanto tutte le interrogazioni al suddetto file da parte di haproxy portano inevitabilmente ad un inquinamento dei report. Sarà necessario quindi modificare la direttiva CustomLog nei VirtualHost (ad esempio default) nel seguente modo:
[...] SetEnvIf Request_URI "^/check\.txt$" dontlog CustomLog /var/log/apache2/access.log combined env=!dontlog [...]
un bel ‘/etc/init.d/apache2 restart’ ed i backend sono pronti.
2) Installazione di Haproxy (da eseguire su lb1/lb2)
Prima di tutto diamo un bel:
apt-get install haproxy
Una volta installato il pacchetto procediamo con la modifica del file di configurazione:
cp /etc/haproxy.cfg /etc/haproxy.cfg_orig cat /dev/null > /etc/haproxy.cfg vi /etc/haproxy.cfg
Nel seguente modo:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 192.168.0.99:80
mode http
stats enable
stats auth someuser:somepassword
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server webA 192.168.0.102:80 cookie A check
server webB 192.168.0.103:80 cookie B check
Una volta fatto questo abilitiamo lo startup di Haproxy editando il file ‘/etc/default/haproxy’ e impostando ENABLED da 0 a 1.
3) Installazione di Keepalived (lb1/lb2):
apt-get install keepalived
editiamo il seguente file:
vi /etc/sysctl.conf
inserendo al suo interno:
[...] net.ipv4.ip_nonlocal_bind=1
ed eseguiamo:
sysctl -p
a questo punto editiamo:
vi /etc/keepalived/keepalived.conf
Nel seguente modo:
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
192.168.0.99
}
track_script {
chk_haproxy
}
}
questa configurazione setta lb1 come Master (priority 101) la stessa configurazione puo’ essere effettuata su lb2 con la sola differenza che priority dovrà essere essettato a 100 (backup o slave che dir si voglia).
Sarà sufficiente adesso dare su entrambe le macchine un bel:
/etc/init.d/keepalived start
e un:
ip addr sh eth0
per verificare che la configurazione sia corretta.
Diamo in fine l’ultimo comando per avviare haproxy:
/etc/init.d/haproxy start
Non resta che verificare al seguente indirizzo http://192.168.0.99/haproxy?stats che tutto sia andato a buon fine
Postfix: Unica istanza e Indirizzi IP/hostname multipli
Mi appunto qui di seguito una semplice configurazione per avere su di un singolo MTA piu’ Indirizzi IP (configurati su piu’ schede di rete virtuali) in modo che il demone (sulla porta 25) risponda con Hostname diversi, tutto questo allo scopo di eludere i sistemi antispam ‘feroci’ tipo quelli implementati da Hotmail e Yahoo.
Dopo aver configurato tutte quante le nostre schede di rete virtuali (ex. eth0:1, eth0:2, eth0:3 … eth0:n) procediamo con il configurare il file /etc/postfix/master.cf (in Debian like) e cambiamo la linea qui sotto da:
smtp inet n - n - - smtpd a: localhost:smtp inet n - n - - smtpd ipaddress-1:smtp inet n - n - - smtpd ipaddress-2:smtp inet n - n - - smtpd -o myhostname=hostname-2 . . . ipaddress-n:smtp inet n - n - - smtpd -o myhostname=hostname-n
Con questa nuova configurazione in pratica bindiamo ogni indirizzo ip su di un relativo hostname (magari sarebbe bene definirli prima nel file /etc/hosts) eccetto che per localhost e per ipadress-1 che risponderà con il regolare hostname.
Pulizia dei pacchetti e files di configurazione in Debian
MI appunto qui di seguito una serie di metodi per tenere il sistema debian pulito da pacchetti non piu’ utilizzati e da files di configurazione imbastarditi:
Deborphan
Il suo scopo è quello di generare una lista di pacchetti `orfani’, ovvero pacchetti che per dipendenza non vengono piu’ utilizzati da nessun software presente sul sistema:
# apt-get install deborphan # deborphan
o si puo’ usare l’opzione –libdevel che crea una lista con le librerie di sviluppo
# deborphan --libdevel
quindi passiamo la lista di pacchetti generata ad apt con:
# apt-get --purge remove `deborphan` # apt-get --purge remove `deborphan --libdev`
File di Configurazione
Con questo comando e’ possibile pulire /etc dai files di configurazione che sono rimasti sul sistema dopo disinstallazioni di pacchetti senza aver utilizzato l’opzione –purge:
# dpkg --purge `COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`
Localepurge
Una volta installato questo software provvede da solo dopo ogni installazione di pacchetti di rimuovere le lingue che non ci interessano
# localepurge
La cache di apt-get
Apt ci mette a disposizione alcuni efficacissimi strumenti per tenere pulita la cache:
# apt-get clean # apt-get autoclean
La cache di apt-build
Lo stesso vale per apt-build:
# apt-build clean-sources # apt-build clean-build # apt-build clean-repository
Configurazione Rapida LAN con netsh.exe
Spesso accade di dover accedere con il nostro laptop windows (io no!) a reti locali differenti dove magari non c’? un server DHCP, pertanto ogni volta riconfigurare la nostra scheda ethernet pu? risultare annoiante. Ecco qui un semplice script .bat e un file di configurazione per modificare automaticamente i parametri.
Supponiamo di avere in ufficio un server DHCP mentre a casa un tipico HAG Fastweb con ovviamente una ben definita ACL, creiamo quindi il file home.bat e il conf confHome.txt per casa e uno script office.bat con il relativo conf confOffice.txt per il nostro ufficio:
- File home.bat conterr?:
@echo Cambia rete
@echo off
netsh exec confHome.txt
@echo rete cambiata
- Il file confHome.txt (i parametri sono personali) conterr? ad esempio:
interface
ip
set address name="Connessione alla rete locale (LAN)" source=static addr=192.168.1.15 gateway=192.168.1.254 mask=255.255.255.0 gwmetric=0
set dns name="Connessione alla rete locale (LAN)" source=static addr=213.102.12.0 register=primary
add dns name="Connessione alla rete locale (LAN)" addr=213.140.2.21
quit
- Lo script office.bat sar? invece:
@echo Cambia rete
@echo off
netsh exec confOffice.txt
@echo rete cambiata
- Il file confOffice.txt conterr? quindi:
interface
ip
set address name="Connessione alla rete locale (LAN)" source=dhcp
set dns name="Connessione alla rete locale (LAN)" source=dhcp
quit
Ovvimente il file.bat ed il relativo conf devono stare nella stessa directory ma il link all’eseguibile potete piazzarlo un p? dove vi pare.
Vista & Samba working
i appunto qui di seguito gli screen per far accedere Windows Vista ad un server Samba
eseguire:
selezionare le propriet? di:
cambiare il default in:
easy!
Samba come PDC su Debian Etch Parte 2
Finalmente un po di tempo libero! E allora via con la seconda parte di questo documento:
eravamo rimasti ad assegnare all’utente Administrator lo stesso UID di root al’interno dello schema, adesso dobbiamo anche modifidare la password per lo stesso Administrator:
#smbldap-passwd Administrator
si pu controllare il contenuto del db con:
#slapcat
? necessario quindi configurare anche l’autenticazione sulla macchina con ldap installare quindi:
#apt-get install libpam-ldap libnss-ldap
Impostiamo i dati richiesti e andiamo a editare /etc/nsswitch.conf:
———————START CONF————————————————————
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference’ and `info’ packages installed, #try:
# `info libc “Name Service Switch”‘ for information about this file.
passwd: compat ldap
group: compat ldap
shadow: compat ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
—————END CONF——————————————————————–
Verifichiamo le impostazioni dando un bel
#getent passwd
se tutto ? corretto la lista dovrebbe riportare anche gli utenti di ldap
? possibile copiare un prototipo per il file di configurazione di samba (facendo una copia dell’originale!):
#zcat /usr/share/doc/smbldap-tools/examples/smb.conf.gz > /etc/samba/smb.conf
Adesso entriamo nella parte pi? delicata della configurazione!
**ATTENZIONE** le voci da modificare sono parecchie, conviene un’attenta analisi del file d’esempio, soprattutto per quanto riguarda il binding verso ldap, in modo che rispecchino queste opzioni:
—————START CONF—————————————————————-
[global]
workgroup = CED
netbios name = JUPITER
server string = Samba Server
passdb backend = ldapsam:ldap://127.0.0.1
passwd program = /usr/sbin/sbmldap-passwd %u
passwd chat = *Nuova*Password* %n\n *Riscrivi*Nuova*Password* %n\n *all*authentication*tokens*
log file = /var/samba/log.%m
max log size = 50
add user script = /usr/sbin/smbldap-useradd -m “%u”
delete user script = /usr/sbin/smbldap-userdel “%u”
add group script = /usr/sbin/smbldap-groupadd -p “%g”
delete group script = /usr/sbin/smbldap-groupdel “%g”
add user to group script = /usr/sbin/smbldap-groupmod -m “%u” “%g”
delete user from group script = /usr/sbin/smbldap-groupmod -x “%u” “%g”
set primary group script = /usr/sbin/smbldap-usermod -g “%g” “%u”
add machine script = /usr/sbin/smbldap-useradd -w “%u”
domain logons = Yes
os level = 255
preferred master = Yes
domain master = Yes
dns proxy = No
wins support = Yes
security = user
ldap admin dn = cn=admin,dc=ced,dc=local
ldap delete dn = Yes
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap passwd sync = Yes
ldap suffix = dc=ced,dc=local
ldap user suffix = ou=Users
#hosts allow = 127.0.0.1 192.168.1.
[homes]
comment = Home Directories
read only = No
create mask = 0700
directory mask = 0700
browseable = Yes
[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = Yes
share modes = No
[Profiles]
path = /home/samba/profiles
read only = No
create mask = 0600
directory mask = 0700
guest ok = Yes
[segreteria]
path = /home/segreteria
read only = No
create mask = 0777
directory mask = 0777
guest ok = Yes
[didattica]
path = /home/didattica
read only = No
create mask = 0777
directory mask = 0777
guest ok = Yes
[printers]
comment = All Printers
path = /usr/spool/samba
printable = Yes
browseable = No
—————————–END CONF—————————————————
Controllare se i parametri sono corretti e se il server agir? come PDC tramite il comando:
#testparm
Che dovrebbe restituirci una riga del tipo: Server role: ROLE_DOMAIN_PDC. Dopodich? andiamo a cambiare la password dell’amministratore di samba-ldap:
#smbpasswd -w PASSWORDDESIDERATA
e restartiamo il servizio:
#/etc/init.d/samba restart
ora modificare l’utente administrator per renderlo come uid 0 altrimenti non sar? possibile fare il join del dominio dai client (probabilmente c’e’ qualche via pi? pulita):
#smbldap-usermod -u 0 administrator
A questo punto basta aggiungere gli utenti sul PDC:
#useradd tizio
#useradd caio
#useradd sempronio
ed alcuni utenti speciali (i nomi dei PC Windows)
#useradd pc01$ <– Aggiungere il $ ? fondamentale
#useradd pc02$
#useradd pc03$
A questo punto sincroniziamo gli account con Samba:
#smbpasswd -a tizio
#smbpasswd -a caio
#smbpasswd -a sempronio
e autoriziamo i clients
#smbpasswd -a -m pc01 <– Qui il $ non ci va
#smbpasswd -a -m pc02
#smbpasswd -a -m pc03
Adesso il PDC ? pronto all’ uso.
Una nota importante:
Per usare clients Window XP Professional ? necessario modificare alcune voci in
Pannello di controllo\Prestazioni e manutenzione\Strumenti di amministrazione\Criteri di protezione locali\Criteri locali\Opzioni di protezione
E’ necessario disabilitare le seguenti voci:
- Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (sempre)
- Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (quando possibile)
- Membro di dominio: aggiunta firma digitale ai dati del canale protetto (quando possibile)
Adesso anche Windows XP pu? accedere al dominio.
Good Luck!
Samba come PDC su Debian Etch Parte 1
?
Si certo, avete ragione, di guide su come implementare un PDC Open Source ce ne sono pure troppe ma siccome tutte quelle che ho consultato per creare in Azienda il PDC ‘ced.local’ contenevano dei BUGZ ho deciso di scriverne una io, spero definitiva, per l’implementazione di questo tipo di servizio su una Debian Etch.
Allora Cominciamo subito!!
Aggiornate la vostra Etch e cominciamo a procurarci il software necessario:
#apt-get install samba samba-doc
Rispondiamo alle domande, comunque il file verr? modificato pi? tardi
All’inserimento del DNS digitate ced.local (o quello che volete) tenendo presente che questo creer? una base DN dc=ced,dc=local. Rispondete alle altre domande come volete eccetto per la Pass di admin che dovrete tenervela bene a mente
Ora ? necessario aggiungere lo schema per i dati di samba all’indice LDAP:
#zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz>
/etc/ldap/schema/samba.schema
Editiamo /etc/ldap/slapd.conf e modifichiamolo nel seguente modo:
#————————-START CONF —————————
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500
tool-threads 1
backend bdb
database bdb
suffix “dc=ced,dc=local”
rootdn “cn=admin,dc=ced,dc=local”
directory “/var/lib/ldap”
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
lastmod on
access to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword <— ATTENZIONE TUTTO SU UNA RIGA!!
by dn=”cn=admin,dc=ced,dc=local” write
by dn=”cn=auth,dc=ced,dc=local” read
by anonymous auth
by self write
by * none
access to dn.base=”" by * read
access to *
by dn=”cn=ced,dc=local” write
by * read
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
rootpw {SSHA}XOG5/g2ihGgvrPECx9Yv2s63jWTsAhFk
#—————————–END CONF—————————
Fate molta attenzione a al parametro rootpw per ottenere questo cambiate
la pass di ldap con il seguente comando:
#slappasswd
Adesso modifichiamo il /etc/ldap/ldap.conf nel seguente modo
#—————————START CONF———————————
BASE dc=ced, dc=local
URI ldap://127.0.0.1
#————————-END CONF———————————
Restartiamo il servizio:
#/etc/init.d/slapd restart
Installazione degli smbldap-tools:
#apt-get install smbldap-tools
Prepariamo i conf che andremo a modificare subito dopo:
#zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
#cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf
Editare il file /etc/smbldap-tools/smbldap.conf, modificando il SID, per ottenerlo eseguire il programma:
#net getlocalsid
/etc/smbldap-tools/smbldap.conf dovrebbe avere questo aspetto:
#—————-START CONF —————————————-
SID=”S-1-5-21-3918145941-2390075594-533896221″
sambaDomain=”ced”
slaveLDAP=”127.0.0.1″
slavePort=”389″
masterLDAP=”127.0.0.1″
masterPort=”389″
ldapTLS=”0″
verify=”require”
clientcert=”/etc/opt/IDEALX/smbldap-tools/smbldap-tools.pem”
clientkey=”/etc/opt/IDEALX/smbldap-tools/smbldap-tools.key”
suffix=”dc=ced,dc=local”
usersdn=”ou=Users,${suffix}”
computersdn=”ou=Computers,${suffix}”
groupsdn=”ou=Groups,${suffix}”
idmapdn=”ou=Idmap,${suffix}”
sambaUnixIdPooldn=”sambaDomainName=ced,${suffix}”
scope=”sub”
hash_encrypt=”SSHA”
crypt_salt_format=”%s”
userLoginShell=”/bin/bash”
userHome=”/home/%U”
userHomeDirectoryMode=”700″
userGecos=”System User”
defaultUserGid=”513″
defaultComputerGid=”515″
skeletonDir=”/etc/skel”
defaultMaxPasswordAge=”45″
userSmbHome=”\\dh06\%U”
userProfile=”\\dh06\profiles\%U”
userHomeDrive=”H:”
userScript=”logon.bat”
mailDomain=”ced.local”
with_smbpasswd=”0″
smbpasswd=”/usr/bin/smbpasswd”
with_slappasswd=”0″
slappasswd=”/usr/sbin/slappasswd”
#—————-END CONF ———————————————————————-
ora nel file /etc/smbldap-tools/smbldap_bind.conf:
#—————————-START CONF—————————————————-
slaveDN=”cn=auth,dc=ced,dc=local”
slavePw=”mb2006″
masterDN=”cn=admin,dc=ced,dc=local”
masterPw=”mb2006″
#—————————-END CONF—————————————————-
Ovviamente la pass ? quella digitata prima nel comando: slappasswd
Adesso popoliamo il db di LDAP
#smbldap-populate -k 0
Dove il parametro -k 0 serve a impostare l’UID dell’utente Administrator a 0, facendolo
di fatto coincidere con l’utente root.
Se tutto va come deve andare abbiamo terminato la prima parte
di lavoro!!!!! Presto la Puntata n. 2 =)