MailServer IMAP/POP3/SMTP(SSL) + ASPAM/postGREY

Questa guida intende descrivere come installare e configurare un semplice server di posta Imap/pop3/smtp con auth ssl e antispam+postgrey su linux (archlinux).
Cominciamo col generare i certificati che useremo per le autenticazioni:

cd /etc/ssl/certs & openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt
openssl rsa -in mail.key -out mail.key & mv mail.key /etc/ssl/private

Assicuriamoci che l’utenza di sistema che mapperemo con quella per l’email appartenga al gruppo “mail” e cominciamo con le installazioni:

pacman -S postfix procmail dovecot spamassassin
configuriamo spamassassin:
groupadd -g 5001 spamd
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd
chown spamd:spamd /var/lib/spamassassin

tuniamo un po’ abbassando ad 1 il valore del parametro max-children (default=5), cio’ ci fara risparmiare parecchia ram:
vi /etc/conf.d/spamd

SAHOME=”/var/lib/spamassassin/”
SPAMD_OPTS=”-c –max-children 1 –username spamd -H ${SAHOME} -s ${SAHOME}spamd.log –pidfile /var/run/spamd.pid”

Configuriamo adesso DOVECOT per l’ IMAPssl e il pop3dssl con:
vim /etc/dovecot/dovecot.conf

protocols = imaps pop3s

disable_plaintext_auth = yes
log_timestamp = “%b %d %H:%M:%S ”

#ssl_disable = no

#i nostri certificati precedentemente creati
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key

mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
#pop3_client_workarounds =
}

auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
user = root
socket listen {
client {
path = /var/run/dovecot/auth-client
user = postfix
group = postfix
mode = 0660
}
}
}

Passiamo adesso alla configurazione di POSTFIX, (

cd /etc/postfix/

) cominciamo dal file principale:
vi main.cf


# Paths
queue_directory = /var/spool/postfix
daemon_directory = /usr/lib/postfix
command_directory = /usr/sbin
mail_owner = postfix
# Domain settings
myhostname = mail.nostrodominio.com
myorigin = nostrodominio.com
mydestination = $myhostname, localhost.$mydomain, localhost
# Timeout settings and other limits
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# SMTP settings
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination,
#postgrey
check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client

# Network settings
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# Email and mailbox settings
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = miodominio.com eventualealtrodominio.org
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0

# Misc
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP banner_che_vogliamo
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +

Mappiamo adesso utenza sys/utenza email inserendo le informazioni opportune con:
vi /etc/postfix/virtual


utenteemail@dominiomio.com utentesistema@localhost
utente2mail@altrodominio.org utentesistema2@localhost
#etc.

lanciamo adesso il comando:

postmap /etc/postfix/virtual

alliniamo adesso a spamassassin postfix configurando il suo vero motore principale:
vi master.cf e aggiungiamo/modifichiamo


smtp inet n – n – – smtpd
-o content_filter=spamassassin
spamassassin unix – n n – – pipe
user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Configuriamo spamassassin:
vi /etc/mail/spamassassin/local.cf

rewrite_header Subject *****SPAM*****
required_score 3
report_safe 0 #1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Diciamo adesso a procmail come istruire le emails marchiate da spamassassin:
vi /etc/procmailrc


DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/
:0:
* ^X-Spam-Status: Yes
.Junk/

Postgrey:
yaourt -S postgrey
configuriamo con
vi /etc/conf.d/postgrey


POSTGREY_TYPE=”inet”
POSTGREY_HOST=”127.0.0.1″
POSTGREY_PORT=”10030″
POSTGREY_SOCKET=”/var/spool/postfix/private/postgrey”
POSTGREY_OPTS=”–delay=60″

Infine creiamo la Maildir per l’utente:

cd ~utente
umask 077
mkdir -p Maildir/{cur,new,tmp}
mkdir -p Maildir/.Drafts/{cur,new,tmp}
mkdir -p Maildir/.Sent/{cur,new,tmp}
mkdir -p Maildir/.Trash/{cur,new,tmp}
chmod -R 0700 Maildir
chown -R utente:users *

Riavviamo adesso tutti i servizi legati al mail server

/etc/rc.d/postgrey start
/etc/rc.d/spamd start
/etc/rc.d/dovecot start
/etc/rc.d/postfix start

..e configuriamoci i nostri clients di posta.

Be the first to comment - What do you think?  Posted by admin - 24/06/2010 at 11:40 am

Categories: Unix   Tags:

AutoTrace UserTrigger Oracle (appunti grezzi)

