Mostrando entradas con la etiqueta iptables. Mostrar todas las entradas
Mostrando entradas con la etiqueta iptables. Mostrar todas las entradas

16 mar 2012

Como crear una VPN con PPTP en Linux Debian, con clientes Windows.

PPTP (Point to Point Tunneling Protocol), es un protocolo de comunicaciones desarrollado por Microsoft, U.S. Robotics, Ascend Communications, 3Com/Primary Access, ECI Telematics conocidas colectivamente como PPTP Forum, para implementar redes privadas virtuales o VPN.

Primero que nada instalamos el paquete "pptpd", en este caso usaremos Debian Squeeze.

serv-vpn:~# aptitude install pptpd

Después de la instalación deberíamos tener lo necesario para comenzar a configurar nuestro servidor pptpd o vpn.
Entonces comenzamos la configuración, editamos el archivo /etc/pptpd.conf

serv-vpn:~# nano /etc/pptpd.conf

Una vez abierto editamos el archivo de tal modo que quede de la siguiente forma:

ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
localip 172.16.1.1
remoteip 172.16.1.2-100

Donde "localip" será la IP del servidor VPN y "remoteip" el rango de IPs que se le asignaran a los clientes al momento de la conexión (ustedes pueden elegir la IP y rango que deseen, no tiene porque ser la misma)
Guardamos cambios y cerramos.

Ahora editamos el archivo pptpd-options, señalado en nuestro pptpd.conf, el cual esta ubicado en /etc/ppp

serv-vpn:~# nano /etc/ppp/pptpd-options

Lo dejamos de tal modo que quede algo asi:

name VPN-PPTP
require-mschap-v2
require-mppe-128
ms-dns 172.16.1.1
proxyarp
nodefaultroute
lock

La línea "name" será el nombre de nuestra vpn, "ms-dns" son los servidores dns que serán asignados a nuestros clientes windows. (Cualquier otra línea que no aparezca aquí, debe ser comentada, para un correcto funcionamiento).
Guardamos y cerramos.

Ahora solo nos queda configurar las cuentas de los clientes, para esto editamos el archivo "chap-secrets" que se encuentra en /etc/ppp/

serv-vpn:~# nano /etc/ppp/chap-secrets

Este archivo se compone de 4 campos: Usuario, servidor, password y dirección IP. Entonces agregamos un usuario:

cliente1 VPN-PPTP clave-del-cliente1 *

En este caso "cliente1" será nuestro usuario, "VPN-PPTP" nuestro servidor vpn, "clave-del-cliente1" nuestro password y el "*" sera la dirección IP, ponemos un * para que el servidor asigne una IP automáticamente.

Guardamos los cambios y reiniciamos el pptpd.

serv-vpn:~# invoke-rc.d pptpd restart

Con esto tenemos listo nuestro servidor pptpd (VPN)
Ahora probaremos el funcionamiento, creando una nueva conexión vpn en windows.

- Vamos a inicio
- Panel de control
- Conexiones de red
- Crear nueva conexión
- Siguiente
- Conectarse a la red de mi lugar de trabajo
- Siguiente
- Conexión de red privada virtual
- Siguiente
- En el cuadro de texto colocamos un nombre a la conexión, por ejemplo "VPN de mi Pincha"
- Siguiente
- No usar la conexión inicial
- Siguiente
- En el cuadro de texto colocamos la IP del servidor, si estamos en una red local colocamos la IP de la red local, 172.16.1.1 o si es un equipo remoto, colocamos la IP publica del equipo en Internet, por ejemplo 200.x.x.34
- Siguiente
- Finalizar

Ahora ingresamos nuestro nombre de usuario "cliente1" y nuestro password "clave-del-cliente1", presionamos conectar, si todo resulta bien tendremos una conexión satisfactoria a nuestro servidor vpn.

Nota: Debemos de tener en cuenta que tanto el Server PPTP y el Cliente de Windows, trabajan con los puertos 1723 TCP y 47 GRE (es un protocolo para el establecimiento de túneles a través de Internet).

Solo queda, probar...

20 abr 2011

Implementación de Shorewall y MRTG con RRDTool en Linux Debian Squeeze 6.0


Trafico de Server FTP en la DMZSiempre he deseado registrar el tráfico que pasa por las interfaces de red, de un gateway o un firewall de una red, para saber que IP consume más y cuánto tiempo se queda consumiendo el ancho de banda y compararlo con semanas y meses pasados. Para hacer un estudio de mi tráfico.

