Seeeeee
opensuse, openvpn, carpetas compartidas, red a red, nangana luego…
que pucha, estuve mas de dos años como para poder poner bien la fucking vpn en opensuse,
el problema???
seguro muchisimos de uds ya intentaron hacer esto en opensuse y les cuento cual fue el bendito problema, se llama SuSEfirewall2
si… esta porqueria de mierda hacia drop de todos los paquetes que recibia, aqui les voy a demostrar como hice para que me funcione perfecto la vpn entre dos maquinas nomas, una de tigo y otra de personal (isp de paraguay), las dos tienen ip publica, pero como en todo isp que no te da ip publica si estan en la misma red van a poder hacer tranquilamente lo mismo

Bueno, a lo que nos gusta, los pasos para hacer la vpn

SERVIDOR

# yast -i openvpn
# mkdir /etc/openvpn/easy-rsa-V2.0/
# cp /usr/share/openvpn/easy-rsa/2.0/* /etc/openvpn/easy-rsa-V2.0
# mkdir /etc/openvpn/easy-rsa-V2.0/keys
# cd /etc/openvpn/easy-rsa-V2.0
# vim vars
# . vars
# ./clean-all
# ./build-dh
# ./pkitool --initca
# ./pkitool --server servidor
# openvpn --genkey --secret ta.key
# mv ta.key /etc/openvpn/easy-rsa-V2.0/keys/
# cd /usr/share/doc/packages/openvpn/sample-config-files
# cp server.conf /etc/openvpn
# cd /etc/openvpn
# vim server.conf

eliminar los valores ca, cert,key, dh y tls-auth de server.conf. O sea cambiarlos por estos:

ca /etc/openvpn/easy-rsa-V2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa-V2.0/keys/servidor.crt
key /etc/openvpn/easy-rsa-V2.0/keys/servidor.key
dh /etc/openvpn/easy-rsa-V2.0/keys/dh1024.pem
tls-auth /etc/openvpn/easy-rsa-V2.0/keys/ta.key 0

despues reiniciamos la vpn y agregamos como servicio para que se inicie al arrancar nuestra maquina

# rcopenvpn start
# chkconfig --add openvpn

aca esta el log del inicio

openvpn[2932]: OpenVPN 2.0.9 i586-suse-linux [SSL] [LZO] [EPOLL] built on Nov 14 2008
openvpn[2932]: Diffie-Hellman initialized with 1024 bit key
openvpn[2932]: Control Channel Authentication: using '/etc/openvpn/easy-rsa-V2.0/keys/ta.key' as a OpenVPN static key file
openvpn[2932]: Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[2932]: Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[2932]: TLS-Auth MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:0 ]
kernel: tun0: Disabled Privacy Extensions
openvpn[2932]: TUN/TAP device tun0 opened
openvpn[2932]: /bin/ip link set dev tun0 up mtu 1500
openvpn[2932]: /bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
openvpn[2932]: /bin/ip route add 10.8.0.0/24 via 10.8.0.2
openvpn[2932]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
openvpn[2937]: UDPv4 link local (bound): [undef]:1194
openvpn[2937]: UDPv4 link remote: [undef]
openvpn[2937]: MULTI: multi_init called, r=256 v=256
openvpn[2937]: IFCONFIG POOL: base=10.8.0.4 size=62
openvpn[2937]: IFCONFIG POOL LIST
openvpn[2937]: Initialization Sequence Completed

despues hay que abrir el puerto UDP 1194
YaST → Seguridad y usuarios → Cortafuegos → Servicios autorizados → Opciones avanzadas y agregamos el puerto 1194 en la parte de UDP

mirando los logs del servidor visto esto, creo que hay que ponerlos como interna para que funcione bien el firewall (por los devices tun estoy diciendo)

SuSEfirewall2: batch committing...
SuSEfirewall2: Firewall rules unloaded.
SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
SuSEfirewall2: using default zone 'ext' for interface tun0
SuSEfirewall2: Firewall customary rules loaded from /etc/sysconfig/scripts/SuSEfirewall2-custom
SuSEfirewall2: batch committing...
SuSEfirewall2: Firewall rules successfully set

