Visualizzazione post con etichetta linux. Mostra tutti i post
Visualizzazione post con etichetta linux. Mostra tutti i post

mercoledì 5 agosto 2009

Usare Openswan per una vpn IPSEC

Openswan è una completa implementazione di IPSEC per i kernel Linux 2.0, 2.2, 2.4 e 2.6.

Su debian openswan è facilmente installabile usando apt.

La vpn che andremo a creare è attestata lato nostro su un firewall linux Debian (hostname: firewall) ed è configurata attraverso un software chiamato openswan. Dall'altra parte del tunnel l'altro peer è un router Cisco 3845.

Il nostro firewall ha due schede di rete: etho (pubblica) ed eth1 (privata)

Prima di iniziare la configurazione dobbiamo sempre stabilire con chi gestisce l'altro peer (sempre che non siamo noi a gestire entrambi!) le caratteristiche del tunnel IPSEC che andremo ad instaurare. Per questo motivo mando sempre una mail al mio dirimpettaio in cui scrivo:

" ...per permettere che la VPN funzioni correttamente sarà necessario che sia basata su un IPSEC vendor free senza features aggiuntive.
Altre caratteristiche:


Autenticazione: preshared key
Cifratura: 3DES
Hash: MD5
Diffie Helmann: Gruppo 2
Perfect Forward Secrecy: Disabilitata
Modalità VPN: tunnel
IKE: Main Mode
NAT-T: No "

I file di configurazione della vpn su cui andremo a lavorare lato nostro sono i seguenti:
/etc/ipsec.conf dove indicheremo l'include del file di configurazione
/etc/ipsec.secrets dove indicheremo la pre shared key per agganciarci al peer remoto
/etc/ipsec.d/CONNESSIONI-ATTIVE/con-nuovotunnel dove scriveremo tutti i parametri della connessione

Per non incorrere in problemi di natting e di criptazione dei dati sul firewall è stata aggiunta appositamente un'ulteriore interfaccia interna, eth1:1, che nel nostro esempio risponderà all'IP 192.168.72.2

Creiamo la directory /etc/ipsec.d/CONNESSIONI-ATTIVE in cui andremo ad inserire i file di configurazione delle vpn che andremo man mano a creare:

firewall#mkdir
/etc/ipsec.d/CONNESSIONI-ATTIVE

Dentro la dir appena creata scriveremo il nostro file di configurazione che chiameremo con-nuovaconnessione. Il contenuto del file sarà il seguente:

conn con-nuovaconnessione
type=tunnel #tunnel mode ipsec
left=IPPUBBLICODELNOSTROFIREWALL #the IP address of your OpenSWAN endpoint
leftnexthop=%defaultroute #default gateway
leftsubnet=192.168.72.2/32 # network behind your endpoint
right=IPPUBBLICODELLALTROPEER # Your IP, or %any for a road-warrior setup
rightnexthop=%defaultroute #defaultroute for road warrior unknown
rightsubnet=RETEPRIVATADELLALTROPEER/SUBNETMASK #network behind the PIX
esp=3des-md5 #esp: 3des, hmac: sha1
keyexchange=ike #use regular ike
compress=no #inserita per test
authby=secret #pre-shared secret, you can also use rsa nounces
auto=add #don't initiate tunnel, but allow incoming
pfs=no
spi=0x0 #use base spi of 0x0 for PIX
dpddelay=10
dpdtimeout=120
dpdaction=clear
rekey=yes

Per le singole voci del file di configurazione vi rimando alla vasta documentazione che si trova sul sito di openswan.
Ora andiamo a scrivere la pre shared key concordata dentro il file /etc/ipsec.secrets con questa modalità:

IPPUBBLICOMIOFIREWALL IPPUBBLICOALTROPEER : PSK "
presharedconcordata"

Attenzione: la pre shared key deve essere scritta dentro i doppi apici!
Fatto questo ci resta solo da inserire l'include del file di configurazione nel nostro file /etc/ipsec.conf:

include /etc/ipsec.d/CONNESSIONI-ATTIVE/con-nuovaconnessione

In questo momento abbiamo terminato la configurazione di ipsec.
Prima di provare a tirare su la vpn non dobbiamo dimenticarci però due cose:
1)aver creato l'interfaccia interna 192.168.2.72 sul nostro firewall
2)aver inserito le regole iptables per pemettere al nostro firewall di girare correttamente il traffico. Un esempio:
iptables -t nat -A POSTROUTING -s 192.168.72.0/24 --dst RETEPRIVATAALTROPEER/SUBNETMASK -j SNAT --to-source 192.168.72.2

Ora possiamo tirare su la nostra vpn con i seguenti comandi:

/etc/init.d/ipsec start
(solo se ipsec non era ancora stato avviato)
ipsec auto --verbose --up con-nuovaconnessione

Per verificare lo stato della vpn si può usare il seguente comando


ipsec auto --verbose --status

e verificare se sono in stato SA established sia ISAKMP che IPsec.
Esempio:

000 #153: "con-nuovaconnessione":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 871s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0)
000 #152: "con-nuovaconnessione":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 25764s; newest IPSEC; eroute owner
000 #152: "con-nuovaconnessione" esp.2f26e857@IPPUBBLICOALTROPEER esp.2a9932cc@NOSTROIPPUBBLICO tun.0@
IPPUBBLICOALTROPEER tun.0@NOSTROIPPUBBLICO


Un ulteriore prova è quella di mettersi su una macchina dietro al nostro firewall e provare con hping3 a raggiungere una destinazione sulla rete privata dell'altro peer.
Mettendoci in ascolto con tcpdump sia sull'interfaccia privata del nostro firewall (192.168.2.72) sia su quella pubblica dovremmo vedere i pacchetti ragiiungere il firewall e venire incapsulati attraverso il tunnel verso la destinazione.
Un esempio di comando hping3 (supponiamo che la porta 80 della destinazione sia aperta) :
hping3 -S IPPRIVATORETEALTROPEER -p 80
Un esempio dei comandi tcpdump da tirare sul firewall:
1)tcpdump -i eth1:1 host IPPRIVATOALTROPEER verifica che i pacchetti giungano sull'interfaccia interna del firewall
2)tcpdump -i eth0 host IPPUBBLICOALTROPEER verifico che i pacchetti stiano venendo incapsulati e girati nel tunnel verso la destinazione.
Se i pacchetti vengono incapsulati e girati nel tunnela ma non tornano indietro è molto probabile che ci sia qualche problema di routing dall'altra parte del tunnel.
Nel caso in cui volessimo tirare giù la vpn:
ipsec auto --verbose --down con-nuovaconnessione


lunedì 27 luglio 2009

MONITORARE LA RETE CON XYMON, L'EREDE DI BIG BROTHER

Xymon è la versione di System Monitoring derivata da Big Brother. Installeremo la versione server su una macchina Linux mentre il client è installabile sia in ambiente linux che microsoft windows.
In questo documento avremo a che fare sia con il Xymon-Server che con il Xymon-Client.
Stabiliamo che:
1)Xymon-Server(hostname: SRV-Monitor) 192.168.0.77
2)Xymon-Client 192.168.0.10