El escenario que voy a usar es de mi post anterior sobre Shorewall en Linux Debian Squeeze 6.0, ya que sería muy idóneo graficar por vía web, el control de ancho de banda, que antes realice en ese post. Bueno manos a la obra.

Nuestro escenario va hacer tres interfaces de red.
Interface 0 = eth0 = Internet (IP: 88.66.77.99 = int)
Interface 1 = eth1 = DMZ (IP: 10.0.0.1 = dmz)
Interface 2 = eth2 = Red Interna (IP: 172.16.0.1 = lan)

Copiamos el fichero accounting para la raiz del shorewall
root@firewall:~# cp /usr/share/doc/shorewall/default-config/accounting /etc/shorewall/

Hacemos una tarea técnica, de los servicios que queremos graficar y como lo vamos hacer server dns en la dmz, cabe destacar que hay que tener en cuenta que los paquetes provenientes de otras ips, debemos descartarlos para no graficar un tráfico no deseado, solo de ip-origen a ip-destino, así también con los puertos.

server proxy en la dmz: ip 10.0.0.34 = cadena srvproxy
dmz:10.0.0.34 int tcp 80,20,21,443

server dns en la dmz: ip 10.0.0.35 = cadena srvdns
dmz:10.0.0.35 int tcp 53
dmz:10.0.0.35 int udp 53
int dmz:10.10.10.35 tcp 53
int dmz:10.10.10.35 udp 53

server jabber en la dmz: ip 10.0.0.36 = cadena srvjabber
int dmz:10.10.10.36 tcp 5269
dmz:10.10.10.36 int tcp 5269

server de correo en la dmz: ip 10.0.0.37 = cadena srvcorreo
dmz:10.0.0.37 int tcp 25,80
int dmz:10.0.0.37 tcp 25

server ftp en la dmz: ip 10.0.0.38 = cadena srvftp
int dmz:10.10.10.38 tcp 20,21

server web en la dmz: ip 10.0.0.39 = cadena srvweb
int dmz:10.10.10.39 tcp 80,443,20,21

ip director para que acceda un server en internet: ip 172.16.0.5 = cadena jefe1
lan:172.16.0.5 int:4.4.8.8 tcp 25,80,110,143

ips de los admin de la red, enmascaradas: ip 172.16.0.6 = cadena admin1, ip 172.16.0.7 = cadena admin2
lan:172.16.0.6 int all
lan:172.16.0.7 int all

Editamos el fichero accounting, para ir agregando nuestras reglas y crear nuestras cadenas y así iptables de linux iría filtrando todo el tráfico nuestro byte por byte, para luego procesarlo con otra aplicación.

root@firewall:~# nano /etc/shorewall/accounting

#
# Shorewall version 4 - Accounting File
#
# For information about entries in this file, type "man shorewall-accounting"
#
# Please see http://shorewall.net/Accounting.html for examples and
# additional information about how to use this file.
#
#####################################################################################
#ACTION CHAIN SOURCE DESTINATION PROTO DEST SOURCE USER/ MARK
# PORT(S) PORT(S) GROUP

#server proxy en la dmz
srvproxy:COUNT - eth1:10.0.0.34 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 80,20,21,443
srvproxy:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.34 tcp 80,20,21,443
DONE srvproxy

#server dns en la dmz
srvdns:COUNT - eth1:10.0.0.35 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 53
srvdns:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.35 tcp 53
srvdns:COUNT - eth1:10.0.0.35 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 udp - 53
srvdns:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.35 udp 53
DONE srvdns

#server jabber en la dmz
srvjabber:COUNT - eth1:10.10.10.36 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 5269
srvjabber:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.36 tcp 5269
DONE srvjabber

#server de correo en la dmz
srvcorreo:COUNT - eth1:10.10.10.37 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 25,80
srvcorreo:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.37 tcp 25
DONE srvcorreo

#server ftp en la dmz
srvftp:COUNT - eth1:10.10.10.38 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 20,21
srvftp:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.38 tcp 20,21
DONE srvftp

#server web en la dmz
srvweb:COUNT - eth1:10.10.10.39 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 20,21
srvweb:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.39 tcp 20,21
DONE srvweb

#ip director para que acceda un sitio en internet
lan:172.16.0.5 int:4.4.8.8 tcp 25,80,110,143
jefe1:COUNT - eth2:172.16.0.5 eth0:4.4.8.8!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 25,80,110,143
jefe1:COUNT - eth0:4.4.8.8!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.5 tcp 25,80,110,143
DONE jefe1