para solucionar edite el archivo /etc/sysconfig/SuSEfirewall2

# vim /etc/sysconfig/SuSEfirewall2

le agregue la interfas tun0 como interna

FW_DEV_INT="eth1 tun0"

reiniciamos el firewall

# rcSuSEfirewall restart

SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
SuSEfirewall2: Firewall customary rules loaded from /etc/sysconfig/scripts/SuSEfirewall2-custom
SuSEfirewall2: batch committing...
SuSEfirewall2: Firewall rules successfully set

CLIENTES

Desde el servidor aun, hacemos esto

# cd /etc/openvpn/easy-rsa-V2.0/
# . vars
# ./pkitool cliente1
# cd keys
# mkdir cliente1
# cp ca.crt cliente1.crt cliente1.key ta.key cliente1
# chmod -R 755 cliente1
# scp cliente1/* usuario@maquinacliente:/etc/openvpn/

Despues nos conectamos al cliente

# ssh root@maquinacliente
# cd /usr/share/doc/packages/openvpn/sample-config-files
# cp client.conf /etc/openvpn/
# cd /etc/openvpn

y editamos el archivo client.conf

vim /etc/openvpn/client.conf

cambiar:

remote my-server 1194
por
remote ip.o.host.del.server 1194

cambiamos el ca, cert y key por

ca.crt
cliente1.crt
cliente1.key

descomentamos la linea
tls-auth ta.key 1

bueno hasta ahi tenemos una vpn de servidor-cliente, pero si necesitamos por ejemplo, que una maquina de la lan de la vpn cliente vea una carpeta compartida o una impresora de una maquina que esta dentro de la red del servidor?. Debemos colocar un “push” en el server.conf para que nuestro dev tun0 pueda redireccionarlos hacia las maquinas dentro de la lan del servidor, algo asi:
push “route subred-local mascara-local”
o sea, por ejemplo, le agregamos la linea a nuestro archivo de configuracion

#echo 'push "route 192.168.1.0 255.255.255.0"' /etc/openvpn/server.conf

despues…

# rcopenvpn restart

y listo

openvpn[5434]: OpenVPN 2.0.9 i586-suse-linux [SSL] [LZO] [EPOLL] built on Nov 14 2008
openvpn[5434]: Diffie-Hellman initialized with 1024 bit key
openvpn[5434]: Control Channel Authentication: using '/etc/openvpn/easy-rsa-V2.0/keys/ta.key' as a OpenVPN static key file
openvpn[5434]: Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[5434]: Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[5434]: TLS-Auth MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:0 ]
kernel: tun0: Disabled Privacy Extensions
openvpn[5434]: TUN/TAP device tun0 opened
openvpn[5434]: /bin/ip link set dev tun0 up mtu 1500
openvpn[5434]: /bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
openvpn[5434]: /bin/ip route add 10.8.0.0/24 via 10.8.0.2
openvpn[5434]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
openvpn[5439]: UDPv4 link local (bound): [undef]:1194
openvpn[5439]: UDPv4 link remote: [undef]
openvpn[5439]: MULTI: multi_init called, r=256 v=256
openvpn[5439]: IFCONFIG POOL: base=10.8.0.4 size=62
openvpn[5439]: IFCONFIG POOL LIST
openvpn[5439]: Initialization Sequence Completed

OBS: para que pueda ver toda la red del servidor tuve que tocar el SuSefirewall, como no me conectaba a los equipos detras del servidor tuve que mirar los logs del firewall y fue esto lo que veia:

Jan 29 01:19:36 mail kernel: SFW2-FWDint-DROP-DEFLT IN=tun0 OUT=eth1 SRC=10.8.0.6 DST=192.168.1.2 LEN=84 TOS=0×00 PREC=0×00 TTL=63 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=15904 SEQ=1

como me hacia drop de todos los paquetes que me enviaba el cliente vpn tuve que agregarle la siguiete regla al firewall exactamente en la parte de FW_FORDWARD

FW_FORWARD=”10.8.0.0/24,192.168.1.0/24″

en la cual le permito a todas las maquinas de la subred 10.8.0.0 acceder a todas las maquinas de la lan 192.168.1.0 (ip de la lan del server)

si encuentran una forma mas segura o mejor de como se hace, avisenme ;)

bueno ese es el caso de una conexion de punto a punto.
Y si se quisieramos hacer una vpn como si fuere que las dos redes estan juntas?
bueno, para eso tenemos que hacer lo siguiente:
hay que decirle a openvpn donde se encuentran los archivos de configuracion de los clientes

# echo 'client-config-dir /etc/openvpn/ccd' /etc/openvpn/server.conf

creamos el directorio donde guardaremos nuestras configuraciones de los clientes

# mkdir ccd

cuando se conecte algun cliente al servidor, este buscara en ese directorio si no encuentra algun archivo de configuracion que concuerde con el common name de el certificado de el cliente que se conecta.
En este caso como nuestro common name del primer cliente es cliente1 en el directorio ccd creamos un archivo de texto que se llame cliente1 que contendra lo siguiente:
iroute lan.del.cliente mascara.del.cliente
o sea hacemos:

# echo  'iroute 192.168.0.0/24 255.255.255.0' /etc/openvpn/ccd/cliente1

192.168.0.0/24 es la lan del cliente que se nos conecta

luego agregamos estas lineas al server.conf
route lan.del.cliente mascara.del.cliente
o sea

# echo  'route 192.168.0.0/24 255.255.255.0' /etc/openvpn/server.conf

por ultimo reiniciamos nuestra vpn

# rcopenvpn restart

en el server y en el cliente

bueno aca me tope con otro problema mas, aun no podia ver la maquina detras de la lan del cliente ( a veces maldigo al susefirewall ), esto es lo que veia en los logs del firewall del cliente

SFW2-FWD-ILL-ROUTING IN=tun0 OUT=eth0 SRC=10.8.0.1 DST=192.168.0.5 LEN=84 TOS=0×00 PREC=0×00 TTL=63 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=33569 SEQ=41

para solucionar edite el archivo /etc/sysconfig/SuSEfirewall2 del cliente

# vim /etc/sysconfig/SuSEfirewall2

le agregue tambien la interfas tun0 como interna

FW_DEV_INT=”eth1 tun0″

ahora salio esto en los logs

SFW2-FWDint-DROP-DEFLT IN=tun0 OUT=eth0 SRC=10.8.0.1 DST=192.168.0.5 LEN=84 TOS=0×00 PREC=0×00 TTL=63 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=54561 SEQ=5

o sea… me hacia drop de todos los paquetes que me enviaba al cliente de la vpn, tuve que agregarle la siguiete regla al SuSefirewall, exactamente en la parte de FW_FORDWARD

FW_FORWARD=”10.8.0.0/24,192.168.0.0/24″

nuevamente les recuerdo que si tienen una mejor forma de arreglar esto me avisen (como por ejemplo hacer forward solo el port del server o darle una ip estatica a los tun o cualquier cosa paresida)

#@!& por fin me funciono esta porqueria en el suse xD

Escrito el 29 / enero / 2009 y trata sobre: linux, susefirewall, vpn

Se me lleno el log de messajes con esto

# tail /var/log/messages
Jan 17 19:05:42 mail named[2863]: client 69.50.142.11#59248: query (cache) './NS/IN' denied
Jan 17 19:05:42 mail named[2863]: client 69.50.142.11#53383: query (cache) './NS/IN' denied
Jan 17 19:05:45 mail named[2863]: client 69.50.142.11#42339: query (cache) './NS/IN' denied
Jan 17 19:05:45 mail named[2863]: client 69.50.142.11#39172: query (cache) './NS/IN' denied
Jan 17 19:05:46 mail named[2863]: client 69.50.142.11#18549: query (cache) './NS/IN' denied

