Antes de todo quiero decir que no soy un experto en sistemas ni mucho menos, únicamente he querido recoger todos los pasos que he tenido que realizar para que un servidor esté medianamente preparado para entrar en producción. Sé que es muy mejorable, y yo mismo iré mejorándolo poco a poco, pero agradeceré vuestra ayuda si veis algún fallo :-D
Además tener en cuenta, que yo hasta ahora he utilizado en el servidor, la release 2 de OVH, que tenía el módulo preparado para añadir dominios directamente, y sin ese módulo... Me las he tenido que apañar, y creo que es interesante para los que no quieran tener ni la release 2 de OVH, ni tampoco un panel de control. Bien, allá vamos:
Índice:
1- Cambiar puerto de ssh
1a- Evitar resoluciones lentas de DNS en ssh
2-Instalar CSF (Firewall)
3-Añadir un usuario diferente de root
3a- Añadir permisos de root al nuevo usuario
4-Instalamos apache2 y librerías.
5-Instalamos Mysql, librerías y phpmyadmin
6-Cambiamos el directorio por defecto de apache2
7-Instalar webmin
8-Instalar módulo de CSF en webmin
9-IPTABLES/CSF en Proxmox
10-Añadir dominio a apache2
11-Configurar las zonas de DNS:
12- Exportar e importar base de datos.
13- Instalar un servidor de FTP. Cuentas para todos
14- Permisos en Mysql. Evitar riesgos
15-Añadir una nueva IP FailOver
1- Cambiar puerto de ssh
sudo nano /etc/ssh/sshd_config
Cambiar “port 22” por “port xxx” (xxx > 1024)
Código:
/etc/init.d/ssh restart
1a- Evitar resoluciones lentas de DNS en ssh
Cuando los servidores de DNS no funcionan bien, pueden afectar al logueo con ssh, así que lo quitamos. CSF también recomienda quitarlo.
Editamos el fichero de configuración de SSH:
Código:
sudo nano /etc/ssh/sshd_config
Y buscamos la directiva UseDNS, y tiene que quedar tal cual:
Si no existiera, la añadimos. Guardamos, y reiniciamos el servidor:
Código:
/etc/init.d/ssh restart
2-Instalar CSF
Leeme.txt :
http://www.configserver.com/free/csf/install.txt
Salidas por pantalla:
Código:
Note: The port details above are for information only, csf hasn't been auto-configured.
Don't forget to:
1. Configure the TCP_IN, TCP_OUT, UDP_IN and UDP_OUT options in the csf configuration to suite your server
2. Restart csf and lfd
3. Set TESTING to 0 once you're happy with the firewall
Adding current SSH session IP address to the csf whitelist in csf.allow:
Adding 90.162.41.1 to csf.allow only while in TESTING mode (not iptables ACCEPT)
*WARNING* TESTING mode is enabled - do not forget to disable it in the configuration
Adding system startup for /etc/init.d/lfd ...
/etc/rc0.d/K20lfd -> ../init.d/lfd
/etc/rc1.d/K20lfd -> ../init.d/lfd
/etc/rc6.d/K20lfd -> ../init.d/lfd
/etc/rc2.d/S20lfd -> ../init.d/lfd
/etc/rc3.d/S20lfd -> ../init.d/lfd
/etc/rc4.d/S20lfd -> ../init.d/lfd
/etc/rc5.d/S20lfd -> ../init.d/lfd
Adding system startup for /etc/init.d/csf ...
/etc/rc0.d/K20csf -> ../init.d/csf
/etc/rc1.d/K20csf -> ../init.d/csf
/etc/rc6.d/K20csf -> ../init.d/csf
/etc/rc2.d/S20csf -> ../init.d/csf
/etc/rc3.d/S20csf -> ../init.d/csf
/etc/rc4.d/S20csf -> ../init.d/csf
/etc/rc5.d/S20csf -> ../init.d/csf
Installation Completed
**Tenemos que configurar bien el CSF, más adelante os explico como instalar el módulo para webmin, para poder administrarlo fácilmente, y quitar el modo testing, pero hacen falta más explicaciones para depurarlo aunque sea un poco.
3-Añadir un usuario diferente de root
3a- Añadir permisos de root al nuevo usuario
Código:
visudo -f /etc/sudoers
Y añadimos al final:
Código:
miweb ALL=(ALL) ALL
4-Instalamos apache2 y librerías.
Código:
sudo apt-get install apache2
sudo apt-get install php5 libapache2-mod-php5
sudo /etc/init.d/apache2 restart
5-Instalamos Mysql, librerías y phpmyadmin
Código:
sudo apt-get install mysql-server
Nos preguntará el password que queremos
Código:
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
PhpMyAdmin: Cuando se esté instalando, primero preguntará por el password que le hemos dado a mysql, y después el password que queremos darle para la aplicación de phpmyadmin. El usuario para entrar al phpmyadmin será phpmyadmin. Aunque al final del tutorial, tenemos otro método para añadir usuarios con diferentes privilegios.
6-Cambiamos el directorio por defecto de apache2
Código:
mkdir /home/miweb
nano /etc/apache2/sites-available/default
Cambiar donde pone /var/www por /home/miweb/www
Son 2 líneas (en verde) tal como así:
Código:
DocumentRoot /home/miweb/www/
Options FollowSymLinks
AllowOverride None
/home/miweb/www/>
Options Indexes FollowSymLinks MultiViews Includes
AllowOverride all
Si váis a utilizar las funcionalidades del fichero .htaccess, no se porqué, pero en algunas versiones de apache2, no funciona si no se activa antes mediante las directivas que he dejado arriba. En concreto son
Options Includes y
AllowOverride all. Normalmente no aparece
Includes dentro de
Options, y en vez de
all está
none.
Código:
sudo /etc/init.d/apache2 restart
7-Instalar webmin
[Acordarse de cambiar el puerto por otro diferente al 10000]
7.1-Si webmin no se inicia automáticamente
En la versión 10.04 de ubuntu (imagen preparada para proxmox), si no se inicia automáticamente, podremos hacer lo siguiente.
Creamos el fichero:
Código:
nano /etc/init.d/webmin
Pegar lo siguiente:
Código:
#! /bin/sh
DEAMON=/etc/webmin/start
test -x $DEAMON || exit 0
. /etc/webmin/start
Cambiar /etc/webmin/start por la ruta correcta, si no existiera dicho servicio.
Guardarmos el archivo y salimos. CONTROL + O y CONTROL + X
Le damos permisos de ejecución:
Código:
chmod 755 /etc/init.d/webmin
Y por último, hacemos que se inicie el script automáticamente al inicio:
Código:
sudo update-rc.d webmin defaults
8-Instalar módulo de CSF en webmin
Si tenemos proxmox. Ir al paso 9, y volver.
Buscar en el menú principal “Webmin Modules”, y en “From local file: “ escribir
//etc/csf/csfwebmin.tgz
Darle a “install module”, y ya está.
Ahora podemos quitar el modo testing una vez probadas todas las configuraciones que queramos.
8.1-Autorizar IP dinámica (DynDNS)
Cuando queremos autorizar para siempre nuestra IP, en nuestro servidor, y utilizamos el servicio gratuito de DynDNS (u otro cualquiera), podemos configurarlo de la siguiente manera:
Entramos al área de administración de CSF en Webmin, y buscamos el botón "lfd Dynamic DNS", hacemos click en él, y en cuadro de texto que aparece, pegamos nuestra hostname completa:
Código:
midirección.dyndns.org
Guardamos los cambios.
Ahora vamos al fichero de configuración principal (Botón "Firewall configuration"), buscamos "DYNDNS" y ponemos cada cuantos segundos queremos que compruebe la IP de nuestro hostname. Por ejemplo, 300.
Guardamos los cambios, y reiniciamos el servicio de CSF.
9- IPTABLES/CSF en Proxmox
Cuando tenemos una imagen (Ubuntu 10.04 en mi caso) de proxmox 1.8, por defecto no funciona al 100% iptables, lo que provoca fallos de acceso al sistema cuando iniciamos el servicio de CSF. E incluso algunas imágenes, como la que yo usé, no tenía ni iptables.
En mi caso, una vez instalé iptables, cuando me puse a iniciar el servicio de CSF desde webmin, se colgaba cuando llegaba a la regla de iptables:
Código:
INVDROP tcp opt in * out * ::/0 -> ::/0 tcp flags:0x30/0x20
Así que, vamos a corregir el problema en 2 pasos.
9.1 - Instalamos iptables en la imagen VM de proxmox
Código:
sudo apt-get install iptables
9.2 - Damos permisos adecuados de IPTABLES en Proxmox.
Nos logueamos en la cuenta de proxmox y editamos el fichero de configuración vz.conf:
Código:
nano /etc/vz/vz.conf
Buscar IPTABLES y poner delante #, para comentarlo.
Debajo de #IPTABLES añadir lo siguiente:
Código:
IPTABLES="ipt_REJECT ipt_recent ipt_owner ipt_REDIRECT ipt_tos ipt_TOS ipt_LOG ip_conntrack ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat ip_nat_ftp"
Guardamos y salimos:
Código:
CONTROL + O y CONTROL + X
Reiniciamos (Parar antes las imágenes):
Código:
/etc/init.d/vz restart
Y ya podemos iniciar las imágenes.
9.3- Permitir tráfico entrante y saliente a las IP FailOver, desde internet.
Tenemos que añadir 2 reglas personalizadas de iptables, si utilizamos el Firewall CSF. Para ellos tenemos que hacer lo siguiente:
9.3.1- Editar el fichero csfpre.sh
Código:
nano /etc/csf/csfpre.sh
9.3.2- Añadimos:
Código:
iptables -A FORWARD -d IPFAILOVER -j ACCEPT
iptables -A FORWARD -s IPFAILOVER -j ACCEPT
9.3.3- Guardamos y reiniciamos el servicio CSF
Y ahora ya tendremos acceso desde internet a nuestra máquina virtual.
10-Añadir dominio a apache2
Código:
sudo nano /etc/apache2/sites-available/miweb
Pegamos y sustituimos miweb por el nombre de dominio:
Código:
NameVirtualHost *:80
ServerAdmin webmaster@miweb.com
ServerName www.miweb.com
DocumentRoot /home/miweb/www
ErrorLog /home/miweb_error_log
TransferLog /home/miweb_access_log
ServerAlias miweb.com
En la consola:
Código:
cd /etc/apache2/sites-available/
sudo a2ensite miweb
sudo /etc/init.d/apache2 reload
Desactivamos el dominio virtual por defecto
Código:
sudo a2dissite default
sudo /etc/init.d/apache2 reload
Y desactivamos el dominio virtual por defecto:
Código:
sudo a2dissite default
11-Configurar las zonas de DNS:
Como ya tenemos webmin instalado, lo utilizaremos para configurar nuestra zona. Para ello vamos al menú de servidores -> DNS Bind server
Y le damos a : Create master zone.
Lo dejamos todo por defecto, salvo el “Domain name”, que debemos poner el nombre de dominio.
En “master server”, nos pondrá el servidor DNS por defecto, lo dejamos.
Ahora vamos a la nueva zona que hemos creado, que estará debajo del menú, y tendrá una bola del mundo con nombre del dominio debajo. Una vez hemos pinchando en la bola del mundo, pinchamos en el icono “Edit Records File”, y debemos tener algo parecido a esto (Lo he modificado a mi gusto):
Código:
$ttl 38400
miweb.com. IN SOA miweb.com. root.miweb.com. (
1284760297
10800
3600
604800
38400 )
IN NS ksTUNUM.kimsufi.com.
IN NS ns.kimsufi.com.
IN A 94.23.x.x
www.miweb.com. IN CNAME miweb.com.
Gracias a este fichero, y estos datos únicamente se resoldrá la dirección
www.miweb.com y miweb.com . Si queremos más direcciones como pop3.miweb.com, tendremos que añadirlas. Y lo mismo si queremos correo, tendremos que añadir una directiva de tipo MX, tal como :
Código:
IN MX 10 mail.miweb.com.
En mi caso no me extiendo porque voy a utilizar los servidores de Gmail para el correo en mis dominios. Hay 2 formas de configurarlo, manualmente en el servidor, o bien en el proveedor de dominios que se tenga. Yo voy a utilizar la segunda forma ya que utilizo godaddy, y si por cualquier cosa se cae mi servidor, el correo seguirá funcionando, ya que los registros MX están almacenados en godaddy, y redirigen automáticamente la petición a gmail.
¡Importante! También tenemos que acceder al fichero de configuración /etc/bind/named.conf o bien /etc/bind/named.conf.options , los cuales podemos editar, haciendo click en “Edit Config File”, situado en el menú principal. Una vez estemos dentro y si aparece lo siguiente:
Código:
listen-on { 127.0.0.1; };
Debemos comentarlo de esta manera:
Código:
//listen-on { 127.0.0.1; };
Si no lo hacemos, el servidor solo escuchará peticiones desde la red local, y por tanto los dominios no se resolverán en internet.
Ahora nos vamos al menú principal, le damos al dibujo que pone “Check BIND Config”, y si no tenemos errores, a priori todo habrá funcionado corréctamente. Ahora le damos a “Stop Bind”, que está situado arriba y a la derecha, para luego darle a “Start Bind”. Así habremos reiniciado el servidor de Bind, y pondremos comprobar si nuestro dominio hace ping, al menos desde nuestro propio servidor, si es que aún no hemos cambiado las DNS en el panel de control de nuestra compañía de dominios.
Comprobamos que responde correctamente:
Código:
dig @94.23.x.x miweb.com
12- Exportar e importar base de datos.
Cuando tenemos una base de datos grande (> 10MB) se nos hará bastante tediosa subirla a través del phpmyadmin, por tanto vamos a utilizar la consola para acceder diferente al servidor de mysql.
Exportamos desde consola:
Código:
mysqldump -user -u root -p basededatos > basedatos.sql
Importamos desde consola en el nuevo servidor:
Código:
mysql -uroot -p basededatos < basedatos.sql
13- Instalar un FTP. Cuentas para todos y enjaular a los usuarios
Código:
sudo apt-get install install proftpd
En la instalación nos preguntará sobre cual es la forma en la que queremos que se inicie el servicio. Personalmente he elegido la opción 2 (Standalone), que supuestamente es más rápida aunque consume más recursos, pero podéis elegir la opción que mas os convenga.
Ahora comprobamos que funciona correctamente:
Código:
sudo /etc/init.d/proftpd restart
Lo editamos:
Código:
sudo nano /etc/proftpd/proftpd.conf
Buscamos la línea:
Código:
# Use this to jail all users in their homes
#DefaultRoot ~
Debéis desmarcar el #, de DefaultRoot si queréis que cada usuario tenga acceso únicamente a su directorio personal. Por ejemplo, usuario tendrá acceso a /home/usuario únicamente. Esto se llama enjaular ;-)
Si lo dejáis tal cual está por defecto en el fichero, todos los usuarios podrán entrar a la raíz del sistema, cosa nada recomendable, incluso aunque solo haya un usuario en el servidor, ya que el ftp es muy utilizado para realizar ataques de todo tipo.
Reiniciamos:
Código:
sudo /etc/init.d/proftpd restart
Cabe decir, que una vez está instalado, proftpd accederá al fichero /etc/passwd para comprobar el login de usuarios, por tanto no tenemos que añadir nuevos usuarios, a menos que queramos añadir nuevos. Pero esto lo haremos con la herramienta de toda la vida de linux:
adduser usuario
Si queremos añadir algún usuario que no tenga permisos para acceder por ssh, pero si por ftp, podemos hacer:
Código:
sudo useradd usuariodeftp -p pass -d /home/usuariodeftp -s /bin/false
Permisos para la carpeta www. Si hemos creado la carpeta con el usuario root, no podremos escribir dentro de ella accediendo por ftp, con el nuevo usuario que hemos añadido, así que debemos de cambiar el dueño del directorio de la siguiente manera:
Código:
chown miweb:miweb /home/miweb/www
Y lo anterior es válido para cualquier otra carpeta que hayamos creado.
14- Permisos en Mysql. Evitar riesgos
+Permisos restringidos para la web
En mi caso, quiero tener un usuario que no pueda borrar tablas, únicamente hacer selects, inserts, updates y deletes, el cual será utilizado para la web. De esta forma, podremos evitar que nos borren la tabla entera, o la base d datos entera.
Antes añadimos usuario especial que solo lo utilizaremos para la bdd:
Código:
sudo useradd -M -s /bin/nologin miweb1
sudo passwd miweb1
Nos conectamos al servidor de mysql:
Y una vez logueados en mysql, escribiremos:
Código:
GRANT SELECT, INSERT, DELETE, UPDATE ON bdd.* TO 'miweb1'@'localhost' IDENTIFIED BY 'password';
15-Añadir una segunda IP FailOver en una Máquina virtual
+Para añadir una nueva IP FailOVer tendréis que seguir los siguientes pasos:
15.1- Añadirla/contratarla desde el panel de control.
Para ello seguir esta guía, aunque realmente es muy fácil:
http://guias.ovh.es/IpFailover
15.2- Añadir la segunda IP en la configuración de la máquina virtual en
Proxmox.
Entrando al panel de control de proxmox (Máquina HOST principal), accediendo a la configuración de la VM pertinente, y añadiendo a continuación de la IP FailOver de la VM , la segunda. De modo que aparecería en la pestaña
RED, lo siguiente:
Dirección de red (venet)
Dirección IP: IPFailOverPrincipalVM, SegundaIPFailOver
Darle al botón de guardar y ya.
15.3- Añadir una segunda tarjeta de red virtual en la máquina virtual
Para ello:
Código:
nano /etc/network/interfaces
Y tengo:
Código:
# Auto generated venet0 interface
auto venet0
iface venet0 inet static
address 127.0.0.1
netmask 255.255.255.255
broadcast 0.0.0.0
up route add default dev venet0
auto venet0:0
iface venet0:0 inet static
address SegundaIPFailOver
netmask 255.255.255.255
broadcast 0.0.0.0
Así que añado al final:
Código:
auto venet0:1
iface venet0:1 inet static
address SegundaIPFailOver
netmask 255.255.255.255
broadcast 0.0.0.0
Y ejecuto:
Código:
/etc/init.d/networking restart
15.4- Añadir reglas a CSF
Ahora solo falta añadir las reglas pertinentes al Firewall (CSF), si es que lo tenéis instalado, para que deje pasar todo el tráfico, a la nueva IP FailOver.
Si recordáis :
15.4.1- Editar el fichero csfpre.sh
Código:
nano /etc/csf/csfpre.sh
15.4.2- Añadimos:
Código:
iptables -A FORWARD -d SegundaIPFailOver -j ACCEPT
iptables -A FORWARD -s SegundaIPFailOver -j ACCEPT
15.4.3- Guardamos y reiniciamos el servicio CSF