Blog, GNU/Linux

Postfix+Amavisd-new+Spamassasin+Clamav

Since I had to disable the PTR check in Postfix at Binware because in Spain 90% of mail servers are badly configured and they were all rejected, and now we have lot of spam.

So I decided to install Spamassassin and Clamav to detect and reject some of this spam.

First of all, we need to install needed packages:

apt-get install spamassassin amavisd-new clamav clamav-daemon

We will begin configuring amavisd-new, the configuration files are at /etc/amavis/conf.

In file 20-debian_defaults I changed the header that will be added to each mail processed:

$X_HEADER_LINE = "AntiSpam/Antivirus Scanner at $mydomain";

We need to activate antispam and antivirus check in amavis, this is found in file 15-content_filter_mode. We need to uncomment @bypass_virus_checks_maps and @bypass_spam_checks_maps. The file will look like this:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # ensure a defined return

By default, amavis will use the hostname for $mydomain, but thats not what I want, so I edited file 05-domain_id, setting $mydomain to binware.org

use strict;

# $mydomain is used just for convenience in the config files and it is not
# used internally by amavisd-new except in the default X_HEADER_LINE (which
# Debian overrides by default anyway).

$mydomain = 'binware.org';

# amavisd-new needs to know which email domains are to be considered local
# to the administrative domain.  Only emails to "local" domains are subject
# to certain functionality, such as the addition of spam tags.
#
# Default local domains to $mydomain and all subdomains.  Remember to
# override or redefine this if $mydomain is changed later in the config
# sequence.

@local_domains_acl = ( ".$mydomain" );

1;  # ensure a defined return

Next step is to add the clamav user to the amavis group, so that amavis can call clamav

adduser clamav amavis

Now it’s time to configure postfix. The first file to edit is main.cf:

# Amavisd-new
content_filter = amavis:[127.0.0.1]:10024

And in master.conf add this at the end of file:

amavis unix - - - - 2 smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o smtpd_bind_address=127.0.0.1

That’s all! Now restart services:

/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/amavis restart
/etc/init.d/postfix restart
Blog, GNU/Linux

Multiples proyectos con trac y svn usando HTTPS

Voy a explicar como montar el sistema de gestion de proyectos trac y subversion usando https para trabajar con subversion. Yo lo he montado en una debian usando apache2, asi que lo primero que necesitamos es instalar todo lo necesario

apt-get install trac subversion apache2 subversion libapache2-svn libapache2-mod-python2.3

Una vez descargado e instalado creamos el certificado necesario para usar tanto trac y subversion bajo https. Entra en el directorio /etc/apache2/ssl y ejecuta lo siguiente:

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Ahora ya tenemos listo los certificados, asi que ahora solo nos queda configurar el apache. Yo he creado un trac.dominio.ext y un svn.dominio.ext para hacer esto, pero esto va a gusto de cada uno. Yo como uso dos subdominios distintos, lo tengo en ficheros separados.

Primero editaremos el trac, asi que creamos el fichero /etc/apache2/sites-available/trac.domain.ext

NameVirtualHost *:443

#Activate SSL
SSLEngine on

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

#VirtualHost Servername
ServerName trac.domain.ext
ServerAdmin [email protected]

DocumentRoot /opt/projects/trac

#Authentication

AuthType Basic
AuthName "Trac"
AuthUserFile /opt/projects/.htpasswd
Require valid-user

#Trac
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /opt/projects/trac/
PythonOption TracUriRoot /



El fichero no necesita demasiada explicacion, simplemente le decimos que active el SSL, que pida autentificacion y cargamos el modulo del trac y le especificamos el path de donde estan todos nuestros proyectos.

Ahora vamos con el fichero /etc/apache2/sites-available/svn.domain.ext

NameVirtualHost *:443

#Activate SSL
SSLEngine on

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

#VirtualHost Servername
ServerName svn.domain.ext
ServerAdmin [email protected]

DocumentRoot /opt/projects/svn

DAV svn

#Authentication
AuthType Basic
AuthName "Subversion"
AuthUserFile /opt/projects/.htpasswd
Require valid-user

#Subversion
SVNParentPath /opt/projects/svn
SVNListParentPath on
SVNAutoVersioning On



#Subversion permission file
AuthzSVNAccessFile /opt/projects/svn/.htpasswd


Es importante separar el AuthzSVNAccessFile de ya que sino no listara todos los proyectos en http://svn.domain.ext/ por problemas de permisos.

Ahora que tenemos estos ficheros listos, hay que activar el modulo de ssl en el apache2 y los dos dominios.

vi /etc/apache2/ports.conf

Listen 443

cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/dav.load .
ln -s /etc/apache2/mods-available/dav_svn.load .
ln -s /etc/apache2/mods-available/mod_python.load .
ln -s /etc/apache2/mods-available/ssl.conf .
ln -s /etc/apache2/mods-available/ssl.load .

cd /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/svn.domain.ext 001-svn.domain.ext
ln -s /etc/apache2/sites-available/trac.domain.ext 001-trac.domain.ext

Ahora vamos a crear un proyecto de prueba

mkdir -p /opt/projects/svn
mkdir -p /opt/projects/trac
svnadmin create /opt/projects/svn/NewProject
trac-admin /opt/projects/trac/NewProject initenv
Project Name [My Project]> NewProject
Database connection string [sqlite:db/trac.db]>
Path to repository [/var/svn/test]> /opt/projects/svn/NewProject
Templates directory [/usr/share/trac/templates]>
Creating and Initializing Project
Configuring Project
trac.repository_dir
trac.database
trac.templates_dir
project.name
Installing default wiki pages
..............