Creiamo sia sul server che sul client l'utenza Xymon dandogli come home /home/xymon
Per cominciare installeremo Xymon partendo con il suo download dal sito ufficiale (http://www.xymon.com/).

Xymon-Server: /home/xymon# wget http://freefr.dl.sourceforge.net/sourceforge/hobbitmon/xymon-4.2.3.tar.gz


Unzippiamo e estraiamo i pacchetti :

Xymon-Server:/home/xymon#tar zxvf xymon-4.2.3.tar.gz

Entriamo nella directory estratta:

Xymon-Server:/home/xymon#cd xymon-4.2.3

CONFIGURAZIONE

Xymon ha bisogno delle librerie RRD e PCRE, installiamole:

Xymon-Server:/home/xymon/xymon-4.2.3# apt-get install librrd2-dev librrd2
Xymon-Server:/home/xymon/xymon-4.2.3# apt-get install libpcre3 libpcre3-dev

Se non lo si è ancora fatto occorre anche il necessario per compilare:
Xymon-Server:/home/xymon/xymon-4.2.3# apt-get install make gcc g++

Xymon-Server:/usr/src/xymon-4.2.3# apt-get install make gcc g++

Poi si lancia la configurazione:

Xymon-Server:/home/xymon/xymon-4.2.3# ./configure

Lasciate tutte le indicazioni di default salvo le seguenti configurazioni:

Il gruppo utilizzato da Apache:

What group-ID does your webserver use nobody ?
www-data

L'hostname che sarà utilizzato da Xymon per il monitoraggio del server (potete lasciare l'indicazione di default):
What is the name of this host SRV-Monitor ?

L'IP che sarà utilizzato da Xymon per il monitoraggio del server locale:
What is the IP-address of this host 127.0.0.1 ?
192.168.0.77

INSTALLAZIONE

Ora possiamo compilare:
Xymon-Server:/home/xymon/xymon-4.2.3# make

Poi installare:
Xymon-Server:/home/xymon/xymon-4.2.3# make install


Occorre modificare la configurazione di Apache.
La configurazione Apache per Xymon si trova in /home/xymon/xymon-4.2.3/server/etc/hobbit-apache.conf. Per metterla in atto potete creare un nuovo VirtualHost nel quale mettere il contenuto del file o sostituire il contenuto del default (000-defaut).

Xymon-Server:/home/xymon/xymon-4.2.3# cp /home/xymon/xymon-4.2.3/server/etc/hobbit-apache.conf /etc/apache2/sites-enabled/000-default

Riavviate Apache

Xymon-Server:/home/xymon/xymon-4.2.3# /etc/init.d/apache2 restart

Avviate Xymon come segue:
Xymon-Server:/home/xymon/xymon-4.2.3# su - xymon -c "/home/xymon/xymon-4.2.3/server/bin/hobbit.sh start"

Xymon è ora visibile attraverso l'URL: http://192.168.0.77/xymon/

Per lanciare il client locale:
Xymon-Server:/home/xymon/xymon-4.2.3# /home/xymon/xymon-4.2.3/client/runclient.sh start


Se volete che la home page sia protetta da password:
Xymon-Server:/home/xymon/xymon-4.2.3# htpasswd -bc /home/xymon/xymon-4.2.3/server/etc/hobbitpasswd username password

- INSTALLAZIONE DEL CLIENT Xymon

Il server Xymon utilizza la porta 1984 per ricevere i dati dei clients, occorrerà quindi assicurarsi che la porta non sia impegnata da altri servizi. Sul nostro nuovo Xymon-Client, si scaricherà lo stesso pacchetto usato precedentemente:

Xymon-Client:/home/xymon# wget http://freefr.dl.sourceforge.net/sourceforge/hobbitmon/xymon-4.2.3.tar.gz

Estraiamo i pacchetti :
Xymon-Client:/home/xymon# tar zxvf xymon-4.2.3.tar.gz

Entriamo nella dir di xymon:
Xymon-Client:/home/xymon# cd xymon-4.2.3

Installiamo ciò che serve per compilare:
Xymon-Client:/home/xymon# apt-get install make gcc g++

Lanciamo la configurazione del client:
Xymon-Client:/home/xymon# ./configure.client

Una prima questione è posta, potete scegliere "server", per centralizzare sul server certe configurazioni o "client" per porli sul client locale:
Server side client configuration, or client side server ?
server

