Esta es una descripción detallada sobre
como instalar y configurar un server basado en Ubuntu 6.06 (Dapper Drake) y
sucesivas versiones, que ofrezca todos los servicios necesarios para un ISP y
Hosters (web server con soporte de SSL, mail server (con SMTP-AUTH y TLS!),
Servidor de DNS, Servidor de FTP, Servidor de MYSQL, POP3/IMAP, Cuotas,
Firewall, etc.).
Usaremos el siguiente software:Wer Server: Apache 2.0
Base de Datos: Mysql 5.0
Mail Server: Postfix
Servidor DNS: BIND9
Servidor FTP: proftpd
POP3/IMAP: Usaremos el formato Maildir, por lo tanto instalaremos el Courier-POP3/Courier/IMAP
Al finalizar la instalacion y
configuracion tendremos un sistema eficiente, y si queres podes instalar el
panel de control de webhosting gratuito ISPConfig (corre “out of the box)
La direccion IP de mi sistema en estetutorial es 192.168.0.100, y mi hostname es server1.example.com.
Quiero decirte que esta no es la unica
manera se configurar un systema de este tipo. Hay muchas formas de lograr esto,
pero esta es la configuracion que elegi. No doy ninguna garantia de que funcione
en tu sistema.
1 -Requisitos
Para instalar el sistema necesitas lo
siguiente:
El cd de Ubuntu 6.06 LTS Server (La lista
de mirrors esta disponible en esta URL:
http://www.ubuntu.com/download
Una conexión a Internet.
2 – El sistema Base
Inserta el CD de Ubuntu e tu cdrom y
bootea la PC desde el cd, Elegi instalar al disco duro, no use la opcion de
instalar un servidor LAMP porque me gusta tener total control sobre lo que
instalo en mi sistema.
La instalacion comienza y tenes que elegir el idioma que prefieras:
Luego la ubicación:
Elegir la distribucion del teclado:
El instalador checkeara el CD de
instalacion, tu hardware, y configurara la red con DHCP si hay un DHCP en la
red:
Ingresa el hostname. En este ejemplo, mi
sistema se llama server1.example.com, por eso ingrese server1
Ahora hay que particionar el disco duro.
Voy a crear una particion grande (con el punto de montaje en /) y una pequeña
particion para SWAP, por eso seleccione borrar el disco entero
Configura el reloj de tu sistema:
Crea un usuario, por ejemplo el usuario Administrador con el nombre de usuario admin:
Ahora el sistema base es instalado:
EL cargador GRUB se instala:
La instalacion del sistema base esta
finalizada. Saca el CD de la lectora y dale a continuar, para reiniciar el
sistema:
Vamos al siguiente paso…
3- Habilitar la cuenta de root
Despues de reiniciar, podes ingresar al sistema con tu usuario creado anteriormente (admin). Debido a que debemos ejecutar todos los pasos de este tutorial como el usuario root, debemos habilitar dicha cuenta ahora.
Ejecuta:
y elegi una contraseña para el root, luego de esto podemos pasar a root jecutando el comando:
e ingresando la contraseña que elegimos anteriormente
4-Instalando el servidor SSH
Ubuntu no instala el OpenSSH por defecto, por lo tanto lo haremos ahora, ejecuta el siguiente comando:
apt-get install ssh openssh-server |
El sistema te pedira que insertes el CD de instalacion.5 –Configurando la red
Debido a que el instalador de Ubuntu configuro nuestro sistema para obtener la configuracion de red via DHCP, tenemos que cambiarlo, porque un server necesita tener una IP estatica (nota de Korven: es posible correr un server con una IP dinamica, usando un servicio tipo NOIP o DynDNS, se hablara de ello en otro tutorial)
Edita el archivo /etc/network/interfaces y
ajustalo a tus necesidades (en este ejemplo yo use la IP 192.168.0.100)
vi /etc/network/interfaces |
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1 |
Luego, reinicia la red:
/etc/init.d/networking restart |
Luego edita /etc/hosts
mi archivo de configuracion hosts quedo asi:
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts |
Ahora ejecuta:
los dos comandos deben devolver server1.example.com , si no es asi, reinicia el sistema con el comando:
luego de reiniciar ejecuta nuevamente:
Ahora, ambos comandos deben devolver como resultado server1.example.com
A partir de ahora podes usar un cliente
SSH , por ejemplo el PuTTY y conectarte desde tu estacion de trabajo a tu
servidor Ubuntu y continuar los pasos siguientes de este tutorial.
6 – Editar/etc/apt/sources.list y actualiza tu instalacion de Ubuntu
Edita /etc/apt/sources.list y comenta (conel # adelante) el CD y habilita algunos de los otros repositorios.
Mi archivo se ve asi:
#
# deb cdrom:[Ubuntu-Server 6.06 _Dapper Drake_ - Release i386 (20060531)]/ dapper main restricted
#deb cdrom:[Ubuntu-Server 6.06 _Dapper Drake_ - Release i386 (20060531)]/ dapper main restricted
deb http://de.archive.ubuntu.com/ubuntu/ dapper main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ dapper main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ dapper-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ dapper-updates main restricted
## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://de.archive.ubuntu.com/ubuntu/ dapper universe
deb-src http://de.archive.ubuntu.com/ubuntu/ dapper universe
## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://de.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu dapper-security main restricted
deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted
deb http://security.ubuntu.com/ubuntu dapper-security universe
deb-src http://security.ubuntu.com/ubuntu dapper-security universe |
Luego ejecuta estos dos comandos, en este orden:
apt-get update apt-get upgrade |
7 -Instalando algun software.
Ahora instalaremos algunos paquetes que necesitaremos mas adelante, ejecuta:
apt-get install binutils cpp cpp-4.0 fetchmail flex gcc gcc-4.0 libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev linux-kernel-headers lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ |
(este comando debe ir todo de una sola vez)
8 – Cuotas
Para instalar las cuotas, ejecuta:
Edita /etc/fstab para que quede como este ejemplo (yo agregue ,usrquota,grpquota a la particion /dev/sda1) (punto de montaje / , tu dispositivo deberia ser /dev/hda1 o similar).
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro,usrquota,grpquota 0 1
/dev/sda5 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 |
Para habilitar las cuotas, ejecuta este comando:
touch /quota.user /quota.group
chmod 600 /quota.*
mount -o remount /
quotacheck -avugm quotaon -avug
|
9 - Servidor DNS
Ejecuta:
por razones de seguridad, queremos correr BIND en entorno chroot, haciendo los siguientes pasos:
Ejecuta:
Edita el archivo /etc/default/bind9 para que el daemon se ejecute como el usuario sin privilegios bind, enjaulado en /var/lib/named modifica la linea OPTIONS=” –u bind” para que lea OPTIONS=”-u bind –t /var/lib/named” .
Ejecuta:
En mi archivo quedo asi:
OPTIONS="-u bind -t /var/lib/named"
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes |
Crea los directorios necesarios en /var/lib
Ejecuta:
mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run |
Luego movemos el directorio de configuracion de /etc a /var/lib/named/etc Ejecuta:
mv /etc/bind /var/lib/named/etc |
Crea un symlink al nuevo directorio de configuracion desde la vieja ubicación (para evitar problemas si actualizamos BIND en el futuro) Ejecuta:
ln -s /var/lib/named/etc/bind /etc/bind |
Hace los dispositivos null y random, y arregla permisos de los directorios. Ejecuta:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind |
Necesitamos modificar el script de arranque /etc/init.d/sysklogd de syslokd para que siga logueando los mensajes importantes al system log, modificamos la linea: SYSLOGD="-u syslog" para que lea: SYSLOGD="-u syslog -a /var/lib/named/dev/log"
Ejecutamos para esto:
Mi archivo quedo asi:
[...]
SYSLOGD="-u syslog -a /var/lib/named/dev/log"
[...] |
Reiniciamos el daemon de logueo:
Ejecuta:
/etc/init.d/sysklogd restart |
Iniciamos BIND y chequeamos /var/log/syslog en busca de errores.
Ejecuta:
10- MySQL
Para instalar MySQL ejecutamos:
apt-get install mysql-server mysql-client libmysqlclient12-dev |
Queremos que MySQL escuche en todas las interfaces, no solo en localhost, por lo tanto editamos el archivo /etc/mysql/my.cnf y comentamos la linea bind-address = 127.0.0.1 con el siguiente comando:
la linea quedo asi:
[...]
#bind-address = 127.0.0.1
[...] |
Luego reiniciamos el servidor MySQL ejecutando:
/etc/init.d/mysql restart |
Chequeamos que la red esta habilitada, ejecutamos:
y como resultado deberiamos ver algo como:
tcp 0 0 *:mysql *:* LISTEN 4997/mysqld |
Ejecutamos:
mysqladmin -u root password tuclave
mysqladmin -h server1.example.com -u root password tuclave |
para poner una clave al usuario root (de otra manera cualquiera podria acceder a la base de datos)
11- Postfix con SMTP-AUTH y TLS
Para instalar Postfix con SMTP-AUTH y TLS seguimos los siguientes pasos, Ejecuta:
apt-get install postfix libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail |
Te hara dos preguntas, contesta de la siguiente manera:
General type of configuration? ß Internet Site Mail name? ß server1.example.com |
Luego ejecuta:
De nuevo, te hara algunas preguntas, contesta asi:
General type of configuration? <-- Internet Site
Where should mail for root go <-- NONE
Mail name? <-- server1.example.com
Other destinations to accept mail for? (blank for none) <-- server1.example.com, localhost.example.com, localhost
Force synchronous updates on mail queue? <-- No
Local networks? <-- 127.0.0.0/8
Use procmail for local delivery? <-- Yes
Mailbox size limit <-- 0
Local address extension character? <-- +
Internet protocols to use? <-- all |
Luego, ejecuta:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf |
A continuacion creamos el certificado para el TLS, ejecuta:
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650 |
Luego configuramos el Postfix para TLS, ejecuta:
postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'
postconf -e 'myhostname = server1.example.com' |
El archivo /etc/postfix/main.cf deberia verse asi:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = server1.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server1.example.com, localhost.example.com, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom |
Reiniciamos Postfix, ejecuta:
/etc/init.d/postfix restart |
La autenticacion se hace con saslauthd, tenemos que cambiar algunas cosas para que ande bien, debido a que Postfix corre enjaulado en /var/spool/postfix necesitamos hacer lo siguiente, ejecuta:
mkdir -p /var/spool/postfix/var/run/saslauthd |
Ahora tenemos que editar /etc/default/saslauthd para activar saslauthd, borra el # de delante de START=yes y agrega la linea PARAMS=”-m /var/spool/postfix/var/run/saslauthd –r”
Ejecuta:
vi /etc/default/saslauthd |
Mi archivo quedo asi:
# This needs to be uncommented before saslauthd will be run automatically
START=yes
PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"
# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"
MECHANISMS="pam" |
Tambien tenemos que editar /etc/init.d/saslauthd y cambiar la ubicación del archivo PID Cambiando el valor de PIDFILE a /var/spool/postfix/var/run/${NAME}/saslauthd.pid
Ejecutamos:
en la linea PIDFILE mi archivo quedo asi:
[...]
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
[...] |
Ahora iniciamos saslauthd, ejecuta:
/etc/init.d/saslauthd start |
Para ver si SMTP-AUTH y TLS funcionan correctamente, ejecutamos el siguiente comando:
Una vez establecida la conexión con el mail server escribimos:
Si ves las siguientes lineas, todo anduvo bien:
Para volver al shell ejecuta:
12 - Courier-IMAP/Courier-POP3
Ejecuta lo siguiente para instalar
Courier-IMAP/Courier-IMAP-SSL (para imap en puerto 993) y
Courier-POP3/Courier-POP3-SSL (para POP3 en puerto 995)
apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0 |
Te hara dos preguntas, contesta asi:
Create directories for web-based administration ? <-- No
SSL certificate required <-- Ok |
Si no queres usar ISPConfig, configura Postfix para netregar los emails al Maildir* del
usuario, ejecuta:
postconf -e 'home_mailbox = Maildir/'
postconf -e 'mailbox_command ='
/etc/init.d/postfix restart |
(*nota: No tenes que hacer esto si pensas usar ISPConfig en tu sistema, ISPConfig crea la configuracion necesaria usando recetas de procmail. Por favor asegurate de habilitar Maildir en Management - Server - Settings - Email en la interface web de ISPConfig.
13 - Apache/PHP5
Ahora vamos a instalar el Apache, ejecutamos:
apt-get install apache2 apache2-common apache2-doc apache2-mpm-prefork apache2-utils libapr0 libexpat1 ssl-cert |
Ahora instalamos el PHP5:
apt-get install autoconf automake1.4 autotools-dev libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php-pear php5-ldap php5-mhash php5-mysql php5-mysqli php5-snmp php5-sqlite php5-xmlrpc php5-xsl php5-imap php5-mcrypt php5-pspell |
El sistema te hara la siguiente pregunta:
Continue installing libc-client without Maildir support? <-- Yes
|
Luego editamos el archivo /etc/apache2/apache2.conf
vi /etc/apache2/apache2.conf |
Y cambiamos la linea DirectoryIndex a:
[...]
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
[...]
|
Editamos /etc/apache2/ports.conf y agregamos Listen 443:
vi /etc/apache2/ports.conf |
|
Listen 80
Listen 443
|
|
|
|
|
Ahora tenemos que habilitar algunos modulos de Apache (SSL, rewrite, suexec,e include) Ejecutamos:
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include |
Recargamos la configuracion del Apache:
/etc/init.d/apache2 force-reload |
13.1 Deshabilitamos PHP Global (o no)
(Si no pensas instalar ISPConfig, pasa por alto esta seccion)
En ISPConfig, se configura el PHP por casa sitio individualmente, por ejemplo se
peude especificar que sitio puede correr PHP y cual no, esto solo funciona si
PHP esta deshabilitado globalmente, debido a que de otra manera todos los sitios
web serian capaces de ejecutar PHP, sin importar lo que hayas especificado en
ISPConfig
Para deshabilitar PHP Global, editamos /etc/mime.types y comentamos las lineas del
php (application/x-httpd-php):
vi /etc/mime.types |
|
[...]
#application/x-httpd-php phtml pht php
#application/x-httpd-php-source phps
#application/x-httpd-php3 php3
#application/x-httpd-php3-preprocessed php3p
#application/x-httpd-php4 php4
[...]
|
|
|
|
|
Editamos /etc/apache2/mods-enabled/php5.conf y comentamos las siguientes lineas:
vi /etc/apache2/mods-enabled/php5.conf |
IfModule mod_php5
# AddType application/x-httpd-php .php .phtml .php3
# AddType application/x-httpd-php-source .phps
/IfModule
|
Reiniciamos Apache:
/etc/init.d/apache2 restart |
14 - Proftpd
Para instalar Proftpd, ejecutamos:
apt-get install proftpd proftpd-common ucf |
El sistema te hara una pregunta:
Run proftpd from inetd or standalone? <-- standalone
|
Por razones de seguridad, tenes que agregar las siguientes lineas a: /etc/proftpd.conf
(gracias a Reinaldo Carvalho; mas información disponible aca:
http://proftpd.linux.co.uk/localsite/Userguide/linked/userguide.html)
Ejecutamos:
Y agregamos:
[...]
DefaultRoot ~
IdentLookups off
ServerIdent on "FTP Server ready."
[...]
|
Luego reiniciamos el Proftpd:
/etc/init.d/proftpd restart |
15 - Webalizer
Para instalar webalizer, ejecutamos:
apt-get install webalizer |
16 –Sincronizando el reloj del sistema
Es una buena idea sincronizar el reloj con un servidor de hora NTP (network time protocol) a traves de internet. Ejecuta:
apt-get install ntp ntpdate |
Luego, para poner en hora el sistema consultando la hora en time.nist.gov * ejecuta:
Otros servidores pueden ser: time.windows.com tick.nap.com.ar
17 - Instalar algunos modulos de Perl que necesita SpamAssassin (viene conISPConfig)
Ejecuta:
apt-get install libhtml-parser-perl libdb-file-lock-perl libnet-dns-perl |
18 - ISPConfig
La configuracion del server esta completa, y si queres podes instalar ISPConfig en el mismo. Por favor chequea la instalacion de ISPConfig en:
http://www.ispconfig.org/manual_installation.htm
18.1 Una nota sobre SuExec
Si queres correr Scripts CGI bajo suExec, necesitas especificar como el directorio home /var/www para los sitios web creados por ISPConfig ya que Ubuntu's suExec esta compilado con /var/www como Doc_Root.
Ejecuta:
/usr/lib/apache2/suexec2 -V |
La salida mostrara algo como esto:
Para configurar /var/www para el directorio home de los sitios, durante la
instalacion de ISPConfig hace lo siguiente, cuando te pregunte por el modo de
instalacion selecciona modo experto.
Luego, durante la instalacion se te preguntara si el directorio por defecto /home/www
debe ser el directorio donde ISPConfig creara los sitios, contesta que no e
ingresa /var/www como el directorio home para los sitios..
>
19 - Links
Ubuntu:
20 -Creditos:
Version original en ingles:
Autor: Falko
Timme <ft [at] falkotimme [dot] com>
Traduccion y edicion en español: Korven Dallas korven.dallas arroba yahoo.com