#ips de los admin de la red, enmascaradas
lan:172.16.0.6 int all
admin1:COUNT - eth2:172.16.0.6 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 - all
admin1:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.6 all
DONE admin1
lan:172.16.0.7 int all
admin2:COUNT - eth2:172.16.0.7 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 - all
admin2:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.7 all
DONE admin2

Nota: Una breve explicación de una de las líneas expuestas en el fichero accounting.
---------------------------------------------------------------------------------------------------------
srvproxy:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.34 tcp 80,20,21,443
DONE srvproxy
---------------------------------------------------------------------------------------------------------
(srvproxy) Nombre de cadena que el iptables va filtrar
(:COUNT) Significa que dicha cadena va almacenar datos
(-) Llevaría un guión si esta opción no se va usar
(eth0) Interface origen que se va analizar el conteo de paquetes
(:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8) Que se van excluir los paquetes de este grupo de IPs
(eth1) Interface destino que se va analizar el conteo de paquetes
(:10.0.0.34) Que se van incluir los paquetes de este grupo de IPs
(tcp) Protocolo que se va a filtrar, puede usarse UDP,ICMP,ETC.. o ALL (todos los tipos de protocolos)
(80,20,21,443) Puertos que se van analizar, para luego filtrar.
(DONE srvproxy) Indicándole al iptables que aquí termina el filtrado de esta cadena.
------------------------------------------------------------------------------------------------------
Luego chequeamos si todo está correcto, para luego reiniciar el shorewall.
root@firewall:~# shorewall check
root@firewall:~# shorewall restart

Ver que nuestras cadenas se están ejecutando correctamente.
root@firewall:~# shorewall show accounting

Ya estamos listos para procesar los datos filtrados por el iptables de linux.

Vamos a Instalar Apache2, MRTG, MRTG-RRD y RRDTool
root@firewall:~# aptitude install apache2 mrtg mrtg-rrd rrdtool

Apache2: Servidor web HTTP de código abierto.
RRDTool: Es el acrónimo de Round Robin Database tool. Se trata de una herramienta que trabaja con una base de datos que maneja planificación según Round-Robin. Esta técnica trabaja con una cantidad de datos fija, definida en el momento de crear la base de datos, y un puntero al elemento actual.
MRTG: Herramienta para supervisar la carga de tráfico de interfaces de red.
MRTG-RRD: Visualiza los gráficos para el MRTG a partir de los datos en el formato RRDtool.

Descargamos shorewall_stats.
-----------------------------------------------------------
root@firewall:~#cd /etc/shorewall/
root@firewall:~#wget http://www.nightbrawler.com/code/shorewall-stats/shorewall_stats.tgz
O este
http://www.shorewall.com.au/contrib/shorewall_stats.tar.gz
O estos, re subido por mí
http://www.mediafire.com/?j475j0hn9h5j9
http://www.megaupload.com/?d=YN0OZOI6

root@firewall:~#/etc/shorewall#tar zxvf shorewall_stats.tgz
root@firewall:~#/etc/shorewall#cd shorewall_stats
root@firewall:~#/etc/shorewall/shorewall_stats#ls -l
-rw-r--r-- 1 root root 1028 Jan 19 16:52 accounting
-rw-r--r-- 1 root root 995 Jan 19 16:52 INSTALL
-rw-r--r-- 1 root root 859 Apr 18 11:46 mrtg.cfg
-rwxr-xr-x 1 root root 1935 Jan 19 16:52 shorewall_stats.pl
-----------------------------------------------------------

Editamos el fichero mrtg.cfg del shorewall_stats y agregamos lo siguiente
root@firewall:~#/etc/shorewall/shorewall_stats/#nano mrtg.cfg

WorkDir: /var/www/mrtg
Options[_]: growright, bits
Language: spanish
WriteExpires: Yes
LogFormat: rrdtool
EnableIPv6: no

###################################################
# MRTG con el Accounting del Shorewall
###################################################

# srvproxy
Target[srvproxy]:`perl /etc/shorewall/shorewall_stats.pl srvproxy`
MaxBytes[srvproxy]:12500000
Title[srvproxy]:Trafico de Server Proxy en la DMZ
PageTop[srvproxy]:<H1>Trafico de Server Proxy en la DMZ</H1>

# srvdns
Target[srvdns]:`perl /etc/shorewall/shorewall_stats.pl srvdns`
MaxBytes[srvdns]:12500000
Title[srvdns]:Trafico de Server DNS en la DMZ
PageTop[srvdns]:<H1>Trafico de Server DNS en la DMZ</H1>

# srvjabber
Target[srvjabber]:`perl /etc/shorewall/shorewall_stats.pl srvjabber`
MaxBytes[srvjabber]:12500000
Title[srvjabber]:Trafico de Server Jabber en la DMZ
PageTop[srvjabber]:<H1>Trafico de Server Jabber en la DMZ</H1>

# srvcorreo
Target[srvcorreo]:`perl /etc/shorewall/shorewall_stats.pl srvcorreo`
MaxBytes[srvcorreo]:12500000
Title[srvcorreo]:Trafico de Server Correo en la DMZ
PageTop[srvcorreo]:<H1>Trafico de Server Correo en la DMZ</H1>

# srvftp
Target[srvftp]:`perl /etc/shorewall/shorewall_stats.pl srvftp`
MaxBytes[srvftp]:12500000
Title[srvftp]:Trafico de Server FTP en la DMZ
PageTop[srvftp]:<H1>Trafico de Server FTP en la DMZ</H1>

# srvweb
Target[srvweb]:`perl /etc/shorewall/shorewall_stats.pl srvweb`
MaxBytes[srvweb]:12500000
Title[srvweb]:Trafico de Server Web en la DMZ
PageTop[srvweb]:<H1>Trafico de Server Web en la DMZ</H1>

# jefe1
Target[jefe1]:`perl /etc/shorewall/shorewall_stats.pl jefe1`
MaxBytes[jefe1]:12500000
Title[jefe1]:Trafico del Director
PageTop[jefe1]:<H1>Trafico del Director</H1>

# admin1
Target[admin1]:`perl /etc/shorewall/shorewall_stats.pl admin1`
MaxBytes[admin1]:12500000
Title[admin1]:Trafico del admin1
PageTop[admin1]:<H1>Trafico del admin1</H1>

# admin2
Target[admin2]:`perl /etc/shorewall/shorewall_stats.pl admin2`
MaxBytes[admin2]:12500000
Title[admin2]:Trafico del admin2
PageTop[admin2]:<H1>Trafico del admin2</H1>

Copiamos el mrtg.cfg editado para la carpeta ETC.
root@firewall:~# cp /etc/shorewall/shorewall_stats/mrtg.cfg /etc/

Creamos la carpeta mrtg en /var/www/ y le cambiamos el user a dicha carpeta, por el user www-data(apache2)
-----------------------------------------------------------
root@firewall:~# mkdir /var/www/mrtg
root@firewall:~# chown -R www-data /var/www/mrtg

Después de tener la carpeta mrtg en /var/www con los permisos para el apache2, reiniciamos el shorewall.
shorewall restart
Debemos ejecutar MRTG
root@firewall:~# mrtg
Si sale un error como este debemos, ejecutar este comando env LANG=C /usr/bin/mrtg

-----------------------------------------------------------------------
ERROR: Mrtg will most likely not work properly when the environment
variable LANG is set to UTF-8. Please run mrtg in an environment
where this is not the case. Try the following command to start:

env LANG=C /usr/bin/mrtg
-----------------------------------------------------------------------
root@firewall:~# env LANG=C /usr/bin/mrtg

Ya se pueden ver los ficheros generados .rrd en la carpeta /var/www/mrtg/
root@firewall:~#ls -l /var/www/mrtg/
-----------------------------------------------------------
srvproxy.rdd
srvdns.rdd
srvjabber.rdd
srvcorreo.rdd
srvftp.rdd
srvweb.rdd
jefe1.rdd
admin1.rdd
admin2.rdd

Y asimos irán apareciendo gradualmente los .png del Día.
-----------------------------------------------------------
srvproxy-day.png
srvdns-day.png
srvjabber-day.png
srvcorreo-day.png
srvftp-day.png
srvweb-day.png
jefe1-day.png
admin1-day.png
admin2-day.png

Nota: Para que aparezcan los .png de la Semana, Mes y Año
Se debe acceder a la URL http://localhost/cgi-bin/mrtg-rrd.cgi/ o http://ip-servidor/cgi-bin/mrtg-rrd.cgi/ y estos irán apareciendo, cada vez que accedas a dichos gráficos del Día.
-----------------------------------------------------------
srvproxy-week.png
srvproxy-month.png
srvproxy-year.png

Como:
Ver los logs del mrtg
-----------------------------------------------------------
tailf /var/log/mrtg/mrtg.log

