0 ObjetivosEste manual os va a ayudar a montar nuestros propios servidores web privados, si buscas una manera de tener tus paginas webs alojadas en un sitio rápido, barato y gestionado por ti, no lo dudes, lanzate.
Montaremos un servidor que en el que se puedan subir archivos vía ftp y controlar remotamente por ssh.
Tendra tambien servidor de correo.
No se crearan usuarios reales para no saturar el /etc/passwd, solo se usaran virtuales en todas las cosas.
El servidor, a su vez, estará vinculado con un dominio
http://www.loquesea.comValido para personas con IP Dinámica y Fija
Nota: Este manual esta optimizado para EOL 2.0, pudiéndose ver en EOL Clasico con algunos errores en las imagenes de la seccion 1
1 Eligiendo el hardwarePlaca base y Procesador : Intel D945GCLF2D (Incluye procesador Atom 330)
La D945GCLF2D tiene un formato mini ITX. Está equipada con el procesador Intel Atom 330 de 45 nm y el chipset Intel® 945GC Express.
No consume apenas energía. Tiene un controlador grafico Intel GMA 950 y una salida VGA.
Memoria RAM : Kingston 2GB DDR2

La memoria tiene una capacidad de 2GB y va a una frecuencia de 667 MHz
Disco duro : Western Digital Caviar Black 500GB

Tiene una capacidad de 500GB, gira a una velocidad de 7200 rpm y tiene un bufer de 32MB Caché
Lector de CD y DVD : LG 16x SATA

Es un lector de CD y DVD que lee a 16x de la marca LG
Caja : Apex MI-008 (Incluye fuente de alimentación)

Es una caja para placas mini-itx, es muy económica,sus dimensiones son 22 x 30 x 13 (Todo en cm)
Incorpora una fuente de alimentación de 250W
La configuración del hardware de este pc asciende a la cantidad de 200 € aprox2 Fotitos
Fotitos durante la instalacion de debian:



3 Instalando el sistema basePrimero nos vamos a la pagina de Debian y nos descargamos una imagen de la versión estable mas actualizada para i386, en mi caso:
http://gensho.acc.umu.se/debian-cd/5.0.1/i386/iso-cd/debian-501-i386-CD-1.isoDebian 5.01La grabamos con cualquier programa grabador de imágenes.
Una vez booteado aparece la siguiente imagen, seleccionamos "Install" para comenzar la instalación

Elegimos nuestro idioma

Elegimos nuestro país

Elegimos el "idioma" del teclado

Se detecta el hardware, se cargan módulos, se detecta y configura el hardware de red para la instalación
Al acabar nos pide en el nombre del equipo

Nos pide el nombre de dominio, lo dejamos en blanco

Elegimos la zona horaria dentro de España:

Mientras se detectan los disco y comienza el particionado
Seleccionamos Guiado - Utilizar todo el disco

Seleccionamos nuestro único disco

Elegimos como va a estar el equipo configurado con relación a particiones, seleccionamos que todos los ficheros estén en una misma partición.
Esto evita, que, por ejemplo, nos falte o sobre espacio en alguna partición.

Seleccionamos que queremos escribir los cambios en el disco

Nos lo vuelve a preguntar:

Se formatea el disco y se instala el sistema base
Una vez finalizado nos pide la contraseña del administrador, la introducimos

Confirmamos la contraseña:

Nos pide el nombre real, yo lo dejo en blanco

Nos pide el nombre de usuario

La contraseña

La confirmación de la contraseña

Nos pregunta si tenemos mas CD para instalar, decimos que No

Nos pregunta si queremos usar una replica en red, decimos que Si

Seleccionamos el país de la replica

Y la replica en sí

Nos pide proxy de red, yo no uso

Se esta configurando apt, después, se instalan los programas
Nos pide la participación en unas estadísticas... Esto es cosa de cada uno, pero pienso que gracias a los desarrolladores tenemos el servidor a si que....

Nos pregunta que que programas queremos que instale, solo seleccionamos el sistema estandar, las otras cosas ya las instalaremos luego

Nos pregunta si queremos instalar Grub en el registro principal de arranque, decimos que si al no haber otros sistemas operativos ni nada que nos moleste

El instalador finaliza la instalación.
En este punto esta todo instalado, sacamos el CD

Se reinicia el sistema
En el Grub seleccionamos la primera opcion