Poi rispondiamo alle altre domande:
Configuriamo l'installazione:
Accettiamo le risposte di default tranne alcune particolari.

Configuriamo l'IP del Xymon-Server:

What is the IP-address of your Xymon server 127.0.0.1 ?
192.168.0.77

La configurazione è terminata. Però la compilazione potrebbe impiantarsi con il seguente messaggio:
"/home/xymon/xymon-4.2.3/lib/timefunc.c:55: undefined reference to `clock_gettime'"

Per regolare il problema editate il MakeFile e aggiungete queste linee prima di "include build/Makefile.Linux" :


# clock_gettime() settings 
LIBRTDEF = -lrt


Ora si può compilare tutto:
Xymon-Client:/home/xymon/xymon-4.2.3# make

Poi installare:
Xymon-Client:/home/xymon/xymon-4.2.3# make install

Avviamo il nostro client Xymon :
Xymon-Client:/home/xymon/xymon-4.2.3# /home/xymon/xymon-4.2.3/client/runclient.sh start

Perchè le informazioni provenienti dal client siano utilizzate e pubblicate dal server editate su Xymon-server il file /home/xymon/xymon-4.2.3/server/etc/bb-hosts e aggiungete una nuova linea contenente l'IP del client seguito dal suo hostname
192.168.0.10 Xymon-Client


- INSTALLARE IL CLIENT BBWIN
Cos'è BBWin ?

BBWin è un client open source per pemettere le comunicazioni tra Windows e Xymon
Usare BBWin con Xymon in modalità centralizzata

Per usare la modalità centralizzata di BBWin per Xymon devi avere la versione BBWin 0.12 o successiva
Per abilitare la modalità centralizzata in BBWin 0.12 scrivi queste linee nel tuo file bbwin.cfg:

Esempio di hobbit-clients.cfg per l'uso di Windows

HOST=%win.* #Your windows hosts 
LOAD 80 90 # Load threholds are in %
DISK D 50 55 # Can be harddrive or mount points
DISK InetPub 30 35
MEMPHYS 90 101
MEMSWAP 90 95
MEMACT 90 97
PORT "LOCAL=%([.:]80)$" state=LISTENING TEXT=http
PROC BBWin.exe 1 1
PROC svchost.exe 3 4
LOG %.* %.*error.* COLOR=yellow
SVC MSSQLSERVER startup=automatic status=started
Per altri esempi guarda la pagina man hobbit-clients.cfg
FAQ
Con alcuni servers, alcuni test come svcs, ports, uptime e who appaiono in purple mentre altri sono verdi?
La modalità centralizzata invia un file (Client data) con tutte le informazioni dentro.
Cambia il file hobbitserver.cfg in questo modo:
MAXMSG_DATA="5242880"
MAXMSG_CLIENT="5242880"
MAXMSG_STATUS="5242880"

venerdì 24 luglio 2009

Linux - Installare apache 2.2 con supporto ssl, mod_rewrite, php e webdav

Scaricate httpd-2.2 dal sito www.apache.org e php dal sito www.php.net.

In questa guida si fa riferimento alle seguenti versioni:

A) httpd-2.2.9

B) php-5.2.6

Il tutto verrà installato nella dir /usr/local

Scompattare httpd-2.2.9.tar in /usr/local:

#cd /usr/local

#tar -xvf httpd-2.2.9.tar

Creiamo la dir /usr/local/apache:

#mkdir /usr/local/apache

Stariamo php-5.2.6.tar dentro /usr/local/apache:

#cd /usr/local/apache

#tar -xxvf php-5.2.6.tar

Fatto questo nella dir /usr/local/apache bisogna creare il link simbolico php che punta la dir php-5.2.6:

#ln -s /usr/local/apache/php-5.2.6 php