La regla del iptables para bloquear esa ip es la siguiente:

# iptables -I input_ext -s 69.50.142.11 -j DROP

o

# iptables -I input_ext -s 69.50.142.11 -j REJECT

Si queres bloquear alguna otra ip cambiale nomas por la ip que queres bloquear

La diferencia entre REJECT y DROP consiste en que mediante REJECT manda de vuelta un TCP RST (si era conexión TCP) o un ICMP Host Unreachable (para todo lo demas) evitando así demoras en la conexión y mediante DROP no se le contesta nada por lo cual el sistema remoto no corta la conexión hasta que haya transcurrido el tiempo de espera.

En la mayoria de los casos, DROP es preferible a REJECT porque este último te deja saber que ahi hay algo

Tambien si quieres hacer este cambio para cada vez que reinicie el SuSEfirewall debes descomentar en el archivo /etc/sysconfig/SuSEfirewall2 la linea que dice:
FW_CUSTOMRULES=”/etc/sysconfig/scripts/SuSEfirewall2-custom”
y comentar la que dice
#FW_CUSTOMRULES=”"

luego en el archivo /etc/sysconfig/scripts/SuSEfirewall2-custom se agrega en la regla fw_custom_before_denyall()
antes del finalizador “true”

iptables -I input_ext -s 69.50.142.11 -j DROP

ejemplo:

fw_custom_before_denyall() {
iptables -I input_ext -s 69.50.142.11 -j DROP

   true
}

No se si ha de funcionar bien pero creo que en el archivo /etc/hosts.deny se puede agregar tambien la linea
ALL:ip.que.queremos.bloquear

Escrito el 17 / enero / 2009 y trata sobre: comandos, linux, susefirewall

Bueno esto me sirvio ya un par de veces para el dhcpd y para el squid, o de repente para alguna prueba que estaba haciendo.
la forma de listar los mac address de la lan es con el comando arp

# arp -nv
Address		HWtype	HWaddress		Flags Mask	Iface
200.85.60.189	ether	00:1E:4A:48:AA:01	C			eth0
192.168.1.3	ether	00:15:F2:C1:39:5B	C			eth1
192.168.1.6	ether	00:15:F2:C1:3A:35	C			eth1
192.168.1.2	ether	00:15:F2:73:E7:B3	C			eth1
Entries: 4	Skipped: 0	Found: 4
Escrito el 17 / enero / 2009 y trata sobre: arp, comandos, linux, squid, susefirewall

Uno de los principales motivos de poner una maquina de servidor es para compartir el internet,
me acuerdo cuando me colocaron el internet y no sabia como chinas hacer para compartir con el suse
hasta que buscando y buscando encontre la solucion,
el tema en el suse es que hay que poner bien las “zonas” del firewall (susefirewall) hay que seleccionarlas bien en mi caso tengo dos interfaces de red una eth0 (internet) y una eth1(lan)
bueno, antes que nada tenemos que activar el reenvio de ip (ip forwarding) en la parte de configuracion de las tarjetas de red (Yast – Network Setting – Network devices) en la pestania ROUTING hay que chequear donde dice Enable IP Forwarding,

luego en el SuSEfirewall (Yast – Seguridad y Usuarios – Firewall) seleccionamos correctamente las zonas de las tarjetas de red.
(Siempre en el suse para compartir internet hay que levantar el firewall y seleccionar la interfas interna (de la lan) y la externa (la de internet) ).
Aqui en la foto vemos donde:

Tambien podemos tocarlo desde el archivo de configuracion del SuSEfirewall2 en “/etc/sysconfig/SuSEfirewall2″

al editar todo reiniciamos el firewall y listo

# rcSuSEfirewall restart

Escrito el 8 / octubre / 2008 y trata sobre: linux, susefirewall

warning rompebolas
solucion!:

# echo FW_ZONE_DEFAULT='ext' >> /etc/sysconfig/SuSEfirewall2
Escrito el 2 / agosto / 2008 y trata sobre: linux, susefirewall