Reiniciar mrtg
-----------------------------------------------------------
env LANG=C /usr/bin/mrtg

Hacer debuguear el mrtg
-----------------------------------------------------------
env LANG=C /usr/bin/mrtg /etc/mrtg.cfg --logging /var/log/mrtg/mrtg.log --debug=snpo,cfg

Asegúrese que la librería mrtg-rrd.cgi y fichero /etc/mrtg.cfg tiene los permisos siguientes.

Nota: Esta librería mrtg-rrd.cgi se encuentra dentro del paquete ya instalado MRTG-RRD
-----------------------------------------------------------
chown www-data.www-data /usr/lib/cgi-bin/mrtg-rrd.cgi
chmod 755 /usr/lib/cgi-bin/mrtg-rrd.cgi
chmod 755 /etc/mrtg.cfg

-rwxr-xr-x 1 www-data www-data 28304 Apr 21 2009/usr/lib/cgi-bin/mrtg-rrd.cgi
-rwxr-xr-x 1 root root 3004 Apr 21 2009/etc/mrtg.cfg
Crear un virtual host, habilitar virtual host y reiniciar apache2
-----------------------------------------------------------
root@firewall:~#nano /etc/apache2/sites-available/traficointernet.hosting.org
root@firewall:~#a2ensite traficointernet.hosting.org
root@firewall:~#invoke-rc.d apache2 restart

Así debe verse nuestro virtual host, si es que quieres tener uno.
------------------------------------------------------------------------------------------------------------------
<VirtualHost*:80>  
ServerName trafico.hosting.org
ServerAdmin serviciotecnicos@hosting.org  
DocumentRoot /var/www/mrtg  
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  
AddHandler cgi-script .cgi  
AllowOverride None  
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch  
Order allow,deny  
Allow from all  
ErrorLog /var/log/apache2/trafico.hosting.org-error.log  
LogLevel warn  
CustomLog /var/log/apache2/trafico.hosting.org-access.log combined  
ServerSignature On
</VirtualHost>
------------------------------------------------------------------------------------------------------------------

"Las obras de conocimiento deben ser libres, no hay excusas para que no sea así".
Richard Stallman – Fundador del software libre.


16 mar 2011

Shorewall en Linux Debian Squeeze 6.0

Shorewall es un software que permite crear más o menos fácil un firewall a partir del firewall interno de Linux (IPTables). Shorewall viene en casi todas las distribuciones de Linux, pero este post es basado en la distribución de Linux Debian Squeeze 6.0 (está probado!!!!)

Nuestro escenario va hacer tres interfaces de red, con un ancho de banda de 4mbit/s de descarga y subida de 512kbit/s de acceso a Internet
Interface 0 = eth0 = Internet (IP: 88.66.77.99 = int)
Interface 1 = eth1 = DMZ (IP: 10.0.0.1 = dmz)
Interface 2 = eth2 = Red Interna (IP: 172.16.0.1 = lan)
nota: los nombres declarados de las interfaces, no deben excederse de 5 caracteres y las IPs expuestas aquí no están ligadas a una red en particular, solo es para tener un escenario un poco más real y así tener un mejor entendimiento de nuestra configuración

1. Instalar el shorewall y copiar ficheros de configuración, que nos harán falta para extender nuevas funcionalidades al firewall nuestro
aptitude install shorewall

2. Copiar configuración estándar que necesites para la carpeta shorewall
cp /usr/share/doc/shorewall/default-config/interfaces /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/zones /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/policy /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/routestopped /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/rules /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/accounting /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/blacklist /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/hosts /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/masq /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/tcclasses /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/tcdevices /etc/shorewall/
cp /usr/share/doc/shorewall/default-config/tcrules /etc/shorewall/


3. Configurar para que el Shorewall arranque, cuando se reinicie la Pc y cambiar donde va debuguear nuestro shorewall
Editar /etc/shorewall/shorewall.conf
(Viene así por defecto) STARTUP_ENABLED=No
(Debemos ponerlo así) STARTUP_ENABLED=Yes
(Viene así por defecto) ROUTE_FILTER=No
(Debemos ponerlo así) ROUTE_FILTER=Yes

(Viene así por defecto) LOGFILE=/var/log/messages
*(Debemos ponerlo así) LOGFILE=/var/log/shorewall/firewall.log

(Viene así por defecto) STARTUP_LOG=/var/log/shorewall-init.log
(Debemos ponerlo así) STARTUP_LOG=/var/log/shorewall/shorewall-init.log

