Shorewall 4.4 en Ubuntu (con QoS, IFB, Nat)
Tuesday, November 24th, 2009En el post anterior sobre shorewall 4.2 expliqué su instalación y configuración para una red básica. Ahora voy a documentar lo mismo pero con la última versión de shorewall 4.4. La nueva versión tiene cosas muy interesantes pero la que a mi más me interesó es el soporte de flow (“flow” traffic classifier, lo explicaré en otro post).
Definición de la red
eth1: Interfase para conexión a internet (ip dinámica)
eth2: Interfase para la red local (192.168.8.0/24)
Hacemos una copia de la instalación anterior y eliminamos (si existe)
cd shorewall.old
sudo mv /etc/shorewall/* ./
Descargamos e Instalamos
cd shorewall
wget http://shorewall.de/pub/shorewall/4.4/shorewall-4.4.4/shorewall-4.4.4.1.tar.bz2
tar jxf shorewall-4.4.4.1.tar.bz2
cd shorewall-4.4.4.1
sudo ./install.sh
Documentación oficial
En toda instalación de un firewall hay particularidades, por lo que recomiendo leer la documentación oficial de shorewall. Iré poniendo links a la documentación oficial sobre cada acción.
[DOC] Sobre la estructura de los ficheros de configuración
Comandos necesarios para el arranque: /etc/shorewall/init
Que cargue con el modulo de IFB, creando solo un dispositivo que será ifb0.
qt ip link set dev ifb0 up
qt mkdir -p /var/lock/subsys/
/etc/shorewall/interfaces
net eth1
loc eth2 detect dhcp
/etc/shorewall/masq
[DOC] NAT – NAT2
eth1 192.168.8.0/24
/etc/shorewall/zones
[DOC] Zonas bajo control
fw firewall
net ipv4
loc ipv4
/etc/shorewall/policy
[DOC] Politica general
loc net ACCEPT
loc $FW ACCEPT
$FW loc ACCEPT
$FW net ACCEPT
all all REJECT info
/etc/shorewall/rules
[DOC] Reglas
# Redirección de puertos
DNAT net loc:192.168.8.78 tcp 5900
DNAT net loc:192.168.8.78 tcp 8500:8600
DNAT net loc:192.168.8.78 udp 8500:8600
# FROM Net TO firewall
ACCEPT net $FW icmp
ACCEPT net $FW tcp 22
* Hasta aquí es lo básico en cuando a seguridad y NAT, con esto la red ya funciona. A partir de aquí es QoS o Traffic Shaping.
/etc/shorewall/tcdevices
[DOC] Devices – Redirigir el tráfico a IFB
#INTERFACE INTERFACES
1:eth1 - 300kbit classify
2:ifb0 - 6000kbit classify eth1
/etc/shorewall/tcclasses
[DOC] Clases
Ahora es donde voy a dar mi opinion sobre como deberían ir estas clases, esto depende de la experiencia de cada uno, pero en fin, esta es la mía:
- Dividir en tres partes VoIP y Video IP (1:10 y 2:10) , ICMP/DNS y puertos conocidos (1:11 y 2:11) y por último tráfico desconocido (1:19 y 2:19)
- Antes le daba mayor prioridad a SSH o ICMP y en mantenimientos he cortado llamadas y en alguna prueba de rendimiento también me quede sin teléfonos (que también puede ser un ataque DDoS u otros..)
- La segunda clase sera para icmp y dns y tráfico conocido, y esta esta dividida en subclases con el fin de garantizar un mínimo a cada conexión
- En mi red tengo un servidor DNS para que los equipos no vayan a buscar cada dominio en internet, de modo que al DNS le doy más prioridad que al trafico en si mismo ya que se realiza pocas veces y agiliza la navegación
- Y ya que tengo servicios dentro de la red que son utilizados en ocasiones desde fuera de ella considero que se aplican los mismos principios para el trafico entrante
- Sobre los porcentajes que he utilizado en este ejemplo es por el ancho de banda que tengo en esa instalación, esto cada uno lo tiene que mirar pero yo he intentado garantizar 128kbit a la voip tanto de subida como de bajada
- Lo de enviar el tráfico desconocido a la última clase es para evitar el esfuerzo y la complicación de identificar las conexiones P2P, hay otras técnicas pero al final después de muchas pruebas esto es lo que me ha resultado más fácil de mantener
## DMAX:UMAX
# #
# # eth1
# #
1:10 - full*43/100 full*9/10 1 tcp-ack,tos-minimize-delay # voip
1:11 - full*47/100 full*9/10 2 tcp-ack,tos-minimize-delay # icmp / dns
1:11:101 - full*2/10 full 11 # openvpn
1:11:102 - full*2/10 full 12 # vnc
1:11:103 - full*2/10 full 13 # http/https
1:11:104 - full*2/10 full 14 # mail
1:11:105 - full*2/10 full 15 # irc,msn,...
1:19 - full*10/100 full*9/10 99 tos-minimize-cost,default
# #
# # ifb0
# #
2:10 - full*3/100 full*9/10 1 tcp-ack,tos-minimize-delay # voip
2:11 - full*87/100 full*9/10 2 tcp-ack,tos-minimize-delay # icmp / dns
2:11:101 - full*2/10 full 11 # openvpn
2:11:102 - full*2/10 full 12 # vnc
2:11:103 - full*2/10 full 13 # http/https
2:11:104 - full*2/10 full 14 # mail
2:11:105 - full*2/10 full 15 # irc,msn,...
2:19 - full*10/100 full*9/10 99 tos-minimize-cost,default
/etc/shorewall/tcfilters
[DOC] Filtros para identificar el tráfico
Yo he identificado estos puertos como útiles para mi red, como decía antes, cada uno sabrá lo que le es útil y lo que no.
#CLASS PORT(S) PORT(S)
#
# OUTGOING TRAFFIC
#
1:10 - - udp - 4569,5060
1:10 - - tcp - 4569,5060
1:11 - - icmp echo-request,echo-reply
1:11 - - tcp - 53,22
1:11 - - udp - 53
1:101 - - udp - 1194
1:101 - - tcp - 1194
1:102 - - tcp - 5900
1:103 - - tcp - 80,443
1:104 - - tcp - 25,465,110,995,143,993
1:105 - - tcp - 1493,1542,1863,1963,5222,6667
# #
# # INCOMING TRAFFIC
# #
2:10 - - udp 4569,5060
2:10 - - tcp 4569,5060
2:11 - - icmp echo-request,echo-reply
2:11 - - tcp 53,22
2:11 - - udp 53
2:101 - - udp 1194
2:101 - - tcp 1194
2:102 - - tcp 5900
2:103 - - tcp 80,443
2:104 - - tcp 25,465,110,995,143,993
2:105 - - tcp 1493,1542,1863,1963,5222,6667
Esto es todo, ahora compilamos:
