Shorewall 4.4 en Ubuntu (con QoS, IFB, Nat)

Tuesday, November 24th, 2009

En 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)

mkdir shorewall.old
cd shorewall.old
sudo mv /etc/shorewall/* ./

Descargamos e Instalamos

mkdir shorewall
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 modprobe ifb numifbs=1
qt ip link set dev ifb0 up
qt mkdir -p /var/lock/subsys/

/etc/shorewall/interfaces

#ZONE       INTERFACE   BROADCAST   OPTIONS
net     eth1
loc     eth2        detect      dhcp

/etc/shorewall/masq
[DOC] NATNAT2

#INTERFACE      SOURCE      ADDRESS     PROTO   PORT(S) IPSEC   MARK
eth1            192.168.8.0/24

/etc/shorewall/zones
[DOC] Zonas bajo control

#ZONE   TYPE        OPTIONS     IN      OUT
fw  firewall
net ipv4
loc ipv4

/etc/shorewall/policy
[DOC] Politica general

#SOURCE     DEST        POLICY      LOG LEVEL   LIMIT:BURST
loc     net     ACCEPT
loc     $FW     ACCEPT
$FW     loc     ACCEPT
$FW     net     ACCEPT
all     all     REJECT      info

/etc/shorewall/rules
[DOC] Reglas

# ACTION    SOURCE              DEST                PROTO       DEST PORT(S)    ORIGINAL DESTRATE LIMIT
# 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] DevicesRedirigir el tráfico a IFB

#NUMBER:    IN-BANDWITH OUT-BANDWIDTH   OPTIONS     REDIRECTED
#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
#INTERFACE:CLASS    MARK    RATE:               CEIL        PRIORITY    OPTIONS
##              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.

#INTERFACE: SOURCE          DEST            PROTO   DEST                SOURCE
#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:

sudo /etc/init.d/shorewall restart
Para comparir:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • LinkedIn
  • Meneame
  • Netvibes
  • Twitter

Tags: , , ,

Leave a comment

Calendar

    November 2009
    M T W T F S S
    « Sep   Dec »
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30