Agenda: ejercicios-firewalls.txt

File ejercicios-firewalls.txt, 6.5 KB (added by hervey, 9 years ago)
Line 
1Gestion y Monitoreo de Redes
2Construyendo un firewall de Host (Ubuntu/Debian)
3
4Notas:
5------
6* Comandos que empiezan con un "$" implica que deberia ejecutar el comando
7  como un usuario general - no como root.
8* Comandos que empiezan con un "#" implica que deberia trabajar como el usuario root.
9* Comandos con lineas mas especificas (como "GW-RTR>" o "mysql>") implica que esta
10  ejecutando el comando en un equipo remoto o dentro otro programa.
11* Si una linea termina con un "\" esto indica que el comando sigue en la proxima
12  linea y Ud. deberia tratar el comando si como fuera en una sola linea.
13
14Exercicios Parte I
15----------------
16
170. Haz un log in en su PC o abre una ventana de terminal como el usuario sysadmin.
18
191. Creating an initial firewall
20   ----------------------------
211. Creando un firewall
22   -------------------
23
24Creamos un firewall simple para entender como se lo hace. Haremos una regla muy simple - bloqueamos acceso a
25ping a su PC. Es un buen ejemplo, pero no queremos hacer esto en la vida real. Ping es demasaido util para
26bloquear:
27
28Haz lo siguiente:
29
30        $ sudo iptables -A INPUT -p icmp --icmp-type echo-request -i lo -j DROP
31
32Revisamos si la regla de Firewall esta funcionando:
33
34        $ ping localhost
35
36Deberia fallar. Apreta ctrl-c para salir del comando ping.
37
38Si queria hacer esta regla permanente se lo haria:
39
40
41        $ sudo iptables-save > /etc/iptables.rules
42        $ sudo vi /etc/network/interfaces
43
44En el archivoe "interfaces" va a ver algo como:
45
46>>>
47
48# El interfaz de la red principal
49auto eth0
50iface eth0 inet static
51        address 67.218.55.101
52        netmask 255.255.255.192
53        network 67.218.55.64
54        broadcast 67.218.55.127
55        gateway 67.218.55.65
56        # dns-* options are implemented by the resolvconf package, if installed
57        dns-nameservers 67.218.55.67
58        dns-search pacnog.bluesky.as
59
60<<<<
61
62Al fin de esta entrada, despues que la linea que dice "dns-search" deberai agregar algo asi:
63
64        pre-up iptables-restore < /etc/iptables.rules
65
66Ahora graba el archivo y sale (":wq" en vi).
67
68Ahora cada vez que su maquina inicializa las reglas de iptables estaran aplicadas.
69
70
712. Removiendo la regla de iptables que bloquea ping
72   ------------------------------------------------
73
74Para remover una regla es simple. Hay dos maneras do hacerlo. Puede hacer:
75
76        $ sudo iptables -D INPUT -p icmp --icmp-type echo-request -i lo -j DROP
77
78Ahora intenta hacer un ping a su maquina:
79
80        $ ping localhost
81
82Deberia estar funcionando de nuevo. Pero, ya grabo la regla en /etc/iptables.rules. Esto significa que cada vez
83que la maquina se reinicializa la regla de bloquear ping por el interfaz "eth0" regresaria. Puede hacer lo
84siguiente:
85
86        $ sudo iptables -F
87
88Esto bota todas las reglas. O, puede dejar las cosas como estan. En ambos casos, ejecuta:
89
90        $ sudo iptables-save > /etc/iptables.rules
91
92Y, ahora tendreas y archivo sin reglas de iptables que va a estar cargada la proxima vez que la maquina se
93reinicializa.
94
95
963. Creamos unas regals de iptables estrictas
97   -----------------------------------------
98
99Para probar esto probablemente va a querer de hacer lo siguiente:
100
101        $ su -                  [el clave de usuario root]
102        # cd
103        # vi firewall.sh
104
105En este archivo agrega lo siguiente:
106
107>>>>
108
109#!/bin/bash
110
111iptables -F
112iptables -P INPUT DROP
113iptables -P FORWARD DROP
114
115iptables -A INPUT -i lo -j ACCEPT
116
117iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
118
119iptables -A INPUT -p tcp --dport 22 -j ACCEPT
120iptables -A INPUT -p tcp --dport 80 -j ACCEPT
121iptables -A INPUT -p tcp --dport 443 -j ACCEPT
122iptables -A INPUT -p udp --dport 53 -j ACCEPT
123iptables -A INPUT -p tcp --dport 53 -j ACCEPT
124iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
125
126iptables -A INPUT -j REJECT
127iptables -A FORWARD -j REJECT
128
129<<<<
130
131Ahora graba y sale de este archivo (":wq" in vi).
132
133Haz que el archivo sea ejectuable:
134
135        # chmod 755 firewall.sh
136       
137Corre las reglas de su nuevo firewall:
138
139        # ./firewall.sh
140
141Ahora hacemos algunas pruebas. Puede acceder los servicios corriendo en su maquina desde otra maquina (ssh, web,
142ping, algo mas?).
143
144Si tiene problemas intenta de entender que esta bloqueando el servicio y agregra una regla en iptables para
145dejar pasar los paquetes.
146
147Hay miles de reglas de iptables que uno puede agregar - incluyendo reglas dinamicas que pueden manejar
148ataques de DDos, los escaneos de puertos abierto, permitir acceso solo de algunas direcciones y/o rangos, etc.,
149etc.
150
151Aqui hay algunas referencias buenas que hablan con mas profundidad sobre la tema:
152
153        https://help.ubuntu.com/community/IptablesHowTo
154        http://www.shanghaiwebhosting.com/ssh-hosting/typical-iptables-firewall-rules-for-a-server-that-hosts-websites
155        http://forcespike.altervista.org/articles/setting-firewall-with-iptables.php
156        http://blogs.techrepublic.com.com/10things/?p=539
157        http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
158        http://wiki.vpslink.com/HOWTO:_Building_IPTables_rules
159        http://www.pizon.org/articles/building-a-linux-firewall-with-iptables.html
160
161Puede ver que grupo de reglas esta corriend si escribe:
162
163        # iptables -L
164
165Para hacer las reglas de firewall permanente tiene que hacer:
166
167        # iptables-save > /etc/iptables.rules
168
169Abajo hay una descripcion de cada regla en el grupo de reglas de iptables que corremos:
170
171# Limpiar todo las reglas de iptables de memoria
172iptables -F
173
174# bota todo los paquetes en la cadena INPUT en las tablas Filter
175iptables -P INPUT DROP
176
177# boto todo los paquetes en la cadena FORWARD y en las tablas Filter
178iptables -P FORWARD DROP
179
180# accepta todo los paquetes en nuestro interfaz de loopback
181iptables -A INPUT -i lo -j ACCEPT
182
183# permitirnos conectar saliendo de nustra maquina
184iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
185
186# permita connexiones entrando a puerto 22 (ssh)
187iptables -A INPUT -p tcp --dport 22 -j ACCEPT
188
189# permita connexiones entrando a puerto 80 (htpt)
190iptables -A INPUT -p tcp --dport 80 -j ACCEPT
191
192# permita connexiones entrando a puerto 443 (https)
193iptables -A INPUT -p tcp --dport 443 -j ACCEPT
194
195# permita conexiones entrando udp en el puerto 53 (dns)
196iptables -A INPUT -p udp --dport 53 -j ACCEPT
197
198# permita conexciones entrando de tcp en el puerto 53 (dns)
199iptables -A INPUT -p tcp --dport 53 -j ACCEPT
200
201# permita pedidos de icmp del tipo 8 (ECHO o ping)
202iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
203
204# rechaza todo lo demas que llega hasta aqui. Esto es inferido, pero lo hacemos explicitamenete.
205iptables -A INPUT -j REJECT
206iptables -A FORWARD -j REJECT
207
208
209Ahora esta corriendo un servidor con un firewall que le permite salir, pero solo permite acceso a los servicios que esta corriendo.
210
211
212