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

Share

, , , , , , , ,

No Comments

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 ;)

Share

, , , , , , ,

No Comments

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.

Share

, , , , , , ,

1 Comment

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


Share

, , , , , , , ,

No Comments

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.

Share

, , , , , , , , , ,

No Comments

Vista & Samba working

i appunto qui di seguito gli screen per far accedere Windows Vista ad un server Samba

eseguire:

conf1

selezionare le propriet? di:

cambiare il default in:

easy! ;)

Share

, , , , , , , ,

No Comments

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!

Share

, , , , , , , , ,

No Comments

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 :P

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 =)

Share

, , , , , , , , ,

No Comments