Spostiamoci in /usr/local/httpd-2.2.9 eseguire i seguenti comandi:
#./buildconf
#./configure --prefix=/usr/local/apache --with-mpm=prefork --enable-mods-shared=all --enable-modules=all --enable-authn-anon -enable-usertrack --enable-proxy --enable-ssl --enable-http --enable-dav --enable-info --enable-cgi --enable-dav-fs --enable-dav-lock --enable-speling --enable-rewrite --enable-so
#make
#make install

Ora andiamo nella dir /usr/local/php e lanciamo i seguenti comandi:

#cd /usr/local/php

#./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql --prefix=/usr/local/apache/php --with-config-file-path=/usr/local/apache/php --enable-force-cgi-redirect --disable-cgi --with-zlib --with-gettext --with-gdbm
#make
#make install
#libtool --finish /usr/local/apache/php-5.2.6/libs
#cp -p php.ini-recommended /usr/local/apache3/php/php.ini

Aggiungi queste direttive in /usr/local/apache/conf/httpd.conf (se già ci sono verifica la loro correttezza):

LoadModule php5_module modules/libphp5.so
AddHandler php5-script php

Aggiungi index.php alla tua riga DirectoryIndex :


DirectoryIndex index.html index.php

Inoltre, nello stesso file httpd.conf non dimenticare di aggiungere anche:

AddType text/html php

AddType application/x-httpd-php-source phps

Dentro il file httpd.conf inoltre verificare i moduli che vengono caricati dai vari LoadModule e controllare che le voci relative a mod_ssl, mod_dav, mod_dav_fs, mod_rewrite, mod_usertrack siano scommentate
Esempio di un mod_ssl correttamente caricato:

LoadModule ssl_module modules/mod_ssl.so

Ora configuriamo apache2 sempre attraverso il file httpd.conf
. Modifichiamo i Listen:

Listen INDIRIZZOIP:80

Listen INDIRIZZOIP:443

Scriviamo il ServerName nel file /usr/local/apache/conf/httpd.conf :

ServerName www.MIOSERVER.it

Scommentare gli Include necessari nel file /usr/local/apache3/conf/httpd.conf :

# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf


# Multi-language error messages

#Include conf/extra/httpd-multilang-errordoc.conf

# Fancy directory listings
Include conf/extra/httpd-autoindex.conf

# Language settings
Include conf/extra/httpd-languages.conf

# User home directories
Include conf/extra/httpd-userdir.conf

# Real-time info on requests and configuration
Include conf/extra/httpd-info.conf

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

# Local access to the Apache HTTP Server Manual
Include conf/extra/httpd-manual.conf

# Distributed authoring and versioning (WebDAV)
Include conf/extra/httpd-dav.conf

Editiamo il file /usr/local/apache/conf/extra/httpd-ssl.conf
Editare il parametro Listen:
Listen INDIRIZZOIP:443

Generiamo il certificato ssl con il comando openssl:
openssl req -new -x509 -days 9999 -keyout /usr/local/apache/conf/server.key -out /usr/local/apache3/conf/server.crt
Generating a 1024 bit RSA private key
....++++++
.++++++
writing new private key to '/usr/local/apache3/conf/server.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:



You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.


Country Name (2 letter code) AU:IT
State or Province Name (full name) Some-State:Mi
Locality Name (eg, city) :Milano
Organization Name (eg, company) Internet Widgits Pty Ltd:MIAAZIENDA Srl
Organizational Unit Name (eg, section) :MIAAZIENDA Team
Common Name (eg, YOUR name) :www.MIOSERVER.it
Email Address :indirizzodiposta@miodominio.it

Se, come me, la odiate potete togliere la pass phrase dal certificato ssl:

#cp /usr/local/apache/conf/server.key /usr/local/apache/conf/server.key.bak
#openssl rsa -in /usr/local/apache/conf/server.key.bak -out /usr/local/apache/conf/server.key

Verificare il corretto path dei file .key e crt appena creati nel file /usr/local/apache/conf/extra/httpd-ssl.conf (eventualmente correggete il path)
Ora editiamo il file /usr/local/apache/conf/extra/httpd-vhosts.conf
Nel nostro esempio conterrà:


ServerAdmin indirizzodiposta@miodominio.it
DocumentRoot "/usr/local/apache/htdocs"
ServerName www.MIOSERVER.it
ErrorLog "logs/www.MIOSERVER.it-error_log"
CustomLog "logs/www.MIOSERVER.it-access_log" combined env=!dontlog
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

RewriteEngine on
RewriteLog logs/www.MIOSERVER.it.rewrite.txt
RewriteLogLevel 4

Editiamo il file /usr/local/apache/conf/extra/httpd-ssl.conf
Nel nostro esempio va editata la seguente parte:


# General setup for the virtual host
DocumentRoot "/usr/local/apache/htdocs"
ServerName www.MIOSERVER.it
ServerAdmin indirizzodiposta@miodominio.it
ErrorLog "/usr/local/apache/logs/www.MIOSERVER.it-443-error_log"
TransferLog "/usr/local/apache/logs/www.MIOSERVER.it-443-access_log"
RewriteEngine on
RewriteLog logs/www.MIOSERVER.rewrite.txt
RewriteLogLevel 0



Editiamo il file /usr/local/apache/conf/extra/httpd-dav.conf

IL CONTENUTO DEL FILE DOVRA' ESSERE ESATTAMENTE QUESTO A PARTE IL PATH DEI FILES DavLockDB E AuthUserFile che vanno adattati a seconda del caso:

#
# Distributed authoring and versioning (WebDAV)
#
# Required modules: mod_dav, mod_dav_fs, mod_setenvif, mod_alias
# mod_auth_digest, mod_authn_file
#

# The following example gives DAV write access to a directory called
# "uploads" under the ServerRoot directory.
#
# The User/Group specified in httpd.conf needs to have write permissions
# on the directory where the DavLockDB is placed and on any directory where
# "Dav On" is specified.

DavLockDB /usr/local/apache/var/DavLock

Alias /webdav /usr/local/webdav


SSLRequireSSL
DAV On
Order Allow,Deny
Allow from all

AuthType Basic
AuthName "WebDAV Restricted"
AuthUserFile "/usr/local/apache/webdavuser"
Require user webdav



#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash. This fixes a
# problem with several clients that do not appropriately handle
# redirects for folders with DAV methods.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully


Creare la dir /usr/local/webdav e settarne i permessi:

#mkdir
/usr/local/webdav
#chown -R daemon:staff /usr/local/webdav
#chmod -R 744
/usr/local/webdav

Creare l'utenza webdav:

#cd /usr/local/apache/bin
#./htpasswd -c /usr/local/apache/webdavuser webdav

Creare la dir /usr/local/apache/var e settare i permessi:

#mkdir /usr/local/apache/var
#chmod -R 744 /usr/local/apache/var
#chown -R daemon:staff /usr/local/apache/var

Ora possiamo startare apache:

#/usr/local/apache/bin/apachectl start

Verifichiamo Apache via web:

http://www.MIOSERVER.it
https://www.MIOSERVER.it

Verifichiamo webdav lanciando konqueror e scrivendo la seguente URL:
webdavs://www.MIOSERVER.it/webdav
AUTENTICARSI CON L'UTENTE WEBDAV E PROVARE A CREARE DIRECTORY DI TEST

Verifichiamo php creando nella dir /usr/local/apache/htdocs il file testphp.php dentro al quale scriviamo:



// Show all information, defaults to INFO_ALL
phpinfo();

// Show just the module information.
// phpinfo(8) yields identical results.
phpinfo(INFO_MODULES);

?>

Con il nostro browser apriamo la seguente pagina:

http://www.MIOSERVER.it/testphp.php

Se visualizzeremo correttamente le proprietà della nostra versione di php abbiamo terminato l'installazione del nostro server apache.