Rails en producción - Parte 2 - Configuración del servidor debian
ruby, rails, sysadmin 0 comentarios »La versión de Debian GNU/Linux con la que trabajaremos es la 4.0 etch.
Los pasos para instalar el sistema operativo dependerán de nuestro proveedor de hosting. Normalmente, dispondremos de un panel de control para poder instalar nuestro servidor. Partiremos, por lo tanto, de una instalación totalmente nueva y operativa, de la que tendremos la password de root y la dirección IP para poder conectarnos por SSH.
Nos conectamos a la máquina recien instalada. Lo primero que haremos, por seguridad, será cambiar la contraseña de root:
# passwd
Creación de un usuario no privilegiado
Creamos un usuario no privilegiado, el cual ejecutará el servidor web y los servidores de aplicaciones:
# useradd -d /home/usuario -s /bin/bash usuario # mkdir /home/usuario # chown usuario:usuario /home/usuario # passwd usuario
Por comodidad, instalaremos la herramienta sudo y le daremos a nuestro usuario privilegios para poder utilizarla:
# apt-get install sudo # export EDITOR=vi # visudo
Y añadimos al final del fichero:
usuario ALL=(ALL) ALL
Podemos crear un fichero ~/.bash_profile para el usuario. Podemos utilizar como ejemplo:
PS1='\[\033[035m\]\u\[\033[0 33m\] \w\[\033[00m\]$ ' EDITOR=vi RAILS_ENV=production export PS1 EDITOR RAILS_ENV
Configuración de SSH
Editamos el fichero de configuración de SSH, /etc/ssh/sshd_config, de manera que:
- por seguridad, cambiamos el puerto TCP 22 por otro no estándar, por ejemplo el 30000.
- nos aseguramos de que la versión del protocolo es la 2.
- no será posible conectarse directamente como root.
- permitiremos la autenticación mediante password (a menos que definamos una relación de confianza).
- no permitiremos X11Forwarding.
- deshabilitaremos la autenticación vía PAM.
- deshabilitaremos las resoluciones inversas de DNS.
- permitiremos solamente el acceso por SSH al usuario que hemos creado anteriormente.
Es decir, en el fichero /etc/ssh/sshd_config deberemos comprobar las siguiente líneas:
Port 30000 Protocol 2 PermitRootLogin no PasswordAuthentication yes X11Forwarding no UsePAM no UseDNS no AllowUsers usuario
Una vez editado, le indicamos al demonio sshd que lo relea:
# /etc/init.d/ssh reload
Antes de desconectarnos como root, deberemos probar a conectarnos con el usuario no privilegiado que hemos creado, ya que si no hemos editado correctamente el fichero de configuración de SSH podríamos peder el acceso a la máquina:
$ ssh -l usuario IP -p 30000
Configuración del firewall iptables
Si acabamos de instalar debian, la tabla de reglas del firewall estará vacia:
$ sudo -i # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Editamos el fichero /etc/iptables.test.rules y pegamos:
*filter # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allows all outbound traffic # You can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Allows SSH connections # # THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE # -A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT # Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Reject all other inbound - default deny unless explicitly allowed policy -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT
Si hemos elegido para el demonio sshd un puerto diferente al 30000, tendremos que editar la línea del fichero que permite las conexiones SSH entrantes.
Cargamos el firewall con las nuevas reglas:
# iptables-restore < /etc/iptables.test.rules
Comprobamos que las reglas se han cargado correctamente.
# iptables -L
Comprobamos también que podemos conectarnos de nuevo por SSH. En caso afirmativo, podemos guardar las reglas:
# iptables-save > /etc/iptables.up.rules
Para que los cambios sean tenidos en cuenta al rearrancar la máquina, deberemos editar el fichero /etc/network/interfaces. Después de las líneas:
# The loopback network interface auto lo iface lo inet loopback
añadiremos:
pre-up iptables-restore < /etc/iptables.up.rules
Para comprobar que todo ha ido bien, rearracamos la máquina:
# shutdown -r now
Actualizaciones
Una vez conectados de nuevo, realizaremos una actualización de los paquetes de la distribución debian. Tendremos en cuenta que la lista de repositorios en los que se buscan las actualizaciones está en /etc/apt/sources.list. En principio no será necesario cambiar la lista de repositorios.
Actualizamos la lista de paquetes disponibles en el repositorio:
$ sudo aptitude update
Reconfiguramos los paquetes de locales. Para ello, editamos el fichero /etc/environment:
LANG=es_ES.UTF-8
y ejecutamos:
$ sudo aptitude install locales $ sudo dpkg-reconfigure locales
Nos aparecerá un menú donde tendremos que seleccionar los locales:
es_ES.UTF-8 UTF-8
Como veis, he escogido el español de España (es_ES). Cada uno puede elegir el locale que le interese.
Ahora sí, actualizamos los paquetes de nuestra máquina (esto puede tardar un rato):
$ sudo aptitude upgrade $ sudo aptitude dist-upgrade
Rearracamos:
$ sudo shutdown -r now
Y por último, instalamos los paquetes necesarios para la compilación, ya que los necesitaremos más adelante:
$ sudo aptitude install build-essential
Tutorial completo
- Rails en producción - Parte 1 - Introducción
- Rails en producción - Parte 2 - Configuración del servidor debian
- Rails en producción - Parte 3 - MySQL, Ruby y Rails
- Rails en producción - Parte 4 - Servidor web nginx
- Rails en producción - Parte 5 - Mongrels e instalación de nuestra aplicación
- Rails en producción - Parte 6 - Cluster de mongrels
![Validate my RSS feed [Valid RSS]](/wp-content/themes/javiervidal/images/valid-rss.png)