(Viene así por defecto) LOG_MARTIANS=Yes
**(Debemos ponerlo así) LOG_MARTIANS=No
#LAST LINE -- DO NOT REMOVE
## NO QUITE esta -- Última línea

Editar /etc/default/shorewall
***(Viene así por defecto) startup=0
(Debemos ponerlo así) startup=1

*Nota: para que esto ocurra debemos ir a la configuración del syslog, ya que si no se hacen los cambios pertinentes, el shorewall seguirá logueando en el fichero /var/log/syslog o /var/log/messages
**Nota: para que no debugué el shorewall, las entradas marcianas (no sé qué cojones es esto), si no se comenta esta linea, sale unos logs un poco incomodos y constantes
***Nota: Por último, fue un problema que me sucedió y que no lo dicen en todos los tutoriales de Debian con respecto a que el shorewall arranque por sí solo, cuando se reinicie la Pc

4. Configuración de las Interfaces, Zonas, Políticas por defectos para que estas últimas se puedan usar y configurar de una forma más facil.

nano /etc/shorewall/interfaces
#SOURCE DEST POLICY ***LOG LEVEL LIMIT:BURST
## Este archivo define las políticas de nivel alto para las conexiones entre las zonas definidas en el fichero "zones"
int eth0 detect tcpflags,nosmurfs,routefilter
dmz eth0 detect tcpflags,nosmurfs,routefilter
lan eth1 detect tcpflags,nosmurfs,routefilter
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --
***Nota:
tcpflags = Esta opción hace que Shorewall revise los paquetes por combinaciones ilegales de FLAGS (o banderas) TCP. Nunca está de más tenerlo.
nosmurfs = Filtra paquetes smurfs (paquetes que tienen como dirección de origen una dirección de broadcast)
routefilter = Indica al núcleo que debe rechazar los paquetes de la interfaz cuya dirección de origen se haya encaminada de fuera. Es decir, con otra interfaz distinta.
logmartians = Esta opción hace que Shorewall registre paquetes con direcciones de origen imposibles, para esto tenemos que tener habilitado el routefilter en la interfaz lo cual veremos (ROUTE_FILTER=Yes) /etc/shorewall/shorewall.conf.
blacklist = Analiza los paquetes contra la lista negra que definiremos más adelante en el archivo blacklist del shorewall.
dhcp = Esta opción se debe colocar si tu computadora obtiene su dirección IP vía DHCP, o si tu firewall está instalado en un servidor DHCP.
routeback = Permite que Shorewall filtre paquetes que se devuelven a esta misma interfaz

nano /etc/shorewall/zones
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
int ipv4
dmz ipv4
lan ipv4
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

nano /etc/shorewall/policy
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
all all DROP info
#Por defecto todo está denegado y será registrado en los LOGs(info)
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

Nota. Las zonas es un alias o variables que crea el shorewall de las interfaces físicas de Red en el sistema y que estas estarían ligadas a las políticas aplicar por el usuario y así brindar un mejor entendimiento de para donde iría o de donde vendría tráfico.

5. Configuración de las Reglas de acceso del FireWall - Shorewall
nano /etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK
# PORT PORT(S) DEST LIMIT GROUP
ACCEPT $FW dmz tcp 22,25,20,21,53,80,110,143,443,3128
ACCEPT $FW lan tcp 22,25,20,21,53,80,110,143,443,3128
ACCEPT $FW dmz tcp 53
ACCEPT $FW dmz udp 53

# Esta Macro permitir que desde el Firewall se pueda hacer telnet a cualquiera de las Zonas
Telnet/ACCEPT:info $FW all

# Esta Macro permitir que desde el Firewall se pueda hacer traceroute a cualquiera de las Zonas
Trcrt/ACCEPT:info $FW all

# Esta Macro permitir que desde el Firewall se pueda hacer Whois a cualquiera de las Zonas
Whois/ACCEPT:info $FW all

# Esta Macro permitir que desde el Firewall se pueda hacer Ping a cualquiera de las Zonas
Ping/ACCEPT:info $FW all

# Esta acl permite que esta ip del servidor de DNS que está en la DMZ, responda a las consultas hechas por los usuarios de la Lan y que el servidor # de DNS pueda alcanzar Internet y que responda a los servidores que estan en Internet por los dominios que están controlados por él.
# Nota: (Hoy en día, casi todos los servidores de DNS, responden por TCP y por UDP)
ACCEPT:info dmz:10.0.0.35 int tcp 53
ACCEPT:info dmz:10.0.0.35 int udp 53
ACCEPT:info lan dmz:10.0.0.35 tcp 53
ACCEPT:info lan dmz:10.0.0.35 udp 53

