lunes, 30 de julio de 2012

OpenVPN en un VPS Proxmox

Post rápido para hoy. Me tocó montar una VPN a un cliente, el problema es que su servidor era una máquina virtual con openVZ sobre Proxmox . Dejo aquí un manual de los pasos que seguí para montarlo, espero que a alguien le sea de utilidad como a mi!

Saludos!!
---------------------------------
1. Preparar host:
Entramos en el proxmox por ssh:
Desde la consola del servidor Proxmox (como root) activamos el soporte TUN/TAP en el kernel

modprobe tun 

comprobamos que esté activado

lsmod | grep tun 

teniendo que ver una salida como esta:

tun                    18815  1 vhost_net 

Para que esto sea permanente, debemos poner que el módulo “tun” sea cargado en el inicio del servidor. Para ello usamos la siguiente orden:

echo tun >> /etc/modules 

Podemos reiniciar Proxmox y ejecutar la orden anterior para verificar que se ha cargado el módulo al inicio.

Desde la consola del servidor Proxmox editamos el fichero

nano -w /etc/vz/vz.conf 

y en la línea donde pone (sobre la linea 46)

## IPv4 iptables kernel modules to be enabled in CTs by default 
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length" 

añadimos al final

ipt_state iptable_nat 

dejamos esa línea como sigue:

IPTABLES="ipt_REJECT 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"
#IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat" 

Con este paso hacemos accesible los módulos de “nat” y “state” de iptables a los VPS
Instalamos algunos módulos más en nuestro servidor Proxmox

modprobe ipt_mark 
modprobe ipt_MARK 
modprobe tun 

Haciéndolos permanentes del mismo modo que hicimos en el paso 4.

echo ipt_mark >> /etc/modules 
echo ipt_MARK >> /etc/modules 

Damos permisos para que nuestra máquina virtual pueda hacer uso del dispositivo tun/tap

vzctl set 101 --devnodes net/tun:rw --save 

En nuestro caso, como solo tenemos una máquina virtual, esta tiene el ID 101.

La salida del comando anterior deberá ser:

Setting devices
Saved parameters for CT 101

Permitimos a nuestro VPS abrir el interface TUN/TAP, asegurándonos primero que el VPS esté apagado.

vzctl set 101 --devices c:10:200:rw --save 
vzctl stop 101 
vzctl set 101 --capability net_admin:on --save 
vzctl start 101

Creamos el dispositivo “tun net” en nuestra máquina virtual

vzctl exec 101 mkdir -p /dev/net 
vzctl exec 101 mknod /dev/net/tun c 10 200 
vzctl exec 101 chmod 600 /dev/net/tun

2. Cambiar tipo de red a veth desde el panel de proxmox:
- Eliminar la ip y guardar
- seleccionar veth y guardar
- seleccionar interfaz

3. Si no carga la red:
Editar  /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
IPADDR=212.34.xx.xx
NETMASK=255.255.255.0
GATEWAY=212.34.xx.xx
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
BOOTPROTO=none
TYPE=Ethernet

Y editar /etc/sysconfig/network y cambiar GATEWAY por la correspondiente. Reiniciar demonio de red. Cambiar venet0:0 a eth0 en /usr/local/directadmin/conf/directadmin.conf si no peta DA
4. Instalar openvpn

4.1 Instalamos desde repositorio EPEL el openvpn.
[root@dlp ~]#
wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
[root@dlp ~]#
rpm --import RPM-GPG-KEY-EPEL-6

[root@dlp ~]#
rm -f RPM-GPG-KEY-EPEL-6

[root@dlp ~]#
vi /etc/yum.repos.d/epel.repo
# create new

[epel]
name=EPEL RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
gpgcheck=1
enabled=0
# when you use the repository, input yum command like follows

[root@dlp ~]#
yum --enablerepo=epel install [package]

4.2 Generamos certificados para la conexión:
cp -R /usr/share/openvpn/easy-rsa/ /etc/openvpn

nano /etc/openvpn/easy-rsa/2.0/vars (Editamos lineas finales)

export KEY_COUNTRY="ES"
export KEY_PROVINCE="MA"
export KEY_CITY="Madrid"
export KEY_ORG="server.dominio.es"
export KEY_EMAIL="[email protected]"

Preparamos el terreno:
cd /etc/openvpn/easy-rsa/2.0/
source ./vars
./vars
./clean-all
./build-ca

./build-key-server server                # certificado para el servidor
./build-key client1                          # certidicado para el cliente, supuestamente uno por cada cliente
./build-dh                                      # generar parametros Diffie Hellman (various stuff)

4.3 nos llevamos los certificados client y ca al equipo cliente para luego.
Además movemos estos certifiados a /etv/openvpn

    ca.crt
    ca.key
    dh1024.pem
    server.crt
    server.key

4.4 Configuramos VPN

cp /usr/share/doc/openvpn-2.1.4/sample-config-files/server.conf /etc/openvpn/
cp /usr/share/doc/openvpn-2.1.4/sample-config-files/client.conf ~/
cd ~/

nano ~/client.conf

client
dev tun
proto udp
remote 212.34.xx.xx 1194
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3

Editamos /etc/openvpn/server.conf y descomentamos:
push "redirect-gateway def1 bypass-dhcp"

Editamos /etc/sysctl.conf y cambiamos:
net.ipv4.ip_forward = 0 a net.ipv4.ip_forward = 1

echo 1 > /proc/sys/net/ipv4/ip_forward

Añadimos reglas a iptables:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to 212.34.xx.xx # IP del equipo

Y además al rc.local para que carguen de inicio

4.5 instalamos dnsmasq

yum install dnsmasq
/etc/init.d/dnsmasq start
chkconfig dnsmasq on

Reinciamos para que coja el dnsmasq

Editar /etc/openvpn/server.conf

Y añadir

push "dhcp-option DNS 10.8.0.1"

Y listo: /etc/init.d/openvpn restart


5. Configurar openVPN Cliente:

Bajar:

client1.conf
certificados ca.crt client1.crt client1.key

Editar archivo client1.conf. cambiar la ruta de loscertificados a la real (para poner un \ hay que poner \\) y renombar el archivo a client1.ovpn.

Poner los archivos en "c:\\Program Files (x86)\\openVPN\\config"

Conectar y listo

----------------------------------------------------
Server.conf:

port 1194
proto udp
dev tun
#---- Seccion de llaves -----
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem
#----------------------------
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status-servidorvpn-udp-1194.log
verb 8
push "dhcp-option DNS 10.8.0.1"
push "redirect-gateway def1 bypass-dhcp"
----------------------------------------------------


http://tipupdate.com/how-to-install-openvpn-on-centos-vps/

martes, 10 de julio de 2012

Firewall: Lista de puertos

Voy a hacer una lista con los puertos más comunes de algunas aplicaciones y protocolos, que luego se me olvidan. Una lista más exhaustiva se puede encontrar en /etc/services.

FTP: 21
SSH: 22
TELNET: 23
SMTP: 25
HTTP: 80
HTTPS: 443
POP3: 110
SNMP: 161
SAMBA: 135,139,445 TCP | 137,128 UDP
VNC: 5900 (en adelante)
Netatalk (AFP): 548,5353
MiniDLNA: 8200
RDP: 3389
Webmin: 10000**
Tomcat: 8080*
Mysql: 3306
Plesk: 8443**
Directadmin: 2222**
OpenVPN: 1194

Iré ampliando la lista con más cuando vaya necesitandolos. Recordad que en /etc/services teneis un registro de la mayoría de protocolos usados.

¡Saludos!

* Aportación de Aaliyah
** Son paneles de control, en el caso de webmin gratuito, comunes en los servidores, por lo que hay que tenerlos en cuenta a la hora de configurar un firewall.