SQL> CREATE OR REPLACE TRIGGER trace_logon
2 after logon on database
3 begin
4 if ( sys_context(‘USERENV’, ‘SESSION_USER’) in (‘N00b1′, ‘Noob2′))
5 then
6 execute immediate ‘alter session set timed_statistics=true’;
7 execute immediate ‘alter session set max_dump_file_size=10000′;
8 execute immediate ‘alter session set tracefile_identifier=”Noobs”;
9 execute immediate ‘alter session set events ”10046 trace name context forever, level 12”’;
10 end if;
11 end;
12 /

SQL> CREATE OR REPLACE TRIGGER trace_logoff before logoff on database
2 begin
3 if ( sys_context(‘USERENV’, ‘SESSION_USER’) in (‘N00b1′,’Noob2′))
4 then
5 execute immediate ‘alter session set events ”10046 trace name context off”’;
6 end if;
7 end;
8

PS:
tkprof $ORACLE_BASE/diag/rdbms/prod/prod/trace/*Noobs….* $ORACLE_HOME/*Noob….*.out sys=no print=10 sort=fchela

Be the first to comment - What do you think?  Posted by admin - 27/05/2010 at 5:25 pm

Categories: oracle   Tags:

Rebuild index oracle (appunti grezzi)

#!/bin/sh
#rebuilder script
#trova indici e ricostruisce
#Tempesta Piergiorgio 06/05/2010
. /home/oracle/.env11g
SCRIPT_DIR=/home/oracle/Tempesta
/home/oracle/app/product/11.2.0/bin/sqlplus -s /nolog < set feed off pages 1000 lines 120 echo off verify off
connect system/"password"
spool ${SCRIPT_DIR}/allIndex.sql
select 'ALTER INDEX "' || table_owner ||'"."'|| index_name || '" REBUILD;' from all_indexes;
spool off
EOF
/bin/sed /TABLE_OWNER/d allIndex.sql > allIndex2.sql
/bin/sed /———–/d allIndex2.sql > allIndex3.sql
/home/oracle/app/product/11.2.0/bin/sqlplus -s /nolog< connect SYSTEM/"password"
spool ${SCRIPT_DIR}/risultato.out select to_char(sysdate,'DD/MM/YYYY HH24:MI:SS') from dual;
@${SCRIPT_DIR}/allIndex3.sql
select to_char(sysdate,'DD/MM/YYYY HH24:MI:SS') from dual;
spool off
EOF
exit 0

Be the first to comment - What do you think?  Posted by admin - 06/05/2010 at 12:08 pm

Categories: oracle   Tags: , , , , , , ,

Logging centralizzato e sicuro

Se volete anche voi risparmiare qualche migliaio di € , evitando l’acquisto di costose appliance che fanno più o meno la stessa cosa, questo sistema di logging centralizzato, che ho ideato un annetto fa circa, dovrebbe rispondere fedelmente alle direttive del decreto sulle “misure e accorgimenti prescritti ai titolari dei trattamenti effettuati con strumenti elettronici relativamente alle attribuzioni delle funzioni di amministratore di sistema” del 27 novembre 2008 – (G.U. n. 300 del 24 dicembre 2008).

L’aspetto fondamentale che questo sistema dovrà esaudire è cio’ che viene prescritto nel capitolo 4.5:
sulla “Registrazione degli accessi”
Devono essere adottati sistemi idonei alla registrazione degli accessi logici (autenticazione informatica) ai sistemi di elaborazione e agli archivi elettronici da parte degli amministratori di sistema. Le registrazioni (access log) devono avere caratteristiche di completezza, inalterabilità e possibilità di verifica della loro integrità adeguate al raggiungimento dello scopo di verifica per cui sono richieste.”

Il sistema infatti si occuperà di delegare verso un unico server tutti gli accessi degli amministratori (root per macchine UNIX/LINUX e administrator su Domain controller e/o servers Windows ) della vostra rete, utilizzando un syslog centralizzato e un sistema di memorizzazione a scelta tra:
- i piu costosi devices WORM (Write Once Read Many);
- il gratuito UDF (anche lui scrivibile una sola volta come sui sistemi WORM…. anzi in realtà il 99% dei device WORM usano proprio UDF eheheh );
- ISO9660 magari incapsulandolo in una comunissima immagine ISO;
- o addirittura il performantissimo e almeno per me “nuovo” NILFS (che uso ultimamente sulle /etc dei miei servers linux) , un filesystem a snapshot continui ( http://www.nilfs.org/en/ – “NILFS is a log-structured file system supporting versioning of the entire file system and continuous snapshotting which allows users to even restore files mistakenly overwritten or destroyed just a few seconds ago.”);
Il tutto “accompagnato” magari da un bel HASH corrispondente ;)

Partiamo subito con qualche specifica:
Il sistema potrà essere composto da un normalissimo pc i386 (non servono grossi requisiti hardware) con installata una qualsiasi distribuzione linux totalmente hardenizzata..
io per ulteriore sicurezza ho utilizzato un kernel 2.6.27-10 patchato con grsecurity/pax in modo da limitare (attraverso apposite ACL) perfino le operazioni di root (quando avro’ tempo magari vi parlero’ di grsec :D ) e non ho lasciato, nessun servizio in ascolto (ovviamente nemmeno sshd).
Il servizio di logs centralizzato è servito dal demone syslog che riceve sulla porta 514 UDP i logs delle autenticazioni
da tutte le macchine del nostro CED (nel mio caso gli os maggiormente usati: tru64, hpux e windows).
Il file di configurazione del syslog centralizzato sarà quindi:

#
# /etc/syslog.conf
#

*.emerg *
*.err /var/log/errors
kern.* /var/log/kernel
authpriv.* /var/log/auth
mail.* /var/log/mail
*.!err;mail,kern.none /var/log/messages
auth.info /var/log/SERVERSlogs/auth.info
# Log everything to vc12
# *.* /dev/vc/12

# End of file

In questo post in merito alla fase della memorizzazione dei logs utilizzero’ il filesystem Iso9660 incapsulato in un immagine ISO (inalterabile nel contenuto come vuole il decreto) e sopratutto “depositata” corrispondentemente ad un HASH (ho usato SHA256).

[Piu' avanti, in merito alla memorizzazione dei logs, se avro' tempo magari vi descrivero' altri metodi utilizzando per esempio UDF, WORM o sopratutto NILFS....]

Tale filesystem è stato scelto sia per la sua particolare caratteristica “WORM” ( Write Once Read Many ) sia per la sua compatibilità a sistemi operativi diversi sia ,non meno, alla possibilità di organizzare ogni 6 mesi o prima (come descrive il decreto stesso) una masterizzazione su CD/DVD..
(Io ho preferito utilizzare le immagini ISO ma potremmo perfettamente scrivere direttamente sul DVD senza passare per le ISO utilizzando il già citato UDF e considerando che per aggiungere dati ad un dvd contente altri dati possiamo usare il comando:

# growisofs -M /dev/dvd /tmp/file_da_aggiungere

;) )

..ecco gli scripts che opportunamente inseriti in crontab si occuperanno di fare cio’ che ho descritto:
(PS: occupatevi di crearvi prima le directory :P )

#!/bin/bash
chattr -i -R /root/StoricoLogs
mv /var/log/SERVERSlogs/auth.info /root/StoricoLogs/complauth.info
egrep ‘(dmin|root)’ /root/StoricoLogs/complauth.info > /root/StoricoLogs/`date +%Y%h%d_%H%M`
shasum /root/StoricoLogs/`date +%Y%h%d_%H%M` > /root/StoricoLogs/hashlog`date +%Y%h%d_%H%M`
rm /root/StoricoLogs/complauth.info
chattr +i -R /root/StoricoLogs/*
/etc/rc.d/syslogd restart

questo catalogherà i logs ricevuti su syslog, li filtrerà (prenderà tutto cio’ che riguarda l’auth di utenti root e administrator) e infine creerà un HASH corrispondente allo STEP attuato, riavviando successivamente syslog..

#!/bin/bash
chattr -i /root/StoricoLogs/*
mkisofs -input-charset=utf-8 -J -l -V “`date +%Y%h%d`_Log” -o /root/IsoLogs/`date +%Y%h%d`.iso /root/StoricoLogs/
rm /root/StoricoLogs/*
rm /root/auth

Quest’altro produrrà l’ISO corrispondente allo “STEPlogs” in corso utilizzando come “etichetta” la data/orario di produzione e cancellando successivamente le tracce in modo da ricominciare con un nuovo STEP successivo.

Passiamo adesso alla configurazione dei Client da dove prelevare i logs:
ovviamente @Logserver è l’host corrispondente al nostro serverlogs (inserite la corrispondenza host->ip sul file /etc/hosts oppure nello script inserite @ip)

HPUX 11.x o Linux:

# @(#)B11.23_LR
#
# syslogd configuration file.
#
# See syslogd(1M) for information about the format of this file.
#
mail.debug /var/adm/syslog/mail.log
*.info;mail.none /var/adm/syslog/syslog.log
*.alert /dev/console
*.alert root
*.emerg *
auth.info @logserver

Tru64 4*:

#
# @(#)$RCSfile: syslog.conf,v $ $Revision: 4.1.8.1 $ (DEC) $Date: 2000/10/19 19:13:52 $
#
#
# syslogd config file
#
# facilities: kern user mail daemon auth syslog lpr binary
# priorities: emerg alert crit err warning notice info debug
kern.debug /var/adm/syslog.dated/kern.log
user.debug /var/adm/syslog.dated/user.log
mail.debug /var/adm/syslog.dated/mail.log
daemon.debug /var/adm/syslog.dated/daemon.log
auth.debug /var/adm/syslog.dated/auth.log
auth.info;auth.debug @logserver
*.info;syslog.debug /var/adm/syslog.dated/syslog.log
lpr.info /var/adm/syslog.dated/lpr.log

msgbuf.err /var/adm/crash/msgbuf.savecore

kern.debug /var/adm/messages
*.alert;kern.debug /dev/console
*.emerg *

e infine lo “zoccolo duro” ehhmmm scherzo :P WINDOWS:
Per windows (nel mio caso 2003 server e) dovremmo trovare un buon prodotto in grado di “tradurre”
il sistema dei logs microsoft (EVENTLOGS) per il nostro sistema (SYSLOG)..
esistono diverse possibilità, io ho optato per questa: https://engineering.purdue.edu/ECN/Resources/Documents/UNIX/evtsys
installatelo e configuratelo seguendo queste semplicissime istruzioni http://eventlog-to-syslog.googlecode.com/files/Readme_4.1.rtf ;)

il sistema è pronto per l’uso date la passwd di root al vostro incaricato e ditegli di cambiarla:
da questo momento solo lui, sarà in grado di visualizzare/conservare (ma non modificare) i logs accedendo esclusivamente fisicamente alla console della macchina..
io ho installato una GUI minimale (lxkde) e un frontend di masterizzazione (k3b o brasero) per rendergli le operazioni piu’ semplici ;)
ciao!

Be the first to comment - What do you think?  Posted by admin - 10/02/2010 at 4:37 pm

Categories: Unix   Tags: , , ,

DRBD e Heartbeat

Dopo le esperienze con i prodotti commerciali di HP e SUN per i filesystem condivisi, l’alta disponibilità, clusters, LB etc. etc. (nel mio caso: service guard, vpars, fs veritas, ldoms e altre diavolerie in ambito HPUX e Sun SOLARIS..) ritorno con piacere alla reatà che preferisco di linux e del software open-source e sopratutto alla facilità ed immediatezza della tastiera/console abbandonando almeno per un po’ :P quelle maledette freccette, i drags and drops, le caselline introvabili e le acrobazie del mouse su quei costosissimi e sempre uguali web_services_java_based che fanno tutto e di più..

apparte le mie paranoie digitali quindi :P cominciamo subito con lo scegliere cosa usare per condividere ai nodi del nostro cluster un unico filesystem..

per realizzare cio’ ho optato per DRBD (dovrebbe essere l’acronimo di distribuited
replicated block device”)..praticamente non è altro che un RAID1 (un mirror)
tra due dispositivi di rete: il suo lavoro è quello di propagare dati da un nodo all’altro(sincronizzare praticamente)..

Partizioniamo su ogni nodo la “parte” che dedicheremo al nostro sistema (non vi dico come si fa, lo sapete già questo) questa partizione verà “letta” dal DRBD che abbiamo installato sul nodo e verà cosi creato il device /dev/drbd*..
lo stesso DRBD poi, attraverso il suo file di configurazione /etc/drbd.conf stabilirà se scrivere o meno sul device in questione (questo in base ai criteri del nodo, se questo è primario allora potrà montare il device in +w).

Per avere una più affidabile configurazione del nostro cluster sarà meglio utilizzare 2 schede di rete ridondanti per ogni nodo, per farlo basterà abilitare il modulo “bonding” del kernel (trovate il modulo sotto “NEtwork device” nel menuconf del kernel) e quindi per ogni nodo del cluster dare:

#modprobe bonding {attiviamo il modulo del kernel linux per il bonding}
#ifconfig bind0 “ip” up {attiviamo l’interfaccia di bonding}
#ifenslave bond0  eth0 eth1 {creiamo il channel bonding nel nostro nodo}

..creeremo quindi anche uno script che faccia il tutto ad ogni riavvio della macchina
in /etc/rc.d/net.bond0 configurando anche /etc/rc.d/ifenslave
(i path ovviamente possono variare a secondo della distribuzione linux che usate ;)

perfetto, dando adesso per scontato che abbiate “fisicamente” predisposto il cluster
[cavo cross tra le schede di rete] [poi vedremo anche di usare un cavo seriale tra
le due porte seriali ;) ] e partizionato le 2 porzioni di fs dedicate a DRBD su ogni nodo.

Configurate DRBD [/etc/drbd.conf] seguendo il solito file di configurazione di esempio
e create quindi il famoso device con:

#mknod -m 0760 /dev/drbd0 b 147 0

avviamo il servizio:

#/etc/rc.d/drbd start

montiamo adesso sul primo nodo il device come master:

#drbdadm — –do-what-I-say primary shared

in questa maniera il device è già su ed è possibile,
dal nodo primario, montare su /shared la nostra partizione condivisa con DRBD..
ovviamente se volete potrete anche utilizzare LVM sui due nodi creando il volume
corrispondente al device di DRBD /dev/drbd0 su ogni macchina del cluster.

per poter gestire adesso il failover del nostro servizio nel nostro cluster useremo Heartbeat:
prima di tutto configuriamo sui due nodi, seguendo il solito esempio, il file ha.cf

## /etc/ha.d/ha.cf
keepalive 1
deadtime 20
warntime 3
initdead 20
serial /dev/ttyS0
bcast eth1
auto_failback yes
node host_del_nodo1
node host_del_nodo2
crm no

successivamente configuriamo /etc/ha.d/haresources sui due nodi inserendo le risorse che migreremo tra le due macchine (quindi nel nostro caso l’unico servizio per il failover è quello di drbd):

hostnodo1 drbddisk::shared script_avvio_lvm Filesystem::/dev/drbd0::/shared0::fs_scelto

(se non lo avete fatto: attivate il supporto a watchdog del kernel e create il corrispondente device:

#mknod /dev/watchdog c 10 130 )

per una maggiore sicurezza infine nel file /etc/ha.d/authkeys impostiamo la crittografia dei dati
tra i nodi:

## /etc/ha.d/authkeys
auth 1
1 sha HeartbeatPassword

diamo i permessi:

# chmod 600 /etc/ha.d/authkeys

e infine riconfiguriamo l’altro nodo con le stesse impostazioni oppure
piu semplicemente:

#scp /etc/ha.d/authkeys root@nodo2:/etc/ha.d/

prima di concludere il tutto vi consiglio un breve periodo di test ed infine un buon tuning per
una piu’ appropiriata scelta dei deadtimes di heartbeat e di tutti gli altri parametri e/o dei filesystem per le partizioni di drdb ;)

PS: Appena avro’  tempo scrivero’ qualche altro appunto in merito alla possibilita’ del load-balancing su linux

utilizzando un unico host con LVS e i nodi linux-director ;)

Saluti! :)

Be the first to comment - What do you think?  Posted by admin - 26/11/2008 at 8:12 am

Categories: Unix   Tags: , , , , ,

un mirror LVM su HPUX (appunti grezzi)

creiamo lvm per i due dischi: c5t0d1 e c5t0d0

- pvcreate /dev/rdsk/c5t0d1

- pvcreate /dev/rdsk/c5t0d0

- mkdir /dev/vg01

- mknod /dev/vg01/group -c 64 0×010000

- vgcreate vg01 /dev/dsk/c5t0d1 /dev/dsk/c5t0d0

..creiamo adesso un LV con lx4Mb =50×4 = 200Mb

- lvcreate -l 50 -n mirror vg01

..creiamo adesso il mirror

- lvextend -m 1 /dev/vg01/mirror

- lvdisplay /dev/vg01/mirror

..inizializziamo LV e montiamolo

- newfs /dev/vg01/mirror

su fstab inseriamo quindi:

/dev/vg01/mirror /hd2mirror vxfs delaylog 0 2

Be the first to comment - What do you think?  Posted by admin - 03/04/2008 at 4:25 am

Categories: Unix   Tags: , , , ,

Prove tecniche qemu/KVM & Zeroshell-1.0.beta7

KVM mette a disposizione estensioni per ottimizzare le virtualizzazioni sia su CPU Intel-vt che AMD-v. Il tutto consiste in un modulo kernel, kvm.ko, che fornisce le direttive base e un modulo specifico per il processore in uso, kvm-intel.ko o kvm-amd.ko.

In particolare ho voluto emulare Zeroshell net services una nuova piccola distribuzione per server e dispositivi embedded configurabile ed amministrabile via web tramite un browser..

vorrei fare connettere la nostra macchina virtuale con zeroshell nella mia LAN ed evitare di fare routing col portatile, decido di utilizzare quindi la macchina reale come proxy arp:

modprobe tun
tunctl -t tap0
chmod 666 /dev/net/tun
brctl addbr br0
ifconfig eth0 10.0.2.2 promisc
brctl addif br0 eth0
dhclient br0
brctl addif br0 tap0
ifconfig tap0 10.0.2.2 up
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
route add -host 10.0.2.2 dev tap0
arp -Ds 10.0.2.2 eth0 pub

..in questa maniera abbiam creato un bridge br0 e abbiamo associato la nostra interfaccia di rete fisica eth0 diventata così porta logica del bridge (per il nostro caso non necessita di alcuna assegnazione particolare..)

successivamente abbiamo assegnato un ip (nel caso particolare attraverso dhclient) della nostra lan per la “nuova” interfaccia della macchina reale.

Passiamo adesso a qemu-kvm e lanciamo quindi la nostra ZeroShell e vediamo come decidere per lei in modo che si interfacci attraverso il nostro bridge..

Tramite questo script switcheremo sull’ interfaccia di rete virtuale la macchina emulata:

#!/bin/sh

echo “Executing /etc/ifupScript…”
echo “Bringing up $1 for bridged mode…”
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo “Adding $1 to br0…”
sudo /usr/sbin/brctl addif br0 $1
sleep 2

quindi..

ricordiamoci i moduli: modprobe kvm kvm_intel;

..poi creiamo un img raw per contenere (nel caso in cui volessimo installare zeroshell su hd) il sistema operativo emulato… ed io mi tengo veramente largo e decido per 1 giga:

qemu-img create /root/Zeroshell 1G

e infine lanciamo il livecd di Zeroshell attraverso qemu specificando architettura, memoria ,device e il boot della macchina emulata:

qemu-kvm -M pc -m 512 -cdrom /root/ZeroShell-1.0.beta7.iso -hda /root/Zeroshell -net nic,vlan=0,ifname=tap0,script=/etc/ifupScript -monitor pty -boot d
una volta partito il sistema emulato dobbiamo ovviamente configurare almeno la rete..nel mio caso, userò solo dhclient:

zeroshell-qemu1.jpg

..in questa maniera, adesso, dalla LAN a cui son connesso col portatile chiunque potrà provare Zeroshell specialmente attraverso il proprio browser sul tool di amministrazione:

zeroshell-qemu2.jpg

attraverso questa comoda ed elegante interfaccia è possibile configurare con successo (ho provato quasi tutto il possibile con esito più che positivo):

  • server RADIUS (con gestione chiavi di cifratura per Wireless 802.11b, 802.11g e 802.11; wpa e wpa2; e instradare da server radius dietro le piu svariate direttive (autenticazioni, mac acl e altro) su VLAN 802.1Q assegnata ad un essid. (ho già in mente di comprare una nano px e installare la versione zeroshell per compact flash.. e farci un bel mini sistema embedded.. )
  • Captive Portal per il supporto del web login su reti wireless e wired. ( avete presente gli HotSpot ? :P );
  • Gestione del QoS (Quality of Service) e traffic shaping per il controllo del traffico.
  • VPN host-to-lan.VPN lan-to-lan in tunnel SSL/TLS, con supporto per VLAN 802.1Q.
  • Router con route statiche e dinamiche;Bridge 802.1d con protocollo Spanning Tree per evitare loop anche in presenza di percorsi ridondati;
  • Firewall Packet Filter e Stateful Packet Inspection (SPI) con filtri applicabili sia in routing sia in bridging su tutti i tipi di interfaccia di rete comprese le VPN e le VLAN;Controllo mediante Firewall e Classificatore QoS del traffico di tipo File sharing P2P; NAT;TCP/UDP port forwarding (PAT) (vps ? ;) ;
  • Server DNS multizona e con gestione automatica della Reverse Resolution in-addr.arpa;
  • Server DHCP multi subnet (con gestione dei mac address)
  • Virtual LAN 802.1Q (tagged VLAN) applicabili sulle interfacce Ethernet, sulle VPN lan-to-lan, sui bonding di VPN e sui bridge composti da interfacce Ethernet, VPN e bond di VPN;
  • Client PPPoE per la connessione alla WAN tramite linee ADSL, DSL e cavo;
  • Client DNS dinamico che permette la rintracciabilità su WAN anche quando l’IP è dinamico (ddclient, no-ip etc..)
  • Gestione dinamica del record dns MX per l’instradamento SMTP della posta elettronica;
  • Server e client NTP (Network Time Protocol);
  • Server syslog;
  • Autenticazione Kerberos 5 mediante un KDC integrato e cross autenticazione tra domini;Autorizzazione LDAP, NIS e RADIUS;Autorità di certificazione X.509 per l’emissione e la gestione di certificati elettronici;
  • Integrazione tra sistemi Unix e domini Windows Active Directory in un unico sistema di autenticazione e autorizzazione mediante LDAP e Kerberos 5 cross realm authentication.

L’interfaccia è ancora incompleta perchè mancano un po’ di features fighe che ci vedo.. ma guardando sul sito ufficiale pare che ci stiano lavorando su bene e le prospettive sono più che buone :) Per quello che c’è su adesso va più che bene.. poi che aggiungere? Comoda e veloce anche quando virtualizzata dietro qemu-kvm.

Be the first to comment - What do you think?  Posted by admin - 24/10/2007 at 7:15 am

Categories: Unix   Tags:

OpenVpn [archivio]

OpenVPN è una soluzione Open Source che crea tunnel point-to-point TCP over UDP (evitando cosi’ attacchi di tipo spoofing) permettendo la creazione di VPN in userspace e scambio di chiavi e dati crittografati con algoritmo blowfish.

Il mio caso è quello di una vpn tls (con certificati ssl) a stella(connessione da un server centrale verso diversi clients), una vera e propria intranet attraverso una rete pubblica (internet).

Per prima cosa ho creato i certificati con openssl:

openssl genrsa -out ca.key
openssl req -new -key ca.key -out rich.ca
openssl x509 -req -in rich.ca -signkey ca.key -out ca.cert
openssl genrsa -out server.key
openssl req -new -key server.key -out rich.ser
openssl x509 -req -in rich.ser -CA ca.cert -CAkey ca.key -CAcreateserial -out ser.cert
openssl dhparam -out dh.pem 1024

dopo i due file di configurazione per la vpn,

quello del lato server:

dev tap #device utilizzato (da abilitare nel kernel)
proto tcp-server #protocollo di connessione
ifconfig 192.168.0.1 255.255.0.0 # IP del server all interno della vpn
tls-server # Specifica il tipo di server ssl (unico possibile per vpn a stella)

key ca.key
dh dh.pem
ca ca.cert
cert ca.cert
local 10.0.0.149 # IP locale “reale” della macchina che ospita il server vpn

lport 5002 #porta di comunicazione
verb 4 #verbosità dei logs

mode server #modalità vpn
duplicate-cn

;ifconfig-pool 192.168.0.10 192.168.0.50 #possibilità di ip automatico (tipo dhcp) allinterno del range descritto (io avevo necessita di ip statici indi non ho usato questa funzionalità)
mssfix 1450
client-to-client #i clients si vedono tra loro

;push “ping 10″
;push “ping-restart 60″
;ping 10
;ping-restart 120

comp-lzo #compressione dei dati

.. e quello del client:

remote *.*.*:* #ip publico remoto

rport 5002 #porta
proto tcp-client #protocollo

tls-client #modalita del client ssl
dev tap #device usato (anche qui da compilare nel kernel)

ifconfig 192.168.2.9 255.255.0.0 #ip statico per la vpn (nel caso di indirizzamento dinamico dhcp non serve questa linea)

key ca.key
ca ca.cert
cert ca.cert

pull
comp-lzo #compressione dati
verb 4 #verbosità dei logs

fatto questo basterà far partire la vpn dal server e dai rispettivi client

cd /etc/openvpn

#(path dei file di configurazione ma sopratutto delle chiavi e certificati)

openvpn –config filediconfigurazione.ovpn –daemon

questa vpn è stata provata con client su diverse piattaforme (anche windows)

Be the first to comment - What do you think?  Posted by admin - 26/09/2006 at 10:18 am

Categories: Unix   Tags:

FreeBSD & IPFW (2 parte)[archivio]

Oltre IPFW, di cui abbiamo già detto qualcosa prima, esiste anche il
demone natd, questa applicazione consente di effettuare le più avantate
tecniche di NAT (Network Address Translation) e di PAT (Port Address
Translation)…

..intanto ricompiliamo il kernel abilitando i seguenti moduli:
(compilare un kernel freebsd se siete già abituati con linux è veramente
semplice)
piazzate un file di configurazione su /usr/src/sys/i386/conf magari
riprendendo quello del kernel custom e aggiungendo
#
options IPFIREWALL # firewall
options IPFIREWALL_VERBOSE # abilita il logging
#options IPFIREWALL_DEFAULT_TO_ACCEPT # autorizza tutto per default
options IPDIVERT # divert sockets
#

chiamiamo MYKERNEL il nuovo file di conf del kernel ecompiliamo con:
# /usr/sbin/config MYKERNEL
andiamo poi nel dir di compilazione di Freebsd
# cd compile/MYKERNEL
e via:
# make depend
# make
# make install

adesso possiamo attivare anche il demone natd editando il solito
/etc/rc.conf così:
# impostazioni di rete
defaultrouter=”200.201.202.254″
gateway_enable=”YES”
hostname=”sticazzi.dominio.com”
ifconfig_xl0=”inet 200.201.202.140 netmask 255.255.255.248″
ifconfig_xl1=”inet 192.168.0.254 netmask 255.255.255.0″
#
# impostazione del firewall ed del nat
firewall_enable=”YES” # abilita firewalling
firewall_type=”OPEN” # script standard /etc/rc.firewall
natd_enable=”YES” # abilita il demone natd
natd_interface=”xl0″ # interfaccia che esegue il forwarding
natd_flags=”-f /etc/natd.conf” # configurazioni addizionali per il natd

La prima parte è quella espressamente dedicata al networking: viene
definito il gateway, si abilitata la regola che consente il
packetforwarding e vengono impostate le interfaccie di rete del nostro
sistema.
la seconda parte riguarda l’abilitazione del firewall, l’abilitazione del
demone natd, la definizione dell’interfaccia di rete che eseguirà la
traduzione degli indirizzi con la definizione del file che conterrà le
impostazioni principali per il demone natd.
Nel nostro esempio stiamo trattando un sistema con 2 interfacce di rete
(dual-homed host), dove l’interfaccia xl0 fa parte della rete internet
pubblica mentre l’interfaccia xl1 fa parte di una rete privata.
L’interfaccia pubblica è quella che traduce gli indirizzi e le porte
eseguendo il NAT (Network Address Translation) o il PAT (Port Address
Translation). Per definire le regole che verranno utilizzate dal demone
natd e per dare corso alla traduzione degli indirizzi e delle porte,
dovremo creare il file di configurazione del natd /etc/natd.conf:
interface xl0
use_sockets yes
same_ports yes

Nel file viene definita l’interfaccia di rete che eseguirà il NAT, le
istruzioni use_socket yes e same_ports yes sono fondamentali per il
corretto funzionamento di alcuni protocolli applicativi (layer7) come
l’FTP (File Transfer Protocol) e l’IRC (Internet relay chat).
adesso potete anche riavviare la vostra macchina
In queste condizioni operative la base di protezione è nulla. Lo script
/etc/rc.firewall consente accesso a tutti i servizi che sono attivi sulla
macchina eseguendo il solo demone natd.
Eccovi un
esempio di
firewall dual-homed con regole stringenti e sicure
. Verrà eseguito il NAT,
il PAT e verranno bloccati tutti gli accessi da reti e da host non
autorizzati inclusa la tecnica di mascheramento degli indirizzi ip
denominata ipspoofing.

Be the first to comment - What do you think?  Posted by admin - 01/07/2006 at 10:12 am

Categories: Unix   Tags:

FreeBSD & IPFW (1 parte)[archivio]

FreeBsd come altri sistemi operativi fornisce diversi strumenti per filtrare e gestire
pacchetti..il mio preferito che è anche quello nativo per eccellenza è IPFW….dicevo nativo..si
perchè IPFW viene compilato nel kernel e consente di utilizzare FreeBSD sia come strumento per il
filtraggio dei pacchetti (Packet Filter Firewall) che come strumento di analisi dei pacchetti che
lo attraversano grazie alle sue capacità statefull inspection..
Un firewall di tipo packet filter è fatto solitamente per l’ esclusiva gestione di sistemi dedicati
alla protezione di reti e necessita di una memoria RAM molto limitata..
Gli statefull inspection invece richiedono diversa memoria per via del lavoro di “analisi e
gestione” all’ interno delle molteplici interfacce di rete istallate nel sistema (guarda
/etc/rc.conf)….

..Per avviare le funzioni di firewalling non serve ricompilare il Kernel, dobbiamo solo aggiungere
le seguenti righe al file /etc/rc.conf perchè si inizializzi il firewall all avvio di sistema:

firewall_enable=”YES”
firewall_type=”/usr/local/etc/firewall.conf”
#

dopo di questo date un occhiata alle pagine di manuale di IPFW e configurate il vostro firewall
(in /usr/local/etc/firewall.conf
ecco un esempio base

appena avrò il tempo vi scriverò la seconda parte di questa miniguida parlandovi del filtraggio
avanzato con IPFW e del NAT su FreeBSD (/etc/natd.conf).

Be the first to comment - What do you think?  Posted by admin - 30/06/2006 at 10:15 am

Categories: Unix   Tags:

Next Page »