Arranca el sistema, ya esta todo el sistema base instalado
4 Instalando y configurando el servidorTodos los comando se ejecutan desde el usuario "root"
4.1 Actualizando el sistemaEjecutamos los comando siguientes:
apt-get update
apt-get upgrade
4.2 Sincronizando el relojPara sincronizar el reloj no nos fijamos en el del despertador y lo cambiamos

, sino que los sincronizamos con NTP (Protocolo de sincronizacion de relojes por internet)
Esto se hace instalando lo siguiente:
apt-get install ntp ntpdate
4.3 Instalando Open-SSHSe ejecuta:
apt-get install ssh openssh-server
El fichero de configuración es este:
/etc/ssh/sshd_config Podeis modificar las opciones que querais, pero asi funciona perfecto.
4.4 Configurar la red sin dhcpPara que se nos asigne la misma ip dentro de la area local nesecitamos desactivar dhcp y utilizar una ip privada seleccionada, para ello modificamos el archivo /etc/network/interfaces
Para modificarlo:
nano /etc/network/interfaces
Lo dejamos tal que así:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address {La ip privada} #192.168.1.100
netmask {La mascara de red} #255.255.255.0
network {Punto minimo de ip, osea, tu ip con 0 en el ultimo apartado} #192.168.1.0
broadcast {Punto minimo de ip, osea, tu ip con 255 en el ultimo apartado} #192.168.1.255
gateway {Puerta de enlace} #192.168.1.1
Nota: Lo anterior va sin las "{" , "}"
Reiniciamos internet:
/etc/init.d/networking restart
4.5 Instalando MySQLEjecutamos lo siguiente:
apt-get install mysql-client mysql-server
4.6 Instalando y configurando servidor web--4.6.0 Lo instalamos:
apt-get install apache2 php5 phpmyadmin
--4.6.1Ahora vamos a crear servidores virtuales...
Creamos el archivo del servidor en /etc/apache2/sites-available/
nano /etc/apache2/sites-available/elnombredetusitio
Y ponemos este contenido (Sustituir cosas en negrita)
<VirtualHost *:80>
ServerName www.loquesea.com
ServerAdmin tuemail@gmail.com
DocumentRoot /var/www/loquesea
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/loquesea>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/loquesea_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/loquesea_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Ahora creamos el directorio: /var/www/loquesea
mkdir /var/www/loquesea
Ahora, ejecuta el siguiente comando:
a2ensite loquesea
Ahora puedes meter los archivos en tu directorio:
/var/www/loquesea
Puedes crear mas sitios usando el mismo procedimiento.
4.7 Instalando y configurando servidor ftpInstalamos proftpd:
apt-get install proftpd
Ahora nos metemos en mysql:
mysql -u root -p
Nos pide una contraseña, es la del usuario root, la pusimos en la instalación de mysql
Creamos una base de datos llamada ftpd:
create database ftpd;
Ahora insertamos el siguiente comando para crear un usuario diferente a root en mysql:
GRANT ALL ON ftpd TO proftpd@localhost IDENTIFIED BY "tucontraseña";
Salimos de mysql
quit
Ahora iniciamos secion en mysql con la cuenta nueva, para ello escribir:
mysql -u proftpd -p
Y escribimos la contraseña, la que pusimos en el comando anteanterior
Escribimos el siguiente comando para usar la base de datos ftpd:
use ftpd;
Creamos tablas para proftpd, introducioendo esto:
CREATE TABLE usuarios (
usuario char(12) NOT NULL,
contrasena char(100) NOT NULL,
uid int(6) default NULL,
gid int(6) default NULL,
directorio char(50) default NULL,
shell char(20) default NULL,
activa tinyint(4) default 1 )
TYPE=MyISAM;
Y despues esto:
CREATE TABLE grupos (
nombredelgrupo varchar(20) NOT NULL,
gid int(6) NOT NULL default 65534,
miembros longtext )
TYPE=MyISAM;
Ahora vamos a a /etc/proftpd.conf
nano /etc/proftpd.conf
Nos aseguramos de que estas tres cosas esten igual ( a lo mejor alguna no esta en el archivo, crearla)
AuthPAM off #Desabilitar usuarios reales
RequireValidShell off #Cualquier shell
DefaultRoot ̃ #Para que no pueda salir del home
Al final del archivo añadimos esto al final:
SqlBackend mysql #Base de datos a usar
SQLAuthTypes Backend #Modo de encriptacion
SQLAuthenticate on #Si ha que identificarse en mysql
SQLConnectInfo ftpd@localhost proftpd contrasenadeproftpd #Informacion de conexion
SQLDefaultGID 65500 #GID por defecto
SQLDefaultUID 65500 #UID por defecto
SQLMinUserGID 500 #GID mas baja
SQLMinUserUID 500 #UID mas baja
SQLGroupInfo grupos nombredelgrupo gid miembros #Tabla y campos de los grupos
SQLUserInfo usuarios usuario contrasena uid gid directorio shell #Tabla y campos de usuarios
SQLUserWhereClause "activa=1" #Indicamos cuando la cuenta esta activa (Cuando activa = 1)
SQLLogFile /var/log/proftpd_mysql.log #El directorio del log
Ahora reinicia proftpd
/etc/init.d/proftpd restart
Ahora para crear un usuario tienes que hacer lo siguiente:
Nos metemos en mysql:
mysql -u proftpd -p
Insertamos la contrseña...
Usamos la base de datos ftpd
use ftpd;
Creamos un grupo:
INSERT INTO grupos VALUES (usuariosftp, 6000, "nombre de usuarios seguidos por comas, o solo uno");
--------> En ese codigo, si quereis crear dos cuentas con nombre pepe y juan, se pone en lo de negrita: pepe, juan
Ahora creamos el usuario en si:
INSERT INTO usuarios VALUES (nombreusuario, PASSWORD(’passuser1’),5000, 6000, "/var/www/loquesea", "/bin/false", 1);
Ahora vamos al directorio donde esta "loquesea" (por terminal):
cd /var/www/
Y hacemos:
chown -R 5000:6000 loquesea
----> Son esos numero porque en la cadena esta:
-->
INSERT INTO usuarios VALUES (nombreusuario, PASSWORD(’passuser1’),5000, 6000, "/var/www/loquesea", "/bin/false", 1);
----> Tambien los pusimos
Puedes crear mas cuentas pero acuerdate de modificar tambien el grupo. Ya podemos logearnos!
4.7 Instalando y configurando servidor de correoInstalamos:
apt-get install postfix postfix-mysql dovecot-pop3d dovecot-imapd openssl
Nos logeamos en mysql como root:
mysql -u root -p
Y ponemos nuestra contraseña...
Despues cremos una base de datos:
create database mailserver;
Y un usuario:
GRANT ALL ON mailserver TO mailserver@localhost IDENTIFIED BY "contraseñamailserver";
Salimos:
quit
Y nos logeamos como el usuario que acabamos de crear:
mysql -u mailserver -p
Y ponemos la contraseña...
Usamos la base de datos mailserver:
use mailserver;
Creamos tablas:
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
) ENGINE = InnoDB;
CREATE TABLE `virtual_users` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
user VARCHAR(40) NOT NULL,
password VARCHAR(32) NOT NULL,
CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE = InnoDB;
CREATE TABLE `virtual_aliases` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
source VARCHAR(40) NOT NULL,
destination VARCHAR(80) NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE = InnoDB;
Ahora creamos archivos postfix:
--1
/etc/postfix/mysql-virtual-mailbox-domains.cfnano /etc/postfix/mysql-virtual-mailbox-domains.cf
Y este sera el interior:
user = mailserver
password = contraseñamailserver
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
Añadimos informacion a /etc/postfix/main.cf:
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Hacemos un user y un grupo:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Añadimos informacion a /etc/postfix/main.cf:
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
Volvemos a mysql:
mysql -u mailserver -p
Y ponemos la contraseña...
Usamos la base de datos mailserver:
use mailserver;
Y "vinculamos" tablas:
CREATE VIEW view_users AS
SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email,
virtual_users.password
FROM virtual_users
LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;
--2
/etc/postfix//etc/postfix/mysql-virtual-mailbox-maps.cfnano /etc/postfix/mysql-virtual-mailbox-maps.cf
Y este sera el interior:
user = mailserver
password = contraseñamailserver
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM view_users WHERE email='%s'
Añadimos informacion a /etc/postfix/main.cf:
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Y "vinculamos" tablas:
CREATE VIEW view_aliases AS
SELECT CONCAT(virtual_aliases.source, '@', virtual_domains.name) AS email,
destination
FROM virtual_aliases
LEFT JOIN virtual_domains ON virtual_aliases.domain_id=virtual_domains.id;
--3
/etc/postfix/mysql-virtual-alias-maps.cfnano /etc/postfix/mysql-virtual-alias-maps.cf
Y este sera el interior:
user = mailserver
password = contraseñamailserver
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email='%s'
--3
/etc/postfix/mysql-email2email.cfnano /etc/postfix/mysql-email2email.cf
Y este sera el interior:
user = mailserver
password = contraseñamailserver
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email='%s'
Añadimos informacion a /etc/postfix/main.cf:
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
Configuramos permisos:
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Ahora vamos a /etc/postfix/master.cf
nano /etc/postfix/master.cf
Y añadimos esto (al final del todo):
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Reiniciamos postfix:
postfix reload
Añadimos informacion a /etc/postfix/main.cf:
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
Ahora solo nos queda modificar dos archivos:
--1
/etc/dovecot/dovecot.confnano /etc/dovecot/dovecot.conf
Todo tiene que estar asi:
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
mail_location = maildir:/home/vmail/%d/%n/Maildir
mechanisms = plain login
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb static {
args = uid=7000 gid=7000 home=/home/vmail/%d/%n allow_all_users=yes
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
mail_plugins = cmusieve
global_script_path = /home/vmail/globalsieverc
}
Y hay que añadir esto (al final del todo):
namespace private {
separator = .
prefix = INBOX.
inbox = yes
}
--2
/etc/dovecot/dovecot-sql.confnano /etc/dovecot/dovecot-sql.conf
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailserver password=contraseñamailserver
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email='%u';
Reiniciamos dovecot:
/etc/init.d/dovecot restart
Permisos y tal:
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf
Ahora habilitaremos la autentificacion en smtp:
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
Ahora hacemos esto:
postconf -e mynetworks=
Creamos certificados tls:
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem \
-keyout /etc/ssl/private/postfix.pem
Le damos permisos:
chmod o= /etc/ssl/private/postfix.pem
Habilitamos el uso de tls y donde estan:
postconf -e smtpd_use_tls=yes
postconf -e smtpd_tls_auth_only=yes
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
Ahora instalamos la administracion web de nuestro correo en /var/www/panelcorreo, siguiendo las instrucciones de la pagina web del creador:
http://www.grs-service.ch/pub/grs_mminstallation.htmlLo ultimo es añadir dns mx 10 para que funcione el correo en internet, vais al panel de control de vuestro dominio, DNS, queda asi:
6 Asociar con domino http://www.loquesea.comSi tenemos IP fija, ve al punto 6.2
Si tenemos Ip Dinamica, ve al punto 6.1
6.1 No-ipVamos a la web de no-ip:
www.no-ip.com
Nos creamos una cuenta y creamos un dominio
(Creo que es muy fácil, si os liais, mirar manuales de noip)
Instalamos el programa:
apt-get install noip2
Nos pedira una serie de datos (en español) los rellenamos.
Para ejecutar noip:
noip2
-------------Si no se ejecuta al inicio:-------------------------
nano /etc/init.d/noip2
Insertamos en el archivo el siguiente scrip:
#!/bin/sh
. /lib/lsb/init-functions
log_begin_msg "Iniciando demonio DNS dinámico"
/usr/local/bin/noip2
log_end_msg $?
exit 0
Creamos un enlace simbolico:
ln -s /etc/init.d/noip2 /etc/rc2.d/S80noip2
------------------------------------------------------------
Ve al punto 6.2
6.2 Asociar dominio a ip (o no-ip)En el archivo etc/apache/httpd.conf tiene que haber virtualservers, en cualquier parte añadir esto bien relleno:
Nota: Se pueden añadir mas para mas dominios
Despues reinicia apache:
service httpd restart
Ahora lo que tienes que hacer es poner de dns la direccion de no-ip como se ve aqui:

Espero que lo entendais
7 Conclusiones finalesSi has llegado hasta aqui haciendo todo el manual te felicito
Espero que hayas podido hacer funcionar el servidor correctamente, si tienes alguna duda puedes contactarme por privado o en este mismo hilo.
Seguro que pensais que añadir usuarios a proftpd y virtual servers a apache es una tarea que os gustaria hacer via web, como el correo, estoy pensando en un scrip en php para esto, por el momento nada, mejor, asi practicais en la terminal
Este manual ha sido creado por Nicolás González Gómez, informacion sacada de documentacion oficial y la documentacion no oficial de workaround.org

Esta obra esta bajo la licencia
Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España de Creative Commons