# Esta acl permite que esta ip del servidor de MX y asu vez tiene los buzones de los usuarios en la red que está en la DMZ, responda a las consultas hechas por los usuarios de la Lan y que pueda alcanzar Internet y que responda a los servidores que están en Internet por los dominios que están controlados por él.
ACCEPT:info dmz:10.0.0.37 int tcp 25 # para que el servidor de correo responda y envie correos a internet
ACCEPT:info dmz:10.0.0.37 int tcp 80 # para que el servidor de correo actualice sus bases de anti-virus y las del spamassassin

DNAT:info lan dmz:10.0.0.34 tcp 3128 - - 40/sec:5 #Publicar puertos del servidor Proxy a la Lan
DNAT:info lan dmz:10.0.0.36 tcp 5222 - - 40/sec:5 #Publicar puertos del servidor Jabber a la Lan
DNAT:info lan dmz:10.0.0.36 tcp 5223 - - 40/sec:5 #Publicar puertos del servidor Jabber a la Lan
DNAT:info lan dmz:10.0.0.37 tcp 25 - - 20/sec:5 #Publicar puertos del servidor de Correo a la Lan
DNAT:info lan dmz:10.0.0.37 tcp 80 - - 20/sec:5 #Publicar puertos del servidor de Correo a la Lan
DNAT:info lan dmz:10.0.0.37 tcp 110 - - 20/sec:5 #Publicar puertos del servidor de Correo a la Lan
DNAT:info lan dmz:10.0.0.37 tcp 143 - - 20/sec:5 #Publicar puertos del servidor de Correo a la Lan

# (40/sec:5) limitar la taza de conexiones a vente por segundo con ráfagas de hasta cinco conexiones para cada servicio:
# (20/sec:5) limitar la taza de conexiones a vente por segundo con ráfagas de hasta cinco conexiones para cada servicio:

# Esta acl permite que esta ip que estaria en la Lan, pueda alcanzar el puerto 25(smtp), 110(pop3), 143(imap) y 80(http) del servidor de correo de Gmail (4.4.8.8) esta IP de gmail es solo un ejemplo.
ACCEPT:info lan:172.16.0.5 int:4.4.8.8 tcp 25,80,110,143

# Esta acl permite que esta ip que estaria en la Lan, pueda alcanzar el puerto 80(http), 443(https) 20(ftp-data) y 21(ftp) de un servidor que esta en la DMZ.
ACCEPT:info lan:172.16.0.5 dmz:10.0.0.39 tcp 20,21,80,443
ACCEPT:info dmz:10.0.0.39 lan:172.16.0.5 tcp - 20
#notece que hay un guion y despues es que esta escrito puerto 20(ftp-data), que es para indicar que el puerto que se acepta es de la Fuente o mejor #dicho del servidor consultado, si este no se pone. la conexion no se realizara.
DNAT:info int dmz:10.10.10.35 tcp 53 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.35 udp 53 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.36 tcp 5269 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.37 tcp 25 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.38 tcp 20 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.38 tcp 21 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet
DNAT:info int dmz:10.10.10.39 tcp 80 - - 20/sec:5 #Publicar puertos del servidor de correo para Internet

# (20/sec:5) limitar la taza de conexiones a vente por segundo con ráfagas de hasta cinco conexiones para cada servicio:

# :info (Debe de tener en cuente que info es para hacer debuguear el shorewall en caso de que la lista de acceso coincida con la antes puesto por UD.)
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

6. Configuración de las Reglas de acceso de las IPs únicas para no perder la comunicación con el firewall en caso de problemas.
nano /etc/shorewall/routestopped
#INTERFACE HOST(S)
eth0 172.16.0.6,172.16.0.7 # IPs de los Admin de redes
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

7.
nano /etc/shorewall/tcdevices
eth0 4096kbit 512kbit

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

nano /etc/shorewall/tcclasses
#INTERFACE MARK RATE CEIL PRIORITY OPTIONS
eth0 1 full/2 full 1 tcp-ack,tos-minimize-delay
eth0 2 full/6 full 2 tcp-ack,tos-minimize-delay
eth0 3 full/7 full/4 3 tcp-ack,tos-minimize-delay
eth0 4 full/8 full/4 4 tcp-ack,tos-minimize-delay
eth0 5 full/21 full/2 5 tcp-ack,tos-minimize-delay
#tcp-ack (todos los paquetes de menos de 64 bytes entran esta clase)
#tos-minimize-delay (*TOS con mínima demora)
#default (predeterminado) para indicar que será la clase predeterminada.