Ahora creamos los ficheros de acceso de usuarios.

[Repositorio:/Path]
user = [ [r[w]]]

Por ejemplo, queremos que el user1 pueda leer y escribir, el user2 leer, y anonymous nada (no deberia haber anonymous ya que el htpasswd no los deja pasar, pero siempre viene bien protegerse por si acaso), el fichero quedaria asi

[NewProject:/]
user1 = rw
user2 = r
* =

Ahora ya tenemos todo listo, podemos instalar el modulo TracWebAdmin para que sea mas facil la administracion del trac.

Blog, Misc

BiNWaRe RaDi0 ahora en p0l0.binware.org

Tenia la radio antes en un servidor en managed y se ve que han vendido la empresa o algo y el servidor esta caido… y segun he leido a la mayoria de gente les estan dando el server formateado… asi que he decidido montar aqui la radio hasta que encuentre otro server mejor… podeis escucharla aqui

Blog, GNU/Linux

CAcert.org

El otro dia descubri CAcert.org que intenta ser un sitio para verificar certificados, pero de forma gratuita. Asi que me puse a firmar el certificado que uso en la web de binware para que este verificado por CAcert.org

Cree un mismo certificado para web/pop3/smtp/ftp, no se si esto es seguro o no, pero por ahora lo he echo asi, si no es seguro, que alguien me corrija.

Lo primero que hice fue crearme una cuenta en CAcert.org

Luego me cree mi certificado y lo deje sin contraseña para que no me la pida cada vez que arranque el servicio:

openssl genrsa -des3 -out pass.key 2048
openssl rsa -in pass.key -out server.key

Despues creamos el CSR (Certificate Signing Request) para poder enviarselo a CAcert.org

openssl req -new -nodes -key server.key -out server.csr

Despues hacemos login en CAcert.org y añadimos una cuenta de mail y un dominio. Una vez echo esto hay que añadir un certificado de servidor y ahi es donde pastearemos nuestro csr, en pocos segundos tendremos nuestro certificado firmado. Guardamos el certificado como server.crt.

Con esto ya tenemos para el apache

SSLCertificateFile    /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key

Para courier necesitamos un .pem asi que lo creamos de la siguiente manera:

cat server.key server.crt > server.pem
openssl gendh >> server.pem

Luego modificamos /etc/courier/pop3d-ssl y apuntamos el certificado a /etc/ssl/server.pem

TLS_CERTFILE=/etc/ssl/server.pem

Modicamos proftpd.conf

TLSRSACertificateFile   /etc/ssl/server.pem
TLSRSACertificateKeyFile        /etc/ssl/server.key

Para activar el TLS en postfix, primero necesitamos el root CA de CAcert.org

wget https://www.cacert.org/certs/root.crt -O cacert.pem

y luego hay que modifcar lo siguiente en /etc/postfix/main.cf

smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/server.key
smtpd_tls_cert_file = /etc/ssl/server.pem
smtpd_tls_CAfile = /etc/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Ahora podemos decir que binware esta certificado por CAcert ;P

CAcert Secured Site
Updated: 2006-10-18 16:21:34
Blog, GNU/Linux

Postfix+VDA

Esto era una de las cosas que tenia pendiente de poner en el server hosting, y ultimamente ha habido mucha gente que superaba de mucho el limite, asi que me he puesto a configurar e instalar postfix con el parch VDA para poner limite de tamaño a los buzones.

Como tengo ahora mismo todo configurado con los paquetes de debian, he pensado que lo mejor es parchear los propios paquetes de debian, y aqui estan los pasos que he seguido:

  1. Instalo todas las utilidades necesarias para poder compilar y crear el paquete de postfix.
    apt-get install build-essential dpkg-dev fakeroot debhelper po-debconf dpatch lsb-release libdb4.3-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient15-dev libsasl2-dev libpq-dev
    
  2. Nos bajamos el codigo fuente del postfix (Conviene hacerlo en /usr/src ya que lo descarga en el directorio actual)
    apt-get source postfix
    
  3. Nos bajamos el ultimo parche disponible para nuestra version de http://web.onda.com.br/nadal/
    wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.2.8-vda.patch.gz
    
  4. Parcheamos el codigo
    gunzip postfix-2.2.8-vda.patch.gz
    patch -p1
    
  5. Compilamos
    dpkg-buildpackage
    
  6. Instalamos los paquetes generados
    dpkg -i postfix_2.2.8-9_i386.deb
    dpkg -i postfix-mysql_2.2.8-9_i386.deb
    
  7. Configuramos postfix
  1. main.cf
    virtual_mailbox_limit_override=yes
    #Use IMAP compatible files
    virtual_maildir_extended=yes
    #Create maildirsize files
    virtual_create_maildirsize=yes
    #Bounce mails overquota
    virtual_overquota_bounce=yes
    #MySQL info to get user quota
    virtual_mailbox_limit_maps=mysql:/etc/postfix/quota.cf
    #Count Trash
    virtual_trash_count=yes
    virtual_trash_name=.Trash
    
  2. quota.cf
    user=mail
    password=mailpassword
    dbname=mail
    table=users
    hosts=localhost
    where_field=address
    select_field=quota
    
  • Configuramos courier
    1. authmysqlrc
      MYSQL_QUOTA_FIELD quota
      

    Updated (2007/07/12): La nueva URL del patch VDA es http://vda.sourceforge.net/