POST

Administración de un servidor virtual Centos 6

 

CentOS (Community ENTerprise Operating System) es un sistema operativo de código abierto, basado en Red Hat Enterprise Linux, compilado por voluntarios y cuyo objetivo es ofrecer al usuario un software robusto y fiable de “clase empresarial”.

Versiones

Versión de Centos instalada
1
cat /etc/redhat-release
Versión del kernell
1
uname -a

Gestión de usuarios

Creación de un usuario
1
# adduser maria
Añadir contraseña al usuario
1
# passwd maria
Editamos el archivo /etc/sudoers
1
# visudo
Añadimos al final de /etc/sudoers la siguiente línea
1maria ALL=(ALL:ALL) ALL

Configuración del acceso SSH

Editamos el archivo de configuración del servidor ssh
1
sudo vi /etc/ssh/sshd_config
Cambiamos el puerto por defecto
1Port 4545
Deshabilitamos el acceso ssh por parte del usuario root
1PermitRootLogin no
Reiniciamos el demonio ‘sshd’ para que se actualicen los cambios
1
sudo /etc/init.d/sshd restart

Nota: Algunos proveedores de Cloud Hosting, como 1and1, añaden una capa adicional de seguridad a los servidores virtuales. En el caso de haber cambiado el puerto para el demonio ssh deberás de actualizar la Política de Firewall de tu proveedor de hosting para que no bloquee las conexiones. Esto lo podrás realizar desde el panel de administrador que tu proveedor te habrá facililtado.

Acceso ssh mediante clave pública y clave privada.

Para conectarnos a nuestro servidor desde nuestra máquina local de trabajo sin tener que teclear constantemente nuestra contraseña deberemos generar una clave pública y copiarla en el servidor de la siguiente manera:

Generamos, en nuestra máquina local, es decir, desde la que nos conectamos, la pareja de claves pública y privada.
1
ssh-keygen
Copiamos la clave pública (id_rsa.pub) al servidor
1
user@localmachine$ scp ~/.ssh/id_rsa.pub user@remotemachine:/home/user/id_rsa.pub
Incluimos la clave pública, al archivo /home/user/.ssh/authorized_keys del servidor. Desde el servidor ejecutamos:
1
cat ~/id_rsa.pub` >> ~/.ssh/authorized_keys
El modo del directorio .ssh debe ser 700
1
chmod 700 ~/.ssh
El modo de authorized_keys no puede estar en 660, debe estar en 640 o 600, es decir, el grupo y el resto no pueden tener permisos de escritura
1
chmod 600 ~/.ssh/authorized_keys

GIT

Instalamos git
1
sudo yum install git

Configuración de iptables, el firewall de linux

Consulta de la reglas activas del firewall
1
sudo iptables -L
Inicio, parada y reinicio del firewall
1
sudo service iptables start | stop | restart
Consulta de todos los puertos abiertos
1
netstat -tulpn
Ejemplo de script ejecutable para la creacion de reglas del firewall
1#!/bin/sh
2# Script cortafuegos.sh para la configuración de iptables
3
4#Borro todas las reglas
5iptables -F
6iptables -X
7iptables -Z
8iptables -t nat -F
9
10#Políticas por defecto
11iptables -P INPUT ACCEPT
12iptables -P OUTPUT ACCEPT
13iptables -P FORWARD DROP
14
15#Para evitar errores en el sistema, debemos aceptar todas las comunicaciones por la interfaz lo (localhost)
16iptables -A INPUT -i lo -j ACCEPT
17iptables -A OUTPUT -o lo -j ACCEPT
18
19#SSH access
20iptables -A INPUT -p tcp --dport 5656 -m state --state NEW,ESTABLISHED -j ACCEPT
21iptables -A OUTPUT -p tcp --sport 5656 -m state --state ESTABLISHED -j ACCEPT
22
23#http
24iptables -A INPUT -p tcp --dport 80 -j ACCEPT
25iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
26
27#https
28iptables -A INPUT -p tcp --dport 443 -j ACCEPT
29iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
30
31#Habilitamos el DNS
32iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
33iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
34iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
35iptables -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
36
37
38#Habilitamos ciertos puertos
39iptables -A INPUT -p tcp -m multiport --dports 3000,4000,4500,4501 -j ACCEPT
40iptables -A OUTPUT -p tcp -m multiport --sports 3000,4000,4500,4501 -j ACCEPT
41
42#Nat para MySQL y esconder el puerto público. Usamos mangle para marcar los paquetes que vayan al puerto 9987. El input de dport 3306 solo deja pasar los paquetes marcados. Es importante entender el flujo de las cadenas para comprender esta técnica.
43iptables -t mangle -A PREROUTING -p tcp --dport 9987 -j MARK --set-mark 1
44iptables -t nat -A PREROUTING -p tcp --dport 9987 -j REDIRECT --to-port 3306
45iptables -A INPUT -p tcp --dport 3306 -m mark --mark 1 -j ACCEPT
46iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
47
48
49#Descarto todo lo demás. Al descartas mediante rules y no mediante policies permite deshacerlo con un flush.
50iptables -A INPUT -j DROP
51iptables -A OUTPUT -j DROP
Importante: Hacemos persistentes los cambios del firewall tras el reinicio.
1
sudo service iptables save