#* TOS: Es usado para definir o cambiar el tipo de servicio de un paquete que puede ser usado para configurar políticas en la red considerando a ser # enrutados los paquetes, trata de no usarlo para paquetes que vayan hacia internet. En mi caso lo use y me fue de maravilla.

# full (100%) todo el ancho de banda si esta disponible. = 4096 kbit
# full/2 = 1/2 (50%) del ancho de banda si esta disponible. = 2048 kbit
# full/3 = 1/3 (33%) del ancho de banda si esta disponible. = 1365 kbit
# full/4 = 1/4 (25%) del ancho de banda si esta disponible. = 1024 kbit
# full/5 = 1/5 (20%) del ancho de banda si esta disponible. = 819 kbit
# full/6 = 1/6 (16%) del ancho de banda si esta disponible. = 682 kbit
# full/7 = 1/7 (14%) del ancho de banda si esta disponible. = 585 kbit
# full/8 = 1/8 (12.5%) del ancho de banda si esta disponible. = 512 kbit
# full/21 = 1/21 (4.76%) del ancho de banda si esta disponible. = 195 kbit

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --

nano /etc/shorewall/tcrules
## Traffic Shaping de Descarga
#MARK SOURCE DEST PROTO DEST SOURCE USER TEST LENGTH TOS
# PORT(S) PORT(S)
2:F 10.0.0.34 0.0.0.0/0 tcp 80,443 # Servidor Proxy
5:F 0.0.0.0/0!172.16.0.0/24 10.0.0.35 tcp 53 # Servidor DNS
5:F 0.0.0.0/0!172.16.0.0/24 10.0.0.35 udp 53 # Servidor DNS
5:F 10.0.0.35 0.0.0.0/0 tcp 53 # Servidor DNS
5:F 10.0.0.35 0.0.0.0/0 udp 53 # Servidor DNS
4:F 0.0.0.0/0 10.0.0.36 tcp 5269 # Servidor Jabber (Mensajeria corporativa)
4:F 10.0.0.36 0.0.0.0/0 tcp 5269 # Servidor Jabber (Mensajeria corporativa)
3:F 10.0.0.37 0.0.0.0/0 tcp 25 # Servidor de Correo
3:F 0.0.0.0/0!172.16.0.0/24 10.0.0.37 tcp 25 # Servidor de Correo
4:F 0.0.0.0/0!172.16.0.0/24 10.0.0.38 tcp 20 # Servidor FTP
4:F 0.0.0.0/0!172.16.0.0/24 10.0.0.38 tcp 21 # Servidor FTP
2:F 0.0.0.0/0!172.16.0.0/24 10.0.0.39 tcp 80 # Servidor Web
#
En donde:
(MARK)marca de clase corresponde al número de marca de la clase definida en tcclasses. Opcionalmente se puede definir el tipo de paquete, que puede ser :F (FORWARD), :P (PRETROUTING) y :T (POSTROUTING). Para efectos prácticos, y en la mayoría de los casos, :F (POSTROUTING) es la opción más adecuada, pues define el tipo de paquetes utilizados en un NAT.

(SOURCE)origen corresponde a la red o dirección IP de origen a la cual se quiere aplicar la clase.

(DEST)destino corresponde a la red o dirección IP de destino. Para fines prácticos, si se define 0.0.0.0/0, se estará definiendo todas las redes y direcciones IP.

(PROTO)protocolo se utiliza para definir si el protocolo de comunicación será TCP (tcp), UDP (udp) o ICMP (icmp).

(PORT(S))puertos de destino se refiere a los nombres o números de los servicios que se desea controlar. Si se define all como valor, se estará refiriendo a todos los puertos disponibles.

En el siguiente ejemplo, se define que las peticiones TCP a los puertos 20,21,25,53,80,443,5269 y UDP al puerto 53 desde un origen, hacia otro destino, se les aplicará las clases marcadas, para todo el tráfico cuya cadena sea FORWARD:

# (0.0.0.0/0!172.16.0.0/24) Este control de trafico es aplicable para todas las redes excepto para el segmento 172.16.0.0/24 de la red local
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
## NO QUITE esta Última línea -- agregar entradas ARRIBA DE ESTA LÍNEA --