Manual de usuario, administracion e instalacion de servidores linux debian sarge 3.1 - by jose antonio escartín pfc etis fib(upc) 04-05-lafarga.upc.edu

xavazquez 2,502 views 184 slides Oct 25, 2014
Slide 1
Slide 1 of 361
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165
Slide 166
166
Slide 167
167
Slide 168
168
Slide 169
169
Slide 170
170
Slide 171
171
Slide 172
172
Slide 173
173
Slide 174
174
Slide 175
175
Slide 176
176
Slide 177
177
Slide 178
178
Slide 179
179
Slide 180
180
Slide 181
181
Slide 182
182
Slide 183
183
Slide 184
184
Slide 185
185
Slide 186
186
Slide 187
187
Slide 188
188
Slide 189
189
Slide 190
190
Slide 191
191
Slide 192
192
Slide 193
193
Slide 194
194
Slide 195
195
Slide 196
196
Slide 197
197
Slide 198
198
Slide 199
199
Slide 200
200
Slide 201
201
Slide 202
202
Slide 203
203
Slide 204
204
Slide 205
205
Slide 206
206
Slide 207
207
Slide 208
208
Slide 209
209
Slide 210
210
Slide 211
211
Slide 212
212
Slide 213
213
Slide 214
214
Slide 215
215
Slide 216
216
Slide 217
217
Slide 218
218
Slide 219
219
Slide 220
220
Slide 221
221
Slide 222
222
Slide 223
223
Slide 224
224
Slide 225
225
Slide 226
226
Slide 227
227
Slide 228
228
Slide 229
229
Slide 230
230
Slide 231
231
Slide 232
232
Slide 233
233
Slide 234
234
Slide 235
235
Slide 236
236
Slide 237
237
Slide 238
238
Slide 239
239
Slide 240
240
Slide 241
241
Slide 242
242
Slide 243
243
Slide 244
244
Slide 245
245
Slide 246
246
Slide 247
247
Slide 248
248
Slide 249
249
Slide 250
250
Slide 251
251
Slide 252
252
Slide 253
253
Slide 254
254
Slide 255
255
Slide 256
256
Slide 257
257
Slide 258
258
Slide 259
259
Slide 260
260
Slide 261
261
Slide 262
262
Slide 263
263
Slide 264
264
Slide 265
265
Slide 266
266
Slide 267
267
Slide 268
268
Slide 269
269
Slide 270
270
Slide 271
271
Slide 272
272
Slide 273
273
Slide 274
274
Slide 275
275
Slide 276
276
Slide 277
277
Slide 278
278
Slide 279
279
Slide 280
280
Slide 281
281
Slide 282
282
Slide 283
283
Slide 284
284
Slide 285
285
Slide 286
286
Slide 287
287
Slide 288
288
Slide 289
289
Slide 290
290
Slide 291
291
Slide 292
292
Slide 293
293
Slide 294
294
Slide 295
295
Slide 296
296
Slide 297
297
Slide 298
298
Slide 299
299
Slide 300
300
Slide 301
301
Slide 302
302
Slide 303
303
Slide 304
304
Slide 305
305
Slide 306
306
Slide 307
307
Slide 308
308
Slide 309
309
Slide 310
310
Slide 311
311
Slide 312
312
Slide 313
313
Slide 314
314
Slide 315
315
Slide 316
316
Slide 317
317
Slide 318
318
Slide 319
319
Slide 320
320
Slide 321
321
Slide 322
322
Slide 323
323
Slide 324
324
Slide 325
325
Slide 326
326
Slide 327
327
Slide 328
328
Slide 329
329
Slide 330
330
Slide 331
331
Slide 332
332
Slide 333
333
Slide 334
334
Slide 335
335
Slide 336
336
Slide 337
337
Slide 338
338
Slide 339
339
Slide 340
340
Slide 341
341
Slide 342
342
Slide 343
343
Slide 344
344
Slide 345
345
Slide 346
346
Slide 347
347
Slide 348
348
Slide 349
349
Slide 350
350
Slide 351
351
Slide 352
352
Slide 353
353
Slide 354
354
Slide 355
355
Slide 356
356
Slide 357
357
Slide 358
358
Slide 359
359
Slide 360
360
Slide 361
361

About This Presentation

No description available for this slideshow.


Slide Content

Memoria del Proyecto
|{
Servidor Linux
para conexiones seguras de una LAN a Internet
|{
Jose Antonio Escartn Vigo
Junio de 2005

Introduccion
En las siguientes lneas trato de describir los motivos que me llevaron a escoger un proyecto de este
estilo y de donde surgio la idea de realizar un documento informativo para facilitar la tarea de muchos
administradores de sistemas oveles", como yo cuando comence este proyecto.
En esta peque~na introduccion tambien se especican los objetivos que se pretenden conseguir y para
entrar en materia se comenta, muy por encima, la historia de Linux.
Motivacion
Me decid a realizar este proyecto por la inquetud personal que tena respecto al sistema operativo
Linux. Conozco a mucha gente que lo maneja y que me hablaba muy bien, por pereza y falta de tiempo,
nunca me haba puesto a experimentar a fondo con el. Si bien es cierto que lo tena instalado (una version
Mandrake 9.0) lo utilizaba solamente para realizar las practicas de la universidad y poca cosa mas.
Siempre me han atrado los sistemas operativos, bastante mas que la rama de programacion. Una
prueba de ello es que cuando llege a la FIB (vine del Ciclo formativo de grado superior: Desarrollo de
aplicaciones informaticas; es decir, basicamente programacion) me cambie a la rama de sistemas.
Actualmente me encuentro cursando el PFC de la Ingeniera tecnica en Informatica de Sistemas y
tengo la intencion de solicitar plaza de admision en la Ingeniera superior de informatica, carrera a la que
no pude acceder en primera instancia por restricciones legales, al acceder a la universidad por la va de
los ciclos formativos de grado superior.
A lo largo de la carrera, he cursado las siguientes asignaturas relacionadas con los sistemas operati-
vos: ISO (Introduccion a los sistemas operativos), SO (Sistemas Operativos), ASO (Administracion de
sistemas operativos), CASO (Conceptos avanzados de sistemas operativos), SSI (Seguridad en sistemas
informaticos). Ademas hace unos a~nos, antes de comenzar la carrera, realizaba trabajos de administrador
de sistemas en entornos Windows, para dos institutos (IES Piramide y IES Sierra de Guara) de mi ciudad
natal, Huesca.
El PFC: \Servidor Linux para conexiones seguras de una LAN a Internet" me ha permitido desarrollar
amplios conocimientos en el campo de los sistemas operativos, algo que realmente me interesa y supongo
que me permitira encarrilar mi carrera hacia el trabajo que pretendo desarrollar comoAdministrador de
sistemas.
Si en vez de elegir uno de los proyectos propuestos desde la universidad, hubiera pensado proponer
uno, sin duda habra elegido hacer un proyecto igual al que propuso el profesor Llus Perez Vidal del
departamente LSI de la UPC. Me siento bastante afortunado de haber realizado un PFC que realmente
me interesaba y motivaba.

vi Servidor Linux para conexiones seguras de una LAN a Internet
Motivacion del proyecto
Ante el problema de instalar un sistema operativo que controle los servicios de red y ademas sea estable
se nos plantean principalmente dos alternativas, Linux o Windows.
>Que ventajas tiene Linux sobre Windows?
Es mas seguro.
Ya que la gran mayora de los ataques de hackers son dirigidos a servidores Windows al igual que
los virus los cuales se enfocan principalmente a servidores con este sistema operativo. La plataforma
Linux es mas robusta lo cual hace mas difcil que algun intruso pueda violar la seguridad del sistema.
Es mas rapido.
Al tener una plataforma mas estable, se favorece la utilizacion de aplicaciones de todo tipo de
aplicaciones. La eciencia de su codigo fuente hace que la velocidad de las aplicaciones Linux sean
superiores a las que corren sobre Windows.
Es mas economico.
Ya que requiere menor mantenimiento. Los servidores Windows son mas costosos debido a que es
necesaria una frecuente atencion y monitoreo contra ataques de virus, hackers y errores de codigo.
El software Linux as como tambien un sin numero de aplicaciones, son de codigo abierto y estan
protegidas por la licencia GPL
1
, motivo por el que son distribuidas gratuitamente. No requieren
supervision constante ni pagos de mantenimiento para obtener Service Packs, que no son mas que
parches de seguridad para aplicaciones mal diseadas.
>Que ventajas tiene Windows sobre Linux?
Es mas facil.
Al ser de mayor facilidad de uso Windows en este momento continua siendo el sistema operativo mas
comercial lo cual se reeja en la disponibilidad de aplicaciones, facilidad de mantenimiento as como
soporte en el desarrollo de nuevas aplicaciones.
Las aplicaciones se desarrollan en menor tiempo.
Fruto de la inversion realizada por Microsoft y aunado a una comunidad de programadores cada vez
mas grande se ha logrado facilitar el desarrollo de aplicaciones y sistemas que corran sobre servidores
Windows lo cual se ve reejado en tiempos de desarrollo menores. De la misma forma, la curva de
aprendizaje en el sistema Windows es mucho menor.
La alternativa mas sencilla y a la vez mas ineciente es elegir un sistema operativo Windows. Lo que
se busca es seguridad, integridad de datos y eciencia del sistema, por tanto nos decantaremos por una
distribucion GNU/Linux.
El proyecto surge ante la necesidad de escoger entre las distribuciones Linux actuales, la mas adecuada
para instalar un servidor e implementar las aplicaciones necesarias para dar servicios a clientes de sistemas
operativos Linux y Windows.
Esto es algo no trivial y el proyecto trata de ser una ayuda, apoyo y consulta para facilitar la tarea de
una persona que trate de implementar un servidor.
1
GPL: Licencia publica GNU. Segun se cita en [Sha01] expecica explcitamente que el software desarrollado es libre y
que nadie puede coartar estas libertados. Se puede revender, incluso obteniendo benecio; sin embargo, en esa reventa el
vendedor debe de proveer el codigo fuente completo, incluyendo cualquier modicacion realizada. El paquete continua bajo
GPL y puede ser distribuido de modo libre y revendido de nuevo obteniendo tambien benecio. Es de una importancia
primordial la clausula de responsabilidad: los programadores no son responsables de cualquier da~no causado por su software.
Jose Antonio Escartn Vigo, Junio 2005.

vii
Objetivos
Este documento esta elaborado para describir la implementacion de un servidor GNU/Linux, as como
especicar y resolver los principales problemas que un administrador se encuentra al poner en funcio-
namiento un servidor. Se aprendera a congurar un servidor GNU/Linux describiendo los principales
servicios utilizados para compartir archivos, paginas web, correo y otros que veremos mas adelante.
La herramienta de conguracion Webmin, que se detalla en uno de los ultimos captulos es indepen-
diente de la distribucion GNU/Linux que utilicemos y nos permitira administrar de forma transparente
diferentes distribuciones, con la ventaja que eso supone si alguna vez cambiamos de distribucion.
Cuadro 1: Objetivos del proyecto
Estudiar el entorno de composicion de textos L
ATEX
Analizar e instalar las distribuciones Linux mas importantes
Estudiar la compilacion de kernels
Analizar y congurar los servicios para usuarios Linux y Windows
Establecer sistemas de proteccion
Realizar pruebas de seguridad del servidor
Documentar el proyecto
Marco historico
Como se especica en [BB00], Linux hizo su aparicion en 1991 cuando el nlandes Linus Torvalds deci-
dio publicar en Internet su proyecto de carrera, animando a la comunidad internacional de programadores
a mejorarlo. Nacio como una mejora de Minix, una version de Unix para ordenadores PC basados en el
procesador 8086 de Intel, Linux por su parte utilizaba el procesador 386SX de Intel.
Posiblemente una de las explicaciones del exito de Linux es GNU
1
que junto con la FSF
2
(Free Software
Fundation), tratan de promover el desarrollo de programas cuyo codigo sea publico y compartido. Una de
las principales aportaciones GNU fue Linux, un sistema operativo de libre distribucion.
A partir de 1994 emperzaron a aparecer las primeras distribuciones de CD-ROM, junto con el codigo
fuente del sistema operativo, se dispona de diversas utilidades y aplicaciones sin tener que descargarlas.
Ese a~no aparecieron los primeros grupos locales de usuarios de Linux y la primera revista on-line especia-
lizada. Al a~no siguiente se empezo a trabajar en las primeras versiones de Linux para plataforma no Intel
y los primeros desarrollos de instaladores parcialmente automaticos. A partir de 1996 Linux comienza a
difundirse de forma mas general en Espa~na, a~no en el que se inicia el proyecto de documentacion de Linux
en catellano (LUCAS) y se comienzan a organizar los primeros grupos de usuarios.
El futuro es muy prometedor, cada vez es mayor el numero de fabricantes de software y hardware que
han mostrado un creciente interes.
1
GNU: GNU no es Unix. Denicion recursiva que representa el humor informatico en su maxima expresion
2
FSF: Fundacion para el software libre. Es el principal contribuidor del Proyecto GNU, depende de donaciones privadas y
se dedica a preservar, proteger y promover los derechos de los usuarios y su libertad para usar, estudiar, copiar, modicar y
redistribuir software. Apoya la libertad de expresion, prensa y asociacion en internet, el derecho a usar software criptograco
en comunicaciones privadas y el derecho a escribir software sin los impedimentos del monopolio.
Jose Antonio Escartn Vigo, Junio 2005.

viii Servidor Linux para conexiones seguras de una LAN a Internet
Requisitos mnimos Linux
Probablemente la conguracion mnima sobre la que Linux sea capaz de funcionar sea un 386SX con 2
Mb de memoria RAM y una disquetera de 1.44, aunque con estas caractersticas simplemente podremos
arrancar el sistema y poco mas. Una conguracion mas realista debera incluir 4Mb de Ram si no vamos
a utilizar el entorno graco, 8Mb en caso contrario y un mnimo de 40MB de espacio en disco, aunque
en las distribuciones actuales el espacio debera ser mayor de unos 300Mb. Cantidades ridculas si las
comparamos con los dispositivos disponibles actualmente, pero que permiten reutilizar materiales mas
antiguos de los que se pueda disponer. Frente a estos requerimientos, se encuentran los sistemas Windows,
con unos requerimientos
1
desorbitados.
Linux soporta cualquier CPU compatible con los procesadores x86 de Intel, pudiendose encontrar
versiones que funcionan con procesadores 680x0 de Motorola utilizados en ordenadores Amiga y Atari.
Tambien son compatibles con Linux muchos ordenadores basados en Alpha, ciertas maquinas Sparc, las
maquinas basadas en PowerPC como por ejemplo los ordenadores Macintosh de Apple, as como ARM,
MIPS y algunos tipos de agendas electronicas, telefonos y consolas de juegos.
Notas Previas
Se van a tomar varias la siguiente notacion para el documento:
Cuando aparezcan frases que el usuario pueda introducir por teclado se hara notar por el tipo de
letra mecanograca,Verbatim
Al hacer referencia a un comando que deba de ser introducido por una cuenta con privilegios de
root, ira precedido por el caracter \#"
Al hacer referencia a un comando que puede a ser ejecutado por un usuario cualquiera del sistema,
si tiene privilegios para ello, ira precedido por el caracter \$"
Cuando se muestran codigos el caracter \#" al inicio de la frase especica que esa frase concreta es
un comentario dentro del codigo.
1
WindowsXP: Procesador 233Mhz, 64Mb Ram y 1.5 Gb de disco; Windows2003 Server: Procesador 550Mhz, 256Mb Ram
y 1.5 Gb de disco
Jose Antonio Escartn Vigo, Junio 2005.

Indice general
Introduccion IV
I Tareas previas 1
1. Planicacion 3
1.1. Fases del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Esquema temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Seleccion de Herramientas 9
2.1. Seleccion de Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1. Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2. Clientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Seleccion de la distribucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.1. Distribuciones Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3. Distribucion elegida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3. Seleccion del Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.1. Planner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.2. L
ATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.3. Kile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.4. Prosper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.5. Programas gracos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
II Instalacion base 19
3. Instalacion de la distribucion 21
3.1. Proyecto Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1. Unstable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.2. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.3. Stable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.4. Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Debian Sarge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3. Debian Woody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4. Actualizacion de Woody a Sarge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4. Primeros pasos 25
4.1. Particionar el disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2. Gestores de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3. Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.1. A~nadir nuevos usuarios al sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.2. A~nadir grupos al sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

x Servidor Linux para conexiones seguras de una LAN a Internet
4.3.3. Bases de datos de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4. Permisos de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.1. Tipos de archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.2. Modicar los permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.3. Permisos especiales: SUID, SGID y bit de persistencia . . . . . . . . . . . . . . . . 32
4.4.4. Cambiar un archivo de propietario o grupo . . . . . . . . . . . . . . . . . . . . . . 33
4.5. Instalacion de aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.5.1. Compilacion de paquetes desde archivos fuente . . . . . . . . . . . . . . . . . . . . 33
4.5.2. Dpkg: Instalador de paquetes precompilados . . . . . . . . . . . . . . . . . . . . . . 36
4.5.3. Apt: Gestor de paquetes Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5.4. Alien: Convertir paquetes .rpm a .deb (formato Debian) . . . . . . . . . . . . . . . 38
4.5.5. Encontrar paquetes y sus dependencias . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5.6. Problemas al instalar paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.6. Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.6.1. Tipos de shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.2. Caractersticas de la shell Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.3. Ejecucion de procesos en la shell Bash . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.4. Variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.5. Conguracion del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.6.6. Redireccionamientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.7. Consolas virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5. Kernel 45
5.1. >Por que compilar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2. Acerca de los modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3. Kernel-image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4. Kernel-source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.1. Instalar un kernel-source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.2. Crear un paquete .deb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.5. Compilar Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.5.1. Paquetes necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.5.2. Comprobar el hardware disponible . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5.3. Metodo de compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5.4. Parchear el kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.5.5. Consejos para la conguracion del kernel . . . . . . . . . . . . . . . . . . . . . . . . 49
6. Interfaz graco 51
6.1. X-Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.1. Conguracion X-Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.2. Arrancar X-Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2. Gestores de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3. Entornos de escritorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.1. Kde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.2. Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.3.3. Otros entornos de escritorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7. Infraestructura de redes 59
7.1. Arquitectura de redes (Modelo OSI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2. Direcciones IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.2.1. Datagramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.2.2. Encaminamiento IP (router y gateway) . . . . . . . . . . . . . . . . . . . . . . . . 63
7.2.3. Mascaras de red y notacion de barra inclinada . . . . . . . . . . . . . . . . . . . . 64
7.2.4. Subneting (CIDR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.2.5. Enmascaramiento IP (NAT, Network Adress Translation) . . . . . . . . . . . . . . 66
7.3. Resolucion de direcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Jose Antonio Escartn Vigo, Junio 2005.


Indice general xi
7.3.1. ARP (Adress Resolution Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.3.2. RARP (Reverse Address Resolution Protocol) . . . . . . . . . . . . . . . . . . . . . 68
7.4. Protocolos de red, IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.4.1. ICMP (Internet Control Message Protocol) . . . . . . . . . . . . . . . . . . . . . . 69
7.4.2. OSPF (Open Shortest Path First) . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.4.3. Protocolo BGP (Border Gateway Protocol) . . . . . . . . . . . . . . . . . . . . . . 70
7.4.4. IGMP (Internet Group Management Protocol) . . . . . . . . . . . . . . . . . . . . 70
7.5. Protocolos de transporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.5.1. UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.5.2. TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.6. Protocolos de aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.6.1. NFS (Network File System) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.6.2. SNMP (Simple network management protocol) . . . . . . . . . . . . . . . . . . . . 74
7.6.3. DNS (Domain Name Server) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.6.4. SMTP (Simple Mail Transfer Protocol) . . . . . . . . . . . . . . . . . . . . . . . . 74
7.6.5. TELNET (Remote login) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.6.6. FTP (File Transfer Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.6.7. HTTP (Hyper Text Transport Protocol) . . . . . . . . . . . . . . . . . . . . . . . . 75
7.7. Protocolo TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8. Conguracion de dispositivos de red 79
8.1. Etherconf: Congurador graco de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.2. Ifcong: Congurador de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.3. Route: Tablas de redireccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.4. Netstat: Estado de las conexiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.5. Conguracion de interfaces usando DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.6. Archivo /etc/network/interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.6.1. Direcciones IP estaticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.6.2. Direcciones IP dinamicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.6.3. Interfaz Wi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.6.4. Interfaz PPPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.6.5. Puertas de enlace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.6.6. Interfaces virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.7. Reconguracion de la red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.7.1. Conguracion de red durante el arranque . . . . . . . . . . . . . . . . . . . . . . . 87
8.7.2. Hotplug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.7.3. Ifplugd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.8. Resolvconf: Resolucion de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.9. Archivos de conguracion de Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.10. Iwcong: Conguracion wireless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.11. Resolucion de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
III Instalacion de Servicios 91
9. Servicios de red 93
9.1. Servidor DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.1.1. Asignacion de direcciones IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.1.2. Parametros congurables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.1.3. Implementaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.1.4. Anatoma del protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.1.5. Conguracion de un servidor DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.1.6. Conguracion de un cliente DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
9.1.7. Conguracion graca de DHCP, interfaz Webmin . . . . . . . . . . . . . . . . . . . 99
9.2. BIND: Servidor de nombres DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Jose Antonio Escartn Vigo, Junio 2005.

xii Servidor Linux para conexiones seguras de una LAN a Internet
9.2.1. >Para que necesitamos un DNS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9.2.2. Servicios que activa un DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.2.3. Conguracion del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.2.4. Traduccion de nombres a direcciones IP . . . . . . . . . . . . . . . . . . . . . . . . 103
9.2.5. Conguracion graca de DNS BIND, interfaz Webmin . . . . . . . . . . . . . . . . 103
9.2.6. Seguridad en DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.3. NIS: Servicio de informacion de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.3.1. Funcionamiento basico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.3.2. Servidores NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.3.3. Conguracion del servidor NIS maestro . . . . . . . . . . . . . . . . . . . . . . . . 110
9.3.4. Cliente NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.3.5. Herramientas basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.3.6. Problemas de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9.4. NFS: Sistema de archivos Linux en red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.4.1. Cliente NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.4.2. Montaje automatico de particiones NFS . . . . . . . . . . . . . . . . . . . . . . . . 118
9.4.3. Propiedades de las particiones montadas . . . . . . . . . . . . . . . . . . . . . . . . 118
9.4.4. Servidor de NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
9.4.5. Conguracion graca de NFS, interfaz Webmin . . . . . . . . . . . . . . . . . . . . 120
9.5. Samba: Servicio de conexiones para sistemas Microsoft . . . . . . . . . . . . . . . . . . . . 121
9.5.1. Comparticion de recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
9.5.2. >Que es Samba? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
9.5.3. Conguracion graca de Samba, interfaz SWAT . . . . . . . . . . . . . . . . . . . . 123
9.5.4. Funcionamiento de CIFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
9.5.5. Parametros globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.5.6. Impresoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.5.7. Comparticion de directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.5.8. Limitar acceso de los usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.5.9. Integracion de Samba en un dominio NT . . . . . . . . . . . . . . . . . . . . . . . 127
9.5.10. Conguracion de Samba como controlador de dominio . . . . . . . . . . . . . . . . 128
9.5.11. Cliente Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
9.5.12. Conguracion graca de Samba, interfaz Webmin . . . . . . . . . . . . . . . . . . . 129
9.6. ProFTPD: Servidor FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
9.6.1. Servidor ProFTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
9.6.2. Conguracion graca de ProFTP, interfaz Webmin . . . . . . . . . . . . . . . . . . 132
9.6.3. Clientes FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
10.Servicios de usuario 133
10.1. Cuotas de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.1.1. Arrancar el sistema de cuotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.1.2. Asignar cuotas a los usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
10.1.3. Conguracion graca de Quote, interfaz Webmin . . . . . . . . . . . . . . . . . . . 134
10.2. Cups: Servidor de impresion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.2.1. Servidor Cups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.2.2. Servidor Cups para Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.2.3. Clientes Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
10.2.4. Clientes Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
10.2.5. Solucionar problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
10.3. Servidor Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
10.3.1. Servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
10.3.2. Apache-SSL: Conexiones seguras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.3.3. Creacion de un servidor web seguro . . . . . . . . . . . . . . . . . . . . . . . . . . 152
10.3.4. Apache 2.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.3.5. Ataques al servidor Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Jose Antonio Escartn Vigo, Junio 2005.


Indice general xiii
10.4. Servidor de correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.4.1. Exim: Correo corporativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.4.2. Fetchmail: Correo externo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.4.3. Horde: Webmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.4.4. Protocolo IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10.4.5. Filtrado de correo, eliminar virus y Spam con Procmail . . . . . . . . . . . . . . . 163
10.4.6. ClamAV: Antivirus para correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.4.7. SpamAssassin: Filtro basado en reglas . . . . . . . . . . . . . . . . . . . . . . . . . 167
10.4.8. Bogolter: Filtro bayesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
10.5. Jabber: Mensajera instantanea para corporaciones . . . . . . . . . . . . . . . . . . . . . . 172
10.5.1. Servidor Jabber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
10.5.2. Conguracion graca de Jabber, interfaz Webmin . . . . . . . . . . . . . . . . . . . 174
10.5.3. Clientes Jabber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
11.Comunicaciones seguras 177
11.1. Shell seguro: OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
11.1.1. Cliente OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
11.1.2. Servidor OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
11.2. Criptografa y cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
11.2.1. Tipos de cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
11.2.2. Estandares generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.2.3. Aplicaciones de la criptografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.2.4. Protocolos de cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
11.2.5. OpenPGP: Aplicacion de cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
12.Herramientas de seguridad 191
12.1. Herramientas basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
12.1.1. Ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
12.1.2. Traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
12.1.3. Whois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
12.1.4. Dig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
12.1.5. Finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
12.2. Firewall o cortafuegos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
12.2.1. Polticas de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
12.2.2. Modos de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
12.2.3. IPTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
12.3. Squid: Proxy transparente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
12.4. Bastille Linux: Herramienta de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
12.4.1. Ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
12.4.2. Modos de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
12.5. Copias de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
12.5.1. Dispositivos de cinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
12.5.2. Mt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.5.3. Dump y Restore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.5.4. Conguracion graca de backups, interfaz Webmin . . . . . . . . . . . . . . . . . . 210
12.5.5. K3B: Grabacion de CDs y DVDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
13.Sistemas de deteccion de intrusiones 213
13.1. Tipos de IDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
13.1.1. NIDS (Network Intrusion Detection System) . . . . . . . . . . . . . . . . . . . . . 213
13.1.2. IDS (Deteccion de actividades anomalas) . . . . . . . . . . . . . . . . . . . . . . . 214
13.1.3. IPS (Intrusion Prevention System) . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13.2. Ubicacion del NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13.3. El problema de los falsos positivos de NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . 215
13.4. Obtener lo maximo del IDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Jose Antonio Escartn Vigo, Junio 2005.

xiv Servidor Linux para conexiones seguras de una LAN a Internet
13.4.1. Conguracion apropiada del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 217
13.4.2. Ajuste del IDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
13.4.3. Herramientas de analisis IDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
13.5. IDS Snort (NIDS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.5.1. Caractersticas basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.5.2. Instalacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.5.3. Modos de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
13.5.4. Modos de alerta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
13.5.5. Optimizar la conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
13.5.6. Clases de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
13.5.7. Ejecutar como servicio del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
13.5.8. Conguracion graca de Snort, interfaz Webmin . . . . . . . . . . . . . . . . . . . 226
13.5.9. Personalizar reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
13.6. Deteccion de intrusiones en el host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
13.7. Integridad de archivos: IDS Tripwire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
13.8. ACIDlab: Analizar alertas IDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
13.9. Logcheck: Analizar logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
13.10.PortSentry: Detectar escaneos de puertos . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
13.11.Detectores de sniers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
13.11.1.Neped . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
13.11.2.Sentinel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
13.12.Chkrootkit: Detector de rootkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
13.13.HoneyPots: Entretener a los atacantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
13.13.1.>Como funcionan? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
13.13.2.Ventajas y desventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
13.13.3.Utilidades de honeypots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
13.13.4.Tipos de honeypots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
13.13.5.Otras caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
13.13.6.Honeynets: alta interaccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
13.13.7.Honeyd: baja interaccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
14.Redes inalambricas 257
14.1. Estandar 802.11 (Wi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
14.2. Peligros de las LAN inalambricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
14.3. El fenomeno del \Wardriving" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
14.4. Seguridad en redes inalambricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
14.4.1. Clave WEP (Wired Equivalente Privacy) . . . . . . . . . . . . . . . . . . . . . . . 262
14.4.2. Clave WPA (Wi Protected Access) . . . . . . . . . . . . . . . . . . . . . . . . . . 262
14.4.3. Clave WPA2 (Estandar 802.11i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
14.4.4. Medidas preventivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
14.5. Servidor Radius: FreeRadius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
14.5.1. Congurar FreeRadius con EAP-TLS . . . . . . . . . . . . . . . . . . . . . . . . . 267
14.5.2. Generar los certicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
14.5.3. Comprobar el funcionamiento de FreeRadius . . . . . . . . . . . . . . . . . . . . . 270
14.5.4. Congurar AP (Router 3Com) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
14.5.5. Clientes Linux: WPA-Supplicant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
14.5.6. Clientes Windows: WindowsXP + SP2 . . . . . . . . . . . . . . . . . . . . . . . . . 272
14.6. Herramientas de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
14.6.1. Descubrir redes ilegales e intrusos: Kismet Wireless . . . . . . . . . . . . . . . . . . 273
14.6.2. Desencriptar claves inalambricas WEP: Airsnort . . . . . . . . . . . . . . . . . . . 275
15.Servicio de administracion por Web: WebMin 279
15.1. Usuarios de Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
15.2. Secciones Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
15.3. Modulos de Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Jose Antonio Escartn Vigo, Junio 2005.


Indice general xv
16.Servicios de monitorizacion del sistema 287
16.1. Monitor del sistema: Top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
16.2. Rendimiento del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
16.2.1. CPU, dispositivos y particiones de E/S: iostat . . . . . . . . . . . . . . . . . . . . . 288
16.2.2. Memoria: free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
16.2.3. Memoria virtual: vmstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
16.2.4. Disco: df, du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
16.2.5. Usuarios y sus procesos: w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
16.3. Gestionar procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
16.3.1. Visualizar procesos: ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
16.3.2. Enviar signals a procesos: kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
16.3.3. Modicar prioridades: nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
16.4. Terminal de root con prioridad maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
16.5. Programacion de tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
16.5.1. At . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
16.5.2. Cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
16.5.3. Tareas periodicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
16.5.4. Anacron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
IV Valoracion nal 297
17.Pruebas del sistema 299
17.1. Nessus: Escaner de vulnerabilidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
17.1.1. Congurar el programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
17.1.2. Ejecucion de Nessus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
17.1.3. Otros interfaces de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
17.2. Nmap: Escaner de red y puertos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
17.2.1. Caractersticas basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
17.2.2. Tipos de escaneado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.2.3. Opciones de descubrimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.2.4. Opciones de ajuste de frecuencia de Nmap . . . . . . . . . . . . . . . . . . . . . . . 305
17.2.5. Otras opciones de Nmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
17.2.6. Salida de Nmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
17.2.7. Conguracion graca de Nmap, interfaz Nmapfe . . . . . . . . . . . . . . . . . . . 307
17.3. Pruebas de carga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
18.Estudio Economico 309
18.1. Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
18.2. Costes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
18.3. Resumen economico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
18.4. Modicaciones a los costes economicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
19.Conclusiones 311
V Apendices 315
A. Comandos basicos 317
B. Debian en castellano 319
C. Archivos de conguracion 321
D. >Por que Debian no tienerc.local? 325
Jose Antonio Escartn Vigo, Junio 2005.

xvi Servidor Linux para conexiones seguras de una LAN a Internet
E. Puertos por defecto 327
F. Manual del editor Vim (Vi mejorado) 329
G. Gua rapida de IPTables 331
Debian Sarge, nueva version estable 333
Licencia CC - Reconocimiento-CompartirIgual 335
Paginas Web 339
Bibliografa 343
Jose Antonio Escartn Vigo, Junio 2005.

Indice de guras
1.1. Planicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1. Planner, distribucion de recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. Planner, diagrama temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3. Editor Kile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4. Prosper, tipos de transparencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7.1. IP, rango de direcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.2. IP, direcciones reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.3. IP, cabecera del datagrama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.4. UDP, cabecera del datagrama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.5. TCP, cabecera del datagrama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
9.1. DHCP, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.4. DNS BIND, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.10. NIS, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.11. NFS, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
9.12. Samba, interfaz graca SWAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.13. Samba, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.14. ProFTPD, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
10.1. Quota, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.2. Cups, interfaz graca de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.3. Cups, impresora HP815 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.4. Apache, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
10.5. Apache, parametros de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.6. Apache, modulo HtAccess Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
10.7. Webalizer, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.8. Apache, servidores virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.9. Apache, comparticion de carpetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.10.Apache, modulos instalados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.11.Exim, monitor con la interfaz Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.12.Fetchmail, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

xviii Servidor Linux para conexiones seguras de una LAN a Internet
10.13.Procmail, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.14.Procmail, crear acciones de forma graca . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.15.SpamAssassin, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
10.16.SpamAssassin, opciones de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
10.17.Jabber, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
10.18.Kopete, cliente de mensajera instantanea . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
10.19.Gaim, cliente de mensajera instantanea . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
11.1. SSHD, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
12.1. Backups, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
12.2. K3B, grabacion de CDs y DVDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
13.1. Snort, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
13.2. Acidlab, detalle de una alerta de Snort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
13.3. Logcheck, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
13.4. PortSentry, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
14.1. Smbolos urbanos de redes wi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
14.2. WEP-WPA, comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
14.3. WPA/EAP, funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
14.4. WPA, autenticacion servidor Radius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
14.5. Servidor Radius, sistema de autenticacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
14.6. Servidor Radius, desvo en el router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
14.7. AirSnort, descifrado de claves WEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
15.1. Webmin, pantalla de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
15.2. Webmin, pantallas de la interfaz Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
15.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
17.1. Nessus, conguracion de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
17.2. Nessus, vulnerabilidades del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
D.1. Runlevels, modulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
G.1. Licencia Reconocimiento-CompartirIgual . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Jose Antonio Escartn Vigo, Junio 2005.

Indice de cuadros
1. Objetivos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vii
2.1. Distribuciones Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1. Lilo, archivo de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2. /etc/passwd, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3. /etc/passwd, descripcion de campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4. /etc/shadow, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5. /etc/shadow, descripcion de campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.6. /etc/group, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.7. /etc/group, descripcion de campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.8. Tipos de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.9. Chmod, Opciones basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.10. Chmod, opciones especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.11. Makele, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.12. Dpkg, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.13. /etc/apt/sources.list, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.14. Apt, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.15. Variables habituales del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1. Kernel, paquetes basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2. Kernel 2.6, paquetes necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3. Metodo de compilacion del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1. /etc/X11/XF86Cong-4, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.1. Modelo de referencia OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2. Tipos de redes, n.
o
de hosts por red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.3. Notacion de barra inclinada en IPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.4. TCP/IP, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.5. TCP/IP, esquema de transmision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.1. Netstat, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.1. /var/yp/Makele, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.1. Apache, archivos de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
11.1. SSH cliente, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
12.1. Ping, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
12.2. Dig, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
12.3. IPTables, especicaciones de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
12.4. IPTables, comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
12.5. IPTables, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

xx Servidor Linux para conexiones seguras de una LAN a Internet
12.6. /etc/squid/squid.conf, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
12.7. Mt, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.8. Dump, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
12.9. Restore, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
13.1. Snort, opciones de alerta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
13.2. Snort, archivos de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
13.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
13.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
13.5. Snort, opciones de personalizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
13.6. Tripwire, mascaras de propiedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
13.7. Tripwire, mascaras predenidas en plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . 232
13.8. Acidlab, variables de conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
13.9. PortSentry, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
14.1. Estandares 802.11 inalambricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
14.2. Kismet, conguracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
14.3. Kismet, conguracion de la interfaz graca . . . . . . . . . . . . . . . . . . . . . . . . . . 274
14.4. Kismet, teclas de la interfaz graca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
15.1. Webmin, modulos disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
16.1. Ps, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
17.1. Nmap, tipos de escaneo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.2. Nmap, opciones de descubrimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.3. Nmap, conguraciones de frecuencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
17.4. Nmap, otras opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
17.5. Nmap, codicacion de color de la salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
18.1. Recursos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
18.2. Costes del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Jose Antonio Escartn Vigo, Junio 2005.

Parte I
Tareas previas

Captulo 1
Planicacion
El numero de creditos asignados al proyecto es de 22,5 y decid que cada credito me supondra una
carga de 20 horas, por lo tanto, la planicacion ha sido realizada para un total de 450 horas.
1.1. Fases del proyecto
Planicacion temporal: 20 horas. Mediante la herramienta de gestion de proyectos Planner, se realiza
una division temporal de las actividades a realizar.
Trabajo preliminar: 40 horas. Se eligen una serie de herramientas y sistemas sobre los cuales se
desarrolla el proyecto.
Instalacion base y conguracion: 80 horas. Implementacion y conguracion del entorno de trabajo.
Conguracion de los servicios: 120 horas. Basandose en los servicios tpicos que implementan los
servidores de red, se instalan una serie de servicios estandar para clientes de sistemas operativos
Linux y Windows.
Pruebas del sistema y conclusiones: 30 horas. Apoyandose en una serie de pruebas de carga se deter-
mina la eciencia real, de los servicios del servidor. As mismo se utilizan varias herramientas para
determinar la seguridad del servidor y comprobar su resistencia a posibles intrusiones o agresiones
externas.
Aprendizaje del entorno L
ATEX: 20 horas. A traves de varios libros, que detallo en la bibliografa, se
aprende a utilizar el entorno de composicion de textos L
ATEX para elaborar la documentacion del
proyecto.
Documentacion del proyecto: 140 horas. A lo largo del desarrollo de las fases anteriores se realizan
una serie de informes parciales que son la base de la memoria del proyecto.
1.2. Esquema temporal
Pese a la planicacion inicial, en los siguientes esquemas se detallan la cronologa real que se siguio en
la elaboracion del proyecto.
1
PFC: Proyecto n de carrera

4 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 1.1: Planicacion (I)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 1. Planicacion 5
Figura 1.2: Planicacion (II)
Jose Antonio Escartn Vigo, Junio 2005.

6 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 1.3: Planicacion (III)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 1. Planicacion 7
Figura 1.4: Planicacion (IV)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 2
Seleccion de Herramientas
En este capitulo explicare cuales fueron las diferentes herramientas utilizadas para la elaboracion del
proyecto.
En una primera fase se determina el hardware donde se implementa el servidor y los diferentes
clientes utilizados en las pruebas
En la segunda fase se elige la distribucion utilizada y los motivos que me llevaron a su eleccion
En la tercera fase se detalla que herramientas de apoyo se uso para desarrollar los trabajos.
2.1. Seleccion de Hardware
Pese a que el director del proyecto me ofrecio la utilizacion de material del departamento LSI de la
UPC, por mi comodidad, el material escogido fue de mi propiedad. Comprando una parte de el para
desarrollar de forma mas eciente las tareas.
2.1.1. Servidor
Como servidor me decid por la compra de un ordenador portatil, que permitiera desarrollar un servidor
portable con mas utilidades habituales en los servidores jos, ademas de la ventaja de poder portar el
proyecto y trabajar en sitios diferentes. Con este sistema se permite a un grupo corporativo itinerante el
desarrollo de sus actividades en posibles reuniones fuera de su propio edicio. La conexion y seguridad del
sistema queda garantizada gracias al sistema de validacion de clientes.
El portatil elegido fue un Acer TravelMate 4002 WLMI con procesador Intel Centrino a 1,6 Ghz.
con dos tarjetas de red integradas, una ethernet 10/100Mb y otra wi 802.11g de 54Mb que permite sin
problemas establecer dos segmentos diferenciados de red. Uno para los usuarios de ocina, es decir los
usuarios jos, y otro para los clientes wi, dotando al sistema de mayor seguridad.
Se presentaron una serie de problemas directamente derivados de esta eleccion. El hardware era dema-
siado nuevo y esto provoco una serie de incompatibilidades que se fueron solucionando con la instalacion
de drivers y parches que no se encontraban en las instalaciones Linux estandar.
El servidor realiza tambien la gestion de la conexion a internet. Esta conexion es suministrada, cuando
se encuentra jo, por un router 3com conectado al switch de la red y que solo responde a las peticiones
del servidor.
2.1.2. Clientes
Como clientes se utilizaran varios PC's de sobremesa, conectados mediante cable RJ45 a un switch.
PC AMD-Duron a 1,3 Ghz., tambien de mi propiedad, donde estara situado el principal cliente
Linux y Windows del sistema. En este ordenador se realizaron la mayoria de pruebas de conexion a
servicios.

10 Servidor Linux para conexiones seguras de una LAN a Internet
PC AMD-Athlon a 1,2 Ghz. y PC AMD-Athlon a 2,4 Ghz. con clientes Windows, prestados.
Portatil Pentium-IV Mobile, con sistema Linux y Windows, para la pruebas de conexion de clientes
inalambricos.
Los clientes se utilizaron simultaneamente para realizar las pruebas de carga una vez terminada la
implementacion del servidor, para comprobar la efectividad del mismo.
2.2. Seleccion de la distribucion
Completada la infraestructura hardware, comence a leer sobre distribuciones de GNU/Linux, buscando
cuales eran las mas adecuadas para desplegar servidores.
A continuacion detallo los tipos de distribuciones valoradas:
Mepis y Ubuntu (basadas en Debian) son consideradas las mejores para aquellos usuarios nuevos
en Linux que quieren empezar a ser productivos lo antes posible, sin tener que aprender todas sus
complejidades, son distribuciones orientadas a usuario de escritorio.
En el lado opuesto tenemos a Gentoo, Debian y Slackware que son distribuciones mas avanzadas
que requieren un completo aprendizaje antes de poder ser usadas ecientemente.
A medio camino entre ellas se encuentran Mandrake, Fedora (basada en Red Hat) y SuSE, estas dos
ultimas son distribuciones comerciales.
Knoppix y Mepis-LiveCD (basadas en Debian) son un caso a parte, permiten probar Linux sin tener
que hacer nada, ya que funciona directamente del CD, sin ninguna instalacion.
2.2.1. Distribuciones Linux
Cuadro 2.1: Distribuciones analizadas
SimplyMepis 3.3 - Mepis-LiveCD
Ubuntu (Warty Warthog 4.10)
Gentoo 2004.3 (FreeBSD)
Debian Woody 3.r04 - Sarge 3.1)
Debian Sarge 3.1)
Slackware 10.1
Mandrake 10.1
Fedora Core 3 (Red Hat)
SuSE
Knoppix 3.7
Mepis y Mepis-LiveCD
Fue lanzada por Warren Woodford en julio de 2003. Mepis Linux es una fusion entre Debian Sid
y Knoppix, una nueva clase de distribucion de Linux que se pueda utilizar como CD en vivo, y como
distribucion completa con un instalador graco a disco duro. De esta manera, usuarios pueden probar el
producto simplemente ooteando" desde el CD de Mepis, e instalandolo luego a disco duro solamente
si les gusta. Muchas otras distribuciones copiaron esta idea mas adelante, pero fue Mepis quien inicio el
concepto de un CD vivo mas un instalador graco completo partiendo de un CD.
>A que se debe el exito de Mepis? A diferencia de la mayora de las distribuciones principales de Linux,
Mepis viene con muchos paquetes que no son de uso-libre, pero altamente utiles, precongurados todos y
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 2. Seleccion de Herramientas 11
listos para utilizar.

Estos incluyen el driver de video Nvidia, el plugin Flash de Macromedia, Java, varios
codecs de multimedia para manejar archivos populares de audio y video y otros usos. Con Mepis Linux, no
hay necesidad de buscar el software para Java y despues tener que buscar la documentacion para descubrir
como permitir el uso de Java en sus navegadores. Todo esta disponible despues de la instalacion.
Esta idea simple resulto ser enormemente popular, no solamente entre los usuarios nuevos de Linux,
sino tambien entre los mas experimentados quienes encontraron muy conveniente el no tener que pasar
horas post-instalacion congurando y anando el sistema. Aparte de las aplicaciones estandard de Debian
y del software no-libre antes citado Mepis Linux tiene excelente auto-deteccion del hardware.
Ubuntu (Warty Warthog)
Ubuntu esta basada en Debian, pero el planteamiento esta inspirado en los principios de la corriente
ubuntu, un movimiento humanista encabezado por el obispo Desmond Tutu, premio Nobel de la Paz en
1984. Economicamente el proyecto se sostiene con aportaciones de la empresa Canonical del millonario
sudafricano Mark Shuttleworth.
El proyecto nacio por iniciativa de algunos programadores de los proyectos Debian, Gnome y Arch
que se encontraban decepcionados con la manera de operar del proyecto Debian. La version estable era
utilizada solo por una minora debido a la poca o nula vigencia que posea en terminos de la tecnologa
Linux actual.
Tras varios meses de trabajo y un breve perodo de pruebas, la primera version de Ubuntu (Warty
Warthog) fue lanzada en el mes de octubre de 2004.
Los desarrolladores se esfuerzan en ofrecer una propuesta que corrija la problematica que advirtieron
en Debian. Las versiones estables se liberan al menos dos veces al a~no y se mantienen actualizadas.
Contribuye al proyecto Debian de manera continua debido a que ambas distribuciones comparten
colaboradores de manera ocial. El administrador de escritorio ocial es Gnome y el navegador ocial es
Mozilla Firefox. El sistema incluye funciones avanzadas de seguridad y entre sus polticas se encuentra el
no activar procesos latentes por omision al momento de instalarse.
Gentoo (FreeBSD)
Gentoo Linux fue creada por Daniel Robbins, un conocido desarrollador de Stampede Linux y FreeBSD.
La primera version estable de Gentoo fu anunciada en Marzo del 2002.
Gentoo Linux es una distribucion basada en codigo fuente. Mientras que los sistemas de instalacion
proveen de varios niveles de paquetes pre-compilados, para obtener un sistema Linux basico funcionando,
el objetivo de Gentoo es compilar todos los paquetes de codigo en la maquina del usuario. La principal
ventaja de esto es que todo el software se encuentra altamente optimizado para la arquitectura de la
computadora.
Tambien, actualizar el software instalado a una nueva version es tan facil como teclear un comando,
y los paquetes, mantenidos en un repositorio central, son actualizados a menudo. En la otra cara de la
moneda, instalar Gentoo y convertirla en una distribucion completa, con los ultimos entornos gracos,
multimedia y de desarrollo es un trabajo largo y tedioso, puede durar varios das incluso en una maquina
rapida.
Debian (Woody - Sarge)
Debian GNU/Linux inicio su andadura de la mano de Ian Murdock en 1993. Debian es un proyecto
totalmente no-comercial; posiblemente el mas puro de los ideales que iniciaron el movimiento del software
libre. Cientos de desarrolladores voluntarios de todo el mundo contribuyen al proyecto, que es bien dirigido
y estricto, asegurando la calidad de la distribucion. En cualquier momento del proceso de desarrollo existen
tres ramas en el directorio principal: \estable", en \pruebas" e \inestable" (tambien conocida como \sid",
nombre que no vara). Actualmente la rama \estable" es Woody y la rama en \pruebas" es Sarge.
Cuando aparece una nueva version de un paquete, se situa en la rama inestable para las primeras
pruebas, si las pasa, el paquete se mueve a la rama de pruebas, donde se realiza un riguroso proceso que
dura muchos meses. Esta rama solo es declarada estable tras una muy intensa fase de pruebas.
Jose Antonio Escartn Vigo, Junio 2005.

12 Servidor Linux para conexiones seguras de una LAN a Internet
Como resultado de esto, la distribucion es posiblemente la mas estable y conable, aunque no la
mas actualizada. Mientras que la rama estable es perfecta para servidores con funciones crticas, muchos
usuarios preeren usar las ramas de pruebas o inestable, mas actualizadas, en sus ordenadores personales.
Debian es tambien famosa por su reputacion de ser difcil de instalar, a menos que el usuario tenga
un profundo conocimiento del hardware de la computadora. Compensando este fallo esta \apt-get" el
instalador de paquetes Debian. Muchos usuarios de Debian hacen bromas sobre que su instalador es tan
malo por que solo lo han de usar una vez, tan pronto como Debian esta en funcionamiento, todas las
actualizaciones, de cualquier tipo pueden realizarse mediante la herramienta apt-get.
Slackware
Creada por Patrick Volkerding en 1992, Slackware Linux es la distribucion mas antigua que sobrevive
hoy en da. No ofrece extras vistosos, y se mantiene con un instalador basado en texto, y sin herramientas
de conguracion graca.
Mientras otras distribuciones intentan desarrollar intarfaces faciles de usar para muchas utilidades
comunes, Slackware no ofrece nada amistoso, y toda la conguracion se realiza mediante los archivos de
conguracion. Es por esto que Slackware solo se recomienda a aquellos usuarios nuevos que deseen perder
el tiempo aprendiendo acerca de Linux.A pesar de todo, Slackware tiene una especie de aura magica para
muchos usuarios.
Es extremadamente estable y segura, muy recomendada para servidores. Los administradores con
experiencia en Linux encuentran que es una distribucion con pocos fallos, ya que usa la mayora de paquetes
en su forma original, sin demasiadas modicaciones propias de la distribucion, que son un riesgo potencial
de a~nadir nuevos fallos. Es raro que se produzcan lanzamientos de nuevas versiones (aproximadamente una
al a~no), aunque siempre se pueden encontrar paquetes actualizados para descargar despues del lanzamiento
ocial. Slackware es una buena distribucion para aquellos interesados en profundizar en el conocimiento
de las entra~nas de Linux.
Posiblemente, la mejor caracterstica de esta distribucion es que si necesitas ayuda con tu sistema
linux, encuentra un usuario de Slackware. Es mas probable que resuelva el problema que otro usuario
familiarizado con cualquier otra distribucion.
Mandrake
Creada por Gal Duval, Mandrake Linux es una distribucion que ha experimentado un enorme aumento
de popularidad desde su primera version de julio de 1998. Los desarrolladores partieron de la distribucion
de Red Hat, cambiaron el entorno de escritorio predeterminado por KDE, y a~nadieron un instalador facil
de usar rompiendo el mito de que linux es difcil de instalar. Las herramientas de deteccion de hardware
de Mandrake y sus programas para el particionamiento de discos son consideradas por muchos como las
mejores de la industria, y muchos usuarios se encontraron usando Mandrake all donde otras distribuciones
no haban conseguido entregar la usabilidad necesaria.Desde entonces Mandrake Linux ha madurado y
se ha convertido en una distribucion popular entre los nuevos usuarios de linux y aquellos hogares que
buscan un sistema operativo alternativo.
El desarrollo de Mandrake es completamente abierto y transparente, con paquetes nuevos que se a~naden
al directorio llamado "cooker\ a diario. Cuando una nueva version entra en fase beta, la primera beta se
crea a partir de los paquetes que se encuentran en "cooker\ en ese momento. El proceso de pruebas de
la beta sola ser corto e intensivo, pero desde la versin 9.0 ha pasado ha ser mas largo y exigente. Las
listas de correo sobre la version beta suelen estar saturadas, pero sigue siendo posible recibir una respuesta
rapida sobre cualquier fallo o duda que enves. Como resultado de este tipo de desarrollo se obtiene una
distribucion puntera y altamente actualizada. Como contrapartida, los usuarios pueden encontrarse con
mas fallos que en otras distribuciones.
Mucha gente encuentra este 'pero' razonable para sus equipos, ellos obtienen las ultimas versiones de
software y los cuelgues ocasionales de las aplicaciones es algo con lo que pueden vivir. Tan pronto como
el desarrollo se completa el software se pone a la libre disposicion de la gente desde replicas en todo el
mundo.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 2. Seleccion de Herramientas 13
Fedora (Red Hat)
Para muchos el nombre de Red Hat equivale a Linux, ya que probablemente se trata de la compa~na
de linux mas popular del mundo. Fundada en 1995 por Bob Young y Marc Ewing, Red Hat Inc. Solo ha
mostrado benecios recientemente gracias a otros servicios en lugar de a la distribucion en si. Aun as,
Red Hat es la primera eleccion para muchos profesionales y parece que seguira siendo un peso pesado
durante mucho tiempo.
Afortunadamente se resistieron a realizar ningun plan de rapida expansion durante el boom de las
punto-com durante los a~nos 1998-1999, concentrandose en su negocio principal. Este tipo de gestion
prudente si sigue as, es propensa a garantizar estabilidad y dependencia..
>Que hace a Red Hat Linux tan especial? Su curiosa mezcla de conservadurismo y paquetes punteros
mezclados con muchas aplicaciones desarrolladas en casa. Los paquetes no son los mas actuales, una vez se
anuncia una nueva version beta, las versiones de los paquetes se mantienen, excepto para actualizaciones
de seguridad. Como resultado se obtiene una distribucion bien probada y estable. El programa de betas
y las facilidades para enviar fallos estan abiertas al publico y hay un gran espritu en las listas de correo
publicas.
Red Hat Linux se ha convertido en la distribucion linux dominante en servidores en todo el mundo.
Otra de las razones del exito de Red Hat es la gran variedad de servicios populares que ofrece la com-
pa~na. Los paquetes de software son facilmente actualizables usando la Red Hat Network, un repositorio
ocial de software e informacion. Una larga lista de servicios de soporte son accesibles en la compa~na
y, aunque no siempre baratos, tienes virtualmente asegurado un excelente soporte de personal altamente
cualicado. La compa~na ha desarrollado incluso un programa de certicacion para popularizar su distribu-
cion, el RHCE (Certicado de Ingeniera de Red Hat), academias y centros examinadores estan disponibles
en el casi todas las partes del mundo.
Todos estos factores han contribuido a que Red Hat sea una marca reconocida en el mundo de la
industria de las TI.
SuSE
SuSE es otra compa~na orientada a los escritorios, aunque tiene variedad de otros productos para
empresas. La distribucion ha recibido buenas crticas por su instalador y la herramienta de conguracion
YaST, desarrollada por los desarrolladores de la propia SuSE. La documentacion que viene con las versiones
comerciales, ha sido repetidas veces evaluada como la mas completa, util y usable con diferencia a la de
sus competidores. SuSE Linux 7.3 recibio el premio "Producto del a~no 2001"que entrega el Linux Journal.
La distribucion tiene un gran porcentaje de mercado en Europa y America del norte, pero no se vende en
Asia y otras partes del mundo.
El desarrollo de SuSE se realiza completamente a puerta cerrada, y no se lanzan betas publicas para
probar. Siguen la poltica de no permitir descargar el software hasta tiempo despues de que salgan a la
venta las versiones comerciales. A pesar de todo, SuSE no entrega imagenes ISO de facil instalacion de su
distribucion, usando el software empaquetado para la gran mayora de su base de usuarios.
Actualmente van por la version 9.3 y no la instale porque la unica forma de conseguirla era pagando
y uno puntos claves era que todo el software fuera libre y gratuito. SuSE no cumpla esos requisitos.
Knoppix
Knoppix es una distribucion CD vivo de Linux basada en Debian y que utiliza como gestor de escritorio
KDE. Esta desarrollada por el consultor de GNU/Linux Klaus Knopper. Gnoppix es una variante pero
incluye como entorno graco Gnome en vez de KDE.
A diferencia de la mayora de las distribuciones Linux, no requiere una instalacion en el disco duro;
el sistema puede iniciarse desde un simple CD de 700 MB. Ademas, Knoppix reconoce automaticamente
la mayora del hardware del ordenador cuando se inicia. Tambien puede ser instalado en el disco duro
utilizando un script de instalacion. Y otra posibilidad de hacerlo mas persistente es guardar el directorio
home en una unidad removible, como un dispositivo de almacenamiento USB.
Se puede usar de distintas formas como:
Jose Antonio Escartn Vigo, Junio 2005.

14 Servidor Linux para conexiones seguras de una LAN a Internet
Para ense~nar y demostrar de manera sencilla el sistema GNU/Linux, especialmente como sistema
operativo.
Probar rapidamente la compatibilidad de hardware bajo Linux antes de comprarlo o utilizarlo,
especialmente para tarjetas de vdeo.
Utilizar las herramientas incluidas para restaurar un sistema corrupto o sus datos perdidos.
Existen versiones ntegramente en espa~nol y catalan.
2.2.2. Pruebas
Los CD's vivos arrancaron bien, sobre todo MEPIS con el que me lleve una grata sorpresa, muy simple
y funciona casi todo.
La distribucion Ubuntu estaba claramente orientada a usuario nal y no servidor que era mi objetivo,
de todas formas es una buena distribucion que permite estar siempre actualizado.
Gentoo no la llege a probar debido a las dicultades de instalacion que representa la continua compi-
lacion de paquetes, paso esencial en esta distribucion. Es muy complicado dejarla a punto.
Debian y Slackware eran las distribuciones que mas se ajustaron a los propositos del proyecto; sobre
todo Debian que cuenta con un gran grupo de soporte y recursos. Pese a ser las menos actualizadas,
eso no presenta ninguna dicultad para poder actuar como un servidor, mas bien al contrario, son las
distribuciones mas estables de todas las evaluadas.
Mandrake no presentaba el entorno adecuado y Fedora y SuSE, al ser versiones comerciales, no cubran
los requisitos prejados.
2.2.3. Distribucion elegida
Pese a la dicultad de instalacion y conguracion me decante por Sarge del proyecto Debian, debido
a su caracter al 100 % libre y la gran cantidad de aplicaciones que adjunta. Otro factor decisivo fue el
soporte que tiene dicha distribucion, mantenida por multitud de desarrolladores.
Pese a ser una version en \pruebas", se encuentra en la ultima fase. La rama de desarrollo Sarge, lleva
abierta desde el 2002 y la liberacion de la version \estable" se plantea inminente.
2.3. Seleccion del Software
Las herramientas escogidas no lo han sido al azar, son consecuencia directa de la losofa del proyecto,
donde el uso exclusivo de software libre y gratuito era un objetivo prioritario.
Paso a detallar el software que utilizo:
2.3.1. Planner
Programa de gestion de proyectos que permite crear planes para el proyecto y seguir su progreso,
pudiendo colocar sellos temporales
Lista de caractersticas
Calendario
Costes de proyecto
Gestion de tareas
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 2. Seleccion de Herramientas 15
Gestion de recursos
Figura 2.1: Distribucion de recursos
Diagramas de ghant
Figura 2.2: Diagrama temporal de Ghant
2.3.2. L
ATEX
Como se menciona en [CSLSMR
+
03] L
ATEX es un conjunto de sentencias escritas en un lenguaje
de programacion llamado TEX. Este no es un lenguaje de programacion usual, sino uno orientado a la
escritura de textos de excelente calidad. TEX no es un editor de la familia WYSIWYG, termino empleado
para denominar a los editores que solo trabajan sobre la pantalla del computador, dando un formato
visual al texto, y en los cuales \lo que ves es lo que tienes". Muy al contrario, en TEX se escribe el texto
acompa~nado de ordenes que el compilador, posteriormente, interpreta y ejecuta para proporcionar un
texto perfectamente compuesto.
A estas ventajas hay que a~nadir otra, es gratuito; Donald E. Knuth el creador de TEX, lo libero en
Octubre de 1.990.
El entorno L
ATEX desarrollado por Leslie Lamport, lo creo en 1982, con la intencion de simplicar la
tarea a aquellos que desean utilizar TEX. A~nade a TEX una coleccion de comandos que simplican el
mecanograado, permitiendo al usuario concentrarse en la estructura del texto, en vez de en los comandos
para dar formato. Tal es la calidad de L
ATEX que muchas editoriales permiten a sus autores escribir libros
en L
ATEX, dandoles un archivo base y unas directrices sobre la elaboracion de los textos.
Una de las ventajas de LaTeX es que puede ser exportado muy facilmente a Portable Document Format
(PDF) y PostScrip.
Utilizare este entorno de composicion de textos para desarrollar la documentacion derivada del pro-
yecto.
Jose Antonio Escartn Vigo, Junio 2005.

16 Servidor Linux para conexiones seguras de una LAN a Internet
2.3.3. Kile
Kile es un editor de textos para L
ATEX desarrollado por P. Brachet. Tiene una completa interfaz con
diversas facilidades que ofrece a un usuario novel un entorno amigable.
Figura 2.3: Imagen del editor Kile
Sus principales caractersticas son las siguientes:
Los comandos de L
ATEX estan disponibles a traves de menus, botones y combinaciones de teclas.
La ayuda integrada en el programa nos permitira saber que macro usar ante una necesidad concreta.
Para una edicion comoda de los cheros de texto, contamos con resaltado de sintaxis, funciones de
busqueda (incremental o no), reemplazo, deshacer, . . .
Los mas de 370 smbolos matematicos posibles son accesibles mediante botones y menus.
Corrector ortograco a traves deispell
Asistentes para la creacion de distintos tipos de documentos L
ATEX(cartas, artculos, etc).
Manejo de bibliografas a traves de BibTEX.
Navegacion mediante menus de la estructura de un documento o proyecto.
Facilidades para compilar y depurar cheros L
ATEX.
Integracion con herramientas externas para la visualizacion e impresion de los documentos editados
en distintos formatos: DVI, Postscript o PDF.
Interfaz con programas de dibujo como xg o gnuplot.
2.3.4. Prosper
La herramienta Prosper, desarrollada por F. Goualard y P.M.Neergaard es una clase para L
ATEX que
permite crear presentaciones electronicas con una excelente calidad.
Con ella se pueden producir documentos en formato PDF para realizar exposiciones con un monitor o
con un sistema de proyeccion de vdeo. Tambien se puede producir documentos PostScript para imprimir
la presentacion sobre transparencias para exposiciones con retroproyector.
Dispone de multitud de estilos de presentacion y la posibilidad de conseguir efectos de animacion en
pantalla haciendo que el contenido de la misma aparezca o desaparezca en distintas etapas (de forma
incremental).
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 2. Seleccion de Herramientas 17
Figura 2.4: Varios estilos de transparencias
2.3.5. Programas gracos
Las imagenes y videos que he utilizado en la documentacion y en las transparencias se han generado
con los siguientes programas:
KSnapshot: Para capturar pantallas, es mucho mejor que la tpica teclaImpr-pantgracias a sus
multiples opciones, entre las que se encuentran un temporizador y poder elegir que parte de la
pantalla se va a capturar; pudiendo seleccionar entre toda la pantalla, la ventana activa o una region
concreta. En resumen, una herramienta muy util para la redaccion de tutoriales.
The Gimp: Es el programa estrella de GNU para la creacion y el retoque fotograco de imagenes,
comparable al famoso programa comercial Adobe Photoshop.
Xvidcap y Mencoder: Permite capturar una secuencia de imagenes de una parte de la pantalla, ya sea
una ventana o una region. De esta manera, obtendremos una coleccion de imagenes del area capturada
separadas temporalmente un numero de fps
1
que se puede especicar. El programa Mencoder forma
parte de Mplayer, que es un conjunto de aplicaciones para la grabacion y reproduccion de vdeos,
dvd's y otros. Una vez obtenida la coleccion de imagenes que conformaran los frames del vdeo se
utilizara el programa Mencoder para componerlo.
1
fps: frames por segundo
Jose Antonio Escartn Vigo, Junio 2005.

Parte II
Instalacion base

Captulo 3
Instalacion de la distribucion
Existen varias formas de realizar la instalacion de la distribucion:
Desde CD-ROM: con las imagenes ociales
Desde disquetes: carga un nucleo y permite hacer una instalacion base por internet si la tarjeta de
red es soportada.
Desde dispositivo USB: crea un mini sistema base
Desde el disco duro: a partir de unos cheros locales.
Desde red: Se realiza a traves de TFTP desde una maquina a la que se tiene acceso, si la tarjeta de
red es soporta.
La manera mas sencilla, con mucho, de instalar Debian GNU/Linux, es usar un juego ocial de CDs o
DVDs de Debian, las imagenes pueden ser descargadas desde el servidor Debian (www.debian.org/distrib/)
o desde una replica del mismo.
Si el sistema no permite arrancar desde el CD, se puede utilizar una estrategia alternativa (disquete o
disco duro) para hacer el arranque inicial del instalador del sistema, los cheros para arrancar mediante
otros medios tambien se encuentran en el CD. Una vez arranque el instalador, se pueden obtener el resto
de cheros desde el CD.
Se puede obtener mas informacion respecto a la instalacion de Debian en [PRG
+
02] y [eidD04].
3.1. Proyecto Debian
El proyecto Debian GNU/Linux posee tres ramas: \stable", esting" y \unstable". En los siguientes
apartados se detallan las diferencias entre ellas.
3.1.1. Unstable
Se llama \Sid" y como su nombre indica es la distribucion mas inestable porque contiene paquetes
muy nuevos. La utilizan los desarrolladores de Debian para depuracion. Debian Sid contiene software muy
reciente y puede traer problemas de estabilidad graves.
3.1.2. Testing
Actualmente se llama \Sarge", posee el software que ya paso un tiempo de prueba en inestable pero
que aun debe pasar una fase de pruebas para consideralo estable, es la utilizada por aquellos que desean
disfrutar de las nuevas caractersticas de Debian y de las versiones de software mas reciente sin esperar
a la liberacion ocial de una nueva version. Es el equivalente a la distribucion mas actual de las demas
distribuciones (Mandrake, Fedora, Slackware, etc).

22 Servidor Linux para conexiones seguras de una LAN a Internet
3.1.3. Stable
Actualmente es la version 3.0, tambien llamada \Woody" y como su nombre indica es la mas estable de
las distribuciones Debian, ya que su software contenido ya supero varios meses de pruebas y correcciones.
En sistemas de produccion, donde no se toleran problemas de estabilidad, se recomienda el uso de
Debian Woody.
3.1.4. Recomendaciones
En entornos de prueba y/o desarrollo se recomienda utilizar Debian Woody o Sarge.
Para PCs de escritorio se recomienda utilizar Debian Sarge, ya que contiene versiones de software
bastante recientes y ya probadas un tiempo en la rama inestable.
He elegido Sarge, ya que esta rama de desarrollo lleva abierta desde el 2002 y la liberacion de la version
estable se plantea inminente.
3.2. Debian Sarge
Este metodo de instalacion se utilizo en el cliente de pruebas. En el servidor se instalo Debian Woody
y se realizo una actualizacion debido a incompatibilidades de Hw.
Metodo de instalacion
Mediante el siguiente esquema detallo el sistema de instalacion.
1. Congurar la BIOS para arrancar desde el DVD
2. Iniciar el instalador boteando desde el DVD
3. Arrancar el instalador con los metodos y parametros mas adecuados al Hw disponible. Presionando
Enter se arranca con los parametros por defecto que incluyen el kernel 2.6 de GNU/Linux.
4. Elegir idioma
5. Seleccionar pas
6. Conrmar mapa de teclado
7. Detectar Hw y cargar componentes.
8. Congurar la red
9. Particionar discos. Se puede escoger un particionado automatico o si se elige manual, al menos se
han de crear 2 particiones, una raz y otra de intercambio
10. Formar particiones y realizar la instalacion base
11. Instalar el nucleo
12. Instalar el gestor de arranque, se instala Grub como predeterminado. Si se disponen de varios sistemas
operativos se puede especicar un arranque multiple
13. Retirar el DVD y reiniciar para continuar la instalacion
14. Arrancar y congurar el sistema base
15. Congurar zona horaria
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 3. Instalacion de la distribucion 23
16. Congurar usuarios (root y usuarios corrientes)
17. Congurar APT
18. Instalar y congurar paquetes adicionales
19. Congurar correo
Si durante la instalacion se producen errores o cuelgues se pueden especicar opciones restrictivas al
iniciar el instalador. En mi caso, no consegu que ninguna opcion instalara el sistema en el servidor.
3.3. Debian Woody
En la instalacion se incluyen varias imagenes de nucleos disponibles, la mayora basados en el kernel 2.2.20:
Vanilla: La imagen estandar de Debian Woody, instala el kernel 2.2.20. Incluye casi todos los
controladores soportados por Linux, compilados como modulos.
Compact: Igual que Vanilla, pero eliminando controladores de dispositivo que se usan con menos
frecuencia.
Idepci: Un nucleo que solo soporta dispositivos IDE y PCI (y unos pocos ISA). Se debe usar este
nucleo si los controladores SCSI producen cuelgues al arrancar, debido a conictos de hardware o a
un compotamiento inadecuado de los controladores o placas de su sistema.
Bf2.4: Usa el kernel 2.4 y da soporte a hardware nuevo ausente en las otras imagenes. Soporta mas
hardware USB, controladoras IDE modernas, y los sistemas de cheros Ext3 y Reiser.
Esta fue una de las partes mas desesperantes del proyecto, debido a incompatibilidades de Hw, tuve
que instalar un version diferente de la planicada y al arrancar Debian Woody con cualquiera de los
kernels disponibles, no cargaba el driver adecuado para la pantalla TFT. Esto supuso tener que utilizar
otra pantalla diferente, conectada a la salida VGA del portatil, para realizar toda la instalacion, hasta
poder actualizar el kernel a una version 2.6.
El arranque que utilice fue Bf2.4, para que fuera soportado un mayor numero de dispositivos desde el
inicio, aunque el problema de la pantalla persista.
Este es un peque~no resumen de los pasos a seguir en la instalacion de Debian Woody:
1. Congurar la bios para arrancar desde CD
2. Arrancar el sistema de instalacion, boteando desde el CD
3. Seleccionar la imagen de nucleo deseada
4. Congurar teclado
5. Crear y montar particiones para Debian en el disco duro, con un mnimo de dos, una para el sistema
base y otra de intercambio
6. Seleccionar que controladores de perifericos cargar
7. Congurar la interfaz de red
8. Iniciar la instalacion y conguracion automatica del sistema base.
9. Congurar el gestor de arranque, en este caso Lilo. Si se dispone de varios sistemas operativos se
puede espedicar arranques multiples
10. Arrancar el sistema recien instalado y hacer las conguraciones nales
11. Instalar tareas y paquetes adicionales, a la eleccion de cada usuario.
Una vez terminada la instalacion estandar, es necesario instalar un kernel mas avanzado (2.6 o superior)
que nos detecte todos los dispositivos de los que dispone nuestro sistema, y si todava no los soporta,
parchearlo con los drivers del fabricante.
Jose Antonio Escartn Vigo, Junio 2005.

24 Servidor Linux para conexiones seguras de una LAN a Internet
3.4. Actualizacion de Woody a Sarge
Esto se realiza mediante la herramienta APT y se puede enfocar de dos formas.
Si disponemos de los DVD's o CD's de Debian Sarge, a~nadiendolos al archivo de fuentes de APT
(#apt-cdrom add).
Si disponemos de internet, a~nadiendo la direccion de una replica de los archivos de Debian Sarge al
archivo de fuentes de APT. La forma de hacerlo se detalla en el siguiente captulo.
Una vez tenemos agregadas las fuentes de la nueva distribucion en el APT, solamente tenemos que
introducir los siguientes comandos:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4
Primeros pasos
En los apartados que se presentan a continuacion establecen varias cosas que hay que tener en cuenta
para administrar un servidor Linux.
4.1. Particionar el disco
En Linux cada particion se monta en tiempo de arranque. El proceso de montaje hace disponible el
contenido de esa particion dentro del sistema. El directorio raz (/) sera la primera particion.
Las particiones, cuando se montan, aparecen como un arbol de directorios unicado en vez de unidades
separadas, el software de instalacion no diferencia una particion de otra. Solo hay que preocuparse de en
que directorio esta cada archivo. Como consecuencia de ello, el proceso de instalacion distribuye automati-
camente sus archivos por todas las particiones montadas, as que las particiones montadas representan
diferentes partes del arbol de directorios donde se situan normalmente los archivos.
Debido a que estamos congurando un servidor, debemos conocer que directorios es necesario tener en
particiones separadas:
/usr, donde se situan todos los archivos de programa.
/home, donde estan los directorios de todos los usuarios. Esto es util por si los usuarios consumen
el disco entero y dejan a otras aplicaciones crticas sin espacio (tales como los archivos log).
/var, el destino nal de los archivos log. Debido a que estos pueden verse afectados por usuarios
exteriores (por ejemplo personas que visiten una pagina web), es importante situarlos en otra par-
ticion para que nadie pueda realizar un ataque de Denegacion de servicio (DoS) generando tantas
entradas que se llene todo el disco.
/tmp, donde se situan los archivos temporales. Debido a que este directorio esta dise~nado para que
todos los usuarios puedan escribir en el, necesitaremos asegurarnos de que ningun usuario abuse y
llene el disco completo. Podemos conseguir esto situandolo en una particion separada.
swap. Este es un sistema de archivos no accesible para el usuario. Es donde se almacena el archivo
de memoria virtual, tenerlo en otra particion mejora el rendimiento del sistema.
Se puede observar por que es una buena idea crear varias particiones en un disco en lugar de una sola
particion grande al estilo de Microsoft. Esto da una idea de por que un sistema trabaja mejor que el otro.

26 Servidor Linux para conexiones seguras de una LAN a Internet
4.2. Gestores de arranque
El gestor de arranque indica al ordenador que sistema operativo o kernel se iniciara y donde se en-
cuentran los archivos necesarios para ejecutarlo.
Dependiendo del tipo de distribucion escogida se instalara por defecto uno de estos dos gestores de
arranque Lilo o Grub. Durante ese proceso se a~nadiran automaticamente los diferentes sistemas operativos
que tengamos instalados en el sistema. Posteriormente los parametros pueden ser congurados desde
consola o mediante la herramienta de administracion gracaWebmin.
En el servidor he mantenido Lilo, era un gestor que ya conoca y con el que me senta comodo. Paso
a detallar los dos gestores segun se explican en [BB00].
Lilo
Si hemos optado por utilizar Lilo, al terminar el proceso de instalacion de Linux dispondremos de
un archivo de conguracion denominado/etc/lilo.confel cual podremos editar en cualquier momento
para ajustar el menu o comportamiento de Lilo a nuestras necesidades.
El archivo esta dividido en tres secciones, como se puede observar en el cuadro 4.1.
La primera seccion contiene opciones globales, como son el sistema operativo por defecto o si queremos
que aparezca el menu de seleccion y el tiempo por defecto.
En la segunda seccion se especican los parametros necesarios para arrancar Linux, indicandose en
imageyinitrdel kernel y las opciones de arranque.
La ultima seccion especica la particion desde donde debera ejecutarse los otros sistemas operativos
que tengamos instalados en el ordenador.
Si necesitamos realizar alguna modicacion simplemente editaremos el archivo/etc/lilo.confy pos-
teriormente ejecutaremos el comandolilopara activar los cambios.
#/sbin/lilo
Cuadro 4.1: Archivo de conguracion/etc/lilo.conf
# Global
prompt
timeout=70
default=Kernel-2_6
boot=/dev/hda
map=/boot/map
install=/boot/map
install=/boot/boot.b
message=/boot/message
lba 32
#Linux
image=/boot/vmlinuz-2.6.11-9
label=Kernel-2_6
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.4.18-3
label=Kernel-2_4
initrd=/boot/initrd-2.4.18-3.img
read-only
root=/dev/hda3
#Windows
other=/dev/hda1
optional
label=WindowsXP
Grub
Es el gestor de arranque por defecto en Debian Sarge. Es un poco mas exible que Lilo, ya que permite
interactuar en caso de arranque invalido.
Incluye otras funciones como el soporte de multiples modulos, interfaz graco de arranque, lnea de
comandos, descompresion automatica, soporte para LBA y soporte para terminales entre otras muchas
opciones.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 27
4.3. Usuarios
Es muy recomendable crearse un usuario de trabajo dentro del sistema, ya que con el usuario root
es posible crear, modicar o eliminar cualquier archivo del sistema operativo. Al utilizar este usuario se
podra da~nar el sistema en caso de cometer algun error.
Mas adelante se detalla como crear y administrar usuarios con la herramienta gracaWebmin, pero
ahora voy a explicar como se hara desde la lnea de comandos.
4.3.1. A~nadir nuevos usuarios al sistemas
La instruccion necesaria para crear un nuevo usuario esuseradd.
#useradd josan
Este mandato crea una nueva entrada en el archivo/etc/passwd. Este archivo contiene informacion
como el nombre de usuario, contrase~na, directorio de trabajo y shell predeterminado.
Es necesario crear una carpeta/home/josanque sera el directorio del usuario.
#mkdir /home/josan
Una vez creado el usuario le deberemos asignar una contrase~na, para ello utilizaremos la instruccion
passwd. Con ella podemos modicar la contrase~na de cualquier usuario si hemos iniciado una sesion de
root, o nuestra propia contrase~na en cualquier otro caso.
#passwd josan, . . . y introducir la nueva contrase~na.
Si el sistema esta bien administrado, se ha de almacenar informacion imprescindible de los usuarios,
como el n.
o
de tlf. y el lugar donde encontrar fsicamente a ese usuario. Esto es necesario por si se
compromete la seguridad del sistema y necesitamos ponernos en contacto con el usuario a traves de vas
no informaticas.
Para cambiar la informacion de una cuenta se usa el comandochfn.
#chfn josan
Y para visualizar esa informacionnger.
#finger josan
4.3.2. A~nadir grupos al sistema
Para a~nadir un nuevo grupo al sistema se utiliza el siguiente comando:
#groupadd -g [GID] [nombre_grupo], . . . donde GID es el n.
o
de grupo que se asignara.
Si tenemos usuarios ya creados y deseamos a~nadirlos o eliminarlos de un grupo utilizaremos:
#gpasswd -a [nombre_usuario] [nombre_grupo], . . . a~nadir usuario
#gpasswd -d [nombre_usuario] [nombre_grupo], . . . eliminar usuario
Jose Antonio Escartn Vigo, Junio 2005.

28 Servidor Linux para conexiones seguras de una LAN a Internet
4.3.3. Bases de datos de usuarios
Ahora vamos a especicar con mas detalle como es almacenada la informacion de los usuarios dentro
del sistema.
Esta informacion es almacenada en tres archivos:
/etc/passwd: Informacion de los usuarios
/etc/shadow: Claves encriptadas de los usuarios
/etc/group: Grupos del sistema
Archivo /etc/passwd
Es usado para establecer y congurar las cuentas. Es un archivo de texto plano que puede ser consultado
por todos los usuarios del sistema. Y su contenido podra ser algo parecido al siguiente:
Cuadro 4.2: Ejemplo de un archivo /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
josan:x:1000:1000:Jose Antonio Escartin Vigo:/home/josan:/bin/bash
identd:x:100:65534::/var/run/identd:/bin/false
sshd:x:101:65534::/var/run/sshd:/bin/false
Cada lnea representa un usuario. La informacion de cada usuario esta dividida en seis campos delimi-
tados por el caracter dos puntos (:). La descripcion de cada uno de los campos aparece listada en la Tabla
4.3.
Cuadro 4.3: Descripcion de los campos del archivo /etc/passwd
Campo Descripcion
1 Nombre de usuario o identicador de inicio de sesion. Tiene que ser unico.
2 Contrase~na encriptada de usuario. Una \x" minuscula indica que se usan contrase~nas ocultas
y que estas estaran en el archivo/etc/shadow
3 Identicador de usuario (UID). Este n.
o
ha de ser unico
4 Identicador de grupo (GID). Aqu solo aparece el grupo principal del usuario, aunque puede
pertenecer a mas de un grupo
5 Campo de comentarios
6 Directorio /homedel usuario.
7 Shell de trabajo del usuario. Habitualmente es la shell bash
Un caracter \*" en la contrase~na indica que la cuenta esta deshabilitada temporalmente. Es una buena
practica no solo a~nadir el caracter, sino indicar el motivo por el que ha sido deshabilitada.
Se pueden a~nadir nuevas cuentas de usuario editando directamente el archivo/etc/passwd, pero para
crear las contrase~nas hay que usar la utilidad/usr/bin/passwdya que esta es cifrada.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 29
Archivo /etc/shadow
Es el archivo de contrase~nas ocultas. Este archivo a~nade un nivel de seguridad adicional, ya que la
encriptacion de la clave de usuario solo es visible por el root.
Cuando todava no existan las contrase~nas ocultas, la contrase~na, aunque cifrada, se almacenaba en el
archivo/etc/passwd. Este archivo puede ser ledo por cualquier usuario del sistema, pero solo modicado
por el usuario root. Esto representa un problema porque signica que cualquiera puede ver una contrase~na
cifrada e intentar conseguir una clave que genere ese cifrado. Para combatir esta amenaza potencial, se
denio el concepto de contrase~nas ocultas.
Cuadro 4.4: Ejemplo de un archivo /etc/shadow
root:$1$wzPAR6Nw$RTLX6R4qjZT6KGJI8efJL0:12890:0:99999:7:::
daemon:*:12890:0:99999:7:::
bin:*:12890:0:99999:7:::
sys:*:12890:0:99999:7:::
sync:*:12890:0:99999:7:::
games:*:12890:0:99999:7:::
man:*:12890:0:99999:7:::
lp:*:12890:0:99999:7:::
mail:*:12890:0:99999:7:::
news:*:12890:0:99999:7:::
uucp:*:12890:0:99999:7:::
proxy:*:12890:0:99999:7:::
postgres:*:12890:0:99999:7:::
www-data:*:12890:0:99999:7:::
backup:*:12890:0:99999:7:::
operator:*:12890:0:99999:7:::
list:*:12890:0:99999:7:::
irc:*:12890:0:99999:7:::
gnats:*:12890:0:99999:7:::
nobody:*:12890:0:99999:7:::
josan:$1$tUlRDVd7$6kPCHl4XyLIYnjBt4BpxF0:12890:0:99999:7:::
identd:!:12890:0:99999:7:::
sshd:!:12890:0:99999:7:::
messagebus:!:12891:0:99999:7:::
hal:!:12891:0:99999:7:::
gdm:!:12893:0:99999:7:::
saned:!:12905:0:99999:7:::
Esta formado por entradas de una lnea con campos delimitados por el caracter dos puntos (:). Algunos
de estos campos contendran aparentemente numeros raros, demasiado altos para ser correctos. Estos
campos estan referidos a la fecha de comienzo \de la era de la computacion", el 1 de enero de 1970.
Cuadro 4.5: Descripcion de los campos del archivo /etc/shadow
Campo Descripcion
1 Nombre de la cuenta de usuario
2 Campo de contrase~na cifrada
3 Das transcurridos desde el comienzo de la era hasta la fecha en que la contrase~na fue
cambiada por ultima vez
4 Numero de das tras que deben transcurrir hasta que la contrase~na se pueda volver a cambiar
5 Numero de das tras los cuales hay que cambiar la contrase~na (-1 signica nunca)
6 Das antes de la expiracion de la contrase~na en que se avisara al usuario al inicio de la sesion
7 Das despues de la expiracion de la contrase~na en que la cuenta se inhabilita si la contrase~na
no se ha cambiado correctamente.
8 Das transcurridos desde la era en que la cuenta se inhabilitara (con independecia de cambios
de la contrase~na)
9 Campo reservado
Se utilizarachange, la utilidad de cambio de caducidad, para modicar estos valores predeterminados.
Para realizar el cifrado de las contrase~nas es mejor usar MD5 que el antiguo metodo DES, ya que
el primero permite contrase~nas mas largas y si esta es buena implica un tiempo mucho mayor para
descifrarlas.
Jose Antonio Escartn Vigo, Junio 2005.

30 Servidor Linux para conexiones seguras de una LAN a Internet
Archivo /etc/group
El objetivo de la existencia de un identicador de grupo (GID) es agrupar de forma logica recursos
o archivos para asignarlos a miembros de un grupo determinado. Los archivos de un grupo pueden ser
compartidos entre los miembros de ese grupo, protegiendose contra el acceso de otros usuarios que no
deban acceder a esos recursos.
Cuadro 4.6: Ejemplo de un archivo /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:lp
mail:x:8:
news:x:9:
uucp:x:10:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:hal
floppy:x:25:hal
tape:x:26:
audio:x:29:josan
dip:x:30:
postgres:x:32:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:josan
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
josan:x:1000:
man:*:12:
plugdev:*:46:
ssh:x:101:
crontab:x:102:
messagebus:x:103:
hal:x:104:
lpadmin:x:105:
gdm:x:106:
camera:x:107:
scanner:x:108:
saned:x:109:
Cada lnea del archivo/etc/groupindica un grupo. Se puede observar que muchos de los grupos
predeterminados corresponden directamente a un servicio especco.
Cada cuenta de usuario tiene que pertenecer como mnimo a un grupo.
Cuadro 4.7: Descripcion de los campos del archivo /etc/group
Campo Descripcion
1 Nombre de grupo
2 Contrase~na de grupo. No suele usarse
3 Numero de identicacion de grupo
4 Lista de usuarios asociadas a este grupo. Si en el archivo/etc/passwdse ha especicado
este grupo, no es necesario que aparezca en la lista. Solo es para usuarios que su grupo inicial
no fuera este
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 31
4.4. Permisos de archivos
En Linux hay tres niveles de permisos de archivos y directorios. Estos tres niveles pertenecen a las
siguientes categoras:
Usuario (el propietario)
Grupo
Otros
Cada nivel o categora tiene los privilegios asociados de:
Lectura
Escritura
Ejecucion
Un archivo esta identicado por el grupo al que pertenece y su propietario. Cuando realizamos un
listado de un archivo, encontramos los siguientes parametros:
#ls -l <archivo>
- rwx rwx rwx root root 512 Jan 7 10:50 nom_archivo
4.4.1. Tipos de archivo
El primer caracter identica el tipo de archivo. Podemos encontrar los siguientes:
Cuadro 4.8: Tipos de archivos
Caracter Tipo de archivo
- Archivo normal (generalmente un archivo binario o de texto ASCII)
d Directorio
l Enlace simbolico
l Dispositivo de caracter
l Dispositivo de bloque
l Socket (un proceso de escucha de red)
p Canalizacion o pipe con nombre
4.4.2. Modicar los permisos
Para modicar los permisos de acceso a un archivo se utiliza el comandochmod. Es necesario especi-
car los tres elementos siguientes:
Nivel se va a modicar (propietario, grupo o otros)
Permiso se va a modicar (lectura, escritura o ejecucion)
Archivo o archivos que se van a modicar
La tabla 4.9 especica las opciones del comandochmod.
Los permisos pueden ser especicados con letras:
#chmod g+w /home/josan/archivo, . . . da permiso de lectura al grupo
#chmod g-w /home/josan/archivo, . . . quita permiso de lectura al grupo
Jose Antonio Escartn Vigo, Junio 2005.

32 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 4.9: Opciones de chmod
Opcion Descripcion
u Propietario
g Grupo
o Otros
a Todos
r Lectura
x Ejecucion
w Escritura
0 Sin privilegios
1 Ejecucion
2 Escritura
3 Escritura y ejecucion
4 Lectura
5 Lectura y ejecucion
6 Lectura y escritura
7 Lectura, escritura y ejecucion
O con numeros:
#chmod 751 /home/josan/archivo
Da lectura, escritura y ejecucion al propietario; Lectura y ejecucion al grupo; Ejecucion a otros.
4.4.3. Permisos especiales: SUID, SGID y bit de persistencia
Con un archivo ejecutable, activar el bit SUID de propietario obliga al archivo ejecutable binario a
ejecutarse como si lo hubiera lanzado el usuario propietario del archivo y no realmente quien lo lanzo.
Normalmente, el usuario root es propietario de los ejecutables binarios con el bit SUID activo, de forma
que cualquiera que pueda ejecutar el programa lo ejecuta como usuario root.
Cuando un programa es SUID o SGID, una \s" sustituye a la \x" que corresponde al bit de ejecucion
del usuario o grupo.
Esto es peligroso pero necesario para algunos programas. Por ejemplo, un usuario normal no puede
leer o escribir en el archivo/etc/shadow, para que este usuario normal (sin privilegios) pueda cambiar
su contrase~na, el ejecutable passwd debe ser SUID del usuario root. El bit SGID funciona del mismo modo
para los grupos.
Cuadro 4.10: Opciones especiales chmod
Opcion Descripcion
s SUID o SGID
t Bit de persistencia
0 Sin permisos especiales (predeterminado)
1 Activar el bit de persistencia (t)
2 Activar el bit SGID de grupo (s)
3 Activar el bit SGID de grupo y el de persistencia
4 Activar el bit SUID de propietario
5 Activar el bit SUID de propietario y el de persistencia
6 Activar el bit SUID de propietario y el bit SGID de grupo
7 Activar el bit SUID, el SGID y el de persistencia
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 33
Cuando los bits SUID o SGID se reeren a directorios, los archivos que se almacenan en estos directorios
adoptan el propietario o grupo del directorio, en vez de adoptar el del usuario que creo el archivo.
El bit de persistencia, mostrado como " en lugar del bit de ejecucion normal para el nivel \otros" se
usa normalmente en directorios tales como/tmp. Este atributo en concreto hace que solo el propietario
del archivo pueda eliminarlo, aunque otros pueden leerlo.
Se puede especicar los permisos especiales SUID, SGID y bit de persistencia con la tabla 4.10
La forma de utilizarlo es a~nadir un numero mas al chmod:
#chmod 2751 /home/josan/archivo
Lo comentado anteriormente y el SGID activado.
4.4.4. Cambiar un archivo de propietario o grupo
La utilidadchownmodica el indicador de propietario.
#chown josan /tmp/archivo
La utilidadchgrpmodica el indicador de grupo.
#chgrp proyecto /tmp/archivo
4.5. Instalacion de aplicaciones
En Debian GNU/Linux tenemos tres aplicaciones para manejar paquetes precompilados dpkg, apt y
alien.
Cuando disponemos de los archivos fuente de una aplicacion y los queremos instalar en nuestro sistema
hay que tener varias precauciones.
La mejor opcion es que el software a utilizar este incluido en el proyecto Debian, as se eliminara la
posibilidad que un usuario malintencionado haya modicado deliberadamente el paquete. Para asegurarnos
es preciso leer atentamente la documentacion de los paquetes (INSTALL y README) y comprobar \a
mano" los script's de instalacion.
Si nos vemos en la obligacion de instalar un paquete de una fuente no segura, desconocida o sospechosa
es una buena conducta de actuacion instalar el paquete con un usuario con privilegios restringidos, evitando
usar root a menos que sea imprescindible. Si los scripts estuvieran modicados, sin privilegios, no podran
hackear el sistema.
4.5.1. Compilacion de paquetes desde archivos fuente
Las aplicaciones suelen venir comprimidas en uno de estos dos formatos
.tar.gz
.tar.bz2
Lo primero es descomprimir los chero fuente, para ello debemos disponer de tres aplicaciones: gunzip
(.gz), bzip (.bz2) y tar (.tar).
Si el archivo es .tar.gz, el comando es el siguiente:
$tar zxvf archivo.tar.gz, . . . para descomprimir archivo.tar.gz
$tar jxvf archivo.tar.bz2, . . . para descomprimir archivo.tar.bz2
Jose Antonio Escartn Vigo, Junio 2005.

34 Servidor Linux para conexiones seguras de una LAN a Internet
Entramos en el directorio que se haya creado y all normalmente encontraremos algunos cheros de
documentacion especicos de cada paquete y los siguientes cheros estandar:
README
INSTALL
Es imprescindible leerlos, en ellos se especica la documentacion del paquete. Aqu encontraremos la
historia del paquete, la version actual, los paquetes adicionales que debemos de tener instalados, el metodo
de instalacion y la informacion necesaria para modicar los archivos de conguracion.
Para realizar la instalacion se utiliza elMakele, un archivo que se pasa al comandomakecon una serie
de parametros dependiendo de las opciones disponibles. En el proximo parrafo se explica en que consiste
exactamente un archivo de este tipo.
Makeles
En proyectos extensos, con varios miles de lneas de programacion, no resulta muy practico recompilar
cada vez que se desea armar un nuevo ejecutable. Es frecuente por lo tanto dividir el proyecto en varios
archivos con codigo fuente, y recompilar solo los archivos que registren cambios.
Existe un programa, que dada esta serie de interdependencias es capaz de generar el ejecutable con la
mnima cantidad de pasos necesarios. La especicacion de las dependencias se da en un archivo llamado
Makeley el programa que interpreta que lo interpreta y genera el ejecutable esMake.
UnMakelees un archivo de conguracion donde se indicaran que archivos debe compilar, las depen-
dencias de compilacion, y los ags que se han de pasar al compilador.
Pueden llegar a ser archivos grandes y complejos. Tratare de explicar las nociones mas basicas de los
mismos, para poder leer los que vienen en las instalaciones de las aplicaciones. La sintaxis basica de un
archivoMakelees la siguiente:
objetivo: dependencias
acciones a ejecutar
El objetivo es el archivo que se desea generar.
Las dependencias son los archivos de los cuales el objetivo depende.
Las acciones son los comandos para generar el objetivo a partir de las dependencias.
Para ilustrar esto veamos el siguiente ejemplo:
tst: tst.o tstf.o
gcc -o tst tst.o tstf.o
tst.o: tst.c
gcc -c -o tst.o tst.c
tstf.o: tstf.c
gcc -c -o tstf.o tstf.c
El programamakeleera el archivoMakele, al llegar a la primera lnea encuentra que tst depende de
tst.o y tstf.o. Si tst no existe o tiene fecha de modicacion anterior a la de sus dependencias, debera ejecutar
la accion indicada para generarlo nuevamente. Analogamente, si tst.o no existe o tiene fecha de modicacion
anterior a la de tst.c, sera necesario recompilar nuevamente su codigo fuente.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 35
En este tipo de archivos se suelen denir variables para ser utilizadas en las lneas de acciones. Estas
deniciones estan al comienzo de losMakelesy son del tipo:
DEPTST=tst.o tstf.o
CFLAGS=-c -o
Con estas modicaciones el archivo original quedara de la siguiente forma:
Cuadro 4.11: Ejemplo de un archivo Makele
DEPTST=tst.o tstf.o
CFLAGS=-c -o
tst: $(DEPTST)
gcc -o tst $(DEPTST)
tst.o: tst.c
gcc $(CFLAGS) tst.o tst.c
tstf.o: tstf.c
gcc $(CFLAGS) tstf.o tstf.c
Para abreviar tambien se pueden utilizar las construcciones especiales \$<" para referirse a las depen-
dencias y \$@" para referirse al objetivo, en el interior de las acciones.
Para ejecutar elMakele:
$make, . . . para ejecutar todos los objetivos.
$make <objetivo>, . . . para ejecutar un objetivo concreto.
Los objetivos habituales en los instaladores son: check, install, y clean.
Metodo habitual de instalacion
La mayora de los paquetes se instalan de la siguiente forma:
$./configure
$make
$make install
Segun el archivo INSTALL podremos observar las necesidades concretas del paquete, tambien es ha-
bitual, entre las distintas fases de instalacion, las directivas:
$make check
$make clean
Por ultimo decir que dependiendo del tipo de paquete y los lugares del sistema donde deba escribir
puede ser necesario instalar el paquete mediante un usuario con mas privilegios.
Jose Antonio Escartn Vigo, Junio 2005.

36 Servidor Linux para conexiones seguras de una LAN a Internet
4.5.2. Dpkg: Instalador de paquetes precompilados
Si en vez de paquetes fuentes lo que tenemos es un paquete precompilado o binario utilizaremos el
gestor de paquetes dpkg (Debian Package).
En la tabla 4.12 se especican las opciones mas comunes.
Cuadro 4.12: Opciones del comando dpkg
Comando Descripcion
#dpkg -i <paquete> Instala paquete
#dpkg -r <paquete> Elimina paquete
#dpkg --purge <paquete> Borra un paquete includos los cheros de conguracion
#dpkg -f <paquete> Muestra informacion de la version del paquete
#dpkg -c <paquete> Lista los cheros contenidos
#dpkg --contents <paquete> Lista los cheros contenidos y sus directorios
#dpkg --info <paquete> Informacion del paquete
#dpkg --unpak <paquete> Desempaqueta
#dpkg --info <paquete> Informacion del paquete
#dpkg --force-help <paquete>Fuerza opciones
#dpkg -L <paquetes> Lista el paquetes si esta instalado
#dpkg -l Lista paquetes instalados
#dpkg-reconfigure --all Recongura todos los paquetes
#dpkg-reconfigure locales Recongura paquetes con la conguracion local, por ejemplo colo-
ca paquetes en el idioma del sistema
4.5.3. Apt: Gestor de paquetes Debian
El programa APT (Advancd Packaging Tool) se encarga de manejar automaticamente las dependencias
de la paquetera del sistema.
El archivo /etc/apt/sources.list
Como parte de su funcionamiento, APT utiliza un archivo que contiene las uentes" en donde se
encuentran los paquetes. En el siguiente cuadro podemos observar un archivo estandar delsources.list.
Cuadro 4.13: Ejemplo de/etc/apt/sources.list
deb cdrom:[Debian GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-2 (20050225)]/ unstable contrib main main/debian-installer
deb cdrom:[Debian GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-1 (20050225)]/ unstable contrib main main/debian-installer
deb cdrom:[Debian GNU/Linux 3.0 r4 _Woody_ - Official i386 Binary-2 (20050102)]/ unstable contrib main non-US/contrib non-US/main non-US/non-free non-free
deb cdrom:[Debian GNU/Linux 3.0 r4 _Woody_ - Official i386 Binary-1 (20050102)]/ unstable contrib main non-US/contrib non-US/main non-US/non-free non-free
#Sarge (testing)
deb http://ftp.rediris.es/debian testing main contrib non-free
deb-src http://ftp.rediris.es/debian/ testing main non-free contrib
deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free
deb-src http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
#Woody (stable)
#deb http://ftp.rediris.es/debian testing main contrib non-free
#deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free
#deb http://security.debian.org/ stable/updates main contrib non-free
#Sid (unstable)
#deb http://ftp.rediris.es/debian unstable main contrib non-free
#deb http://ftp.rediris.es/debian-non-US unstable/non-US main contrib non-free
El archivo puede contener varios tipos de lneas. APT sabe como interpretar lneas del tipohttp, ftp y
le(archivos locales).
Para poder descargar los paquetes a traves de internet utilizamosftp.rediris.es, replica en Espa~na de
los paquetes Debian.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 37
La primera palabra de cada lnea indica el tipo de archivo:
deb, indica un paquete pre-compilado (binario)
deb-scr, indica codigo original (fuentes)
Opciones ATP
En el cuadro 4.14 vamos a poder encontrar las opciones mas usuales que se pueden utilizar con el
comando APT
Cuadro 4.14: Opciones del comando APT
Comando Descripcion
#apt-get install <paquete> Instala paquete
# apt-get --reinstall install <paquete> Reinstala paquete o una nueva version del mismo
#apt-get remove <paquete> Desinstala paquete
#apt-get --purge remove <paquete> Desinstala paquete y borra sus archivos de congu-
racion
#apt-cdrom ident Identica un CD
#apt-cdrom add A~nade un CD al/etc/apt/sources.list
#apt-get update Actualiza la lista local de paqutes con el archivo
/etc/apt/sources.list
#apt-get upgrade Actualiza a las ultimas versiones todos los paquetes
del sistema
#apt-get dist-upgrade Actualiza a la distribucion mas reciente
#apt-show-versions -u Muestra los paquetes del sistema que pueden ser ac-
tualizados
#apt-cache search <nombre> Muestra los paquetes relacionados con nombre
#apt-cache show <paquete> Muestra informacion de un paquete especco
#apt-cache showpkg <paquete> Muestra mucha mas informacion del paquete
#apt-cache depends <paquete> Muestra de que paquetes depende
#apt-file search <archivo> Muestra a que paquete pertenece el archivo
#apt-file list <paquete> Muestra los archivos del paquete
#apt-file update Actualiza los paquetes de apt-le (como apt-get up-
date)
#apt-get source <paquete> Descarga las fuentes del paquete
#apt-get -b source <paquete> Descarga y compila las fuentes del paquete (genera
un .deb, que hay que instalarlo con dpkg)
#apt-get build-dep <paquete> Descarga y compila las fuentes del paquete y des-
carga tambien los paquetes que dependen necesarios
para compilarlo.
#apt-cache showscr <paquete> Muestra que paquetes son necesarios para compilar
el paquete
#apt-get -f install Recongura los paquetes mal instalados (puede ser
necesario combinarlo con#dpkg --configure -a)
La opcion -u muestra la lista completa de los paquetes que se actualizaran.
Si utilizamos la opcionapt-cdromsolo tendra efecto si el CD-ROM esta bien congurado en/etc/fstab.
Jose Antonio Escartn Vigo, Junio 2005.

38 Servidor Linux para conexiones seguras de una LAN a Internet
4.5.4. Alien: Convertir paquetes .rpm a .deb (formato Debian)
Existen muchas distribuciones basadas en Red Hat que utilizan el formato de paquetes .rpm (Red Hat
Package Manager), cuando tenemos este tipo de paquetes es posible convertirlos a .deb, formato de Debian
y instalable con dpkg. Para ello utilizaremos la herramientaalienque convierte un tipo de paquete en otro.
#apt-get install alien
$alien paquete.rpm
4.5.5. Encontrar paquetes y sus dependencias
En algun momento nos podemos encontrar que necesitamos saber de que paquete proviene un archivo,
o lo mas frecuente, que paquete/s tengo que instalar para que me funcione un comando.
Disponemos deapt-cache y dpkgpara realizar estas tareas.
Buscar paquetes padre de comandos instalados
Si tenemos un comando instalado y no sabemos de que paquete proviene, se usadpkg -S.
$dpkg -S <nombre_comando>
Devuelve una lista de todos los paquetes que durante su instalacion crearon un archivo igual a nom-
brecomando. Si sabemos el directorio donde se encuentra podemos renar la busqueda.
$dpkg -S /usr/bin/nombre_comando
Buscar paquetes padre de comandos no instalados
En este caso hay que buscar en la pagina de paquetes Debian,http://packages.debian.org/testing/.
Tambien se puede utilizar el siguiente truco rapido:
$links -dump "http://packages.debian.org/cgi-bin/search_contents.pl?
case=insensitive&arch=i386&version=testing&word=nombre_comando"
Dondearch,versionywordse ajustan a las necesidades de nuestra busqueda concreta.
Buscar paquetes si sabemos su nombre parcial
En este caso lo mejor es usar una de las opciones dedpkg -l.
$dpkg -l "*cadena_caracteres*"
Busca todos los paquetes que contienen la cadenacadenacaracteres.
Buscar paquetes si tenemos una descripcion
Si no conocemos el comando, pero sabemos su descripcion, lo mejor es usarapt-cache search.
$apt-cache search <paquete>
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 39
Buscar dependencias de un paquete
Para conocer las dependencias e informacion de un paquete, podemos usar elapt-cache depends.
$apt-cache depends <paquete>
La informacion que se nos mostrara es la siguiente:
Depende: Paquetes que son necesarios para que funcione
Sugiere: Paquetes recomendables
Entra en conicto: Paquetes incompatibles
Reemplaza: Paquetes que quedaran obsoletos
4.5.6. Problemas al instalar paquetes
Cuando existe un problema de dependencias entre paquetes podemos utilizar los siguientes comandos
para recongurarlos.
#dpkg --configure -a, . . . Comprueba problemas de conguracion.
#apt-get -f install, . . . Reintenta la instalacion de paquetes que han dado problemas.
Realizando una lectura, completa y a conciencia de las salidas de los comandos anteriores se suele
identicar el problema. Se puede probar a repetir varias veces estos dos comandos.
Si existe un paquete que ha quedado mal instalado, lo primero que hay que hacer es leer la docu-
mentacion que trae, para comprobar si tiene alguna incompatibilidad con nuestro sistema. En caso de no
encontrar el problema, es recomendable probar a reinstalar el paquete:
#apt-get remove <paquete>
#apt-get install <paquete>
Si esto tampoco funciona, corriendo el consiguiente riesgo, se puede forzar la reescritura de paquete
con el comando:
#dpkg -i --force-overwrite /var/cache/apt/archives/nombre_paquete
. . . y probar a recongurar los paquetes otra vez
Estos comandos (dpkg --force-help) son utiles en determinadas ocasiones, pero hay que saber que
es lo que se quiere hacer de antemano y asumir las posibles consecuencias.
Por ultimo comentar el siguiente comando que tambien puede ser util en determinadas ocasiones:
# apt-get -s -t <rama_debian> install --reinstall <paquete>
Donde -s simula la instalacion y -tunstable,stableotestingespecica la distribucion Debian utilizada.
4.6. Shells
Un shell es un programa, ejecutado por el usuario, que le proporciona a este una interfaz interactiva
con el sistema (una lnea de comandos) para introducir datos o especicar programas que quiera ejecutar.
El shell predeterminado en la mayora de distribuciones Linux esbash (Bourne Again Shell).
Jose Antonio Escartn Vigo, Junio 2005.

40 Servidor Linux para conexiones seguras de una LAN a Internet
4.6.1. Tipos de shell
Existe varios shells para Linux. Cada una de ellas tiene ciertas caractersticas, pero todas estan clasi-
cadas en dos ramas: la shell Bourne o la familia de shells C.
Shell Bourne
La shell Bourne es la mas antigua de las shells modernas. La shellbash, suele ser ejecutada por defecto
en todas las distribuciones Linux. Algunas shells disponibles para sistemas Linux, que se inscriben en
la familia de shells Bourne, incluyen otro sucesor de Bourne,ksh, la shell de Korn (implementada en
casi todas las distribuciones comopdksh);ash, una shell parecida abashpero de menor tama~no, ideal
para disquetes de arranque;kiss, otro interprete sencillo de shell (pero solo tiene comandos rudimentarios
integrados), que es tambien ideal para discos de arranque o rescate; yzsh, una shell muy parecida a la
shell de Korn.
La shell C
La shell C fue creada en principio para superar las limitaciones de la shell Bourne (como el soporte
para calculos numericos). Estaba dirigida a usuarios avanzados y a usuarios mas familiarizados con la
sintaxis de la programacion en C. La shell C proporciona una interfaz agradable, pero se considera que es
mas difcil hacer scripts para ella, especialmente para aquellos que no esten familiarizados con la sintaxis
C. La sintaxis para las variables de entorno vara signicativamente, y los scripts escritos para shells de la
familia Bourne, normalmente no se pueden ejecutar en una shell C y viceversa. Entre los sucesores de la
shell C (csh) tenemostsch, recomendada por encima decshpara aquellos que quieran usar este tipo de
interfaz.
4.6.2. Caractersticas de la shell Bash
La shellbashcontiene una serie de herramientas que facilitan la tarea del usuario. Estas quedan
descritas en los siguientes puntos:
Escribiendocdse va directamente alhomedel usuario.
Si se empieza a escribir una ruta o un nombre de archivo, y esa ruta o ese nombre son unicos entre
todas las opciones disponibles, si se pulsa la teclaTAB, el shell rellena el resto de la ruta o nombre.
En caso de que no sea unico emite un pitido de opcion ambigua y si se pulsa por segunda vez la
teclaTABse muestra el rango de opciones disponibles. A menudo, con solo un caracter mas
tendremos una seleccion unica otra vez.
Se pueden ejecutar varios comandos en la misma lnea separandolos por el caracter \;"
Permite incrustar comandos como parametros de otros comandos, encerrandolos entre comillas
invertidas (#kill `cat /var/run/named.pid`)
Existe un historial de comandos, que queda almacenado en.bashhistory. Tiene un tama~no
prejado (normalmente 500 lineas) a partir del cual empieza a borrar las lneas antiguas para
escribir las nuevas. El comando$historymostrara el contenido de.bashhistory.
Este historico de comandos facilita la tarea de escribir scripts para la shell. Sencillamente, cortando
y pegando en un script los comandos que funcionaron bien.
Se puede recuperar un comando ya utilizado pulsando repetidas veces la echa hacia arriba.
Facilita la tarea de cortar y pegar, en entorno X-Windows, funciona entre ventanas de diferentes
aplicaciones. Tambien permite seleccionar textos usando el raton.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 41
4.6.3. Ejecucion de procesos en la shell Bash
Para ejecutar un archivo que se encuentre en el directorio local, siendo que este directorio no se en-
cuentra en el $PATH del sistema se emplea el siguiente metodo:
$./<archivo_ejecutable>
Desde una consola tambien podemos hacer que un proceso se ejecute en segundo plano a~nadiendole
un&al nal, y as seguir trabajando en esa consola:
$comando &
4.6.4. Variables de entorno
Una variable de entorno es una cadena de caracteres con informacion de las diferentes opciones del
sistema asociada a un nombre simbolico que pueda utilizar Linux.
Visualizar contenido de variables
Podemos visualizar las variables denidas, as como sus valores utilizando los comandos:
$printenv
$env
El comandoprintenvse diferencia deenvpor el hecho de que nos permite visualizar el valor de una
variable en particular:
$printenv <VARIABLE>
Variables mas comunes
La siguiente tabla, obtenida en [BB00] especica las variables que encontraremos, mas habitualmente,
en nuestro sistema.
Si se utiliza el shellbash, se puede encontrar mas informacion sobre las variables de entorno que existen
mediante el comando$man bash.
Asignar valores a variables de entorno
Para denir una variable de entorno podemos hacerlo desde la lnea de comandos, con la desventaja
de que el valor solo sera valido en la sesion actual, o modicando los archivos de perl.
La forma de realizar esta asignacion desde la lnea de comandos dependera del shell que estemos uti-
lizando.
Si utilizamos el shellbashel metodo es el siguiente:
#VARIABLE_DE_ENTORNO=valor
#export VARIABLE_DE_ENTORNO
En caso de realizarlo mediante los archivos de perl, en el interior del/etc/proleo el~/.prolese
coloca la siguiente instruccion:
export VARIABLE_DE_ENTORNO=valor
Jose Antonio Escartn Vigo, Junio 2005.

42 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 4.15: Variables habituales del sistema
Variable Descripcion
EDITOR Indica el editor por defecto utilizado por el sistema
HISTSIZE Es el numero de comandos que recuerda el shell. Podemos acceder a los coman-
dos utilizando los cursores arriba y abajo
HOME Determina el directorio de trabajo del usuario actual
HOSTNAME Indica el nombre del ordenador o host en el cual estamos trabajando
HOSTTYPE Especica el tipo o arquitectura del ordenador
LANG Esta variable se emplea para indicar el idioma utilizado
LOGNAME Nombre del usuario actual
MAIL Directorio en el cual se almacena el correo entrante
OSTYPE Sistema operativo en uso
PATH Trayecto o ruta de busqueda de los archivos ejecutables
SHELL Nombre del shell actualmente en uso
PWD Path de inicio
TERM Tipo de terminal utilizado en la sesion de trabajo actual
USER Nombre de usuario
PATH Conjunto de directorios donde se buscan los comandos
PS1 Especica el aspecto del smbolo de promptdel sistema
LANG, LANGUAGE Especica el estandar de lenguaje que se utiliza en la maquina
LCALL, LCTYPE Especica el estandar de lenguaje para las conguraciones locales
Eliminar variables de entorno
Para eliminar variables desde la lnea de comando se ejecutara una instruccion diferente dependiendo
del shell sobre el que trabajemos. En el shellbashse realiza de la siguiente forma:
#unset VARIABLE_DE_ENTORNO
Tambien es posible utilizar el comandoenvcon la-u:
#env -u VARIABLE_DE_ENTORNO
Hay que tener en cuenta que si la variable se encontraba contenida en uno de los archivos de congu-
racion de perl, cuando volvamos a cargar el entorno del usuario la variable tambien se cargara.
4.6.5. Conguracion del entorno
Cuando se inicia una sesion de trabajo el interprete de comandosbashlee y ejecuta de forma automati-
ca las ordenes del archivo/etc/prole. A continuacion
1
busca los archivos del usuario~/.bashprole,
~/.bashlogin y ~/.proleejecutandolos segun el orden indicado. Al nalizar la ejecucion del shell se
lee y ejecuta el archivo ~/.bashlogout del directorio del usuario.
Si queremos que se ejecute algo al comienzo o nal de cada sesion, o a~nadir nuevas variables de sistema,
elegiremos el archivo a modicar que mas convenga a nuestros objetivos.
Resulta de gran utilidad realizar alguna modicacion a los comandos tpicos para evitar da~nos no
deseados en el sistema o a~nadir las opciones que mas utilizamos. Un ejemplo de esto sera colocar en el
archivo~/.prole:
alias mv="mv -i"
1
En el caso de ejecutar un shell interactivo que no sea de entrada se lee y ejecuta el archivo~/.bashrcubicado en el
directorio del usuario.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 4. Primeros pasos 43
alias cp="cp -i"
alias rm="rm -i"
alias dir="ls -alF"
Con los tres primeros comandos se redenira el comando base, pidiendo conrmacion por defecto y
con el ultimo se creara un comando nuevo que llamara alspero con mas opciones.
4.6.6. Redireccionamientos
Para redireccionar a un archivo la salida normal de un script, de forma que mas tarde se puedan ver
los resultados, se utiliza la redireccion (>).
$ls -l >listado
Si se quiere a~nadir los resultados de la salida de un comando al nal de un archivo, se utiliza la redi-
reccion (>>).
$ls -l /bin >>listado
De forma similar, se pude redireccionar la entrada, para ello se utiliza la redireccion(<).
$cat < listado
Canales estandar
En Linux existen una serie de canales estandar que nunca cambian, al menos que los modiquemos a
mano:
Dispositivo 0:stdin, o dispositivo de entrada estandar
Dispositivo 1:stdout, o dispositivo de salida estandar
Dispositivo 2:stderr, o dispositivo de error estandar
Dispositivo /dev/null: Todo lo que se redirecciona a este dispositivo se pierde
Estos dispositivos estandar tambien pueden ser redireccionados con: \>" y \<". Esto se puede observar
en los siguientes ejemplos:
$ls > listado 2>&1, . . . redirecciona la salida estandar y el error estandar al archivo listado.
$ls > listado 2>/dev/null, . . . redirecciona la salida estandar al archivo listado y descarta errores.
$cat < listado 2>&1 listado2, . . . toma como entrada listado, la salida y el error se redireccionan
a listado2.
Filtros opipes
Los ltros opipesson un mecanismo por el cual la salida de un programa se puede enviar como en-
trada a otro programa. Los programas individuales se pueden encadenar juntos para convertirse en unas
herramientas extremadamente potentes.
Podemos ver esto con un ejemplo:
$env | grep "SHELL", . . . el comando env lista las variables y ltramos la variable \SHELL".
Los comandosmoreylesspaginan (dividen en paginas) uno o varios cheros y los muestran en la
terminal. De no indicarseles un chero, paginan la entrada estandar. Se diferencian en las facilidades que
Jose Antonio Escartn Vigo, Junio 2005.

44 Servidor Linux para conexiones seguras de una LAN a Internet
brindan. Por ejemplo more es mas restrictivo en cuanto al movimiento dentro del texto, mientras queless
no limita este aspecto pues acepta el empleo de todas las teclas de movimiento tradicionales. Cuando se
alcanza el nal del ultimo chero a paginar, more termina automaticamente, no asless. Tambienmore
muestra sucesivamente el porcentaje del chero visto hasta el momento.
Proveen una serie de comandos para moverse con facilidad dentro del texto paginado:
q: permite interrumpir el proceso y salir
/p: realiza busquedas del patronpdentro del texto. Para repetir la busqueda del mismo patron solo
es necesario escribir/.
n b: enmorepermite regresarnpaginas (por defectones 1).
n f: enmorese adelantannpaginas y enless,nlneas.
4.7. Consolas virtuales
Al ser Linux un sistema multiusuario y multitarea, se pueden ejecutar diversos procesos simultanea-
mente, en varias consolas virtuales, y estos ser controlados por usuarios diferentes. En cada consola virtual
que se utiliza es necesario logearse como usuario del sistema.
Para cambiar de consola:
En modo texto: ALT-F1 . . . ALT-F6
En modo graco: CTRL-ALT-F1 . . . CTRL-ALT-F6 para consolas de texto y CTRL-ALT-F7 para
volver al modo graco.
Esto es muy util para tener una consola virtual de root con maxima prioridad, si el sistema se ralen-
tiza, podremos observar por que esta pasando y remediarlo. Tambien podemos nalizar algun proceso o
aplicacion que haya podido bloquear otra consola, evitando de esta forma tener que reiniciar el sistema.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 5
Kernel
El kernel o nucleo es una de las partes esenciales de un sistema operativo. Proporciona todos los servicios
basicos requeridos por otras partes del sistema operativo y aplicaciones. Se encarga de la administracion
de la memoria, los procesos y los discos. El kernel es independiente de la distribucion Linux utilizada, el
mismo kernel debera servir para otras distribuciones, usando el mismo ordenador.
Las distribuciones Linux vienen con kernels que necesitan ser instalados en una amplia variedad de
escenarios de conguraciones de sistemas y hardware, por lo tanto dan soporte a muchos dispositivos y
hardware que no necesitamos. Recompilar el kernel es una buena idea y dara como resultado un kernel
mas peque~no y rapido. El kernel 2.6 es mas rapido que los kernels anteriores y tiene soporte para nuevos
dispositivos.
La actualizacion del kernel se divide en dos partes: compilacion e instalacion del nuevo kernel.
5.1. >Por que compilar?
Hay diversas razones para recompilar el kernel de Linux. Es util por que trabajando con kernels nuevos
generalmente se obtiene:
1. Un sistema mas rapido, estable y robusto
2. Soporte a elementos de hardware no encontrado en kernels viejos.
3. Soporte a caractersticas especiales disponibles pero no habilitadas en kernels viejos.
Recompilar el kernel de Linux no es mas que personalizar el kernel. Como en cualquier aplicacion,
la personalizacion se hace para sacar un mayor provecho de las diferentes caractersticas que ofrece el
software.
5.2. Acerca de los modulos
Varias partes de codigo del kernel pueden compilarse por separado en forma de modulos, dando exi-
bilidad al sistema. Los modulos no estan enlazados directamente en el kernel, siendo necesario insertarlos
en el ya sea durante el proceso de arranque o posteriormente, de tal forma que solo se usan cuando se
necesitan, sin utilizar innecesariamente la memoriaRamdel sistema.
5.3. Kernel-image
La manera mas sencilla de obtener un nuevo kernel es instalar un paquete kernel-image.deb. Una vez
instalado solo es necesario actualizar el gestor de arranques y reiniciar.
Son kernels bastante estandar y adaptados a distribuciones Debian. Para hacerlos mas utilizables,
incluyen soporte para todo tipo de hardware e idiomas imaginados.
Este metodo es rapido y sencillo pero es muy ineciente, desaprovecha los recursos del sistema.

46 Servidor Linux para conexiones seguras de una LAN a Internet
5.4. Kernel-source
Es un paquete de codigo fuente del kernel ocial, adaptado a la distribucion Debian. Kernel-source es
mucho mas versatil que kernel-image, los binarios no suelen contener congurados correctamente todos
los dispositivos del sistema.
5.4.1. Instalar un kernel-source
Para saber cual es la version mas actual podemos utilizar la siguiente secuencia de comandos:
1. Cargar las fuentes de Apt (/etc/apt/sources.list) con nuestra distribucion, como se puede ver en
el ejemplo 4.13 del captulo anterior
2. Actualizar el Apt con las nuevas fuentes,#apt-get update
3. Cargar el paquete links,#apt-get install links
4. Averiguar el nombre del kernel-source mas actual,
$links -dump "http://packages.debian.org/cgi-bin/search_contents.pl?
case=insensitive&arch=i386&version=testing&word=kernel-sourse-2.6"
5. Descargar la nueva version del kernel-source (se descarga en el directorio/usr/src/),
#apt-get install kernel-source-2.6.8
6. Descomprimir el kernel-source,#tar jxvf /usr/src/kernel-source-2.6.8.tar.bz2
7. Crear un enlace simbolico,#ln -s kernel-source-2.6.8 linux
8. Ejecutar el menu de conguracion para el menu texto,#usr/src/linux/make menuconfig,
. . . o para el menu graco,#usr/src/linux/make xconfig
9. Elegir las opciones que queramos implementar en el kernel
Una vez completadas estas instrucciones podemos elegir entre dos alternativas: o crear un paquete
.deb, descrito en el apartado siguiente; o compilar el kernel como si fueran las fuentes ociales (Apartado
5.5).
Esto queda a eleccion del usuario, pero al haber optado por las herramientas Debian la opcion mas
coherente es crear un paquete.
5.4.2. Crear un paquete .deb
Usaremos la herramientamake-kpkgde Debian para crear el paquete .deb con nuestro kernel. La
documentacion se puede encontrar en/usr/share/doc/kernel-package/. Para evitar da~nar el sistema con
posibles errores se utilizara el paquetefakerootque proporciona un entorno de root falso, donde poder
compilar el kernel. En la pagina del manual se describen las opciones del paquetefakeroot, en el ejemplo
se muestra el metodo mas simple:
Para crear el kernel-image, hay que introducir los siguientes comandos:
$fakeroot make-kpkg clean
$fakeroot make-kpkg -version .fecha kernel_image
Dondeversiones el numero de la version del kernel, en la secuencia del usuario y.fechaes la fecha
en la que se esta compilando el kernel. De esta forma tendremos claramente identicado la version del
kernel y la fecha de la compilacion.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 5. Kernel 47
Para instalar el paquete:
#dpkg -i kernel-image-2.6.8_Version.1.050518_i386.deb
Una vez terminado solo es necesario actualizar el gestor de arranque con el nuevo kenel y reiniciar
(Como se puede observar en el apartado 4.2 del captulo anterior).
5.5. Compilar Kernel
Las fuentes ociales del kernel mas actual las podemos encontrar enhttp://www.kernel.org. Las des-
cargamos al directorio/usr/src/y las descomprimimos empleando el metodo adecuado, segun el formato
del kernel descargado.
Para la seguridad y asegurarnos que no da~namos involuntariamente el sistema se puede creer un usua-
rio capaz de actuar con los archivos fuentes. Para eso se a~nadira al gruposrc.
#gpasswd -a josan src
5.5.1. Paquetes necesarios
Para poder compilar el kernel necesitamos tener los siguientes paquetes instalados.
Paquetes basicos
Cuadro 5.1: Paquetes basicos
gcc
kernel-package
libc6-dev
tk8.0
libncurses5-dev
fakeroot
Paquetes kernel 2.6
Antes de realizar el proceso de compilacion de un kernel de la serie 2.6 es necesario que actualize-
mos nuestro sistema con las ultimas versiones de los paquetes que se detallan en el cuador 5.2.
Si alguno no lo tenemos instalado, es necesario realizar su instalacion mediante apt-get. El proceso
automatizado que comprueba las versiones se encuentra implementado en el scrip:
/usr/src/linux/scripts/ver_linux
Jose Antonio Escartn Vigo, Junio 2005.

48 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 5.2: Paquetes necesarios para compilar kernel 2.6
Paquete Version necesaria Comando comprobar version
Gnu C 2.95.3 #gcc --version
Gnu make 3.78 #make --version
binutils 2.12 #ld -v
util-linux 2.10 #fdformat --version
module-init-tools 0.9.10 #depmod -V
e2fsprogs 1.29 #tune2fs
jfsutils 1.1.3 #fsck.jfs -V
reiserfsprogs 3.6.3 #reiserfsck -V
xfsprogs 2.1.0 #xs_db -V
pcmcia-cs 3.1.21 #cardmgr -V
quota 3.09 #quota -V
PPP 2.4.0 #pppd --version
isdn-utils 3.1pre1 #isdnctrl 2>&1|grep version
nfs-utils 1.0.5 #showmount --version
procps 3.1.13 #ps --version
oprole 0.5.3 #oprofiled --version
5.5.2. Comprobar el hardware disponible
Para comprobar que todos los dispositivos que tenemos son reconocidos vamos a ejecutar una serie de
comandos:
#apt-get install hardinfo, instala una serie de utilidades para hw
$/bin/lspci, . . . informa sobre los dispositivos disponibles
$cat /proc/cpuinfo, . . . lista detalles sobre la CPU reconocida
En caso de que no reconociera alguno, es necesario estudiar mas a fondo el problema concreto. Suele ser
necesario descargar los drivers y parchear el kernel para que les de soporte. Normalmente, los fabricantes
de software incluyen manuales de instalacion que simplican esta tarea.
5.5.3. Metodo de compilacion
En el cuadro 5.3 se describe el metodo que utilice para compilar el kenel del servidor. Es un trabajo
laborioso y que requiere bastante practica, es necesario realizar varias recompilaciones para ajustar las
opciones del kernel. Al comenzar el usuario se encuentra abrumado ante tal cantidad de opciones, averiguar
las correctas es cuestion de disponer de las especicaciones del hardware y paciencia.
El metodo descrito es una gua estandar para compilar el kernel, la eleccion de los modulos a colocar
en el kernel se deja a eleccion del usuario, ya que cada hardware tiene sus propias caractersticas.
Es muy recomendable, para mayor seguridad, compilar en kernel en un entorno simulado, que da acceso
a recursos pero no permite modicaciones del sistema. Esto se realiza mediante el paquetefakeroot, como
se ha explicado anteriormente (seccion 5.4.2). Una vez tenemos descargadas las fuentes en/usr/src/, si
queremos comprobar que hace el Makele lo podemos encontrar en,/usr/src/linux/arch/i386/Makele.
El metodo descrito en este apartado es un resumen del documentoKernel-Build-HOWTO, en el que
me base para realizar la compilacion del kernel. Se puede encontrar en la direccion:
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 5. Kernel 49
Cuadro 5.3: Compilacion del Kernel
Accion Comando
Nos situamos en el directorio$cd /usr/src
Si existe enlace/usr/src/linuxrm linux
Descomprimimos el kernel $tar zxvf linux-2.6.11.tar.gz
Creamos un enlace simbolico a
las fuentes del nuevo kernel
$ln -s linux-2.6.11 linux
Entramos en el directorio de las
fuentes
$cd linux
Cambiar a usuario root $su root
Salvamos el archivo antiguo de
conguracion del kernel
#cp .config config.save
Borramos los mensajes de com-
pilaciones anteriores
#make mrproper
Entramos en el menu de congu-
racion
#make menuconfig(menu texto) o#make xconfig(menu graco)
Agregamos dependencias #make dep
Borramos datos innecesarios#make clean
Compilamos el kernel #make bzImage
Compilamos los modulos #make modules
Instalamos los modulos en el ker-
nel
#make modules_install
Copiamos a/bootel kernel #cp arch/i386/boot/bzImage /boot/bzImage-VERSION_KERNEL
Borramos el antiguo enlace a
System.map
#rm /boot/System.map
Copiamos el archivoSystem.map#cp System.map /boot/System.map-VERSION_KERNEL
Creamos el nuevo enlace aSys-
tem.map
#ln -s /boot/System.map-VERION_KERNEL /boot/System.map
Conguramos el gestor de arran-
que
#vi /etc/lilo.conf
Cargamos el nuevo arranque #/sbin/lilo
Marcamos que reinicie con el
nuevo kernel
#/sbin/lilo -R <Nombre_del_arranque_en_lilo>
5.5.4. Parchear el kernel
Los parches del kernel son la forma de a~nadir caractersticas especiales al kernel. Antes de lanzar
#make menuconfigo#make xconfig, es necesario ejecutar los parches con el siguiente comando:
#/usr/src/linux/patch -p1 < [ruta_del_pache]/parche_a_aplicar
Con esto conseguiremos aplicar los parches sobre las fuentes del kernel, es preciso asegurarse que los
parches coinciden con la version de nuestro kernel, en caso contrario no funcionaran.
5.5.5. Consejos para la conguracion del kernel
Hay que tomarse todo el tiempo necesario conxcong o menucong. Asegurarse de incluir todo lo
imprescindible y quitar todo lo que no (modulos para dispositivos zip, soporte usb, video, tarjeta de
sonido, nic, raid, etc...). Se recomienda usar los modulos siempre que sea posible, esto hace al kernel mas
peque~no y mas rapido. Si no se esta seguro de que elegir resulta de gran ayuda consultar la documentacion.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 6
Interfaz graco
En los sistemas Linux se tiene una vision diferente del entorno graco. La interfaz que se presenta al
usuario es independiente del nucleo del sistema operativo.
El nucleo de Linux (su kernel) esta completamente desacoplado de la interfaz graca. Esto permite
seleccionar la interfaz con la que nos resulte mas comoda, en lugar de tener que seguir el dictado de alguien
o de la potencialmente aleatoria \investigacion de mercado".
Sin embargo, lo mas importante de esta decision es la estabilidad que implica tener este programa
independiente del nucleo. Si cae el GUI
1
bajo Windows o MacOS, se tiene que volver a arrancar. Bajo
Linux, se pude matar el proceso y reiniciarlo sin afectar al resto de servicios del sistema (tales como
servicios de archivos, o de red).
6.1. X-Window
A mediados de 1980 se creo una fundacion para entornos de usuario graco, indepenediente del sistema
operativo llamado X-Windows. Las \X" simplemente denen el metodo por el cual se pueden comunicar
las aplicaciones con el hardware graco. Tambien establece un conjunto de funciones de programacion
bien denidas que podran ser llamadas para realizar la manipulacion basica de las ventanas.
La denicion basica de como se dibuja una ventana, un boton o un icono no incluye la denicion de
como estos se deberan ver. En realidad X-Windows en su estado natural no tienen apariencia real. El
control de la apariencia se delega en otro programa externo llamado gestor de ventanas.
Con los entornos de programacion y las interfaces de usuario tan poco amigables X-Windows tena el
potencial de convertirse en la interfaz nal, pero a cambio contaba con la desventaja de ofrecer un dise~no
que pareca como hecho \a trozos".
El protocolo es abierto, lo cual signica que cualquiera puede escribir un cliente X o un servidor X.
Una de las mejores caractersticas de X-Windows es que permite que las aplicaciones se ejecuten en
una maquina, pero se visualicen en otra distinta, suministra protocolos de red para realizar esta funcion.
6.1.1. Conguracion X-Windows
Linux ofrece la funcionalidad de poder ejecutar aplicaciones a traves de una red heterogenea, mediante
la incorporacion de la implementacion XFree86 del estandar X11 del sistema X-Window, creado por el
MIT
2
.
.
1
Interfaz graca de usuario
2
Instituto Tecnologico de Massachusetts

52 Servidor Linux para conexiones seguras de una LAN a Internet
Historicamente, XFree86 ha sido una de las partes mas complejas de Linux en lo referente a instalacion
y conguracion. Ya no es este el caso, en la mayora de las conguraciones estandar de hardware. Ahora las
distribuciones mas populares de Linux lo instalan y conguran automaticamente. Ademas, con XFree86 v4,
algunas de las partes mas complejas de la conguracion son gestionadas automaticamente.
Actualmente XFree86, el servidor X que usa Linux normalmente, se encuentra en el estandar X11R6.4,
que se ha adaptado a los sistemas basados en Intel.
Hay que asegurarse de que se dispone de hardware apropiado para ejecutar XFree86, se debe tener una
tarjeta de vdeo que disponga de un chipset soportado y un monitor que permita la frecuencia escogida. Al
trabajar directamente con el hardware, si no fuera compatible, se podra da~nar fsicamente el ordenador.
xf86Cong
Es el congurador de X-Windows para Debian. Despues de leer los archivos/usr/X11/lib/doc, hay que
ejecutar uno de los siguientes comandos:
#xf86config, . . . para modo texto
#xf86cfg, . . . para modo graco
A continuacion, se seleccionan las especicaciones de la tarjeta y el monitor. Esto generara el archivo
de conguracion/etc/X11/XF86Cong-4.
Para probar la conguracion ejecutamos#startx.
Si no arranca ha llegado el momento de adentrarse en el archivoXF86Cong-4.
Archivo /etc/X11/XF86Cong-4
Si se dispone de hardware poco frecuente, puede que sea necesario congurar manualmente XFree86.
No se debe utilizar este archivo copiado y sin revisar, de otro sistema, otro ordenador o el ejemplo
que se expone mas adelante. Es necesario inspeccionar el archivo en busca de valores erroneos, arrancar
el monitor con frecuencias no soportadas podra da~nar el equipo.
El archivo de conguracion esta dispuesto en secciones con el siguiente formato:
Section "Nombre de la seccion"
Comando1 "Opcion"
Comando2 "Opcion"
Subsection "Nombre de la subseccion"
Comando3 "Opcion"
EndSubSection
EndSection
A continuacion paso a detallar cada una de las secciones que contiene el archivo de conguracion:
Seccion Files
Esta seccion dene los archivos y directorios importantes para XFree86. Las rutas de acceso a la base
de datos de color (RGB), las deniciones de las fuentes y bibliotecas de modulos.
Seccion Modules
Se proporciona soporte para varios servicios mediante modulos de carga dinamica. Esto aumenta mucho
la exibilidad en el modo de suministro de servicios, y en los servicios que los usuarios eligen usar en
realidad.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 6. Interfaz graco 53
De este modo, tambien se proporciona un mecanismo mas general para ofrecer servicios, como soporte
TrueType, que antes suministraban programas externos.
Los modulos pueden cargarse usando el comandoLoado usando unaSubSection. El uso de una
SubSectionactiva las opciones que se quieren pasar al modulo.
Seccion InputDevice
Es una de las muchas secciones que puede repetirse en el archivo de conguracion. Cada dispositi-
vo (raton, teclado, pantalla tactil, . . . ) tiene su propia seccionInputDevice.
Dene simplemente un dispositivo de entrada disponible. No implica que este dispositivo de hecho se
use. La seccionServerLayoutasociara este dispositivo con una presentacion en pantalla.
Seccion Device
Esta seccion dene una tarjeta de vdeo. Como con muchas de las otras secciones, no implica que
el dispositivo se este usando, solo que esta disponible. Al igual que que la mayora de las secciones, la
seccionDeviceusa un comandoIdentierpara nombrar a este dispositivo.
El comandoDriverindica a XFree86 que modulo cargable debe usar para este dispositivo.
Los controladores de dispositivos suelen aceptar multitud de opciones.
Seccion Monitor
Esta seccion dene un monitor que este disponible para su uso, pero no implica que este usando en
realidad. Tampoco asocia al monitor con una tarjeta de vdeo. Esto se hara en la seccionScreen. Cada
seccionMonitortiene un comandoIdentierpara nombrarlo.
Todos estos rodeos pueden hacer parecer el sistema confuso, pero hacen que XFree86 sea enorme-
mente exible. Al denir el monitor independiente de la tarjeta de vdeo, es mucho mas facil denir las
conguraciones multipantalla.
Seccion Screen
Esta seccion combina unMonitory unDevice, denidos en las secciones anteriores, para crear una
pantalla logica. Tambien dene una profundidad de color predeterminada, o el numero de bits de color
por pixel.
Dentro de esta seccion se encuentran una o mas subseccionesDisplay. Estas subsecciones denen las
combinaciones de profundidad de color/resolucion para esta pantalla. Tambien suministran el tama~no de
los espacios de visualizacion o de la pantalla virtual. Despues de seleccionar una pantalla usando una
presentacion o la opcion de la lnea de comandos--screen, la profundidad de color de ese momento
determinara que visualizacion se usara. La profundidad de color puede conguarse usando la opcion de la
lnea de comandos--depth, o se usara la profundidad de color predeterminada.
Seccion ServerLayout
Esta seccion dene una presentacion de pantallas y de dispositivos de entrada. Se puden denir una
o mas pantallas. Si se denen varias pantallas, las opciones indicaran a XFree86 donde se encuentra
fsicamente una con relacion a la otra. Por ejemplo:
Section "ServerLayout"
Identifier "Main Layout"
Screen "Screen 1" 0
Screen "Screen 2" 1 RighOf "Screen 1"
Screen "Screen 3" Relative "Screen 1" 2048 0
EndSection
Jose Antonio Escartn Vigo, Junio 2005.

54 Servidor Linux para conexiones seguras de una LAN a Internet
Aqu se muestra queScreen 1esta arriba, a la izquierda,Screen 2se encuentra justo a la derecha de
Screen 1, yScreen 3esta 2048 pixels a la derecha deScreen 1. Esto le permite distribuir sus ventanas en
varios monitores y moverse entre ellos con facilidad. Sin embargo, de manera predeterminada, no puede
tener ventanas que esten solapadas entre varios monitores.
Al usar un nuevo modulo llamadoXinerama, se pueden tratar varios monitores como si fuese un
unico espacio de trabajo, moviendo las ventanas alrededor de ellos sin fragmentarlas.Xineramaha de ser
soportado por el gestor de ventanas, en mi caso que usoEnlightenmentsi se puede.
Seccion ServerFlags
Esta seccion dene varios indicadores de opcion de Xfree86. Las conguraciones predeterminadas pa-
ra estos indicadores son validas en casi todas las situaciones y necesitaran modicaciones en contadas
ocasiones. Si se necesita investigar estas opciones, los comentarios que se encuentran en el archivo de
conguracion son bastante claricadores.
Ejemplo de un archivo /etc/X11/XF86Cong-4
Cuadro 6.1: Archivo /etc/X11/XF86Cong-4
# XF86Config-4 (XFree86 X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the XF86Config-4 manual page.
# (Type "man XF86Config-4" at the shell prompt.)
#
# This file is automatically updated on xserver-xfree86 package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xfree86
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following commands as root:
#
# cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom
# md5sum /etc/X11/XF86Config-4 >/var/lib/xfree86/XF86Config-4.md5sum
# dpkg-reconfigure xserver-xfree86
Section "Files"
FontPath "unix/:7100" # local font server
# if the local font server has problems, we can fall back on these
FontPath "/usr/lib/X11/fonts/misc"
FontPath "/usr/lib/X11/fonts/cyrillic"
FontPath "/usr/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/lib/X11/fonts/CID"
FontPath "/usr/lib/X11/fonts/Speedo"
FontPath "/usr/lib/X11/fonts/100dpi"
FontPath "/usr/lib/X11/fonts/75dpi"
EndSection
Section "Module"
Load "GLcore"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "speedo"
Load "type1"
Load "vbe"
EndSection
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xfree86"
Option "XkbModel" "pc105"
Option "XkbLayout" "es"
EndSection
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 6. Interfaz graco 55
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/psaux"
Option "Protocol" "PS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Generic Mouse"
Driver "mouse"
Option "SendCoreEvents" "true"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "Device"
Identifier "Generic Video Card"
Driver "vesa"
Option "UseFBDev" "true"
EndSection
Section "Monitor"
Identifier "Generic Monitor"
HorizSync 28-50
VertRefresh 43-75
Option "DPMS"
EndSection
Section "Screen"
Identifier "Default Screen"
Device "Generic Video Card"
Monitor "Generic Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Generic Mouse"
EndSection
Section "DRI"
Mode 0666
EndSection
6.1.2. Arrancar X-Windows
Para entrar en el entorno X-Windows simplemente es necesario ejecutar:
$startx
Para poder elegir entre que sistema de ventanas queremos arrancar tenemos que modicar el archivo
de conguracion de usuario~/.xinitrc.
$vi ~/.xinitrc, . . . para editar el archivo.
A~nadir las siguientes lneas para arrancar KDE:
#!/bin/sh
startkde
Jose Antonio Escartn Vigo, Junio 2005.

56 Servidor Linux para conexiones seguras de una LAN a Internet
A~nadir las siguientes lneas para arrancar GNOME:
#!/bin/sh
gnome-session
Si el archivo no esta vaco, probablemente la ultima lnea sea un comandoexec. Es necesario cambiarlo
por la opcion que hayamos escogido.
6.2. Gestores de ventanas
El gestor de ventanas se preocupa de dibujar los bordes, usar el color y hacer que el entorno sea
agradable a la vista. Solo se requiere usar las llamadas estandares al subsistema X-Windows para dibujar
sobre la pantalla. El gestor de ventanas no dicta como debe utilizar las ventanas la propia aplicacion. Esto
signica que los programadores de aplicaciones tienen la exibilidad adecuada para desarrollar la interfaz
de usuario mas intuitiva para la aplicacion en particular.
Son programas clientes de las \X", forman parte del entorno de escritorio o, en otros casos, se ejecutan
independientes de un escritorio. Su proposito principal es controlar la forma en que las ventanas gracas
son posicionadas, redimensionadas o movidas. Controlan las barras de ttulos, el comportamiento del foco,
los vnculos del boton del raton y teclas especicadas por el usuario.
Los gestores de ventanas generalmente son mas peque~nos que los escritorios y estan mas orientados
hacia usuarios expertos, que se sienten mas a gusto con un interfaz de lnea de comandos.
Como las \X" no especican un gestor de ventanas en particular, a lo largo de los a~nos han aparecido
muchos. Algunos de los mas populares para Linux sonfvwm2, Window Maker, blackbox y AfterStep. Mu-
chos gestores estan basados bien en elTab Window Manger, un administrador de ventanas muy simple y
que consume pocos recursos, o bien enNeXTSTEP, muy completo y altamente congurable.
Paso a describir las caractersticas de los mas extendidos, aunque no todos estan aqu, existen muchos
otros:
twm: Tab Windows Manager, gestor de ventanas minimalista que proporciona el conjunto de utili-
dades mas basico de cualquier otro.
fvwm2: F Virtual Windows Manager, un derivado de twm que incorpora un aspecto visual en 3D y
tiene menos requisitos de memoria. Es uno de los mas extendidos.
AfterSTEP: Emula la interfaz NeXT y esta basado en fvwm2.
wmaker: WindowMaker, completsimo gestor de ventanas GNU diseado para emular el aspecto del
entorno NeXT.
blackbox: Tambien inspirado en NeXT. Es un muy ligero y rapido.
Enlightenment: Era el gestor predeterminado de GNOME. Es muy grande, pero muy atractivo a la
vista. Posiblemente es el mas congurable de todos.
Sawsh: Enormemente congurable, pero mucho mas ligero que Enlightenment es ahora el gestor
por defecto en el entorno de escritorio GNOME, pero puede ser usado sin el. Se esta convirtiendo
rapidamente en uno de los gestores con mas aceptacion.
Kwin: El gestor de ventanas KWin es el gestor por defecto para el entorno KDE. Soporta temas
personalizados.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 6. Interfaz graco 57
Estos gestores pueden ejecutarse sin los entornos de escritorio para poder observar sus diferencias,
mediante el siguiente comando:
$xinit -e <path-gestor-ventanas>
Donde<path-gestor-ventanas>es el path del archivo binario del gestor de ventanas. Si no sabemos
el path, lo podemos buscar con el comandowhich.
Tambien existe un paquete llamadowmanagerque permite seleccionar el gestor de ventanas al arrancar
las \X".
6.3. Entornos de escritorio
A diferencia de los gestores de ventanas, los escritorios incluyen la posibilidad de colocar archivos
y directorios directamente sobre el fondo del mismo. Incluyen la capacidad de arrastrar y soltar, esto
permite que los iconos que representan archivos sean arrastrados con el raton y soltados sobre un icono
que representa una aplicacion. La aplicacion se abrira entonces, utilizando el archivo. Los escritorios
tambien pueden suministrar otras aplicaciones.
En general, los escritorios estan orientados a los usuarios mas novatos (aunque los usuarios avanzados
tambien los encuentran increblemente utiles). A menudo, un usuario de escritorio puede efectuar todo su
trabajo sin invocar nunca a una lnea de comandos.
Desde la aparicion de KDE 3.3, parece haber eclipsado al resto de entornos de escritorio, GNOME
incluido. Ello es debido a que han desarrollado un interfaz mas versatil y agradable a la vista.
Al nal, la eleccion del gestor de ventanas es solo cuestion de gustos. En mi caso, para la elaboracion
del proyecto he utilizado GNOME como entorno de escritorio y las bibliotecas KDE para ejecutar la
aplicacion Kile, un editor de textos L
ATEX.
6.3.1. Kde
KDE
1
es el entorno de escritorio que actualmente copa el mercado. Es ligeramente diferente de los
gestores de ventanas tpicos. En lugar de describir como se debe ver la interfaz, KDE proporciona un
conjunto de bibliotecas que, si se usan, permiten a una aplicacion mejorar algunas caractersticas especiales
que no las ofrecen el resto. Esto incluye cosas como soporte a pinchar y arrastrar, soporte de impresion
estandarizado, etc.
El punto negativo de este tipo de tecnicas de gestion de ventanas es que una vez que una aplicacion
se dise~na para ejecutarse con KDE, requiere KDE para trabajar. Esto es un gran cambio con respecto a
los primeros gestores de ventanas donde las aplicaciones eran independientes del gestor.
Esta basado en las bibliotecasQt3. Desde el punto de vista del programador, KDE ofrece unas biblio-
tecas que son mucho mas sencillas de usar que el trabajo directo con la interfaz \X". Se ofrece un conjunto
de herramientas orientadas a objetos estandar que permite construir otras herramientas, algo que solo
esta disponible con X-Windows.
1
K Desktop Environment, entorno de escritorio K.
Jose Antonio Escartn Vigo, Junio 2005.

58 Servidor Linux para conexiones seguras de una LAN a Internet
6.3.2. Gnome
Hasta hace pocos a~nos haba algunos problemas con las restricciones de licencias impuestas por los
desarrolladores de la bibliotecaQt3, en la que KDE esta basado. Estaba prohibido el uso comercial de
KDE sin pagar derechos. El proyecto GNOME
1
comenzo debido a esta resticcion.
Hace un tiempo se reviso la licencia de KDE. La licencia revisada, conocida como QPL, es ahora mas
abierta y permite su uso comercial. Sin embargo, es distinta la licencia GPL y el estilo de licencias de
Berkley usado por la mayora de los paquetes que usan las distribuciones Linux.
Tanto GNOME, como KDE, ofrece un entorno de escritorio completo y un marco de aplicaciones para
desarrollo tan bueno como de facil uso. Lo que hace a GNOME diferente es como alcanza sus objetivos.
A diferencia de KDE, GNOME no es un gestor de ventanas en si mismo. Necesita apoyarse en un
gestor de ventanas externo, que se encuentra en lo mas alto de su estructura y muestra la apariencia ge-
neral del escritorio. El gestor de ventanas por defecto esSawsh, pero contamos con multitud de opciones
disponibles (Vease seccion 6.2
Esta basado en las bibliotecasGTK+2que permiten el desarrollo del entorno y las caractersticas
de gestion de sesion, que nosotros como usuarios no vemos. Desde el punto de vista del desarrollador,
GNOME es muy interesante. Dene sus interfaces con el resto del mundo mediante tecnologaCORBA
2
.
De esta manera, cualquier sistema de desarrollo que pueda comunicarse usandoCORBApuede utilizarse
para desarrollar aplicaciones compiladas en GNOME.
6.3.3. Otros entornos de escritorio
No solo existen KDE o GNOME, tambien podemos encontrar estos otros entornos de escritorio:
CDE
3
: Desarrollado por algunos fabricantes de Unix, es uno de los mas primitivos. A sido portado
a Linux, pero no es libre ni gratuito.
XFce: Esta basado en las bibliotecasGTK+2, al igual que GNOME, y ofrece una interfaz similar
a CDE. Su ventaja es que es sencillo y utiliza pocos recursos, es ideal para maquinas con poca
capacidad o aquellos que preeran ahorrar recursos para sus aplicaciones. Trabaja especialmente
bien con programas GNOME, peor tambien maneja sin dicultad aplicaciones KDE.
1
Entorno de modelo de objeto de red GNU.
2
Common Object Request Broker Architecture, es un estandar que establece una plataforma de desarrollo de sistemas
distribuidos facilitando la invocacion de metodos remotos bajo un paradigma orientado a objetos.
3
Common Desktop Environment, entorno de escritorio comun.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7
Infraestructura de redes
Para podernos situar en el marco de las conguraciones de redes, primero debemos conocer una serie
de conceptos y arquitecturas que se describen en las secciones siguientes del presente captulo.
Esta seccion se ha basado en la documentacion que se puede obtener en:
http://eia.udg.es/~atm/tcp-ip/index.html
7.1. Arquitectura de redes (Modelo OSI)
Antes de conocer realmente los servicios de red y la seguridad en redes, primero se tiene que conocer
la arquitectura de redes, como son y como estan dise~nadas.
Cada dise~no de red se divide en siete partes logicas, cada una de las cuales controla una parte diferente
de la tarea de comunicacion. Este dise~no de siete capas se denomina Modelo de referencia OSI. Dicho
modelo fue creado por la Organizacion internacional de estandares (ISO, International Standard Organi-
zation) para proporcionar un modelo logico para la descripcion de comunicaciones de red y ayuda a los
suministradores a estandarizar los equipos y el software. La tabla 7.1 muestra la composicion del modelo.
Cuadro 7.1: Estructura del modelo de referencia OSI
N.
o
de capa OSI Nombre de la capa Protocolos de ejemplo
Capa 7 Aplicacion DNS, FTP, HTTP, SMTP, Telnet
Capa 6 Presentacion XDR
Capa 5 Sesion Pipes con nombre, RPC
Capa 4 Transporte NetBIOS, TCP, UDP
Capa 3 Red ARP, IP, IPX, OSPF
Capa 2 Enlace de datos Acrcnet, Ethernet, Token Ring
Capa 1 Fsica Coaxial, Fibra optica, UTP
Capa Fsica
Esta capa es el medio fsico real que contiene los datos. Los distintos tipos de medios siguen diferentes
estandares. Por ejemplo, el cable coaxial, el par trenzado (UTP, Unshielded Twisted Pair) y el cable de bra
optica sirven para distintos propositos: el cable coaxial se usa en instalaciones LAN antiguas as como en
servicios de Internet a traves de redes de TV por cable. UTP se usa normalmente en cableados domesticos,
mientras que la bra optica se suele usar para conexiones de distancias largas que requieren una capacidad
de carga alta.

60 Servidor Linux para conexiones seguras de una LAN a Internet
Capa de enlade datos
Esta capa relaciona los distintos elementos del hardware de interfaz de red en la red. Ayuda a codicar
los datos y a colocarlos en el medio fsico. Tambien permite que los dispositivos se identiquen entre
s cuando intentan comunicarse con otro nodo. Un ejemplo de una direccion de la capa de enlace de datos
es la direccion MAC de nuestra tarjeta de red. En una red Ethernet, las direcciones MAC son el medio por
el que se puede encontrar a nuestro ordenador en la red. Las empresas utilizaban muchos tipos diferentes
de estandares de enlace entre 1970 y 1980, la mayora determinados por su suministrador de hardware.
IBM utilizaba Token Ring para sus redes de PC y SNA para la mayor parte de su hardware mas grande;
DEC utilizaba un estandar diferente y Apple otro. La mayora de las empresas actuales utilizan Ethernet
porque es el mas extendido y economico.
Capa de red
Esta capa es la primera parte que podemos ver cuando interactuamos con sistemas de red TCP/IP. La
capa de red permite las comunicaciones entre diferentes redes fsicas utilizando una capa de identicacion
secundaria. En los sistemas de red TCP/IP, se trata de una direccion IP. Esta direccion IP en nuestro
ordenador nos ayuda a enrutar los datos de un lugar a otro de la red y sobre Internet. Esta direccion
es un numero unico para identicar nuestro ordenador en una red basada en IP. En algunos casos, este
numero es unico para un ordenador; ninguna otra maquina en Internet puede tener dicha direccion. Es
el caso de las direcciones IP normales que se pueden enrutar publicamente. En las LAN internas, las
maquinas normalmente utilizan bloques de direcciones IP. Estas se han reservado solo para su uso interno
y no se enrutaran por Internet. Estos numeros pueden no ser unicos de una red a otra, pero siguen siendo
unicos dentro de cada LAN. Aunque dos ordenadores pueden tener la misma direccion IP privada sobre
diferentes redes internas, nunca tendran la misma direccion MAC, ya que es un numero de serie asignado
por el fabricante. Existen excepciones a esta regla pero, en general, la direccion MAC identicara de forma
unica dicho ordenador o al menos, la tarjeta de interfaz de red (NIC, Network Interface Card) dentro del
ordenador.
Capa de transporte
Este nivel lleva el paquete de datos desde el punto A hasta el punto B. Es la capa donde residen los
protocolos TCP y UDP.
El protocolo de control de transmision (TCP, Transmission Control Protocol) basicamente asegura que
los paquetes se envan y se reciben con consistencia en el otro punto. Permite una correccion de errores a
nivel de bits, una retransmision de segmentos perdidos y una reorganizacion de los paquetes y el traco
desfragmentado.
El protocolo de datagramas de usuario (UDP, User Datagram Protocol) es un esquema mas ligero
empleado para traco multimedia y para transmisiones cortas, como las solicitudes DNS. Tambien efectua
deteccion de errores, pero no proporciona ninguna facilidad para reorganizar los datos o asegurar la llegada
de datos. Esta capa y la capa de red es donde operan la mayora de los cortafuegos.
Capa de sesion
La capa de sesion se encuentra implicada principalmente en la conguracion de una conexion y en
su cierre posterior. Tambien realiza autenticaciones para determinar que partes pueden participar en una
sesion. Se utiliza principalmente en aplicaciones especcas.
Capa de presentacion
Esta capa controla determinadas codicaciones y descodicaciones requeridas para presentar los datos
en un formato legible para la parte receptora. Algunas formas de cifrado pueden considerarse como pre-
sentacion. La distincion entre la capa de aplicacion y la de sesion es muy delicada y algunos arman que
la capa de presentacion y la de aplicacion son basicamente iguales.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 61
Capa de aplicacion
Este nivel nal es donde el programa de la aplicacion obtiene los datos, que pueden ser FTP, HTTP,
SMTP, etc. Aqu, algunos programas se encargan de controlar los datos reales dentro del paquete y se
ajustan las soluciones profesionales de seguridad, ya que la mayora de los ataques se producen en esta
capa.
7.2. Direcciones IP
Cada computador (host) y cada dispositivo de encaminamiento (router) tendra una direccion unica
cuya longitud sera de 32 bits, que sera utilizada en los campos direccion origen y direccion destino de
la cabecera IP. Esta direccion consta de un identicador de red y de un identicador de host. La direc-
cion esta codicada para permitir una asignacion variable de los bits utilizados al especicar la red y el
computador. La direccion IP mas peque~na es la 0.0.0.0 y la mayor es 255.255.255.255.
Existen tres clases de redes que se pueden clasicar teniendo en cuenta la longitud del campo de red y
del campo host. La clase a la que pertenece una direccion puede ser determinada por la posicion del primer
0 en los cuatro primeros bits. Las direcciones estan codicadas para permitir una asignacion variable de
bits para especicar la red y el host.
Clase A: Pocas redes, cada una con muchos ordenadores. 1 bit de seleccion de clase A, 7 bits de red
y 24 bits de host (Por ejemplo ARPANET)
Clase B: Un numero medio de redes, cada una con un numero medio de ordenadores. 2 bits de
seleccion de clase B, 14 bits de red y 16 bits de host.
Clase C: Muchas redes, cada una con pocos ordenadores. 3 bits de seleccion de clase C, 21 bits de
red y 8 bits de host (LANs).
Clase D: Permite hacer multitransmision (o multicasting) en la cual el datagrama se dirige a multiples
ordenadores. Podemos enviar un paquete IP a un grupo de maquinas que por ejemplo pueden estar
cooperando de alguna manera mediante la utilizacion de una direccion de grupo
Clase E: No se utiliza, queda reservado para otros usos
Figura 7.1: Rango de direcciones IP
En el siguiente cuadro podemos observar el numero de redes y de ordenadores por red en cada una de
las tres clases primarias de direcciones IP.
Jose Antonio Escartn Vigo, Junio 2005.

62 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 7.2: N.
o
de Hosts por red
Clase Bits en el prejo Maximo n.
o
de redes Bits en el sujo Maximo n.
o
de
hosts por red
A 7 128 24 16777216
B 14 16384 16 65536
C 21 2097152 8 256
Normalmente las direcciones se suelen escribir en notacion decimal con puntos (calculando cada ocho
bits). Por ejemplo, la direccion82CE7C0D(1000 0010 1100 1110 0111 1100 0000 1101 que es de clase B)
se escribe como130.206.124.13.
82 = 8*16 + 2 = 128 + 2 = 130
CE = C*16 + E = 12 * 16 + 14 = 192 + 14 = 206
7C = 7 * 16 + C = 112 + 12 = 124
0D = D = 13
Algunas direcciones de red se utilizan como direcciones especiales (Vease gura 7.2):
Este host: La direccion 0.0.0.0 signica esta red o este host y unicamente es usada por los ordenadores
cuando son arrancados, sin que vuelva a utilizarse posteriormente. De esta forma las maquinas se
pueden referir a su propia red sin saber su numero, pero la clase s ha de ser conocida para saber
cuantos ceros debe incluir.
Un host de esta red: Poniendo el campo red todo a ceros (es necesario saber la clase de la red para
decidir el numero de ceros).
Difusion de red local o limitada: La direccion 255.255.255.255 (todos 1s) se usa como direccion para
indicar todos los ordenadores de la red indicada y es utilizada para hacer difusion.
Difusion de una red distante o dirigida (broadcast): Tambien se puede hacer difusion a una red
distante poniendo la direccion de la red y rellenando el campo ordenador con 1s.
Retrociclo: Las direcciones 127.xx.yy.zz se reservan para pruebas de realimentacion (localhost). Los
paquetes que tienen esta direccion no son enviados por la red sino que son procesados localmente y
se tratan como si fueran paquetes de entrada (pasan por la tarjeta de red, pero sin salir del host).
Esto permite que los paquetes se enven a la red local sin que el transmisor conozca su numero. Esta
caracterstica tambien se usa para la deteccion de fallos en el software de red.
Figura 7.2: Direcciones IP reservadas
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 63
Para estar seguros de que las direcciones Internet son unicas, todas las direcciones de Internet son
asignadas por un autoridad central. La IANA (Internet Assigned Number Authority) tiene el control
sobre los numeros asignados. Sin embargo, cuando una organizacion quiere una direccion debe obtenerla
de INTERNIC (Internet Network Information Center). La autoridad central solo es necesaria para asignar
la porcion de la direccion correspondiente a la red, cuando una organizacion ya tiene su prejo, puede
asignar un unico sujo a cada ordenador sin contactar con la autoridad central.
Una maquina puede estar conectada a varias redes y tener una direccion IP diferente en cada red. En
este caso recibe el nombre de \multihomed". Esto se utiliza para aumentar la seguridad, si una red falla el
host aun esta conectado a internet utilizando la otra red. Por otra parte, tambien es usado para aumentar
el rendimiento de la red, pues permite enviar directamente el traco a una red en concreto sin tener que
pasar por los dispositivos de encaminamiento.
Que la direccion de la red este guardada en la direccion Internet tiene algunos inconvenientes:
Si la direccion IP identica la red a la que se conecta el ordenador, no al ordenador que tenemos
conectado, no es posible asignarle a un ordenador una direccion IP permanente. Por lo tanto, si
movemos un ordenador de una red a otra su direccion IP debe cambiar. Este problema se da cuando,
por ejemplo, nos llevamos un ordenador portatil de un sitio a otro y queremos conectarlo a la red.
Como el numero de ordenadores asignados a la clase C (255) puede resultar insuciente en muchos
casos y que la transicion a la clase B no es facil debido a que muchos programas no permiten que
una red fsica tenga multiples direcciones, no se pueden introducir nuevas direcciones poco a poco y
es necesario recongurar toda la red para la nueva clase.
Como existe la facilidad de que una maquina pueda estar conectada a dos redes y por lo tanto
tenga dos direcciones diferentes, el encaminamiento se hace teniendo en cuenta la direccion IP, el
comportamiento de los paquetes puede ser totalmente diferente dependiendo de la direccion que
estemos utilizando. Esto puede resultar sorprendente para los usuarios.
En algunos casos, el conocer una direccion IP puede resultar insuciente para alcanzar la maquina
que utiliza esta direccion. Debido a la conguracion de la red y dependiendo de por donde se enruten
los paquetes en nuestra red, algunos equipos pueden resultar inalcazables.
7.2.1. Datagramas
Los datos proporcionados por la capa de transporte son divididos en datagramas y transmitidos a
traves de la capa de red (capa internet), por el protocolo IP. Durante el camino puede ser fragmentado en
unidades mas peque~nas, si deben atravesar una red o subred cuyo tama~no de paquete sea mas peque~no.
En la maquina destino, estas unidades son reensambladas para volver a tener el datagrama original que
es entregado a la capa de transporte.
En la cabecera hay una parte ja de 20 bytes y una parte opcional de longitud variable. En la gura
7.3 se puede observar el formato de la cabecera IP.
7.2.2. Encaminamiento IP (router y gateway)
Cuando un paquete llega a un dispositivo de encaminamiento, se debe determinar cual es la direccion
del siguiente dispositivo de encaminamiento teniendo en cuenta la direccion IP destino que hay almace-
nada en el campo correspondiente del paquete y de la informacion que hay almacenada en las tablas de
encaminamiento. Hay que tener en cuenta que es necesario realizar una conversion entre la direccion IP
y la direccion MAC (cuando el enlace entre los dos dispositivos de encaminamiento sea una LAN) que se
efectua de manera automatica mediante el protocolo ARP.
Esta tabla puede ser estatica o dinamica. En el primer caso puede contener rutas alternativas que
seran utilizadas cuando algun dispositivo de encaminamiento no este disponible. Las tablas dinamicas son
mas exibles cuando aparecen errores o congestion en la red. Estas tablas tambien pueden proporcionar
servicios de seguridad y de prioridad, por ejemplo, para asegurarse que a ciertos datos no se les permita
pasar por determinadas redes.
Jose Antonio Escartn Vigo, Junio 2005.

64 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 7.3: Cabecera del datagrama IP
Otra tecnica de encaminamiento es el encaminamiento en la fuente. En este caso, como ya comentamos
anteriormente, el ordenador origen incluye en la cabecera del paquete la direccion de los dispositivos de
encaminamiento que debe utilizar el paquete.
7.2.3. Mascaras de red y notacion de barra inclinada
El proposito de congurar una mascara es, en primer lugar, decirle al sistema que bits de la direccion
IP corresponden al componente de red y que bits corresponden al componente host. Basados en estos dos
componentes de red, un host puede determinar cual es su direccion de broadcast o de difusion de red (es
decir, la direccion IP que corresponde al envo de un paquete a todas las maquinas de la red local).
Normalmente nos referiremos a las redes IP como mascaras de red o con una barra inclinada y un
numero. Ambas son formas de denir el tama~no de la red. Para entenderlas tenemos que conocer un poco
de la estructura de la direccion IP. Una direccion IPv4 estandar esta formada por 32 bits. Normalmente
se representa en cuatro secciones, con cuatro octetos de 8 bits cada una. Cada octeto, normalmente se
convierte de un conjunto de bits binarios, a un numero decimal para facilitar su lectura. Por tanto, cuando
vemos 192.168.1.1, el ordenador ve lo siguiente:
11000000 10101000 00000001 00000001
Una mascara de red normalmente es un conjunto de cuatro numeros que nos indica donde nalizan los
bits de red y donde comienzan los de hosts. Normalmente tiene la siguiente apariencia:
255.255.255.0
Una forma rapida de calcular el tama~no de una red representada por una mascara de red es restar cada
octeto de 256 y multiplicar dichos numeros entre s. Por ejemplo, la mascara de red de 255.255.255.248
describe una red de 8 IPs porque:
(256-255) * (256-255) * (256-255) * (256-248) = 8
Una mascara de red de 255.255.255.0 describe una red de 256 IPs ya que:
(256-255) * (256-255) * (256-255) * (256-0) = 256
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 65
Y por ultimo, una mascara de red de 255.255.0.0 describe una red de 65.536 direcciones IP porque:
(256-255) * (256-255) * (256-0) * (256-0) = 65.536
La notacion de barra inclinada es algo mas difcil de entender, aunque utiliza el mismo concepto. El
numero que se encuentra detras de la barra inclinada indica la cantidad de bits que describen la direccion
de red (para una explicacion con mas detalle, vease la seccion 7.2.4). Si restamos de 32 dicho numero
obtenendremos el numero de bits que desciben la direccion de host dentro de la red local. Por ejemplo la
notacion 192.168.0.0/24 describe una red que empieza en 192.168.0.0 que contiene 256 direcciones IP de
tama~no (es decir, el mismo tama~no que el de arriba con una mascara de red de 255.255.255.0).
Los 32 bits en una direccion IP menos los 24 bits para el prejo de red deja 8 bits activados (igual a 1)
para los hosts de la red local. Un numero binario de bits de 11111111 convertido en decimal es 255. Si las
matematicas binarias nos resultan complicadas, podemos utilizaremos la siguiente tabla para recordarlo.
Cuadro 7.3: Notacion de barra inclinada en IPs
Notacion de barra inclinada Tama~no de la red
/24 256 direcciones IP
/25 128 direcciones IP
/26 64 direcciones IP
/27 32 direcciones IP
/28 16 direcciones IP
/29 8 direcciones IP
/30 4 direcciones IP
/31 2 direcciones IP
/32 1 direccion IP
7.2.4. Subneting (CIDR)
Incluso si tenemos una clase de direcciones A o B, no es realista congurar la red como un gran grupo
de maquinas. Aparte de resultar una pesadilla para administrar, resulta muy difcil encontrar una red
capaz de tener tantas maquinas agrupadas juntas. Por ejemplo, Ethernet solo permite congurar 1.024
hosts por segmento.
Para resolver este problema, estas redes enormes se dividen en subredes mas peque~nas. Esto se hace
expandiendo el numero de bits usados para representar la direccion de red, una tecnica conocida como
subneting o CIDR (Classless Inter Domain Routing, enrutamiento interdominio sin clases) debido a que
viola la descripcion de las redes A, B y C.
Un lugar tpico para ver esto es en las redes IP privadas. La mayora de las organizaciones no tienen 16
millones de computadoras, sino que cada division de la organizacion se convierte en unasubred. La mayora
de las veces, la eleccion razonable es escoger una mascara de 24 bits (255.255.255.0) para conseguir 254
maquinas por red (recordamos que .0 es la direccion de red y .255 la direccion de broadcast), un nivel
bastante razonable de agrupamiento de maquinas.
Cuando se utilizan subredes, en las tablas de encaminamiento se agregan entradas de la forma (esta
red, subred, 0) y (esta red, esta subred, 0). De esa forma, un dispositivo de encaminamiento de la subred
k sabe como llegar a todas las subredes y a todos los hosts de la subred k. No necesita saber nada de los
hosts de otras subredes. Cada encaminador lo que debe hacer es un AND booleano con la mascara de la
subred para eliminar el numero de host y buscar la informacion resultante en sus tablas.
Jose Antonio Escartn Vigo, Junio 2005.

66 Servidor Linux para conexiones seguras de una LAN a Internet
7.2.5. Enmascaramiento IP (NAT, Network Adress Translation)
Un escenario comun para los usuarios familiares y de ocinas peque~nas es tener una cuenta de conexion
punto a punto para varias computadoras que quieran usarla (con frecuencia, al mismo tiempo). Para hacer
esto aun mas difcil, solo tenemos una direccion IP.
El enmascaramiento de IP resuelve este problema permitiendo a nuestro sistema Linux hacer dos
trucos: actuar como un enrutador y realizar la traslacion de direcciones de red, NAT.
Nuestra red LAN, usa un rango de direcciones IP privadas, para redes peque~nas, el rango 192.168
trabaja bien.
Lo que queremos es que nuestro servidor enrute los paquetes entre las maquinas de la LAN de forma
que cuando vayan a Internet, parezca que los origina el. Cuando vuelve un paquete como respuesta, el
servidor sabe que realmente el paquete va destinado a una maquina de la red y se lo enva.
No se puede asumir como unica forma de funcionamiento el enmascaramiento de IP con un router.
Una interfaz de redppp0puede ser cualquier tipo de interfaz de red. Por ejemplo, en una conguracion
de rewall la interfaz de salida puede ser, simplemente, una segunda tarjeta Ethernet que la une a la red
corporativa.
Conguracion de IPTables para NAT
Lo primero que necesitamos es asegurarnos de que tenemos cargado el moduloiptablesnaten el kernel.
Despues instalaremos el siguiente paquete:
#apt-get install ipmasq
Si nuestra red contiene la red 192.168.1.0 y el servidor conectado a un interfazppp0desde el que se
recibe el acceso a internet. Para realizar el enmascaramiento IP necesitamos utilizar el rewall IPTables,
ejecutamos las siguientes instrucciones
#iptables -t nat -F: Congura el comportamiento de iptables, le dice que va a usar nat y quita
las politicas actuales para nat (-F)
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQUERADE :
A~nade la regla de enmascaramiento. Todos los paquetes que salgan por enrutados desde la red a
Internet se enmascaran
#echo 1 > /proc/sys/net/ipv4/ip_forward: Activamos el ipforward
El mecanismo de enmascaramiento se ocupa de reescribir el paquete y dejarlo en Internet. Cuando un
paquete entra en la interfazppp0desde Internet, Linux comprueba con el mecanismo de enmascaramiento
si el paquete esta realmente destinado para alguien de dentro de la red. Si es as, el paquete se desenmascara
y despues se enva al emisor original de la LAN.
Proxies: Problemas con el enmascaramiento
Desafortunadamente, no todos los protocolos enmascaran bien. FTP es un ejemplo perfecto de esto.
Cuando un cliente FTP se conecta a un servidor FTP, empieza conectandose al puerto 21 del servidor. El
cliente pasa toda la informacion de usuario/contrase~na a traves de este puerto. Sin embargo, cuando el
cliente pide al servidor que le enve un archivo, el servidor inicia una conexion nueva de vuelta al cliente. Si
el cliente esta enmascarado, entonces la maquina probablemente rechace la conexion porque no tendra un
programa escuchando en ese puerto y la transferencia se interrumpira.
FTP es uno de los muchos protocolos que hacen cosas extra~nas. A n de permitir el enmascaramiento de
estos protocolos, debemos colocar un proxy especial. IPTables esta equipado con los proxies mas comunes:
FTP, IRC y otros. Para usar estos modulos simplemente hay que incluir la sentenciainsmoden tiempo
de arranque. Por ejemplo, podemos a~nadir a los scripts de arranque:
insmod ip_masq_ftp
insmod ip_masq_irc
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 67
Tambien lo podemos hacer con reglas, a~nadiendo el redireccionamiento de los puertos que utilice el
protocolo. Esto se observa en el siguiente ejemplo:
Enviamos el traco que entra, dirigido por eth0 al puerto 80 (web), a nuestro proxy squid (transparente)
por el puerto 3128 de nuestra maquina:
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
7.3. Resolucion de direcciones
Dos ordenadores de una red fsica solo pueden comunicarse si cada uno de ellos conoce la direccion
fsica del otro. Cuando enviamos un paquete IP entre estas dos maquinas solo indicamos la direccion IP.
Por lo tanto es necesario tener un mecanismo que nos proporcione la correspondencia entre la direccion
IP y la direccion fsica.
Como la direccion IP es virtual, pues es mantenida por software, ningun elemento hardware entiende
la relacion: entre el prejo de la direccion IP y la red, y la relacion entre el sujo de la direccion IP y el
host.
La traslacion entre direcciones IP y direcciones fsicas es local a la red. Un ordenador solo puede ob-
tener la direccion fsica de otro si ambos se encuentran en la misma red fsica.
Existen tres mecanismos para hacer la traslacion:
El primero utiliza un tabla en cada maquina para almacenar para cada direccion IP la correspon-
diente direccion fsica. Cada entrada de la tabla contiene una direccion IP y una direccion fsica.
Como existe una tabla para cada red fsica, todos las direcciones IP tienen el mismo prejo. En el
siguiente ejemplo podemos observar la traduccion entre direccion IP y direccion fsica.
Direccion IP Direccion Ethernet
130.206.124.13 0F:13:26:36:F3:B4
130.203.124.31 A4:34:27:AE:B1:10
El segundo realiza la traduccion mediante una funcion matematica. Aunque muchas tecnologas
utilizan direcciones fsicas estaticas, algunas usan direccionamiento congurable, es decir, el admi-
nistrador de la red elige tanto la direccion fsica como la direccion IP. En este caso, los valores pueden
ser elegidos para que la traslacion sea trivial.
El tercero es el mas interesante pues usa una computacion distribuida en la que los dos ordenadores
intercambian mensajes dinamicamente. En este caso, el ordenador que conoce la direccion IP de otro
ordenador pero desconoce su direccion fsica, enva un mensaje a la red con la direccion IP conocida
y recibe de la red una respuesta con la direccion fsica. Existen dos posibles dise~nos:
1. En el primero hay uno o mas servidores que se encargan de enviar las respuestas. La principal
ventaja de este dise~no es que es centralizado y por lo tanto facil de congurar, gestionar y
controlar. Tiene el inconveniente de que estos servidores pueden ser un cuello de botella en una
red grande.
2. En el segundo dise~no, se hace unbroadcastde la peticion (envo a la direccion de difusion de red)
y todos los ordenadores participan en la resolucion de la direccion, en concreto responde el que
tiene la direccion pedida. La principal ventaja de este dise~no es que el calculo es distribuido.
Este dise~no es el utilizado en el ARP, una de las ventajas de este metodo sobre tener unos
archivos de conguracion es su sencillez. El propio protocolo se encarga de construir las tablas
en lugar de tener que hacerlo el administrador del sistema.
Jose Antonio Escartn Vigo, Junio 2005.

68 Servidor Linux para conexiones seguras de una LAN a Internet
7.3.1. ARP (Adress Resolution Protocol)
En cada maquina se tiene una tabla que identica la correspondencia que hay entre la direccion fsica
y la direccion IP del resto de maquinas. Cuando tenemos que enviar un paquete a una direccion IP de la
que se desconoce la direccion fsica entra el funcionamiento el protocolo ARP para actualizar los valores
de la tabla. Este protocolo es el encargado de obtener la direccion fsica de una maquina de la que conoce
la direccion IP. Para conseguirlo debe acceder a recursos de bajo nivel.

Unicamente hay dos tipos de mensaje que tienen el mismo formato: peticion ARP y respuesta ARP.
Los mensajes ARP van a ser encapsulados directamente en una trama Ethernet. En el campo tipo de
la cabecera de la trama Ethernet es necesario especicar que contiene un mensaje ARP. El emisor se
debe encargar de poner el valor correspodiente y el receptor de mirar el contenido de ese campo. Como
Ethernet asigna un unico valor para los dos mensajes ARP, el receptor debe examinar el campo operacion
del mensaje ARP para determinar si es el mensaje recibido es una peticion o una respuesta. Es importante
destacar, que este protocolo solo puede ser utilizado en aquellas redes en las cuales es posible hacer un
broadcast(difusion de red).
Cuando no conocemos la direccion fsica de la maquina a la que queremos enviar el mensaje es necesario
enviar tres mensajes; para que esto no se tenga que repetir para cada paquete que queremos enviar y
ademas se pueda reducir el traco, en cada maquina tendremos una peque~na memoria cache en la que
guardaremos una tabla con las parejas de direcciones (fsica, IP). Cuando esta tabla este llena se iran
borrando las mas antiguas y las que lleven mas tiempo sin ser utilizadas.
7.3.2. RARP (Reverse Address Resolution Protocol)
Cada maquina, ademas de su direccion fsica que esta en la tarjeta de red, debe tener guardada en
algun dispositivo la direccion IP que le corresponde.
Pero, >como una maquina que no disponga de disco duro puede determinar su direccion IP?. El
problema es crtico para aquellas estaciones de trabajo que almacenan todos sus cheros en un servidor
remoto ya que ellas deben utilizar los protocolos de transferencia de cheros de TCP/IP para obtener su
imagen de arranque inicial.
La idea para encontrar la direccion IP es simple: una maquina que necesita conocer su direccion enva
una peticion a un servidor que hay en otra maquina y espera hasta que recibe la respuesta. Suponemos
que el servidor tiene acceso a un disco que contiene una base de datos de direcciones IP. En la peticion, la
maquina que necesita conocer su direccion IP unicamente debe identicarse a si misma, y de esta manera
el servidor puede buscar su direccion IP y enviarle una respuesta. Tanto la maquina que hace la peticion
como el servidor que responde usan direcciones fsicas durante su breve comunicacion.
>Como puede la maquina conocer la direccion del servidor?. Generalmente no la conoce, lo que hace
es hacer unbroadcast(difusion de red) de su peticion a todas las maquina de la red local y esperar que
algun servidor responda. De alguna manera lo que hace la maquina es enviar un mensaje diciendo:
\ mi direccion fsica Ethernet es XX.XX.XX.XX.XX.XX Sabe alguien cual es mi direccion IP?"
Como podemos ver en esta pregunta, para identicarse, la maquina utiliza su direccion fsica lo que
tiene la ventaja de que siempre esta disponible y de que es uniforme para todas las maquinas de una red.
En realidad lo que queremos es encontrar la direccion IP de una maquina de la que conocemos su
direccion fsica. El protocolo para conseguir esto es el RARP que es una adaptacion del ARP visto
anteriormente y que usa el mismo formato de mensaje. Como ocurre con los mensajes ARP, un mensaje
RARP es enviado de una maquina a otra encapsulado en la porcion de datos de la trama fsica, por ejemplo
en una trama Ethernet.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 69
7.4. Protocolos de red, IP
Entre los protocolos que utilizan IP `puro', es decir encapsulan sus mensajes sobre el protocolo IP,
encontramos los siguientes: ICMP, OSPF, BGP y IGMP.
7.4.1. ICMP (Internet Control Message Protocol)
Permite el intercambio de mensajes de control y de supervision entre dos ordenadores. Toda anomala
detectada por el protocolo IP provoca el intercambio de mensajes ICMP entre los nodos de la red.
Es un protocolo de control que utilizan los dispositivos de encaminamiento para noticar las incidencias
que pueden haber en una red IP. Proporciona informacion de realimentacion sobre los problemas.
Estos son los problemas que mas frecuentemente se encarga de informar:
Un datagrama no puede alcanzar su destino
El dispositivo de encaminamiento no tiene la capacidad de almacenar temporalmente el datagrama-
para poderlo reenviar
El dispositivo de encaminamiento indica a un ordenador que enve el traco por una ruta mas corta
(redireccionamiento de rutas). Cada mensaje se encapsula en un paquete IP y luego es enviado de
la forma habitual. Al utilizar IP no se garantiza que llegue a su destino.
En el siguiente esquema podemos observar los diferentes tipos de mensajes ICMP:
ICMP(3): Detectar destinos inalcanzables
ICMP(11): Tiempo excedido
ICMP(12): Problema de parametros
ICMP(4): Peticion de control de ujo
ICMP(5): Redireccionando rutas
ICMP(0) y ICMP(8): Eco y respuesta a eco (para los pings)
ICMP(13) y ICMP(14): Marca de tiempo y la respuesta
ICMP(17) y ICMP(18): Peticion de mascara de direccion y la respuesta
ICMP(15) y ICMP(16): Peticion de informacion y la respuesta
ICMP(9) y ICMP(10): Peticion de rutas y su publicacion
7.4.2. OSPF (Open Shortest Path First)
El protocolo OSPF (abrir primero la trayectoria mas corta) se usa muy frecuentemente como protocolo
de encaminamiento interior en redes TCP/IP. Cuando se dise~no se quiso que cumpliera los siguientes
requisitos:
Ser abierto en el sentido de que no fuera propiedad de una compa~na
Que permitiera reconocer varias metricas, entre ellas, la distancia fsica y el retardo
Ser dinamico, es decir, que se adaptara rapida y automaticamente a los cambio de la topologa
Ser capaz de realizar en encaminamiento dependiendo del tipo de servicio
Que pudiera equilibrar las cargas dividiendo la misma entre varias lneas
Que reconociera sistemas jerarquicos pues un unico ordenador no puede conocer la estructura com-
pleta de Internet
Que implementara un mnimo de seguridad
Jose Antonio Escartn Vigo, Junio 2005.

70 Servidor Linux para conexiones seguras de una LAN a Internet
El protocolo OSPF reconoce tres tipos de conexiones y redes:
Lneas punto a punto entre dos dispositivos de encaminamiento.
Redes multiacceso
1
con difusion de red (por ejemplo, la mayora de redes LAN).
Redes multiacceso sin difusion (por ejemplo, la mayora de redes WAN de conmutacion de paquetes).
La funcion del OSPF es encontrar la trayectoria mas corta de un dispositivo de encaminamiento a
todos los demas. Cada dispositivo de encaminamiento tiene almacenada en una base de datos la topologa
de la red de la que forma parte.
7.4.3. Protocolo BGP (Border Gateway Protocol)
El protocolo de `pasarela frontera' se encarga de mover paquetes de una red a otra pero en algunos casos
debe preocuparse de otras cuestiones que no tienen porque estar relacionadas con el objetivo de mover
los paquetes de la forma mas eciente posible. Es posible que se deban considerar algunas restricciones
relacionadas con cuestiones comerciales o polticas, como por ejemplo:
\Una empresa no hace de red de transito para los mensajes de la competencia."
\Nuestros mensajes no deben pasar por pases enemigos."
Los diferentes dispositivos de encaminamiento BGP se comunican entre s estableciendo conexiones
TCP. Es fundamentalmente un protocolo de vector distancia en el que cada dispositivo de encamina-
miento mantiene el coste a cada destino y la trayectoria seguida. Estos valores son dados periodicamente
a cada uno de los vecinos enviando mensajes. La esencia de BGP es el intercambio de informacion de
encaminamiento entre dispositivos de encaminamiento. La informacion de encaminamiento actualizada se
va propagando a traves de un conjunto de redes.
Involucra tres procedimientos funcionales, que son:
Obtener informacion del vecino
Detectar los vecinos alcanzables
Detectar las redes alcanzables
7.4.4. IGMP (Internet Group Management Protocol)
Es usado, por ejemplo, para informar a los dispositivos de encaminamiento que un miembro del grupo
multicast
2
esta en la red conectada al nodo. Esta informacion de los miembros del grupomulticasttambien
es transmitida al emisor delmulticastutilizando este protocolo.
7.5. Protocolos de transporte
Los protocolos de transporte tienen la funcion de actuar de intercie entre los niveles orientados a la
aplicacion y los niveles orientados a la red dentro de la jerarqua de protocolos TCP/IP. Se encargan de
ocultar a los niveles altos del sistema el tipo de tecnologa a la que se esten conectando los ordenadores.
En la jerarqua de TCP/IP se denen dos protocolos de transporte: el UDP y el TCP. El UDP es un
protocolo no orientado a la conexion mientras que el TCP es orientado a la conexion.
1
Diremos que una red es multiacceso si tiene varios dispositivos de encaminamiento que se pueden comunicar con los
demas.
2
Multicast es el envo de la informacion a multiples destinos simultaneamente usando la estrategia mas eciente para el
envo del mensajes sobre cada enlace de la red unicamente una vez y creando copias cuando los enlaces en los destinos se
dividen. En comparacion con multicast, los envos de un punto a otro se le denomina unicast, y el envo a todos los nodos
se le denomina broadcast.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 71
Se denen dos direcciones para relacionar el nivel de transporte con los niveles superior e inferior:
La direccion IP es la direccion que identica un dispositivo dentro de una red.
El puerto es un numero de 16 bits que se coloca en cada paquete y sirve para identicar la aplicacion
que requiere la comunicacion. La utilidad de los puertos es que permite multiplexar aplicaciones
sobre protocolos del nivel de transporte. Es decir, un mismo protocolo de transporte puede llevar
informacion de diferentes aplicaciones y estas son identicadas por el puerto.
Para establecer una comunicacion entre dos maquinas se ha de utilizar uno de los protocolos de trans-
porte (TCP o UDP) y es necesario conocer tanto el puerto que identica la aplicacion destino como la
direccion IP que identica el terminal o el servidor dentro del conjunto de redes.
Los datos que se envan durante la comunicacion son empaquetados por los protocolos del nivel de
transporte. Los bytes que se transmiten en el TCP reciben el nombre de segmento TCP y los que se
transmiten en el UDP el de datagrama UDP.
Para establecer una comunicacion de utiliza el modelo cliente/servidor. En este caso, el cliente inicia
la comunicacion y para hacerlo necesita conocer la direccion IP asignada al ordenador servidor y el puerto
de la aplicacion que identica la aplicacion que se quiere utilizar.
El cliente conoce su direccion IP (direccion origen), la direccion del servidor (direccion destino) y el
puerto que identica su aplicacion cliente. Para que pueda saber el puerto destino que identica la apli-
cacion deseada, se utilizan los llamados puertos conocidos que consiste en un numero de puerto reservado
para identicar una aplicacion determinada (Vease apendice E).
El servidor respondera a las peticiones de cualquier cliente. Como el cliente enva en el datagrama
UDP y en el segmento TCP tanto el puerto origen como el destino, el servidor conoce el puerto origen
una vez ha recibido una peticion.
7.5.1. UDP
Este protocolo es o orientado a la conexion", y por lo tanto no proporciona ningun tipo de control
de errores ni de ujo, aunque si que utiliza mecanismos de deteccion de errores. Cuando se detecta un
error en un datagrama en lugar de entregarlo a la aplicacion se descarta.
Este protocolo se ha denido teniendo en cuenta que el protocolo del nivel inferior (el protocolo IP)
tambien es no orientado a la conexion y puede ser interesante tener un protocolo de transporte que explote
estas caractersticas. Cada datagrama UDP existe independientemente del resto de datagramas UDP.
El protocolo UDP es muy sencillo y tiene utilidad para las aplicaciones que requieren pocos retardos o
para ser utilizado en sistemas sencillos que no pueden implementar el protocolo TCP. Las caractersticas
del protocolo UDP son:
No garantiza la abilidad. No se puede asegurar que un datagrama UDP llegara al destino.
No preserva la secuencia de la informacion que proporciona la aplicacion. La informacion se puede
recibir desordenada (como ocurre en IP) y la aplicacion debe estar preparada por si se pierden
datagramas, llegan con retardo o llegan desordenados.
Un datagrama consta de una cabecera y de un cuerpo en el que se encapsulan los datos. La cabecera
consta de los siguientes campos:
Los campos puerto origen y puerto destino son de 16 bits e identican las aplicaciones en la maquina
origen y en la maquina destino.
El campo longitud es de 16 bits e indica en bytes la longitud del datagrama UDP incluyendo la
cabecera UDP. En realidad es la longitud del datagrama IP menos el tama~no de la cabecera IP.
Como la longitud maxima del datagrama IP es de 65.535 bytes y la cabecera estandar de IP es de
20 bytes, la longitud maxima de un datagrama UDP es de 65.515 bytes.
El campo suma de comprobacion (checksum) es un campo opcional de 16 bits que, a diferencia del
campo equivalente de la cabecera IP que solo protega la cabecera, protege tanto la cabecera como
los datos.
Jose Antonio Escartn Vigo, Junio 2005.

72 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 7.4: Cabecera del datagrama UDP
Como el protocolo UDP no esta orientado a la conexion y no enva ningun mensaje para conrmar
que se han recibido los datagramas, su utilizacion es adecuada cuando queremos transmitir informacion
en modomulticast(a muchos destinos) o en modobroadcast(a todos los destinos) pues no tiene sentido
esperar la conrmacion de todos los destinos para continuar con la transmision. Tambien es importante
tener en cuenta que si en una transmision de este tipo los destinos enviaran conrmacion, facilmente el
emisor se vera colapsado, pues por cada paquete que enva recibira tantas conrmaciones como destinos
hayan recibido el paquete.
Lo que realmente proporciona UDP respecto a IP es la posibilidad de multiplexacion de aplicaciones.
La direccion del puerto permite identicar aplicaciones gracias a la direccion del puerto.
7.5.2. TCP
La unidad de datos de este protocolo recibe el nombre de segmento TCP. Como la cabecera debe
implementar todos los mecanismos del protocolo su tama~no es bastante grande, como mnimo 20 bytes.
Figura 7.5: Cabecera del datagrama TCP
A continuacion muestro una descripcion de cada uno de los campos que forman la cabecera:
Puerto origen (16 bits): Es el punto de acceso de la aplicacion en el origen.
Puerto destino (16 bits): Es el punto de acceso de la aplicacion en el destino.
Numero de secuencia (32 bits): Identica el primer byte del campo de datos. En este protocolo no
se enumeran segmentos sino bytes, por lo que este numero indica el primer byte de datos que hay
en el segmento. Al principio de la conexion se asigna un numero de secuencia inicial (ISN, Initial
Sequence Number) y a continuacion los bytes son numerados consecutivamente.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 73
Numero de conrmacion (ACK) (32 bits): El protocolo TCP utiliza la tecnica depiggybacking
1
para
reconocer los datos. Cuando el bit ACK esta activo, este campo contiene el numero de secuencia del
primer byte que espera recibir. Es decir, el numero ACK=1 indica el ultimo bit reconocido.
Longitud de la cabecera (4 bits): Indica el numero de palabras de 32 bits que hay en la cabecera. De
esta manera el TCP puede saber donde se acaba la cabecera y por lo tanto donde empieza los datos.
Normalmente el tama~no de la cabecera es de 20 bytes por lo que en este campo se almacenara el
numero 5. Si el TCP utiliza todos los campos de opciones la cabecera puede tener una longitud
maxima de 60 bytes almacenandose en este campo el valor 15.
Reservado (6 bits): Se ha reservado para su uso futuro y se inicializa con ceros.
Indicadores o campo de control (6 bits): Cada uno de los bits recibe el nombre de indicador y cuando
esta a 1 indica una funcion especca del protocolo.
URG: Hay datos urgentes y en el campo \puntero urgente" se indica el numero de datos urgentes
que hay en el segmento.
ACK: Indica que tiene signicado el numero que hay almacenado en el campo umero de
conrmacion".
PSH: Sirve para invocar la funcion de carga (push). Como se ha comentado anteriormente con
esta funcion se indica al receptor que debe pasar a la aplicacion todos los datos que tenga
en la memoria intermedia sin esperar a que sean completados. De esta manera se consigue
que los datos no esperen en la memoria receptora hasta completar un segmento de dimension
maxima. No se debe confundir con el indicador URG que sirve para se~nalar que la aplicacion
ha determinado una parte del segmento como urgente.
RST: Sirve para hacer un reset de la conexion.
SYN: Sirve para sincronizar los numeros de secuencia.
FIN: Sirve para indicar que el emisor no tiene mas datos para enviar.
Ventana (16 bits): Indica cuantos bytes tiene la ventana de transmision del protocolo de control de
ujo utilizando el mecanismo de ventanas deslizantes. A diferencia de lo que ocurre en los protocolos
del nivel de enlace, en los que la ventana es constante y se cuentan las tramas, en el TCP la ventana
es variable y cuenta bytes. Contiene el numero de bytes de datos comenzando con el que se indica
en el campo de conrmacion y que el que enva esta dispuesto a aceptar.
Suma de comprobacion (16 bits): Este campo se utiliza para detectar errores mediante el comple-
mento a uno de la suma en modulo 216-1 de todas las palabras de 16 bits que hay en el segmento mas
una pseudo-cabecera. La pseudo-cabecera incluye los siguientes campos de la cabecera IP: direccion
internet origen, direccion internet destino, el protocolo y un campo longitud del segmento. Con la
inclusion de esta pseudo-cabecera, TCP se protege a s mismo de una transmision erronea de IP.
Puntero urgente (16 bits): Cuando el indicador URG esta activo, este campo indica cual es el ultimo
byte de datos que es urgente. De esta manera el receptor puede saber cuantos datos urgentes llegan.
Este campo es utilizado por algunas aplicaciones como telnet, rlogin y ftp.
Opciones (variable): Si esta presente permite a~nadir una unica opcion de entre las siguientes:
Tiemstamp: para marcar en que momento se transmitio el segmento y de esta manera monito-
rizar los retardos que experimentan los segmentos desde el origen hasta el destino.
Aumentar el tama~no de la ventana.
Indicar el tama~no maximo del segmento que el origen puede enviar.
1
Un paquete puede llevar dentro no solo los datos que van en direccion A-B, sino tambien un ACK (acuse de recibo) de
otros datos que llegaron anteriormente en direccion B-A. As se reduce el numero total de paquetes requeridos, porque de
otra manera el ACK tendra que ocupar un paquete completo. Es una tecnica de optimizacion que se usa cuando hay traco
de datos en ambos sentidos.
Jose Antonio Escartn Vigo, Junio 2005.

74 Servidor Linux para conexiones seguras de una LAN a Internet
Como TCP ha sido dise~nado para trabajar con IP, algunos parametros de usuario se pasan a
traves de TCP a IP para su inclusion en la cabecera IP. Por ejemplo: prioridad (campo de 3
bits), retardo-normal / retardo-bajo, rendimiento-normal / rendimiento-alto, seguridad-normal /
seguridad-alta y proteccion (campo de 11 bits).
7.6. Protocolos de aplicacion
Los protocolos de aplicacion se pueden dividir en dos grupos segun su protocolo de transporte:
UDP: NFS, SNMP, DNS
TCP: SMTP, TELNET, FTP, HTTP
7.6.1. NFS (Network File System)
Utiliza el protocolo UDP y esta basado en el RPC (Remote Procedure Call de SUN). El nucleo del
sistema operativo de la maquina cliente es modicado con un nuevo tipo de sistema de chero NFS, de
manera que cuando un programa intenta abrir, cerrar, leer o escribir en un chero remoto, el codigo NFS
es llamado en lugar del codigo ormal" para acceder a los manejadores de los discos fsicos. El codigo del
sistema de cheros NFS usa el protocolo RPC de SUN para comunicar con el codigo servidor NFS que se
ejecuta en la maquina remota, leyendo o escribiendo bloques de cheros en el.
7.6.2. SNMP (Simple network management protocol)
Es un protocolo cliente/servidor que normalmente es usado para congurar y monitorizar remotamente
los equipos de la red Internet. Este protocolo se basa en el protocolo UDP. En terminologa SNMP es
descrito como un protocolomanager/agent.
7.6.3. DNS (Domain Name Server)
El servicio de nombres de dominio (DNS) se utiliza para relacionar los nombres de dominio de los
nodos con sus direcciones IP. Tal como hemos comentado al explicar el protocolo IP, la asignacion de
direcciones sigue una estructura jerarquica. Para hacer mas sencillo el acceso a los sistemas, cada host
puede tener asignados uno o varios nombres de dominio DNS, que son identicadores descriptivos que
permiten hacer referencia al equipo y equivalen a su direccion IP. Los nombres DNS tambien se asignan de
forma jerarquica, a~nadiendo a la derecha del nombre del host una serie de identicadores que corresponden
con la organizacion o empresa a la que pertenece el sistema.
Cuando en un comando entramos un nombre de maquina, el sistema siempre convierte ese nombre en
una direccion IP antes de establecer la conexion. Desde la maquina que necesita saber la direccion IP,
se enva un paquete UDP a un servidor DNS, que busca el nombre y devuelve la direccion IP. Con la
direccion IP, el programa establece una conexion TCP con el destino, o le envia paquetes UDP.
7.6.4. SMTP (Simple Mail Transfer Protocol)
Este es el protocolo dedicado a la transmision de mensajes electronicos sobre una conexion TCP.
El protocolo especica el formato de los mensajes deniendo la estructura de la informacion sobre el
remitente, el destinatario, datos adicionales y naturalmente el cuerpo de los mensajes. Este protocolo no
especica como los mensajes deben ser editados. Es necesario tener un editor local o un aplicacion nativa
de correo electronico. Una vez el mensaje es creado, el SMTP lo acepta y usa el protocolo TCP para
enviarlo a un modulo SMTP de otra maquina. El TCP es el encargado de intercomunicar modulos SMTP
de las maquina implicadas.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 75
7.6.5. TELNET (Remote login)
Este protocolo permite a los usuarios conectarse a ordenadores remotos y utilizarlos desde el sistema
local, mediante la emulacion de terminal sobre una conexion TCP. Interconecta el cliente local de una
maquina con el servidor con el que se comunica. Los caracteres que se teclean en un cliente local son
enviados por la red y procesados en el ordenador remoto, utilizando la informacion que ese ordenador
contiene. El resultado de su ejecucion se muestra en la pantalla del ordenador local. Este protocolo fue
uno de los primeros que se denio y ha sido dise~nado para trabajar con terminales de modo texto. Se
implementa en dos modulos. El modulo cliente relaciona el modulo de entrada y salida del terminal para
que pueda comunicarse con el terminal local. Convierte las caractersticas de los terminales reales con los
standards de las redes y viceversa. El modulo servidor interactua con una aplicacion, de manera que los
terminales remotos sean vistos por la aplicacion como terminal local.
7.6.6. FTP (File Transfer Protocol)
Permite la transferencia de cheros de texto o binarios desde un ordenador a otro sobre una conexion
TCP. FTP implementa un sistema estricto de restricciones basadas en propiedades y permisos sobre los
cheros. Hay un control de acceso de los usuarios, y cuando un usuario quiere realizar la transferencia
de un chero, el FTP establece una conexion TCP para el intercambio de mensajes de control. De esta
manera se puede enviar el nombre de usuario, el password, los nombre de los cheros y las acciones que
se quieren realizar. Una vez se ha aceptado la transferencia del chero, una segunda conexion TCP se
establece, del servidor al cliente, para la transferencia de datos. El chero se transere sobre la conexion
de datos, sin la utilizacion de ninguna cabecera o informacion de control en la capa de aplicacion. Cuando
se completa la transferencia, la conexion de control es usada para transmitir la se~nalizacion de que la
transferencia se ha completado y para aceptar nuevos comandos de transferencia.
7.6.7. HTTP (Hyper Text Transport Protocol)
Este es un sencillo protocolo cliente-servidor que articula los intercambios de informacion entre los
clientesWeb y los servidores HTTP. Este protocolo fue propuesto atendiendo a las necesidades de un
sistema global de distribucion de informacion multimedia como el World Wide Web. Se utiliza para
transferir paginas de hipertexto. Esta soportado sobre los servicios de conexion TCP/IP. Un proceso
servidor espera las solicitudes de conexion de los clientes Web, y una vez se establece la conexion, el
protocolo TCP se encarga de mantener la comunicacion y garantizar un intercambio de datos libre de
errores.
7.7. Protocolo TCP/IP
En su epoca, el protocolo de red TCP/IP era un protocolo oculto utilizado principalmente por ins-
tituciones gubernamentales y educativas. De hecho, lo invento la agencia de investigacion militar de los
Estados Unidos (DARPA) para proporcionar un sistema de redes sin interrupciones. Su objetivo era crear
una red que pudiera soportar multiples fallos de enlace, en el caso de que se produjese alguna catastrofe,
como una guerra nuclear. Las comunicaciones de datos tradicionales siempre se haban basado en una sola
conexion directa y si dicha conexion se degradaba o se saboteaba, la comunicacion cesaba. TCP/IP ofreca
una forma de empaquetar los datos y dejar que \encontraran" su propio camino por la red. As se creo la
primera red tolerante al fallo.
Sin embargo, la mayora de las empresas seguan utilizando los protocolos de red proporcionados por
los fabricantes de su hardware. Las LAN IBM utilizaban normalmente NetBIOS o SNA; las LAN Novell
utilizaban un protocolo denominado IPX/SPX y las LAN Windows utilizaban otro estandar denominado
NetBEUI, derivado del NetBIOS de IBM. Aunque TCP/IP se convirtio en algo comun a lo largo de 1980,
no fue hasta el surgimiento de Internet, a primeros de 1990, cuando empezo a convertirse en el estandar
para la comunicacion de datos. Por todo lo anteriormente expuesto hizo que cayeran los precios del hard-
ware en sistema de red IP, hecho que facilito la interconexion entre redes.
Jose Antonio Escartn Vigo, Junio 2005.

76 Servidor Linux para conexiones seguras de una LAN a Internet
Una red TCP/IP permite que los nodos de comunicacion establezcan una conexion y despues veriquen
cuando se inician y se detienen las comunicaciones de datos. Los datos a transmitir se cortan en secciones,
denominadas paquetes y se encapsulan en una serie de \envolturas", conteniendo cada una informacion
especca para la siguiente capa de red. Cada paquete se graba con un numero de secuencia de 32 bits
para que, aunque lleguen en el orden erroneo, la transmision se pueda volver a montar. A medida que el
paquete cruza diferentes partes de la red, se abre y se interpreta cada capa y los datos restantes se pasan
segun dichas instrucciones. Cuando el paquete de datos llega a su destino, se entregan a la aplicacion los
datos reales, o carga util.
Parece algo confuso, pero mostrando la siguiente analoga se entendera mejor. Piensa en una carta
dentro de un sobre que se enva a una empresa de mensajera para su distribucion. La empresa de men-
sajera utiliza su propio sobre para enrutar el paquete al edicio correcto. Cuando se reciba el paquete en
este edicio, se abrira y se tirara el sobre exterior. Esta carta puede estar destinada a otro buzon de correo
interno, por lo que pueden colocarla en un sobre de correo nter-ocinas y enviarla al sitio apropiado. Por
ultimo, la carta llega al receptor, que quita todos los envoltorios y utiliza los datos que estan dentro. La
tabla 7.4 resume como encapsulan datos algunos protocolos de red.
Cuadro 7.4: Paquete de datos TCP/IP de ejemplo
Protocolo Contenido Capa OSI
Ethernet Direccion MAC Enlace de datos
IP Direccion IP Red
TCP Encabezado TCP Transporte
HTTP Encabezado HTTP Aplicacion
Datos de aplicacion Pagina Web Aplicacion
Como se puede comprobar, el exterior de nuestro \sobre" de datos tiene la direccion Ethernet, que
identica el paquete en la red Ethernet. Dentro de esta capa se encuentra la informacion de la red,
denominada direccion IP, y dentro se encuentra la capa de transporte, que establece una conexion y la
cierra. A continuacion esta la capa de aplicacion, que es un encabezado HTTP, que indica al explorador
Web como debe formatear una pagina. Por ultimo, entra la carga de datos real del paquete (el contenido
de una pagina Web). Todo esto ilustra la naturaleza de multiples capas de las comunicaciones de red.
Existen varias fases durante una comunicacion entre dos nodos de red que utilizan TCP/IP. Suponiendo
que estamos utilizando direcciones IP y nombres que no son del antrion, lo primero que sucede es que
la maquina genera una solicitud de Protocolo de resolucion de direcciones (ARP, Address Resolution
Protocol) para buscar la direccion Ethernet correspondiente a la direccion IP con la que esta intentando
comunicarse. Ahora que puede comunicarse con la maquina utilizando IP, existe una comunicacion de tres
vas entre las maquinas que utilizan el protocolo TCP para establecer una sesion.
Una maquina que desea enviar datos a otra maquina enva un paquete SYN para sincronizar, o iniciar,
la transmision. El paquete SYN esta basicamente diciendo \>Esta preparada para el envo de datos?".
La otra maquina, enva un SYN/ACK, que signica \De acuerdo, he recibido el paquete SYN y estoy
preparada". Por ultimo, la maquina emisora enva un paquete ACK de respuesta diciendo, \Bien, inicio el
envo de datos". Esta comunicacion se denomina Acuerdo de conexion TCP de tres vas. Si una de las tres
partes no se produce, la conexion no tiene lugar. Mientras la maquina esta enviando sus datos, etiqueta
los paquetes de datos con un numero de secuencia y reconoce cualquier numero de secuencia anterior
utilizado por el antrion en el otro punto. Cuando se han enviado todos los datos, una parte enva un
paquete FIN a la otra parte del enlace.

Esta responde con un FIN/ACK para cerrar esa sesion TCP/IP.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 7. Infraestructura de redes 77
Cuadro 7.5: Esquema de transmision TCP/IP
1 SYN: Inicio la conexion (1.
a
maquina)
2 SYN/ACK: De acuerdo, listo para recibir (2.
a
maquina)
3 ACK: Transmito (1.
a
maquina)
4 Transmision: Comunicacion entre las dos maquinas
5 FIN: Finalizo conexion (1.
a
maquina)
6 FIN/ACK: Conexion nalizada (2.
a
maquina)
Debido a la forma en que TCP/IP controla la iniciacion y nalizacion de una sesion, las comunica-
ciones TCP/IP se dice que tienen un estado. Esto signica que podemos saber que parte del dialogo se
esta produciendo solo con mirar a los paquetes, algo muy importante para los cortafuegos porque la forma
mas comun de bloquear el traco saliente con un cortafuegos es no admitir los paquetes SYN del exterior
en maquinas internas de la red. As, las maquinas internas pueden comunicarse fuera de la red e iniciar
conexiones con el exterior pero las maquinas externas no pueden iniciar nunca la conexion.
En Linux el cortafuegos IPTables integrado en el nucleo, esta disponible en las versiones de kernel 2.4x
o superior. Funciona mediante la interaccion directa con el nucleo del sistema y nos sirve para hacer el
ltrado de paquetes TCP/IP.
Generalmente los cortafuegos tienen dos o mas interfaces (tarjetas de red). Una interfaz se conecta
normalmente a la LAN interna; esta interfaz se denomina interfaz de conanza o privada. La otra interfaz
es para la parte publica (WAN) de nuestro cortafuegos. En las redes mas peque~nas, la interfaz WAN se
conecta a Internet. Tambien puede existir una tercera interfaz denominada DMZ (Desmilitarized Zone),
que normalmente es para los servidores que necesitan exponerse mas a Internet de forma que los usuarios
externos pueden conectarse a ellos, disponen de una IP publica. Todos los paquetes que intentan pasar a
traves de la maquina, pasan a traves de una serie de ltros. Si coinciden con el ltro, se lleva a cabo alguna
accion.

Esta puede ser evitar su paso, pasarlo o enmascararlo con una direccion IP privada interna. La
mejor practica para la conguracion del cortafuegos es denegarlo todo siempre y permitir, a continuacion,
el traco que necesitamos de una forma selectiva.
Los cortafuegos pueden ltrar paquetes en distintos niveles. Pueden mirar una direccion IP y bloquear
el traco proveniente de determinadas direcciones o redes IP, comprobar el encabezado TCP y determinar
su estado y, en niveles superiores, pueden mirar a la aplicacion o al numero de puerto TCP/UDP. Se
pueden congurar para evitar categoras completas de traco, como ICMP. Los paquetes externos de tipo
ICMP, como los ping, normalmente se rechazan en los cortafuegos porque dichos paquetes se utilizan a
menudo en el descubrimiento de redes y denegacion de servicio (DoS). No existe ninguna razon para que
alguien externo a nuestra empresa pruebe nuestra red con un ping. Si no lo rechazamos expresamente, el
cortafuegos va a permitir las replicas de eco (respuestas de ping).
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8
Conguracion de dispositivos de red
En Debian el archivo de conguracion de los dispositivos de red es:
/etc/network/interfaces
En su interior encontraremos el modo de funcionamiento de todos los dispositivos de red del sistema.
En este captulo trataremos su conguracion mediante una serie de herramientas.
8.1. Etherconf: Congurador graco de red
Es el congurador graco para redes de Debian y se instala con el siguiente comando:
#apt-get install etherconf
Para congurar las tarjetas de red automaticamente hay que ejecutar el comando:
#dpkg-reconfigure etherconf, . . . que arrancaradebconf.
Y nos realizara unas preguntas, para congurar nuestro sistema.
8.2. Ifcong: Congurador de red
El programa ifcong es responsable de congurar las tarjetas de interfaz de red (NIC, Network Interface
Card). Todas estas operaciones se realizan a traves de la lnea de comandos, ya que no tiene interfaz graca.
Existen varias herramientas que se han escrito para cubrir la falta de interfaz graca o de menus del
comando ifcong. Muchas de ellas vienen en las distribuciones de Linux, en Debian la interfaz que podemos
utilizar esetherconf.
El formato del comando ifcong es el siguiente:
#ifconfig dispositivo direccion opciones
Dondedispositivoes el nombre del dispositivo ethernet (por ejemplo, eth0),direcciones la direccion
IP que se desea aplicar al dispositivo yopcioneses una de las siguientes:

80 Servidor Linux para conexiones seguras de una LAN a Internet
Opcion Descripcion
up Activa el dispositivo. Esta opcion es implcita
down Desactiva el dispositivo
arp Activa este dispositivo para responder peticiones, por defecto
-arp Desactiva este dispositivo para responder a peticiones arp
mtuvalor Congura la unidad de transmision maxima (MTU) del dispositivo avalor.
Bajo ethernet, el valor por defecto es 1500
netmaskdireccionCongura la mascara de red de esta interfaz adireccion. Si no se propor-
ciona un valor, ifcong calcula la mascara basada en la clase de la direccion
IP. Una direccion de clase A tiene una mascara 255.0.0.0, una de clase B
255.255.0.0 y la clase C 255.255.255.0
broadcastdireccionCongura la direccion de broadcast de la interfaz dedireccion. Si no se
proporciona un valor, ifcong calcula la direccion de broadcasta basada
en la clase de la direccion IP de manera parecida a la mascara de red
pointtopointdireccionCongura la conexion punto a punto (PPP) donde la direccion remota es
direccion
Un ejemplo de uso simple podra ser el siguiente:#ifconfig eth0 192.168.0.3, . . . Donde el dispo-
sitivoeth0quedara congurado con la direccion IP 192.168.0.3. Como es una direccion de clase C, la
mascara sera 255.255.255.0 y el broadcast sera 192.168.0.255, asignandolos ifcong por defecto.
Si la direccion IP que conguramos es una direccion de clase A o B dividida en subredes, necesitaremos
determinar explcitamente las direcciones de broadcast y de mascara en la lnea de comandos:
#ifconfig dispositivo ip netmask num_mascara broadcast num_broadcast
Se pueden listar todos los dispositivos activos ejecutando:#ifconfig.
Con la opcion-a:#ifconfig -a, . . . se mostraran todos los dispositivos, esten activos o no.
En tiempo de ejecucion, con el comando ifcong podemos habilitar y deshabilitar los dispositos de red:
#ifconfig dispositivo up, . . . para activar el dispositivo
#ifconfig dispositivo down, . . . para desactivar el dispositivo
Para visualizar los dispositivos del sistema basta con ejecutar:
#ifconfig
Si estamos en un cliente habra que especicar toda la ruta:
$/sbin/ifconfig
A continuacion podemos observar la salida del servidor que se utiliza en el proyecto:
$/sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:C0:9F:6E:1D:E0
inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2506 errors:0 dropped:0 overruns:0 frame:0
TX packets:5953 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2280653 (2.1 MiB) TX bytes:707464 (690.8 KiB)
Interrupt:6
eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:10
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:139967 errors:0 dropped:0 overruns:0 frame:0
TX packets:139967 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:29170217 (27.8 MiB) TX bytes:29170217 (27.8 MiB)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8. Conguracion de dispositivos de red 81
Se puede observar que dispone de dos tarjetas de red, en este casoeth0es una tarjeta de red LAN y
eth1una tarjeta de red wi, en estos momentos deshabilitada. As mismo, tambien podemos observar el
dispositivo lo, de loopback.
8.3. Route: Tablas de redireccionamiento
Si la maquina se conecta a una red con varias subredes, necesitamos un enrutador. Este aparato, que
se situa entre redes, redirige paquetes a su destino real (normalmente, muchas maquinas no conocen el
camino correcto al destino, solo conocen el propio destino).
En el caso donde una maquina ni siquiera tiene una pista sobre donde enviar el paquete, se usa una
ruta por defecto. Este camino apunta a un enrutador, que idealmente sabe a donde debera ir el paquete
o, al menos, sabe otra ruta que puede tomar.
Una maquina tpica Linux conoce al menos tres rutas:
La primera es la ruta de bucle local que simplemente apunta a su dispositivo deloopback.
La segunda es la ruta a la LAN, de forma que los paquetes destinados a las maquinas de esa misma
red se envan directamente a ellas.
La tercera es la ruta por defecto. Esta ruta se usa para paquetes que necesitan abandonar la LAN
para comunicarse con otras redes.
Si conguramos la red en tiempo de instalacion, este valor lo congurara el instalador. As que no suele
ser necesario cambiarlo, lo cual no quiere decir que no se pueda. Suele ser necesario cuando tenemos varias
tarjetas instaladas en un mismo equipo, como a menudo pasa en los servidores, enrutadores o cortafuegos.
El comando route tpico se estructura de la siguiente forma:
#route cmd tipo direccion netmask masc gw gatw dev destino
Los parametros signican lo siguiente:
Parametro Descripcion
cmd Valor addodeldependiendo de si a~nadimos o borramos una ruta. Si eliminamos
una ruta, solo necesitamos otro parametro,direccion
tipo Valor -neto-hostdependiendo sidireccionrepresenta una direccion de red o una
direccion de un enrutador
direccion La red destino que quiere ofrecer para enrutar
netmask masc Congura la mascara de red de la direcciondireccionamasc
gw gatw Congura la la direccion de enrutador paradireccionagatew. Normalmente se usa
como ruta por defecto
dev destino Enva todos los paquetes destinados adirecciona traves de la red del dispositivo
destino segun se congura con ifcong
Podemos ver el uso del comando con los siguientes ejemplos:
1. Congurar una ruta por defecto en mi maquina, la cual tiene un dispositivo Ethernet y un enrutador
en 192.168.0.1:
#route add -net default gw 192.168.0.1 dev eth0
2. Congurar un sistema para que todos los paquetes destinados a 192.168.0.3 se enven a traves del
primer dispositivo PPP:
#route add -host 192.168.0.3 netmask 255.255.255.0 dev ppp0
Jose Antonio Escartn Vigo, Junio 2005.

82 Servidor Linux para conexiones seguras de una LAN a Internet
3. As se borra una ruta destino a 192.168.0.3:
#route del 192.168.0.3
Hay otra cosa a tener en cuenta, si usamos una pasarela (gateway), necesitamos asegurarnos de que
existe una ruta a la pasarela antes de referenciarla como otra ruta. Por ejemplo, si la ruta por defecto usa
la pasarela de 192.168.1.1, necesitamos asegurarnos primero de que tenemos una ruta a la red 192.168.1.0
Para visualizar la tabla de enrutamiento utilizaremos:
#route
Route visualiza los nombres de maquinas a cualquier direccion IP que podra buscar y resolver. Aunque
es bueno leerlo, presenta un problema cuando hay dicultades de red y no se consigue llegar a los servidores
DNS o NIS. El comandorouteesperara, tratando de resolver los nombres de maquinas y esperando para
ver si los servidores devuelven y los resuelven. Esta espera sera de varios minutos hasta que la peticion
devuelva untimeout.
Para evitar querouterealice resolucion de nombres ejecutaremos:#route -n
Este sera un ejemplo de la salida de una maquina con acceso a la LAN y a internet por una pasarela:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
default . 0.0.0.0 UG 0 0 0 eth0
Podemos observar varias columnas como destino, pasarela, mascara (referido como genmask) e iface
(interfaz, congurada por la opcion dev de route). Las otras entradas de la tabla tienen el signicado
siguiente:
Entrada Descripcion
Flags Un sumario de estado de conexion, donde cada letra tiene un signicado:
U: la conexion esta arriba
H: el destino es una maquina
G: el destino es la pasarela
Metric El \coste" es una ruta, normalmente medida en saltos (hops). Esto es signicativo para
los sistemas que tienen varias rutas para llegar al destino, pero se preere una ruta
sobre el resto. Un camino con metrica baja es el preferido. El kernel de Linux no usa
esta informacion, pero s lo hacen algunos protocolos de enrutamiento avanzados.
Ref El numero de referencias de la ruta. Esto no se usa en el kernel de Linux. Esta aqu debido
a que la propia herramienta route es de plataformas cruzadas. As se imprime este valor,
pues otros sistemas operativos lo usan
Use El numero de bucles de cache de rutas utilizados con exito. Para ver este valor, hay que
usar la opcion -F cuando invoquemos route
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8. Conguracion de dispositivos de red 83
8.4. Netstat: Estado de las conexiones
El programanetstatse utiliza para mostrar el estado de todas las conexiones de red de una maquina.
La opciones denetstatson combinables, en la siguiente tabla se muestran las mas comunes:
Cuadro 8.1: Opciones de Netstat
Opcion Descripcion
-a Visualiza la informacion de todas las conexiones activas
-i Visualiza las estadsticas de todos los dispositivos de red congurados
-c Actualiza la informacion visualizada cada segundo
-r Muestra la tabla de enrutado
-n Visualiza las direcciones locales y remotas en formato numerico
-t Muestra tan solo la informacion de TCP
-u Muestra tan solo la informacion de UDP
-v Visualiza la version de netstat
8.5. Conguracion de interfaces usando DHCP
DHCP (Dynamic Host Conguration Protocol), es un protocolo de red empleado para asignar de forma
automatica una direccion IP a los hosts que se conectan a ella.
En redes peque~nas las direcciones IP pueden asignarse de forma manual, equipo por equipo, pero en
redes de un cierto tama~no esta tarea puede convertirse en agotadora, no solo por tener que editar cada
uno de los hosts, sino por la dicultad de mantener un registro con las IPs asignadas para evitar duplicados.
Para que esto funcione debemos instalar uno de los siguientes paquetes:
dhcp3-client (version 3, Internet Software Consortium)
dhcpcd (Yoichi Hariguchi y Sergei Viznyuk)
pump (Red Hat)
Pump es sencillo y ampliamente utilizado. Para instalarlo:
#apt-get install pump
Y para utilizarlo, simplemente:
#pump -i dispositivo, . . . como por ejemplo:#pump -i eth0
Dhcp3-client es complejo pero mas congurable. Para instalarlo:
#apt-get install dhcp3-client
Y para utilizarlo ejecutamos:
#dhclient3 dispositivo, . . . como por ejempo:#dhclient3 eth0
Este comando tiene otras opciones que pueden ser consultadas con el manual del sistema:$man dhclient
Jose Antonio Escartn Vigo, Junio 2005.

84 Servidor Linux para conexiones seguras de una LAN a Internet
8.6. Archivo /etc/network/interfaces
El archivo especica la conguracion de nuestros dispositivos de red y puede ser congurado a mano.
Los comandos:#ifdown dispositivoy#ifup dispositivo, utilizan el archivo para habilidar y des-
habilitar los dispositivos de red.
En las siguientes secciones se especica la forma de congurar el archivo/etc/network/interfaces.
Esta seccion esta basada en la conguracion de la red de la gua de referencia Debian, para mas
informacion consultela.
8.6.1. Direcciones IP estaticas
Supongamos que se desea congurar una interfaz ethernet que tiene una direccion IP ja 192.168.0.123.
Esta direccion comienza con 192.168.0 por lo tanto debe estar en una LAN. Supongamos ademas que
192.168.0.1 es la direccion de la puerta de enlace de la LAN Internet. Editamos/etc/network/interfaces
de modo que incluya un fragmento como el siguiente:
iface eth0 inet static
address 192.168.0.123
netmask 255.255.255.0
gateway 192.168.0.1
Si tenemos instalado el paqueteresolvconfpodemos a~nadir las siguientes lneas para especicar la
informacion relativa al DNS:
iface eth0 inet static
address 192.168.0.123
netmask 255.255.255.0
gateway 192.168.0.1
dns-search nicedomain.org
dns-nameservers 195.238.2.21 195.238.2.22
Despues de que se activa la interfaz, los argumentos de las opcionesdns-searchydns-nameservers
quedan disponibles pararesolvconfpara su inclusion enresolv.conf.
El argumentonicedomain.orgde la opciondns-searchcorresponde al argumento de la opcinsearchen
resolv.conf.
Los argumentos195.238.2.21y195.238.2.22de la opciondns-nameserverscorresponde a los argu-
mentos de las opcionesnameserverenresolv.conf.
Otras opciones reconocidas en el archivo sondns-domainydns-sortlist.
8.6.2. Direcciones IP dinamicas
Para congurar una interfaz usando DHCP editamos el /etc/network/interfaces de manera que incluya
un fragmento como el siguiente:
iface eth0 inet dhcp
Para que esto funcione debemos tener instalado un cliente DHCP (Vease seccion 8.5).
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8. Conguracion de dispositivos de red 85
8.6.3. Interfaz Wi
El paquetewireless-toolsincluye el script/etc/network/if-pre-up.d/wireless-toolsque permite con-
gurar hardware Wi (802.11a/b/g) antes que se active la interfaz. La conguracion se realiza usando el
programa iwcong (vease seccion 8.10).
Para cada parametro del comandoiwcongpodemos incluir una opcion en/etc/network/interfaces
con un nombre como el del parametro con el prejo \wireless-". Por ejemplo, para jar el ESSID deeth1
amiessidy la clave de cifrado en123456789eantes de activareth1y usando DHCP, editamos el archivo
/etc/network/interfacesde modo que incluya un fragmento como el siguiente :
iface eth1 inet dhcp
wireless-essid miessid
wireless-key 123456789e
8.6.4. Interfaz PPPoE
Muchos Proveedores de Servicios de Internet (ISPs) de banda ancha utilizan PPP para negociar las
conexiones incluso cuando las maquinas de los clientes estan conectadas mediante ethernet y/o redes ATM.
Esto se logra mediante PPP sobre ethernet (PPPoE) que es una tecnica para el encapsulamiento del ujo
PPP dentro de las tramas ethernet.
Supongamos que el ISP se llama miisp. Primero conguramos PPP y PPPoE para miisp. La manera
mas facil de hacerlo consiste en instalar el paquetepppoeconfy ejecutarpppoeconfdesde la consola. A
continuacion, editamos/etc/network/interfacesde modo que incluya un fragmento como el siguiente:
iface eth0 inet ppp
provider mi_isp
A veces surgen problemas con PPPoE relativos a la Unidad de Transmisin Mxima (Maximum Transmit
Unit o MTU) en lneas DSL (Digital Subscriber Line). Hay que acudir al manual en estos casos.
Debemos observar que si el modem posee un router, si esto es as el modem/router maneja por s mismo
la conexin PPPoE y aparece del lado de la LAN como una simple puerta de enlace Ethernet a Internet.
As no hay que realizar la conguracion. En mi caso, mi proveedor de servicios me ha instalado un
modem/router de este estilo y no me es necesario. Me han facilitado un usuario y contrase~na que utilizo
para validarme en su servidor y recibir el servicio.
8.6.5. Puertas de enlace
Supongamos que eth0 esta conectada a internet con un direccion IP congurada con DHCP y eth1
esta conectada a la LAN con una direccion IP estatica 192.168.1.1. Editamos/etc/network/interfacesde
modo que incluya un fragmento similar al siguiente:
iface eth0 inet dhcp
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
Si activamos NAT en esta maquina, mediante una puerta de enlace, podemos compartir la conexion
de internet con todas las maquinas de la LAN.
Jose Antonio Escartn Vigo, Junio 2005.

86 Servidor Linux para conexiones seguras de una LAN a Internet
8.6.6. Interfaces virtuales
Usando interfaces virtuales se puede congurar una unica tarjeta ethernet para que sea la inter-
faz de distintas subredes IP. Por ejemplo, supongamos que la maquina se encuentra en una red LAN
192.168.0.x/24. Y deseamos conectar la maquina a Internet usando una direccin IP publica proporcionada
con DHCP usando su tarjeta ethernet existente. Editamos/etc/network/interfacesde modo que incluya
un fragmento similar al siguiente:
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
iface eth0:0 inet dhcp
La interfazeth0:0es una interfaz virtual. Al activarse tambien lo hara su padre eth0.
8.7. Reconguracion de la red
Aqu es necesario diferenciar entre interfaz fsica y interfaz logica.
Una interfaz fsica es lo que hemos estado llamando \interfaz o dispositivo" de red, lo que hemos
designado con eth0, ppp1, etc.
Una interfaz logica es un conjunto de valores que pueden asignarse a los parametros variables de una
interfaz fsica.
Las denicionesifaceen/etc/network/interfacesson, en realidad, deniciones de interfaces logicas no
de interfaces fsicas.
No obstante, supongamos que nuestra maquina es un equipo portatil que transportamos de casa al
trabajo. Cuando conectamos la maquina a una red corporativa o a nuestra LAN hogare~na, necesitamos
congurar eth0 adecuadamente. Vamos a denir, en el archivo/etc/network/interfacesdos interfaces
logicas: hogar y trabajo (en vez de eth0 como hicimos antes) que describen como debera congurarse la
interfaz para la red hogare~na y la del trabajo respectivamente.
iface hogar inet static
address 192.168.0.123
netmask 255.255.255.0
gateway 192.168.0.1
iface trabajo inet static
address 81.201.3.123
netmask 255.255.0.0
gateway 81.201.1.1
De esta forma, la interfaz fsica eth0 se puede activar en la red hogare~na con la conguracion apropiada,
especicando:
#ifup eth0=hogar
Para recongurar eth0 en la red del trabajo, ejecutamos los comandos:
#ifdown eth0
#ifup eth0=trabajo
Observamos que con el archivo interfaces escrito as ya no resultara posible activar eth0 haciendo
solamente ifup eth0. La razon es que ifup utiliza el nombre de la interfaz fsica como el nombre de la
interfaz logica eth0 predeterminada y, en realidad, en nuestro ejemplo no hay una interfaz logica denida.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8. Conguracion de dispositivos de red 87
Una vez visto como se reconguran las interfaces, hay que precisar que la reconguracion necesita
realizarse en el momento apropiado.
Actualmente existe una tendencia en GNU y Linux al soporte de hardware y entornos que cambian
dinamicamente. El primer soporte se a~nadio para la insercion en caliente de tarjetas PCMCIA; mas
recientemente ha sido incorporado el mecanismohotplugpara que muchos mas perifericos se puedan
enchufar y desenchufar mientras la maquina se encuentra funcionando. Esto incluye el hardware de red.
Se puede observar que los servicios que dependen del hardware que se conecta en caliente solo deben
iniciarse despues de que el hardware haya sido insertado y deben detenerse cuando se hayan eliminado.
Esto signica que dichos servicios deben liberarse del control del sistemainit System Vy ponerlos, en
cambio, bajo el control deifupdown.
Por ejemplo, supongamos que el servicio `loquesea' controlado por el script de init/etc/init.d/loquesea
depende dinamicamente de la interfaz de red recongurada eth0. Deberamos actuar siguiendo este esque-
ma:
Primero eliminamos `loquesea' del control del sistema init. Si esta ultilizando el sistemainit sysv-rc
entonces hacemos lo siguiente:
# rm /etc/rc?.d/S??loquesea
Luego pongamos `loquesea' bajo el control deifupdowna~nadiendo las opciones up y down en la
seccion eth0 de/etc/network/interfacesque contiene las llamadas al scriptinit loquesea:
iface eth0 inet dhcp
up /etc/init.d/loquesea start
down /etc/init.d/loquesea stop
8.7.1. Conguracion de red durante el arranque
Al arrancar, el script deinit,/etc/rcS.d/S40networkingse ejecuta el comandoifup -a. Esto activa
todas las interfaces fsicas que aparecen en las seccionesautode/etc/network/interfaces.
Actualmente, a menudo resulta mejor manejar la conguracion de la red usando metodos dinamicos.
Una vez congurados los mecanismos para el soporte de hardware que cambia en forma dinamica, resulta
mas sencillo tratar el hardware estatico como si fuera dinamico. El arranque se puede considerar como un
simple eventohotplug(Vease seccion 8.7.2).
No obstante, en casi todos los casos uno desea por lo menos que la interfaz de retorno lo (loopback) se
active en el arranque. Por lo tanto, nos aseguramos de que/etc/network/interfacesincluya las siguientes
lneas:
auto lo
iface lo inet loopback
Se puede listar los nombres de interfaces fsicas adicionales en las seccionesautosi desea que tambien
se activen durante el arranque. Nunca debemos de incluir las interfaces PCMCIA en las seccionesauto.
Para el PCMCIA,cardmgrse inicia durante el arranque despues de/etc/rcS.d/S40networking, si descubre
algun dispositivo lo instala.
8.7.2. Hotplug
Para el soporte del arranque en caliente instalamos el paquetehotplug:
#apt-get install hotplug
El hardware de red se puede enchufar en caliente ya sea durante el arranque, tras haber insertado la
tarjeta en la maquina (una tarjeta PCMCIA, por ejemplo), o despues de que una utilidad comodiscover
se haya ejecutado y cargado los modulos necesarios.
Jose Antonio Escartn Vigo, Junio 2005.

88 Servidor Linux para conexiones seguras de una LAN a Internet
Cuando el kernel detecta nuevo hardware inicializa el controlador para el hardware y luego ejecuta
el programahotplugpara congurarlo. Si mas tarde se elimina el hardware, ejecuta nuevamentehotplug
con parametros diferentes. En Debian, cuando se llama ahotplugeste ejecuta los scripts contenidos en
/etc/hotplug/y/etc/hotplug.d/.
El hardware de red recien conectado es congurado por el/etc/hotplug/net.agent. Supongamos que
la tarjeta de red PCMCIA ha sido conectada lo que implica que la interfaz eth0 esta lista para usar.
/etc/hotplug/net.agenthace lo siguiente:#ifup eth0=hotplug
Para que una interfaz pueda ser congurada porhotplugdebemos a~nadir la referencia ahotplugen en
/etc/network/interfaces. Para que este comando congure eth0, a~nadimos las siguientes lneas:
mapping hotplug
script echo
Si solo deseamos que eth0 se active en caliente y no otras interfaces, utilizamosgrepen vez de echo
como se muestra a continuacion:
mapping hotplug
script grep
map eth0
8.7.3. Ifplugd
Ifplugdactiva o desactiva una interfaz dependiendo si el hardware subyacente esta o no conectado a la
red. El programa puede detectar un cable conectado a una interfaz ethernet o un punto de acceso asociado
a una interfaz wi. Cuandoifplugdve que el estado del enlace ha cambiado ejecuta un script que por
defecto ejecutaifupoifdownpara la interfaz.
ifplugdfunciona correctamente en combinacion conhotplug. Al insertar una tarjeta, lo que signica que
la interfaz est lista para usar,/etc/hotplug.d/net/ifplugd.hotpluginicia una instancia deifplugdpara dicha
interfaz. Cuandoifplugddetecta que la tarjeta es conectada a una red, ejecutaifuppara esta interfaz.
8.8. Resolvconf: Resolucion de nombres
El paqueteresolvconfproporciona un marco para la administracion dinamica de la informacion relativa
a los servidores de nombres disponibles. Soluciona el antiguo problema de mantener las listas dinamicas
de los nombres de los servidores para ser usadas por el sistema de resolucion y los caches DNS.Resolvconf
es el intermediario entre los programas que controlan las interfaces de red y suministran informacion de
los servidores de nombres, y las aplicaciones que necesitan dicha informacion. Este comando esta dise~nado
para funcionar sin que sea necesaria ninguna conguracion manual.
Para la resolucion de nombres se utiliza el archivo de conguracion:
/etc/resolv.conf
Si no hemos instalado el paqueteresolvconf, podemos editar a mano el chero/etc/resolv.conf. En el
podemos especicar hasta tres servidores de nombres, siendo los dos ultimos utilizados en caso de que no
se encuentre disponible el primero.
La lneadomainse emplea para denir el nombre de dominio por defecto que se a~nadira a los
nombres de host que no contengan dominio.
La lneasearchse emplea para especicar que busque un dominio.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 8. Conguracion de dispositivos de red 89
Esto podra ser un contenido tpico:
#cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
domain example.com
nameserver 192.168.0.1
nameserver 194.224.52.4
nameserver 194.224.52.6
8.9. Archivos de conguracion de Hosts
Existen varios archivos que tienen que ver con los hosts de nuestro sistema:
Un sistema Debian a veces necesita identicarse por su nombre. Para este proposito/etc/hostname
contiene el nombre de la maquina. Este archivo unicamente debera contener el nombre de la maquina
y no el nombre de dominio completo.
El archivo/etc/hostscontiene un conjunto de nombres de hosts con sus correspondientes direcciones
IP.
En redes peque~nas y sin conexion a Internet este archivo puede utilizarse en lugar de un servidor
DNS. En el especicaremos los nombre de todos los equipos conectados a la red y su correspondientes
direcciones IP. De esta forma podremos hacer referencia a los mismos sin especicar su direccion.
Linux se encargara de buscar esta direccion dentro del archivo/etc/hosts
Puede emplearse para proporcionar un conjunto mnimo de nombres de hosts en caso de que el
servidor de DNS se encuentre desactivado o durante el proceso de arranque de Linux.
El archivo/etc/host.confdice al sistema como resolver los nombres de los hosts. Contiene el orden
en el que seran ejecutadas las resoluciones que requiera el host, este archivo normalmente contiene
la siguiente lnea:
order hosts,bind,nis
El signicado de estos parametros es que cualquier tipo de resolucion de nombres primeramente debe
ser ejecutada en el archivo /etc/hosts, posteriormente se debe consultar a Bind y si aun no se ha
logrado la resolucion, intentar con NIS (Network Information Server), si despues de consultar este
servicio no es posible la resolucion, el Resolver respondera que no fue posible localizar el host.
/etc/hosts.allow, . . . donde se especican los hosts que tienen acceso al sistema.
/etc/hosts.deny, . . . donde se especican los hosts a los que se prohbe el acceso al sistema
8.10. Iwcong: Conguracion wireless
Para poder congura la red inalambrica necesitamos instalar los siguientes paquetes:
#apt-get install wireless-tools wavemon
El comandoiwcongtiene las mismas funciones queifcong, es decir congurar la red, pero en este
caso la red wireless.
Ejecutando el comando:#iwconfig, sin parametros observaremos cuales son las interfaces wireless de
nuestro sistema.
Jose Antonio Escartn Vigo, Junio 2005.

90 Servidor Linux para conexiones seguras de una LAN a Internet
Por ejemplo la salida del servidor es la siguiente:
# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 unassociated ESSID:off/any
Mode:Managed Channel=0 Access Point: 00:00:00:00:00:00
Bit Rate=0 kb/s Tx-Power=off
RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Las opciones basicas deiwcongsirven para determinar el nombre del ESSID, y establecer la clave
WEP del sistema, tanto en hexadecimal como en ASCII. Veamoslo con unos ejemplos:
Asignar el nombre de \NodoEjemplo" a nuestra red:
#iwconfig eth1 essid NodoEjemplo
Asignar una clave WEP hexadecimal
#iwconfig eth1 key 1234123412341234abcd
Asignar una clave WEP ASCII, a~nadiendo al principio \s:":
#iwconfig eth1 key s:clave-secreta
Este comando tiene multitud de opciones que pueden ser consultadas en el manual del sistema:
$man 8 iwconfig.
Para conguraciones mas complejas es mejor que editemos el archivo/etc/network/interfacescomo se
describe en la seccion 8.6.3. Si utilizamos claves WPA, sera necesario instalar un cliente WPA (para esta
conguracion dirjase a la seccion 14.5.5).
Podemos tener un monitor de la conexion wireless con:
$wavemon, . . . monitor del estilo detoppara conexiones wireless.
Para mas informacion dirjase al captuloRedes inalambricas(cap. 14).
8.11. Resolucion de problemas
Si encontramos problemas en la instalacion de red podemos ejecutar los siguientes comandos y consultar
las salidas:
#ifconfig
#cat /proc/pci
#cat /proc/interrupts
#dmesg | more
Jose Antonio Escartn Vigo, Junio 2005.

Parte III
Instalacion de Servicios

Captulo 9
Servicios de red
9.1. Servidor DHCP
El Protocolo de conguracion dinamica de servidores (DHCP, Dynamic Host Conguration Protocol),
es un protocolo de red en el que un servidor provee los parametros de conguracion a las computadoras
que lo requieran, conectadas a la red (mascara, puerta de enlace y otros) y tambien incluye un mecanismo
de asignacion de direcciones de IP.
Este protocolo aparecio como protocolo estandar en octubre de 1993 y existe un proyecto abierto para
desarrollar DHCPv6, en redes IPv6.
La informacion de esta seccion a sido obtenida de la enciclopedia libre: http://es.wikipedia.org
9.1.1. Asignacion de direcciones IP
Sin DHCP, cada direccion IP debe congurarse manualmente en cada ordenador y, si el ordenador se
mueve a otro lugar en otra parte de la red, se debe de congurar otra direccion IP diferente. El DHCP
le permite al administrador supervisar y distribuir de forma centralizada las direcciones IP necesarias y,
automaticamente, asignar y enviar una nueva IP si el ordenador es conectado en un lugar diferente de la red.
El protocolo DHCP incluye tres metodos de asignacion de direcciones IP:
Asignacion manual: Donde la asignacion se basa en una tabla con direcciones MAC (pares de
direcciones IP introducidas manualmente por el administrador). Solo las computadoras con una
direccion MAC que gure en dicha tabla recibiran la IP asignada en dicha tabla.
Asignacion automatica: Donde una direccion de IP libre obtenida de un rango determinado por el
administrador se le asigna permanentemente a la computadora que la requiere.
Asignacion dinamica: El unico metodo que permite la reutilizacion dinamica de las direcciones IP.
El administrador de la red determina un rango de direcciones IP y cada computadora conectada a
la red esta congurada para solicitar su direccion IP al servidor cuando la tarjeta de interfaz de red
se inicializa. El procedimiento usa un concepto muy simple en un intervalo de tiempo controlable.
Esto facilita la instalacion de nuevas maquinas clientes, en la red.
El DHCP es una alternativa a otros protocolos de gestion de direcciones IP de red como el BOOTP
(Bootstrap Protocol), respento a este, DHCP es un protocolo mas avanzado.

94 Servidor Linux para conexiones seguras de una LAN a Internet
9.1.2. Parametros congurables
Un servidor DHCP puede proveer de una conguracion opcional a la computadora cliente.
La lista de opciones siguientes son congurables mediante DHCP:
Direccion del servidor DNS.
Nombre DNS.
Puerta de enlace de la direccion IP.
Direccion de difusion de red (Broadcast Address).
Mascara de subred.
Tiempo maximo de espera del ARP (Protocolo de Resolucion de Direcciones).
MTU (Unidad de Transferencia Maxima) para la interfaz.
Servidores NIS (Servicio de Informacion de Red).
Dominios NIS.
Servidores NTP (Protocolo de Tiempo de Red).
Servidor SMTP.
Servidor TFTP.
Nombre del servidor WINS.
9.1.3. Implementaciones
Microsoft introdujo DHCP en sus Servidores NT con la version 3.5 de Windows NT a nales de 1994,
a pesar de que la llamaron una nueva funcion no fue inventada por ellos.
El Consejo de Software de Internet (ISC: Internet Software Consortium) publico distribuciones de
DHCP para Unix con la version 1.0 delISC DHCP Serverel 6 de diciembre de 1997 y una version (2.0) que
se adaptaba mejor el 22 de junio de 1999. Se puede encontrar el software en:http://www.isc.org/sw/dhcp/.
Otras implementaciones importantes incluyen:
Cisco: a~nadio un servidor DHCP habilitado enCisco IOS 12.0en febrero de 1999.
Sun: a~nadio el soporte para DHCP, a su sistema operativo Solaris, en julio de 2001.
Actualmente, la mayora de los routers incluyen soporte DHCP.
9.1.4. Anatoma del protocolo
DHCP usa los mismos puertos asignados por el IANA (Autoridad de Numeros Asignados en Internet
segun siglas en ingles) en BOOTP:
67/udp: Para las computadoras servidor.
68/udp: Para las computadoras cliente.
A continuacion muestro las actuaciones que puede tener el protocolo:
DHCP Discover: La computadora cliente emite peticiones masivamente en la subred local para
encontrar un servidor disponible. El router puede ser congurado para redireccionar los paquetes
DHCP a un servidor DHCP en una subred diferente. La implementacion cliente crea un paquete UDP
(Protocolo de Datagramas de Usuario) con destino 255.255.255.255 y requiere tambien su ultima
direccion IP conocida, aunque esto no es necesario y puede llegar a ser ignorado por el servidor.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 95
DHCP Oer: El servidor determina la conguracion basandose en la direccion del soporte fsico de
la computadora cliente especicada en el registroCHADDR. El servidor especica la direccion IP
en el registroYIADDR.
DHCP Request: El cliente selecciona la conguracion de los paquetes recibidos de DHCP Oer. Una
vez mas, el cliente solicita una direccion IP especca que indico el servidor.
DHCP Acknowledge: El servidor conrma el pedido y lo publica masivamente en la subred. Se espera
que el cliente congure su interface de red con las opciones que se le asignaron.
9.1.5. Conguracion de un servidor DHCP
El chero de conguracion de un servidor DHCP es/etc/dhcpd.conf.
El primer paso es comprobar que nuestro kernel esta congurado para que el sistema se pueda utilizar
como servidor DHCP. Para ello ejecutaremos:#ifconfig -a
#ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:C0:9F:6E:1D:E0
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1792 errors:0 dropped:0 overruns:0 frame:0
TX packets:3719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1272847 (1.2 MiB) TX bytes:381723 (372.7 KiB)
Interrupt:6
Si no encontramos la opcion MULTICAST deberemos recongurar el kernel para agregarlo. En la
mayora de sistemas no sera necesario, funcionara por defecto.
Para instalar el servicio DHCP realizamos un apt:
#apt-get install dhcp
El primer paso al congurar un servidor DHCP es crear el chero de conguracion que almacena la
informacion de red de los clientes. Se pueden declarar opciones globales para todos los clientes, o bien
opciones para cada sistema cliente. El chero de conguracion posee dos tipos de informacion:
Parametros: Establece como se realiza una tarea, si debe llevarse a cabo una tarea o las opciones de
conguracion de red que se enviaran al cliente.
Declaraciones: Describen el tipo de red y los clientes, proporcionan direcciones para los clientes o
aplican un grupo de parametros a un grupo de declaraciones.
Algunos parametros deben empezar con la palabra claveoption. Los parametros denen valores no
opcionales o que controlan el comportamiento del servidor DHCP.
Si cambiamos el chero de conguracion, para aplicar los cambios, reiniciaremos el demonio DHCP:
# /etc/init.d/dhcp restart
Subredes
Debemos incluir una declaracionsubnetpara cada subred de la red. Si no lo hacemos, el servidor
DHCP no podra arrancarse. En el ejemplo siguiente, hay opciones globales para cada cliente DHCP de la
subred y un rango de IPs declarado, a los clientes se les asigna una direccion IP dentro de ese rango.
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 192.168.1.1;
option time-offset -5; # Eastern Standard Time
range 192.168.1.10 192.168.1.100;
}
Jose Antonio Escartn Vigo, Junio 2005.

96 Servidor Linux para conexiones seguras de una LAN a Internet
Redes compartidas
Todas las subredes que comparten la misma red fsica deben declararse dentro de una declaracion
shared-network. Los parametros dentro deshared-network, pero fuera de las declaraciones subnet se consi-
deran parametros globales. El nombre que le asignemos debe ser el ttulo descriptivo de la red, como, por
ejemplo,test-labpara describir todas las subredes en un entorno de laboratorio de tests.
shared-network name {
option domain-name "test.redhat.com";
option domain-name-servers ns1.redhat.com, ns2.redhat.com;
option routers 192.168.1.254;
more parameters for EXAMPLE shared-network
subnet 192.168.1.0 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.1 192.168.1.31;
}
subnet 192.168.1.32 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.33 192.168.1.63;
}
}
Grupos
La declaraciongrouppuede utilizarse para aplicar parametros globales a un grupo de declaraciones.
Podemos agrupar redes compartidas, subredes, hosts u otros grupos.
group {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 192.168.1.1;
option time-offset -5; # Eastern Standard Time
host apex {
option host-name "apex.example.com";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.4;
}
host raleigh {
option host-name "raleigh.example.com";
hardware ethernet 00:A1:DD:74:C3:F2;
fixed-address 192.168.1.6;
}
}
Tiempo delease(asignacion de IP)
Para congurar un servidor DHCP que realiza unleasede la direccion IP dinamica dentro de una
subred, declararemos un tiempo deleasepor defecto, un tiempo deleasemaximo y los valores de con-
guracion de red para los clientes. Esto se puede ver en el ejemplo siguiente que asigna direcciones a los
clientes dentro de un rango:
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
}
Asignaciones IP por MAC
Para asignar una direccion IP a un cliente segun la direccion MAC de la tarjeta de interfaz de red,
usamos el parametro hardware ethernet de una declaracion host. En el ejemplo siguiente, la declaracion
host apexespecica que la tarjeta de interfaz de red con la direccion MAC 00:A0:78:8E:9E:AA siempre
debe ejecutarse enleasecon la direccion IP 192.168.1.4. Tambien hay que tener en cuenta, que podemos
usar el parametro opcionalhost-namepara asignar un nombre host al cliente.
host apex {
option host-name "apex.example.com";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.4;
}
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 97
Mas opciones
Para obtener una lista completa de sentencias de opciones e informacion relacionada, podemos consultar
la pagina del manual dedhcp-options:$man dhcp-options
Base de datos lease
En el servidor DHCP, el chero/var/lib/dhcp/dhcpd.leasesalmacena la base de datosleasedel cliente
DHCP. Este chero no debe modicarse manualmente. La informacion sobreleasede DHCP de cada
direccion IP asignada recientemente se almacena de modo automatico en la base de datoslease. La infor-
macion incluye la longitud dellease, al que se ha asignado la direccion IP, las fechas iniciales y nales del
lease, y la direccion MAC de la tarjeta de interfaz de red utilizada para recuperar ellease. Todas las horas
de la base de datosleasese expresan segun GMT, no con la hora local.
En el cliente DHCP, el chero/var/lib/dhcp/dhclient.leasesalmacena la base de datos lease del servidor
DHCP, como en el caso anterior. El contenido de este archivo se puede ver en el ejemplo siguiente:
lease {
interface "eth0";
fixed-address 192.168.0.11;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option dhcp-lease-time 604800;
option dhcp-message-type 5;
option domain-name-servers 192.168.0.1;
option dhcp-server-identifier 192.168.0.1;
option domain-name "proyecto";
renew 4 2005/5/26 09:33:21;
rebind 0 2005/5/29 13:16:07;
expire 1 2005/5/30 10:16:07;
}
Arranque y parada del servidor
Antes de arrancar por primera vez el servidor DHCP, nos aseguraremos de que existe un chero
/var/lib/dhcp/dhcpd.leasespara que no falle el arranque.
Para interactuar con el servicio DHCP, utilizaremos:
#/usr/sbin/dhcpd start,. . . arrancar el servidor.
#/usr/sbin/dhcpd stop,. . . parar el servidor.
Si tenemos mas de una interfaz de red conectada al sistema, pero solo deseamos que el servidor DHCP
arranque en una de las interfaces, podemos modicar el script init para arrancar desde ese dispositivo.
Para ello, a~nadimos el nombre de la interfaz o interfaces en el archivo/etc/default/dhcpd:
INTERFACES="eth0"oINTERFACES="eth0 wlan0"
Esto es util si disponemos de una maquina rewall con dos tarjetas de red. Se puede congurar una tar-
jeta de red como cliente DHCP para recuperar una direccion IP en Internet y la otra puede utilizarse como
servidor DHCP para la red interna, detras del rewall. Nuestro sistema sera mas seguro si especicamos la
tarjeta de red conectada a la red interna, ya que los usuarios no pueden conectarse al demonio por Internet.
Otras opciones que pueden ser especicadas incluyen:
-p <portnum>: Especica el numero de puerto UDP en el que DHCPD debera escuchar, por defecto
es el 67 y el servidor DHCP transmite las respuestas al cliente por el puerto 68. Si especicamos
un puerto en este momento y usamos elAgente de Transmision DHCP, este debe escuchar por el
mismo puerto.
-f: Ejecuta el demonio como un proceso de en primer plano.
-d: Registra el demonio del servidor DCHP en el descriptor de errores estandar. Se suele usar para
depurar errores, los mensajes son guardados en el archivo/var/log/messages.
Jose Antonio Escartn Vigo, Junio 2005.

98 Servidor Linux para conexiones seguras de una LAN a Internet
-cf archivo: Especica la localizacion del archivo de conguracion, por defecto se encuentra en
/etc/dhcpd.conf.
-lf archivo: Especica la localizacion del archivo de base de datoslease. Si ya existe , es muy
importante que el mismo chero sea usado cada vez que el servidor DHCP se inicia. Por defecto se
encuentra en/var/lib/dhcp/dhcpd.leases.
-q: No imprime la version del servidor DHCP cuando se inicia el demonio.
Agente de transmision DHCP
Si lo vamos a utilizar, para instalarlo realizaremos el correspondiente apt:
#apt-get install dhcp3-relay
Nos creara un nuevo archivo de opciones:/etc/default/dhcp3-relay.
El agente de transmision DHCP (dhcp-relay) permite transmitir las peticiones DHCP y BOOTP desde
una subred sin un servidor DHCP, dirigidos a uno o mas servidores en otras subredes.
Cuando un cliente DHCP pide informacion, el agente de transmision DHCP reenva la peticion a la
lista de servidores DHCP especicada al iniciarlo. Cuando el servidor DHCP devuelve una respuesta, la
respuesta puede serbroadcastounicast, en la red que ha enviado la peticion originaria.
El agente de transmision escuchara las peticiones de todas las interfaces a menos que el argumento-i
se use para especicar solo una o varias interfaces donde escuchar. Para iniciar el agente de transmision
DHCP, usamos el comando:
#dhcrelay <servidor>
Dondeservidores el nombre de al menos un servidor DHCP al que se le deben transmitir las peticiones.
Dhcp-relayse puede iniciar con las siguientes opciones:
Opcion Descripcion
-i Nombres de interfaces de red que deben congurarse. Si no se especica ninguna interfaz,
se conguraran todas y se eliminaran las interfaces sin multidifusion, si se puede.
-p Puerto en el que debera escuchardhcp-crelay. Transmite peticiones a los servidores en este
puerto y respuestas a los clientes en el puerto inmediatamente superior.
-d Obliga adhcp-relaya ejecutarse en primer plano.
-q Desactiva la impresion de conguracion de red, cuando arrancadhcp-relay.
9.1.6. Conguracion de un cliente DHCP
El primer paso al congurar un cliente DHCP es asegurarse de que el kernel reconoce la tarjeta de la
interfaz de red. La mayora de las tarjetas se reconocen durante el proceso de instalacion y el sistema es
congurado para utilizar el modulo correcto en el kernel. Si instalamos una tarjeta despues de la instala-
cion, probablemente tendremos que recompilar el kernel.
Para congurar manualmente un cliente DHCP, debemos modicar el archivo/etc/network/interfaces
habilitando el uso de la red con los dispositivos adecuados.
Para congurar las opciones de red debemos modicar el archivo/etc/network/options.
Podemos instalar uno de los siguientes clientes dhcp:
#apt-get install pump, . . . para ejecutar:#pump <dispositivo_red>
#apt-get install dhcp-client-udeb, . . . para ejecutar:#dhclient <dispositivo_red>
#apt-get install dhcp3-client, . . . para ejecutar:#dhclient3 <dispositivo_red>
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 99
9.1.7. Conguracion graca de DHCP, interfaz Webmin
El modulo DHCP para nuestra interfaz web: Webmin, nos facilitara mucho la tarea de administracion
del servidor. Para ello realizaremos un apt:
#apt-get install webmin-dhcpd
En las siguientes pantallas podemos observar como realizar todos los pasos detallados en las secciones
anteriores, pero esta vez de forma graca.
Figura 9.1: Modulo Webmin para DHCPD
Jose Antonio Escartn Vigo, Junio 2005.

100 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 9.2: Modulo DHCPD WEBMIN: Subredes y redes compartidas
Figura 9.3: Modulo DHCPD WEBMIN: maquinas y grupos de maquinas
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 101
9.2. BIND: Servidor de nombres DNS
Los objetivos de un servidor de nombres de dominio son dos:
1. Por una parte, traducir una direccion canonica en una direccion IP.
2. Por otra parte, traducir una direccion IP en una o varias direcciones canonicas, es lo que se conoce
como traduccion inversa.
DNS (Domain Name Service) es un sistema jerarquico con estructura de arbol. El inicio se escribe \."
y se denomina raz, al igual que en las estructuras de datos en arbol. Bajo la raz se hallan los dominios de
mas alto nivel (TLD, del ingles, Top Level Domain), cuyos ejemplos mas representativos son ORG, COM,
EDU y NET, si bien hay muchos mas (como los dominios de paises, .es, .uk, . . . ). Del mismo modo que
un arbol, tiene una raz y ramas que de ella crecen.
Cuando se busca una maquina, la consulta se ejecuta recursivamente en la jerarqua, empezando por
la raz. As pues, empezando en \." encontramos los sucesivos servidores de nombres para cada nivel en el
nombre de dominio por referencia. Por supuesto, nuestro servidor de nombres guardara toda la informacion
obtenida a lo largo del proceso, a n de no tener que preguntar de nuevo durante un buen rato. En el
arbol analogo, cada \." en el nombre es un salto a otra rama. Y cada parte entre los \." son los nombres
de los nodos particulares en el arbol.
9.2.1. >Para que necesitamos un DNS?
El DNS dene:
Un espacio de nombres jerarquico para los hosts y las direcciones IP.
Una tabla de hosts implementada como una base de datos distribuida.
Un traductor (resolver) o librera de rutinas que permite realizar consultas a esa base de datos.
Enrutamiento mejorado para el correo electronico.
Un mecanismo para encontrar los servicios en una red.
Un protocolo para intercambiar informacion de nombres.
Para ser autenticos ciudadanos de Internet, los sitios necesitan el DNS. Mantener un chero local
/etc/hosts con un mapeado de todos los hosts que los usuarios puedan querer contactar no es factible.
Cada sitio mantiene una o varias piezas de la base de datos distribuida que posibilita el servicio global
del sistema DNS. Su pieza de la base de datos consiste en dos o mas cheros de texto que contienen registros
para cada uno de los hosts. Cada registro es una sencilla lnea consistente en un nombre (normalmente el
nombre de un host), un tipo de registro y diversos valores o datos.
Es un sistema cliente/servidor. Los servidores (de nombres) cargan los datos de sus cheros de DNS en
memoria y los usan para responder las consultas tanto de los clientes de la red interna como de los clientes
y otros servidores en Internet. Todos nuestros hosts deberan ser clientes del DNS, pero relativamente
pocos necesitan ser servidores de DNS.
Si nuestra organizacion es peque~na (unos pocos hosts en una unica red), podemos ejecutar un servidor
en uno de nuestros equipos o pedirle al ISP (Proveedor de servicios) que nos proporcione el servicio. Un
sitio de tama~no medio con diversas subredes debera tener multiples servidores de DNS para reducir la
latencia de las consultas y mejorar la productividad. Un sistema muy grande puede dividir los dominios
de DNS en subdominios y usar algunos servidores para cada subdominio.
Jose Antonio Escartn Vigo, Junio 2005.

102 Servidor Linux para conexiones seguras de una LAN a Internet
9.2.2. Servicios que activa un DNS
Servicios de los que se puede disponer con un servidor DNS, son los siguientes:
Resolucion de nombres a direcciones IP.
Resolucion inversa (de direcciones IP a nombres).
Listas de control de acceso.
Servidores secundarios.
Transferencia segura de zonas entre servidores primarios y secundarios (y puertos).
Localizacion de servicios.
Respuestas parametrizadas en funcion del origen de la peticion (vistas).
Uso de la herramientarndc.
Logs a medida.
9.2.3. Conguracion del servidor
Un FQDN (Nombre de Dominio Totalmente Cualicado) esta formado por un host y un nombre de
dominio, incluyendo el de mas alto nivel. Por ejemplo, www.upc.es es un FQDN.wwwes el host,upces
el dominio de segundo nivel y.eses el dominio de de mas alto nivel. Un FQDN siempre comienza con el
nombre del host y continua subiendo directo al dominio de mas alto nivel.
Si necesitamos proveer un servicio de nombres para un dominio, podemos utilizar un servidor de nom-
bres completo: comonamed, que viene con el paquetebindobind9. Para nuevas instalaciones se recomienda
bind9, ya que soluciona problemas de seguridad que tenan las versiones anteriores. DNS es uno de los
puntos mas fragiles y puede ser atacado en cualquier momento, borrando nuestras maquinas de la red.
Para instalarbind9, se necesitan los siguientes paquetes:
bind9
bind9-doc
dnsutils
Para instalarlos simplemente realizamos un apt:
#apt-get install bind9 bind9-doc dnsutils
Aunque puede que tambien queramos instalar estos paquetes de utilidades:
bind9-host
dns-browse
dnscvsutil
nslint
bind9-doc
libbind-dev
libnet-dns-perl
dhcp-dns
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 103
Los archivos de conguracion que intervendran seran los siguientes:
/etc/bind/named.conf: Para denir las zonas DNS basicas.
/etc/bind/named.conf.local: Para denir las zonas locales.
/etc/bind/named.conf.options: Para congurar opciones.
/etc/bind/db.lan: Para a~nadir los equipos de una LAN.
/etc/bind/db.192.168.0: Para a~nadir el DNS inverso de una LAN.
El archivo/etc/bind/named.conf.optionstambien es procesado porresolvconfpara producir:
/var/run/bind/named.options
Este archivo es el mismo que el original, excepto que la especicacionforwarderses una lista de los
servidores de nombres no locales, actualmente disponibles.
Para hacer uso de ello, cambiamos la lneaincludedel/etc/bind/named.confde modo que incluya:
/var/run/bind/named.options
Los archivos de base de datos sin una ruta explicita, y que se han denido en cualquiera de los archivos
de conguracion denamedse almacenaran en/var/cache/bind/.
9.2.4. Traduccion de nombres a direcciones IP
El primer paso es editar el chero/etc/bind/named.conf.options, donde cambiaremos algunos de los
valores por defecto y a~nadiremos todo lo necesario para que nuestro dominio sea accesible desde el exterior.
A menos que seamos un proveedor de servicios de internet, se nos habran proporcionado una o mas
direcciones IP de servidores de nombres estables, que seguramente querremos usar como redireccionadores
(forwarders). Para ello deberemos descomentar el bloque al principio del chero:
// forwarders {
// 0.0.0.0;
// };
Y dejarlo en algo como esto:
forwarders {
194.224.52.4;
194.224.52.6; };
Entre las opciones tambien se encuentra ocultar la version de Bind, para una mayor seguridad del
sistema:"DNS server";
9.2.5. Conguracion graca de DNS BIND, interfaz Webmin
Para facilitarnos la compleja tarea de conguracion deDNS BINDes posible utilizar la herramienta
de administracion web: Webmin.
Para la instalacion del modulo correspondiente, utilizamos el siguiente apt:
#apt-get install webmin-bind
En los apartados siguientes ire comentando las opciones a las que se puede acceder desde el modulo
web.
Jose Antonio Escartn Vigo, Junio 2005.

104 Servidor Linux para conexiones seguras de una LAN a Internet
Pantalla principal
Para acceder al servidor BIND, pulsamos sobre la pesta~na \Servidores" y despues sobre el icono \Ser-
vidor de DNS BIND", aparecera el menu de conguracion, como se observa en la gura 9.4.
En este menu podemos realizar las siguientes opciones:
Congurar el resto de opciones globales del servidor.
Crear un servidor DNS primario.
Crear un servidor DNS secundario.
Crear un servidor DNS de cache.
Crear un servidor DNS de reenvo.
Figura 9.4: Interfaz graca Webmin para el servidor DNS BIND
Para que todos los cambios sean tenidos en cuenta, es necesario reiniciar el servidor DNS BIND, se
realiza pulsando el boton \Aplicar Cambios" en la pagina de conguracion principal del servidor DNS.
Pasemos a ver cada una de las secciones a las que podemos acceder.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 105
Opciones generales
Como se puede observar en la gura 9.5, desde estas secciones podemos modicar los valores contenidos
en el archivo/etc/bind/named.conf.
Figura 9.5: Webmin BIND: Opciones generales
Jose Antonio Escartn Vigo, Junio 2005.

106 Servidor Linux para conexiones seguras de una LAN a Internet
Crear zona maestra
En esta seccion podemos crear un servidor DNS primario o editar sus parametros una vez congurado.
Figura 9.6: Webmin BIND: Servidor primario
Crear zona subordinada
En esta seccion podemos crear y modicar todos los parametros de un servidor DNS secundario.
Figura 9.7: Webmin BIND: Servidor secundario
Los servidores DNS son dos (o mas) para evitar que el fallo de uno impida el acceso a los servicios
asociados al dominio, esto es, por motivos de redundancia. Si bien es posible utilizar un unico servidor
DNS no es una practica recomendable.
A pesar del nombre servidor \secundario", la informacion que contienen estos servidores DNS, es el
mismo valor que cualquier otro servidor DNS primario, la razon principal por la que se congura un servidor
secundario es para ofrecer un nivel de respaldo y reducir la carga de los servidores DNS principales, pero
sobre todo para reducir la carga administrativa en el caso de necesitar varios servidores.
La unica diferencia que existe entre un primario y un secundario en DNS, es que el secundario obtiene su
informacion copiando elArchivo de Zonadel primario que se le ha indicado en el archivo de conguracion.
La actualizacion de esta copia deArchivo de Zonaes conocida como \Zone Transfer" y ocurre depen-
diendo de los parametros que hayan sido denidos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 107
Crear zona de solo cache
En esta seccion podemos crear y modicar todos los parametros de un servidor DNS de cache.
Figura 9.8: Webmin BIND: Crear zona de solo cache
Este tipo de servidor DNS mantiene copias de las resoluciones (\cache") que ya han sido buscadas
en otros servidores DNS primarios o secundarios, esto no implica que los servidores DNS primarios y
secundarios no mantengan copias de sus resoluciones \caches", lo unico que se evita en este tipo de
servidores DNS es mantenerArchivos de Zona, toda resolucion que realice un servidor \cache" debe ser
consultada con un servidor que primario o secundario.
Una de las principales razones por las cuales se congura un servidor \cache" , es cuando se utiliza una
conexion lenta, esto evita la necesidad de requerir resoluciones que ya fueron resueltas en una ocasion, y
por lo tanto evitan un cierto nivel de traco, aprovechando la informacion local para buscar resoluciones
de nombres.
Crear zona de reenvo
En esta seccion podemos crear y modicar todos los parametros de un servidor DNS que reenvie las
peticiones a otro servidor.
Figura 9.9: Webmin BIND: Crear zona de reenvo
Si los clientes de la red tienen que poder resolver nombres DNS externos, puede que necesitemos
congurar y utilizar servidores de reenvo en los servidores DNS de nuestra red.
Jose Antonio Escartn Vigo, Junio 2005.

108 Servidor Linux para conexiones seguras de una LAN a Internet
Para utilizar reenviadores que administren el traco DNS entre nuestra red e Internet, conguramos el
rewall para permitir que solo un servidor DNS se comunique con Internet. Cuando hayamos congurado
los demas servidores DNS de nuestra red para reenviar a ese servidor DNS consultas que no puedan
resolver localmente, ese servidor funcionara como nuestro unico reenviador.
9.2.6. Seguridad en DNS
Los servidores que controlan y mantienen los nombres de dominio de nuestra red, ofrecen a los atacantes
un objetivo tentador. El servicio de denominacion de nombres de Internet de Berkley (BIND, Berkley
Internet Naming domain), es decir, el servidor DNS primario, ha estado constantemente en la lista de los
diez servicios mas atacados. DNS es un programa antiguo y su estructura deja brechas potenciales (un
binario monoltico en lugar de una arquitectura mas modular). Ademas DNS, frecuentemente se ejecuta
como raz, lo que hace que sea mas peligroso.
As mismo, como DNS es difcil de congurar y se conoce poco, se suele congurar y asegurar mal. Las
conguraciones de cortafuegos para DNS no se implementan correctamente, permitiendo a casi todos los
administradores acceder de dentro a fuera sin ltros.
Aunque el web, el correo electronico y otros servicios tienen mas visibilidad y captan mas la atencion
del administrador, las brechas DNS ofrecen la forma mas rapida y facil de dejar a nuestra empresa fuera
del mapa de Internet. Incluso aunque tengamos conectividad IP con el mundo, sin un servicio DNS valido
para nuestros dominios, nadie podra llegar a nuestro servidor web y no se producira ningun ujo de
correo. De hecho, se ha citado DNS como el punto mas debil en toda la infraestructura de Internet y
un objetivo potencial para los ataques del terrorismo cibernetico. En lugar de introducirse en nuestros
servidores o atravesar nuestro cortafuegos, un atacante puede simplemente enviar un DoS (denegacion de
servicio) contra nuestro servicio DNS, quitando del aire a nuestra empresa de una forma efectiva, o peor
aun, utilizando un tipo de ataque denominado veneno de cache DNS, los exploradores web enlazados a
nuestro sitio seran redireccionados al sitio que le apetezca al atacante.
Se conocen al menos cuatro vulnerabilidades BIND. Todas permiten a un atacante ejecutar cualquier
codigo con los mismos privilegios que el servidor DNS. Como usualmente BIND se ejecuta en una cuen-
ta de root, la este codigo puede lanzarse con los mismos privilegios. Ademas, se puede interrumpir la
propia operacion del servidor BIND, y obtener otro tipo de informacion, que llevara a explotar otras
vulnerabilidades diferentes en el sistema.
>Cuales son los sistemas son afectados?
Estan afectados todos los servidores de nombres de dominio (DNS), que ejecutan las versiones de
BIND 4.9.8 y 8.2.3 (y todas las anteriores). Las versiones 9.x, ya se encuentran corregidas. Como el
funcionamiento normal de la mayora de los servicios de Internet depende del funcionamiento apropiado
de los servidores de DNS, podran afectar otros servicios si estas vulnerabilidades son explotadas.
>Como usuario domestico, nos debemos preocupar por este problema?
Los usuarios comunes, tambien estamos afectados por este problema, aunque en forma indirecta. Ge-
neralmente contamos con un proveedor de servicios de Internet (ISP), que es el que nos proporciona el
servicio DNS. Es el ISP, quien debe proteger sus sistemas.
Sin embargo, los usuarios de Linux o con otras variantes de Unix instaladas en sus maquinas, deberan
vericar si poseen una version vulnerable de BIND instalada, ya que en ese caso, ellos necesitan desac-
tivar o actualizar este software. Son varios los sistemas operativos Unix/Linux que instalan un servidor
DNS por defecto. As, algunos usuarios podran estar ejecutando este servicio, sin haberlo congurado
explcitamente.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 109
9.3. NIS: Servicio de informacion de red
El servicio de informacion de red (NIS, Network Information Service) hace posible la comparticion
de archivos crticos a traves de una red de area local. Normalmente, archivos tales como/etc/passwd
y/etc/group, que idealmente deberan permanecer sin cambios entre todas las maquinas, se comparten
mediante NIS. De esta forma, cada maquina de red que tiene su cliente NIS correspondiente puede leer los
datos contenidos en esos archivos compartidos y usar las versiones de red de los archivos como extensiones
de sus versiones locales.
El benecio principal que se alcanza mediante el uso de NIS es que puede mantener una copia central
de los datos, y aunque los datos se actualicen, automaticamente se propagan a todos los usuarios de la red.
A los usuarios, NIS da la apariencia de un sistema mas uniforme (no importa con que maquina trabaje,
que todas sus herramientas y archivos estaran all).
9.3.1. Funcionamiento basico
Es, simplemente, una base de datos que los clientes pueden consultar. Consta de una serie de tablas
independientes. Cada tabla se origina como un archivo de texto, como el/etc/passwd, el cual tiene una
naturaleza tabular y tiene al menos una columna que es unica por cada archivo. NIS accede a esas tabla
por nombre y permite busquedas de dos formas:
Listado de la tabla entera
Presentacion de una entrada especca basada en una busqueda por una clave dada
Una vez establecidas las bases de datos en el servidor, los clientes pueden buscar en el servidor las
entradas de la base de datos. Normalmente esto ocurre cuando un cliente se congura para que busque en
un mapa NIS cuando no encuentra una entrada en su base de datos local. Una maquina puede tener solo
las entradas que necesite para que el sistema trabaje en modo usuario unico (cuando no hay conectividad
por red), por ejemplo, el archivo/etc/passwd. Cuando un programa hace una peticion de busqueda de la
informacion de contrase~na de un usuario, el cliente comprueba su archivopasswdlocal y si el usuario no
existe all, entonces el cliente hace la peticion a su servidor NIS para buscar la entrada correspondiente en
la tabla de contrase~nas. Si NIS tiene entrada, la devolvera cliente y al programa que pidio la informacion.
El propio programa no se da cuenta de que se ha usado NIS. Lo mismo es cierto si el mapa NIS devuelve la
respuesta de que la entrada de contrase~na del usuario no existe. El programa debera recibir la informacion
sin que sepa que ha ocurrido entre medias.
Esto se aplica a todos los archivos que se comparten por NIS.
Otros archivos comunes compartidos incluyen a/etc/groupy/etc/hosts.
9.3.2. Servidores NIS
NIS puede tener un unico servidor autorizado donde permanecen los archivos de datos originales (en
esto es similar a DNS). Este servidor autorizado se llama servidor NIS maestro. Si nuestra organizacion
es grande, podemos necesitar distribuir la carga entre mas de una maquina. Esto lo podemos hacer
congurando uno o mas servidores NIS secundarios. Ademas de ayudar a distribuir la carga, los servidores
secundarios tambien proporcionan un mecanismo de manejo de fallos de servidores, ya que puede continuar
contestando peticiones incluso mientras el maestro u otros secundarios estan cados.
Los servidores NIS secundarios reciben actualizaciones si el servidor NIS primario se actualiza, as que
los maestros y esclavos permanecen sincronizados. El proceso de mantener la sincronizacion del los secun-
darios con el primario se llamaserver push.
El NIS maestro, como parte de sus scripts de actualizacion, tambien pone una copia de sus archivos
de mapas en los secundarios. Una vez recibidos los archivos, los servidores secundarios actualizan tambien
sus bases de datos. El NIS maestro no se considera completamente actualizado hasta que se actualizan
todos sus secundarios.
Hay que se~nalar que un servidor puede ser a la misma vez servidor y cliente.
Jose Antonio Escartn Vigo, Junio 2005.

110 Servidor Linux para conexiones seguras de una LAN a Internet
Los servidores NIS primarios establecen dominios que son similares a los dominios de un PDC (Con-
trolador Primario de Dominio). Una diferencia signicativa es que el dominio NIS no requiere que el
administrador del servidores NIS permita explcitamente unirse a un cliente. Ademas, el servidor NIS solo
enva datos, no realiza autenticacion. El proceso de autenticacion de usuarios se deja a cada maquina indi-
vidual. Unicamente proporciona una lista de usuarios centralizada, ya que todos los clientes son miembros
del mismo dominio administrativo y estan gestionados por los mismos administradores de sistemas.
Deberemos dar nombre a los dominios NIS, y es una buena practica (aunque no obligatoria) usar
nombres distintos de nuestros nombres de dominios DNS. Nos sera mucho mas facil explicar los dominios
de nuestra red a otros administradores identicando el dominio NIS al que nos referimos.
Es posible facilitar la conguracion mediante un modulo para la herramienta de administracion web
Webmin.
Para la instalacion se utiliza el siguiente apt:
#apt-get install webmin-nis
Figura 9.10: Interfaz graca Webmin para el servidor NIS
9.3.3. Conguracion del servidor NIS maestro
La primera cosa que hemos de tener presente es que no podemos montar dos servidores NIS diferentes
para un mismo dominio de una red. Si ya existe un dominio en nuestra red deberemos congurar un
cliente.
Cuando NIS se desarrollo, en los a~nos ochenta, se le llamo \paginas amarillas" (Yelow Pages, YP
para abreviar). CuandoSun Microsystems, los desarrolladores del sistemas operativo SunOS (Solaris),
empezaron a vender sus sistemas en el Reino Unido, ocurrio un conicto: el termino \paginas amarillas"
era una marca registrada deBritish Telecomy para evitar un pleito, Sun renombro el paquete aServicio
de informacion de red, despues otros vendedores de Unix le siguieron.
Por eso hoy encontraremos que todas las herramientas NIS vienen con el prejoypen lugar denis.
Por alguna razon los nombres de archivo no se cambiaron con el nombre ocial de paquete.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 111
Para instalar el servidor NIS realizaremos un apt:
#apt-get install nis,. . . la instalacion nos pedira que especiquemos el nombre de dominio
Para obtener mas informacion se instala en el sistema el HowTo de NIS, documento muy claricador:
/usr/share/doc/nis/nis.debian.howto.gz
Disponemos de varios archivos de conguracion:
/etc/yp.conf
/etc/nsswitch.conf
/etc/ypserv.conf
/etc/ypserv.securenets
Una vez congurados el archivo:
#ypserv start, . . . arranca el servidor NIS
#ypserv stop, . . . para el servidor NIS
Despues de la instalacion podemos cambiar el nombre del dominio con el comando:
#domainname <dominio>, . . . como por ejemplo:#domainname proyecto.debian.com
Naturalmente, a n de que se establezca cada vez que volvamos a arrancar el sistema, es necesario
situar el comandodomainnameen uno de los archivos de iniciorc#.d(Vease apendice D). Para elegir
el runlevel del archivo donde realizar el cambio de nombre tenemos que tener en cuenta que hay que
cambiarlo antes de que se arranquen los servidores NIS.
Archivos compartidos en NIS
Para compartir los archivos en NIS, necesitamos situarnos en el directorio:/var/yp
All encontraremos unMakele. Este archivo lista los archivos que se compartiran mediante NIS,
as como algunos parametros adicionales sobre como compartirlos. Editamos el Makele y retocamos las
opciones como se detalla en esta y posteriores secciones. Sin embargo, que se listen aqu no signica que
se compartan automaticamente. Este listado simplemente establece los nombres de archivos que se com-
partiran una vez compilemos elMakele.
La mayora de las entradas comienzan con:$(YPWDIR)y$(YPSRCDIR), son variables que se conguran
al inicio delMakele, y se~nalan la ruta donde encontrar los archivos, el valor por defecto es/etc.
Una vez congurado elMakele, para actualizar los mapas de archivos y congurar el servidor NIS
como primario simplemente ejecutamos:
#ypinit -m, . . . la opcion-mle dice que un servidor primario
Ypinitejecutara elmake, para construir los mapas y ponerlos en los servidores secundarios que se le
indiquen en/var/yp/yp-servers.
Jose Antonio Escartn Vigo, Junio 2005.

112 Servidor Linux para conexiones seguras de una LAN a Internet
En el cuadro 9.1 puede observar un listado tpico del archivo/var/yp/Makele.
Cuadro 9.1: Listado del archivo NIS /var/yp/Makele
# Makefile for the NIS databases
#
# This Makefile should only be run on the NIS master server of a domain.
# All updated maps will be pushed to all NIS slave servers listed in the
# /var/yp/ypservers file. Please make sure that the hostnames of all
# NIS servers in your domain are listed in /var/yp/ypservers.
#
# This Makefile can be modified to support more NIS maps if desired.
...
# If we have only one server, we don't have to push the maps to the
# slave servers (NOPUSH=true). If you have slave servers, change this
# to "NOPUSH=false" and put all hostnames of your slave servers in the file
# /var/yp/ypservers.
NOPUSH=true
...
# We do not put password entries with lower UIDs (the root and system
# entries) in the NIS password database, for security. MINUID is the
# lowest uid that will be included in the password maps. If you
# create shadow maps, the UserID for a shadow entry is taken from
# the passwd file. If no entry is found, this shadow entry is
# ignored.
# MINGID is the lowest gid that will be included in the group maps.
MINUID=1000
MINGID=1000
...
# Should we merge the passwd file with the shadow file ?
# MERGE_PASSWD=true|false
MERGE_PASSWD=false
# Should we merge the group file with the gshadow file ?
# MERGE_GROUP=true|false
MERGE_GROUP=false
...
# These are the source directories for the NIS files; normally
# that is /etc but you may want to move the source for the password
# and group files to (for example) /var/yp/ypfiles. The directory
# for passwd, group and shadow is defined by YPPWDDIR, the rest is
# taken from YPSRCDIR.
#
YPSRCDIR = /etc
YPPWDDIR = /etc
YPBINDIR = /usr/lib/yp
YPSBINDIR = /usr/sbin
YPDIR = /var/yp
YPMAPDIR = $(YPDIR)/$(DOMAIN)
# These are the files from which the NIS databases are built. You may edit
# these to taste in the event that you wish to keep your NIS source files
# seperate from your NIS server's actual configurati\'on files.
#
GROUP = $(YPPWDDIR)/group
PASSWD = $(YPPWDDIR)/passwd
SHADOW = $(YPPWDDIR)/shadow
GSHADOW = $(YPPWDDIR)/gshadow
ADJUNCT = $(YPPWDDIR)/passwd.adjunct
ALIASES = $(YPSRCDIR)/aliases
ETHERS = $(YPSRCDIR)/ethers # ethernet addresses (for rarpd)
BOOTPARAMS = $(YPSRCDIR)/bootparams # for booting Sun boxes (bootparamd)
HOSTS = $(YPSRCDIR)/hosts
NETWORKS = $(YPSRCDIR)/networks
PRINTCAP = $(YPSRCDIR)/printcap
PROTOCOLS = $(YPSRCDIR)/protocols
PUBLICKEYS = $(YPSRCDIR)/publickey
RPC = $(YPSRCDIR)/rpc
SERVICES = $(YPSRCDIR)/services
NETGROUP = $(YPSRCDIR)/netgroup
NETID = $(YPSRCDIR)/netid
AMD_HOME = $(YPSRCDIR)/amd.home
AUTO_MASTER = $(YPSRCDIR)/auto.master
AUTO_HOME = $(YPSRCDIR)/auto.home
AUTO_LOCAL = $(YPSRCDIR)/auto.local
TIMEZONE = $(YPSRCDIR)/timezone
LOCALE = $(YPSRCDIR)/locale
NETMASKS = $(YPSRCDIR)/netmasks
YPSERVERS = $(YPDIR)/ypservers # List of all NIS servers for a domain
....
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 113
Conguracion de un NIS maestro para poner esclavos
Esto requiere dos tareas:
Editar el archivo/var/yp/yp-serverspara colocar todos los servidores NIS secundarios a los que el
servidor maestro debera mandar sus mapas. Esto se consigue introduciendo, en una lnea diferente,
los nombres de hosts de cada servidor secundario. Por cada nombre de host que listemos en este
archivo tenemos que colocar su entrada correspondiente en el archivo/etc/hosts.
Asegurarnos de que el/var/yp/Makeletiene la lneaNOPUSH=false
Establecer UID y GID mnimos. Obviamente, no queremos compartir la entrada de root mediante
NIS, entonces el mnimo debera ser mayor que cero. Estas variables del /var/yp/Makele son:
MINUID=<numero>
MINGID=<numero>
Conguracion de un servidor NIS secundario
Cuando crece nuestra red, indudablemente encontraremos que necesitamos distribuir la carga de nues-
tro servicio NIS entre varias maquinas. Esto es soportado a traves del uso de servidores NIS secundarios.
Los servidores no requieren mantenimiento adicional una vez congurados, debido a que el servidor NIS
maestro les enva las actualizaciones si se recontruyen los mapas.
Hay que seguir tres pasos para congurar el servidor NIS secundario:
Congurar el nombre de dominio (domainname)
Congurar el maestro NIS al que se va a unir el esclavo
Ejecutar:#ypinit -s <nis_maestro>, . . . para iniciar el servidor esclavo
Autenticar usuarios mediante NIS
Como NIS se puede usar con otros sistemas para autenticar usuarios, necesitaremos permitir que las
entradas de contrase~na encriptadas se compartan. Si usamos contrase~nasshadow, NIS automaticamente lo
manejara, tomando el campo encriptado del archivo/etc/shadowy mezclandolo con la copia compartida
de/etc/passwden NIS.

Esta opcion se encuentra en el archivo/var/yp/Makele. A menos que tengamos una razon especca
para no compartir las contrase~nas, dejaremos la variableMERGEPASSWD=true.
El archivo/etc/grouppermite tener contrase~nas de grupo aplicadas en el sistema. Puesto que necesita
ser de lectura para todo el mundo, algunos sistemas ofrecen soporte a archivosshadowde grupos. A menos
que dispongamos y usemos, el archivo/etc/gshadow, conguraremos la opcionMERGEGROUP=false.
9.3.4. Cliente NIS
El primer paso que deberemos realizar es indicar al cliente NIS,ypbind, cual es el dominio al que se va
a conectar, siendo el comportamiento por defecto deypbindinterrogar al servidor de la red local a la que
esta conectado.
De esta forma, si se trata de un ordenador portatil, el cual debera conectarse a diferentes redes pode-
mos optar por dejar el archivo/etc/yp.confvaco sin especicar el dominio a emplear, de esta forma el
ypbindrealizara la consulta por defecto en la red local en donde se esta conectando.
Para lanzar el cliente NIS, ejecutaremos el siguiente comando:
#ypbind
Jose Antonio Escartn Vigo, Junio 2005.

114 Servidor Linux para conexiones seguras de una LAN a Internet
Conguracion local de NIS: /etc/yp.conf
Si hubiera mas de un dominio en la red especicaremos el servidor NIS de la siguiente forma:
# yp.conf Configurati\'on file for the ypbind process. You can define
# NIS servers manually here if they can't be found by
# broadcasting on the local net (which is the default).
#
# See the manual page of ypbind for the syntax of this file.
#
# IMPORTANT: For the "ypserver", use IP addresses, or make sure that
# the host is in /etc/hosts. This file is only interpreted
# once, and if DNS isn't reachable yet the ypserver cannot
# be resolved and ypbind won't ever bind to the server.
ypserver ypserver.network.com
Dondeypserver.network.comes el nombre del servidor NIS al que nos conectaremos. Evidentemente
el ordenador debe saber como resolver el nombre del servidor, ya sea utilizando DNS o especicando el
nombre e IP en el archivo/etc/hosts.
Tambien podemos especicar multiples dominios en el archivo/etc/yp.confde la siguiente forma:
#yp.conf
#
domain proyecto server debian
domain casa server debian-home
Al arrancar el ordenador podemos emplear el comandodomainnamepara especicar el dominio al que
nos estamos conectando. De esta forma el cliente NIS seleccionara el servidor adecuado:
#domainname proyecto
Si no supieramos el nombre o IP del servidor en un determinado dominio se podra modicar el archivo
de conguracion de la siguiente forma:
#yp.conf
#
domain proyecto server debian
domain casa server debian-home
domain trabajo broadcast
La opcionbroadcastindica al cliente NIS que, si nos conectamos al dominiotrabajo, debe utilizar el
servidor que encuentre en la red local.
Seleccionar los archivos de conguracion del servidor
Una vez establecida la conexion con el servidor NIS, es necesario especicar que archivos de congu-
racion importaremos.
Normalmente los archivos de conguracion seran los correspondientes a la conguracion de usuarios,
grupos y en el caso de redes que no utilicen DNS, el archivo de hosts. Pudiendo importar cualquier archivo
de conguracion comun a todos los ordenadores de la red y que sufra modicaciones periodicas, evitando
de esta forma tener que realizar manualmente esta tarea en cada ordenador de la red.
Esto se realiza mediante el archivo:
/etc/nsswitch, . . . Name Service Switch
El orden correcto de los servicios dependera del tipo de datos que cada uno de ellos ofrezca, as nor-
malmente se consultara en primer lugar el archivo local y posteriormente el ofrecido por NIS.
Como antes he comentado, una de las principales utilidades de NIS es mantener sincronizados en la
red los archivos empleados para la administracion de usuarios, de tal forma que podamos tener un control
total sobre los usuarios que pueden acceder a los diferentes ordenadores de la red sin necesidad de editar
manualmente cada uno de los hosts.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 115
No obstante, con activar este servicio en/etc/nsswitch.conf, no es suciente, debemos asegurarnos de
que el numero o ID de los usuarios locales coinciden con el de los contenidos en el servidor.
Una vez realizada esta comprobacion podremos activar este servicio NIS a~nadiendo el siguiente codigo
al archivo/etc/nsswitch.conf:
passwd: nis files
group: nis files
El formato del archivo/etc/nsswitch.confes el siguiente:
nombre-archivo: nombre-servicio
Dondenombre-archivoes el nombre del archivo que necesita referenciarse ynombre-servicioes el nom-
bre del servicio que se utiliza para encontrar el archivo. Se pueden listar varios servicios, separados por
espacios.
Estos son los servicios validos:
Servicio Descripcion
les Usa el archivo de la propia maquina
yp Usa NIS para realizar la busqueda
nis Usa NIS para realizar la busqueda (nis es un alias de yp)
dns Usa DNS para realizar la busqueda (se aplica solo al archivo hosts)
[NOTFOUND=return]Detiene la busqueda
nis+ Usa NIS+
Prueba de conguracion del cliente NIS
Una vez hayamos congurado los archivos:
/etc/yp.conf
/etc/nsswitch.conf
Y tengamos en funcionamiento el demonio de clienteypbind, podemos usar el comandoypcatpara
volcar un archivo de nuestro servidor NIS en pantalla. Para ello, escribimos:#ypcat passwd
Vuelca el archivopasswd(mapa del archivo) en pantalla (si es que lo estamos compartiendo por NIS).
Si no vemos el archivo, necesitamos hacer una comprobacion de las conguraciones del servidor y el cliente
cliente, y probar de nuevo.
9.3.5. Herramientas basicas
Para trabajar con NIS disponemos de algunas herramientas que extraen informacion de la base de
datos mediante la lnea de comandos:
ypcat: Comentada en la seccion anterior, vuelca los contenidos de un mapa NIS (archivo NIS).
ypwhich: Devuelve el nombre del servidor NIS que responde a las peticiones. Tambien es una buena
herramienta de diagnostico, si NIS parece no funcionar correctamente.
ypmatch: Es muy parecido aypcat. Sin embargo, en lugar de mostrar el mapa entero, le proporciona-
mos un valor clave y solo aparecera la entrada correspondiente a esa clave. Esto es util, por ejemplo,
para el passwd:#ypmatch josan passwd
Jose Antonio Escartn Vigo, Junio 2005.

116 Servidor Linux para conexiones seguras de una LAN a Internet
9.3.6. Problemas de seguridad
NIS se considera seguro, desde el punto de vista del servidor, puesto que no modica los mapas direc-
tamente y los archivos pueden ser ledos por todo el mundo.
Desde el punto de vista del cliente, la seguridad es bastante pobre. Incluso en una red local, hay que
saber que las contrase~nas circulan sin encriptar sobre la red. Cualquier maquina puede \escuchar" los
intercambios entre un cliente NIS y el servidor.
Por defecto no se utiliza ningun algoritmo de cifrado en estas comunicaciones. Y como no utiliza au-
tenticacion a nivel de RPC, cualquier maquina de la red puede enviar una respuesta falsa, y pasar por el
servidor de NIS. Para que el ataque tenga exito, el paquete con la respuesta falsa debe llegar al cliente
antes de que responda el servidor. Tambien debe ser capaz de observar la peticion y generar la respuesta,
para ello es preciso que la maquina que lleva a cabo el ataque este situada en el camino de comunica-
cion entre servidor y cliente. Se puede crear facilmente un mapa NIS para sustituir al del servidor. Un
intruso podra acceder al cliente NIS a traves de los comandos de acceso remoto, cambiando en el mapa,
la direccion de la maquina que lleva a cabo la intrusion, por otra maquina que se encuentre en el archivo
/etc/hosts.allow.
La solucion de estos problemas de seguridad pasa por utilizar autenticacion en el protocolo RPC. NIS+
trata de solucionar ese problema, mediante soporte para el cifrado. Elimina la mayor parte de problemas
de seguridad que NIS planteaba, puesto que utiliza RPCs seguros, si se conguran de forma adecuada. En
estos momentos NIS+ es bastante experimental e inestable, por eso me he centrado en NIS.
En NIS tambien se han buscado algunas soluciones al problema de la seguridad. Sola tener un defecto
grave, dejaba su archivo de contrasen~as legible por practicamente cualquier persona en todo Internet, esto
supona un gran numero de posibles intrusos. Si un intruso saba nuestro dominio NIS y la direccion de
nuestro servidor, simplemente tena que enviar una consulta al mapapasswdy recibir al instante todas
las contrase~nas encriptadas del sistema. Con un programa rapido para crackear contrase~nas, y un buen
diccionario, averiguar unas cuantas contrase~nas de usuario no tena ningun problema.
De todo esto trata la opcionsecurenets. Simplemente restringe el acceso a su servidor NIS a ciertos
nodos, basandose en la direccion IP. La ultima version deypservimplementa esta caracterstica de dos
formas.
Utilizando un archivo de conguracion especial:/etc/ypserv.securenets.
Utilizando convenientemente los archivos/etc/hosts.allowy/etc/hosts.deny.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 117
9.4. NFS: Sistema de archivos Linux en red
NFS es un protocolo que data de los a~nos 80. En esas fechas los problemas de seguridad eran menores.
Todava podan construirse protocolos basados en la conanza, tanto el servidor como el cliente, conando
en la informacion que intercambian. Internet convierte este principio en algo absurdo y este es sin duda
uno de los mayores problemas de NFS. La segunda version del protocolo es la primera version publicada
y sigue la siendo la mas extendida en nuestros das. Existen implementaciones sobre varias plataformas
diferentes y se han descrito pocos problemas de compatibilidad.
La tercera version del protocolo data de 1992 y presenta varias mejoras:
Mejora del rendimiento debido a la reescritura del codigo de red y uso de paquetes de datos mayores.
Mejora en la seguridad:
Listas de ACL (Listas de control de acceso) que permiten denir acceso a los recursos por UID
y archivo a archivo.
Implementacion de un sistema de autenticacion basado en contrase~na.
Por desgracia, la tercera version de NFS para Linux, esta todava en pa~nales. NFS para GNU/Linux
es intrnsecamente inseguro y peligroso si se administra mal.
NFS es una interfaz entre el sistema de archivos fsico y un sistema remoto. Cuando NFS recibe una
peticion va red, opera las modicaciones sobre el sistema local.
Dispone de todo lo que podemos esperar de un sistema de archivos tipo Unix: gestion de permisos,
propiedades avanzadas, enlaces, tuberas con nombre . . .
Pero como indica su nombre ha sido ideado para ser usado de forma transparente a traves de la red.
Desde el punto de vista del cliente, se trata de un sistema de archivos clasico, se monta conmount,
y se integra en la jerarqua de archivos existente en la maquina. Todas las ordenes de entrada/salida son
enviadas al servidor que se encarga de procesarlas, controlar acceso concurrente a archivos, etc.
9.4.1. Cliente NFS
Montaje de las particiones
Para poner en servicio un cliente de NFS, hay que asegurarse de que el kernel de Linux que estamos
usando tiene compilado el soporte para NFS.
Para montar una particion hay que conocer algunos parametros:
El nombre del servidor.
El nombre de la particion a la que se desea acceder.
El nombre del directorio donde vamos a montar la particion NFS.
La sintaxis del comando mount es la siguiente:
#mount -t nfs maquina:particion_a_montar punto_de_montaje
Se puede facilitar el montaje de una particion si la incluimos en el /etc/fstab para que se monte al
iniciarse el sistema.
Podramos usar algunas opciones de montaje para dotar de mayor seguridad al sistema.
La opcion-o nosuidquita el bit SUID sobre los ejecutables montados por NFS. Esto puede resultar
molesto si estamos montando /usr pero tiene sentido si estamos montando particiones de datos.
La opcion-o noexeces todava mas radical, ya que imposibilita la ejecucion de programas desde
la particion montada por NFS. Si tenemos usuarios que escriben scripts esta opcion puede ser muy
molesta.
Jose Antonio Escartn Vigo, Junio 2005.

118 Servidor Linux para conexiones seguras de una LAN a Internet
Ejemplos de uso
Los ejemplos de uso de una particion NFS son numerosos. Podemos imaginar, entre otros, una particion
de lectura/escritura sobre/home. As cada usuario puede trabajar sobre cualquier maquina de la red
encontrando siempre sus archivos personales sin esfuerzo.
Es frecuente que se exporten los buzones de correo de los usuarios. Esta es una mala idea, ya que la
gestion de concurrencia de NFS no es muy able y exportar/var/spool/mailpor ejemplo, puede producir
perdidas de mensajes.
Podemos tambien compartir una particion que contenga ejecutables, como/usr/binpara ganar algo
de espacio en disco sobre las maquinas locales. Llegando al extremo podramos tener ordenadores sin disco
duro trabajando directamente sobre particiones NFS.
Las herramientas del cliente: showmount
Estrictamente hablando solo es necesario el programamountpara hacer funcionar un cliente de NFS.
Pero las utilidades de cliente son a menudo muy utiles.Showmounten este caso, nos permite ver la lista
de particiones NFS montadas por otras maquinas dentro de la red.
9.4.2. Montaje automatico de particiones NFS
Utilizaremos a este proposito el/etc/fstabcomo para cualquier otro sistema de archivos.
maquina:partition_distante punto_montaje nfs defaults 0 0
maquina:partition_distante punto_montaje nfs noauto,user 0 0
La primera opcion permite montar la particion automaticamente en el arranque. La segunda opcion
permite que cualquier usuario monte la particion conmount, pero no en el arranque.
9.4.3. Propiedades de las particiones montadas
Los derechos de propiedad (permisos de acceso)
Cuando navegamos por una particion montada, podemos constatar una serie de cosas. Lo primero es
que los propietarios de los archivos sobre el servidor y sobre la maquina local no concuerdan. Es que Linux
no usa los nombres de usuario y grupos sino que utiliza los codigos de usuario y de grupo (UID, GID). Las
equivalencias aparecen en/etc/passwdy/etc/groupsrespectivamente, estos archivos no son compartidos
por NFS.
Ahora imaginemos lo siguiente: el usuarioPacodispone de una cuenta en el servidor donde tiene
asignado el UID 542 y all tiene algunos archivos de su posesion. Su particion de trabajo es importada
sobre otra maquina donde el UID 542 corresponde al usuarioPepe. Esto es un problema porque ahora
Pepepuede acceder a los documentos dePaco, peroPacono puede acceder ni a sus propios documentos.
Se trata de uno de los inconvenientes ligado a NFS.
Varias soluciones son posibles, siendo la mas evidente el uso de servidores NIS para tener un control
de usuarios uniforme.
Los accesos concurrentes
Las diferentes versiones del protocolo NFS dejan en manos del implementador la solucion de los pro-
blemas derivados de la concurrencia. Uno de los problemas mas habituales en una red lenta o subestimada
es que las particiones pueden ser desmontadas de forma \violenta" cuando los tiempos de respuestas son
excesivamente lentos. Esto implica problemas de perdida de datos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 119
9.4.4. Servidor de NFS
Existen dos servidores NFS en Linux, uno funciona como un servidor tradicional y el otro integrado en
el kernel. Este ultimo es frecuentemente llamadoknfsd, y ofrece mejores resultados en terminos de rapidez
pero le falta estabilidad.
Para realizar la instalacion haremos un apt:
#apt-get install nfs-kernel-server nfs-user-server
El archivo /etc/exports
Contiene la lista de las maquinas y de los repertorios que deben ser exportados. Su sintaxis es:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/directorio maquina1(option) maquina2(option) ...
/usr pepe(ro) 192.168.0.10(rw)
La mayora de implementaciones de NFS no autorizan la exportacion de un subdirectorio de un di-
rectorio previamente exportado. El servidor de NFS del kernel si que permite esta opcion y esto puede
favorecer ciertas conguraciones.
Entre las opciones mas corrientes, podemos citar las opciones de seguridad que veremos mas adelante
y las opciones de montaje tales comorworoque permiten la exportacion en modo lectura/escritura o
solo lectura respectivamente.
Por defecto los directorios son exportados en modorw(lectura/escritura).
Los nombres de las maquinas pueden ser nombres DNS, direcciones IP, clases de direcciones IP o do-
minios enteros. Si estamos utilizando NIS podemos tambien precisar el nombre del grupo de NIS.
Modicar dinamicamente las particiones exportadas no es posible, el servidor NFS no actualiza los
cambios realizados en el archivo/etc/exports.
Estos cambios hay que activarlos usando el comandoexportfs:
#exportfs -r, . . . vuelve a cargar la conguracion de/etc/exports
Este comando permite sincronizar la lista de montajes posibles, conservada en/var/lib/nfs/xtaby
basada en el archivo/etc/exports.
Para anular la exportacion de directorios (prohibicion de montaje):
#exportfs -u <directorio>
Este comando nos permite interrumpir momentaneamente la exportacion de uno o varios directorios.
Este comando no modica el contenido de/etc/exportsy la modicacion no es denitiva. Permite prohibir
todo nivel de montaje, pero los montajes existentes no son desactivados.
Restriccion de los permisos de los clientes
Cuando el administrador de una maquina monta una particion NFS, dispone de permisos de acceso de
escritura, como sobre cualquier otra particion del disco local. Si la red es administrada por varios usuarios
root, en maquinas distintas se sugiere el uso de la opcion:rootsquashen el archivo de/etc/exports.
Esta opcion elimina los privilegios de root sobre la particion montada, lo que asegura la integridad
de la misma. En el marco de una exportacion de/homeimpedira que el usuario root de una maquina
cualquiera accediera a los directorios personales de todos los miembros de la red NFS.
Se puede usar tambien la opcionallsquashque otorga a todos los usuarios los privilegios de obody"
(usuario anonimo).
Jose Antonio Escartn Vigo, Junio 2005.

120 Servidor Linux para conexiones seguras de una LAN a Internet
El problema del UID
El problema de propiedad de los archivos es particularmente sensible cuando tratamos con particiones
de usuarios. Es posible esquivar el problema usando la opcionallsquashen el montaje.
En primer lugar no montamos directamente/homeen el conjunto de maquinas cliente, sino que el
servidor debe exportarlas una a una sobre cada cliente. Hecho esto, usamos la opcionallsquashpara que
todas las modicaciones remotas sean consideradas como realizadas por el usuarionobody.
Las opcionesanonuid=UIDyanongid=GIDnos permiten reemplazarnobodypor el UID y el GID del
usuario en cuestion, para que tenga acceso a su directorio personal. All podra usar los archivos de los que
el es due~no sin ningun problema.
La autenticacion por maquina funciona relativamente bien si los recursos personales son montados desde
clientes Windows donde solo hay un usuario. Esto, sin embargo, es problematico en entornos multiusuario
(como los entornos NT).
Las herramientas del servidor : mountd y nfsd
Si estamos usando el NFS incluido en el kernel, el trabajo lo lleva a cabo directamente el modulonfsd.o
de Linux. El programarpc.nfsdsolo sirve para comunicar elportmappercon el kernel.
El programarpc.mountdes el programa responsable de la seguridad de los montajes con NFS. Cuando
una maquina cliente solicita la exportacion de una particion,mountdverica si dicha maquina cliente
esta autorizada.
9.4.5. Conguracion graca de NFS, interfaz Webmin
Para facilitarnos la tarea de la conguracion de archivos, en Debian, disponemos de la herramienta web:
Webmin. Esta herramienta nos permitira una conguracion y administracion de forma simple y sencilla.
Para instalar el modulo NFS de Webmin realizaremos un apt:
#apt-get install webmin-exports
Figura 9.11: Modulo Webmin para NFS
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 121
9.5. Samba: Servicio de conexiones para sistemas Microsoft
En esta seccion conguraremos el servidor Samba, mostrando sus funcionalidades mas habituales.
Basado en los articulos sobre Samba publicados en http://bulma.net
9.5.1. Comparticion de recursos
El servicio de FTP permite intercambiar archivos en red. Pero presenta serios problemas de integracion.
Es decir no es transparente al usuario, su uso cambia segun trabajemos con los entornos Linux o Windows.
NFS, solucion limitada a maquinas Linux
Entre maquinas Linux, es posible usar el protocolo NFS para compartir archivos. Se trata de una buena
solucion puesto que permite conservar todas las funcionalidades del sistema de archivos Linux. Pero tiene
una serie de inconvenientes:
NFS presenta problemas de seguridad
No existe una buena implementacion libre de NFS para equipos Windows
Protocolo CIFS, una posible solucion
En lugar de usar una solucion costosa, en los equipos Windows, es mas economico (y lleva menos
trabajo) utilizar el protocolo empleado nativamente por las maquinas Windows. El protocolo CIFS (Com-
mon Internet FileSystem), tiene implementaciones sobre un gran numero de plataformas. Existiendo una
implementacion libre, llamada SaMBa, que permite utilizarlo sobre servidores Unix/Linux.
9.5.2. >Que es Samba?
Samba es una implementacion bajo Unix/Linux de los protocolos CIFS y NetBIOS (antiguamente
llamado SMB, de all el nombre de Samba)
Este protocolo permite compartir varios recursos diferentes:
El acceso a los directorios compartidos.
El acceso a las impresoras compartidas.
El paquete Samba incluye utilidades para controlar el acceso de los archivos con la misma soltura que
un WindowsNT. Ademas Samba puede colaborar con un servidor NT existente, o reemplazarlo del todo.
Veremos mas adelante como congurarlo en detalle, pero es posible:
Proteger con una contrase~na el acceso a un directorio compartido.
Proteger con una contrase~na personicada para cada usuario, y dotar de permisos de acceso indivi-
dualizados.
Las herramientas necesarias
Los paquetes relacionados con Samba son los siguientes:
samba-common: Contiene los elementos que van a permitir el buen funcionamiento de los otros
paquetes:
Herramientas de conversion de tablas de caracteres Windows.
Archivos de conguracion.
Documentacion basica de Samba.
Jose Antonio Escartn Vigo, Junio 2005.

122 Servidor Linux para conexiones seguras de una LAN a Internet
samba: Contiene todos los programas del servidor, es decir:
Aplicaciones que permiten hacer accesible los recursos a los usuarios.
Herramientas de conguracion.
Documentacion esencial de Samba.
smbclient: Contiene los programas clientes, que permiten acceder a los recursos compartidos.
smbfs: Congura el sistema de archivos Samba.
samba-doc: Contiene toda la documentacion necesaria para congurar en detalle todos las funciones
del servidor Samba.
swat: Es una aplicacion web que permite congurar el servidor Samba facilmente. Pero para ello nos
hara falta: Apache y varios paquetes de dependencias.
Estos paquetes se pueden instalar facilmente con apt:
#apt-get install samba samba-doc smbclient smbfs swat
Los demonios de Samba
Dos demonios se encargan de ofrecer los servicios del conjunto de aplicaciones Samba.
El demoniosmbdes el demonio que se encarga de la comparticion de recursos, pero tambien del
control del acceso a los mismos. Gestiona los permisos de los diferentes clientes una vez que estos
han sido identicados.
El demonionmbdse ocupa de publicitar los servicios. Es decir, se encarga de informar a las maqui-
nas presentes en la red sobre cuales son los recursos disponibles. Este demonio maneja tambien la
resolucion de nombres deNetBIOS. Para ello, puede comunicarse con un servidorWINS(Windows
Internet Naming Service) que se encuentre presente en la red.
Existen dos formas para realizar la conguracion:
Editar directamente los archivos de conguracion con un editor de texto.
Manejar una herramienta graca que generara el mismo resultado. Aqu veremos, el manejo de
Swat (Samba Web Administration Tool), que se trata de una interfaz que se comporta como un
servidor Web, conectandose a la maquina por medio de un simple navegador. Es posible leer la
documentacion, cambiar la conguracion y realizar el resto de tareas administrativas despues de
habernos validado con un usuario y una contrase~na. El servidor Swat, por defecto, se ejecuta en el
puertohttp://localhost:901.
Herramientas del cliente
Las herramientas para el cliente bajo Microsoft Windows son aquellas utilizadas habitualmente para
trabajar con servidores NT. No hay que cambiar nada en este sentido, el funcionamiento para las maquinas
Windows es totalmente transparente.
En Linux, contamos con el paquetesmbclientpara conectarse con los servicios CIFS, sean proporcio-
nados por un servidor Windows o por un servidor Linux que ejecute Samba.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 123
9.5.3. Conguracion graca de Samba, interfaz SWAT
La herramienta SWAT es el ejemplo de una buena interfaz de administracion graca. Intenta de forma
relativamente transparente proporcionar todas las funcionalidades de la conguracion en modo texto.
Como la conguracion de Samba es sencilla, ha sido posible agrupar todas las posibilidades en un
numero reducido de opciones, sin sobrecargar la interfaz.
Ofrece la posibilidad de generar un archivo/etc/samba/smb.confde muestra, con el que podremos
estudiar la sintaxis del script por si tuvieramos que editarlo a mano en alguna ocasion.
Si no lo realiza la instalacion en el sistema, para poder ejecutar SWAT hay que modicar el archivo
/etc/inetd.conf. Y a~nadir la siguiente lnea:
swat stream tcp nowait.400 root /usr/sbin/swat swat
Figura 9.12: Interfaz graca Swat para Samba
Presentacion de los archivos en modo texto
/etc/smbpasswd: Contiene los passwords de los usuarios de Samba, de forma cifrada.
/etc/lmhosts: Es un interfaz entre los nombres de maquinas NetBIOS y las direcciones IP numericas.
Su formato es parecido al de /etc/hosts.
/etc/smbusers: Contiene una lista de usuarios del sistema, seguida de una lista de los usuarios Samba
que les corresponden.
De esta forma es posible crear varios usuarios Samba sin tener que crear para cada uno de ellos un
usuario del sistema.
Jose Antonio Escartn Vigo, Junio 2005.

124 Servidor Linux para conexiones seguras de una LAN a Internet
Los menus de SWAT
Paso a detallar cada una de las secciones del archivo/etc/samba/smb.conf. Este archivo es parecido a
los archivos.ini, habituales del entorno Windows.
HOME: Permite acceder a la versionhtmlde la documentacion Samba. Faltan tal vez algunas
opciones, en particular la ayuda sobre el propioSWATdeja bastante que desear. Se trata a menudo de
una ayuda relativa a las opciones de los archivos en modo texto, mas congurables que la herramienta
graca. De un modo u otro toda esta documentacion es en el fondo muy descriptiva.
GLOBALS: Contiene variables generales que se aplican al total de los recursos puestos a disposicion
del servidor Samba. Esta seccion contiene tambien informacion de identicacion del servidor dentro
de la redNetBIOS: grupo de trabajo, nombre e identicador. As mismo, aqu podemos establecer
los modos de funcionamiento de Samba.
SHARES: Contiene la lista de comparticiones de disco efectuadas por la maquina. Es aconsejable
primero crear la particion compartida (o los directorios) y despues precisar para cada particion sus
propiedades particulares.
PRINTERS: Es casi identico al anterior, pero permite compartir impresoras en lugar de particiones
de disco o directorios.
WIZARD: Permite congurar de una forma rapida los archivos de conguracion, establecer el modo
de funcionamiento del servidor y el servidor WINS de la red. Desdeaqu, tambien podemos cambiar
la conguracion para compartir los directorios/homepor Samba.
STATUS: Muestra el estado actual del servidor, el estado de los demonios Samba, las conexiones
activas, los archivos compartidos y los archivos abiertos actualmente.
VIEW: Nos permite ver el archivo smb.conf tal cual ha sido redactado porSWAT. Es posible ver
tambien la totalidad de las opciones posibles, incluso las queSWATno ha cambiado, pero que tienen
un valor por defecto.
PASSWORD: Permite al usuario cambiar su contrase~na. Se trata de un interfaz graco para el
programa smbpasswd. Sirve tambien al administrador para a~nadir nuevos usuarios.
9.5.4. Funcionamiento de CIFS
Sobre una misma red, varias maquinas pueden poner recursos a disposicion de otras. CIFS dispone de
un sistema para anunciar servicios (browsing), que permite saber que recursos compartidos hay disponibles.
Cada maquina que desea anunciar sus recursos compartidos a las otras maquinas contacta con una
maquina en particular, elServidor de Anuncios(Master Browser) que se encarga de centralizar estas
noticaciones de presencia. Es posible congurar el servidor Samba para que sea el mismoServidor de
Anuncioso dejar esta tarea a una maquina Windows.
El acceso a los recursos puede controlarse de dos formas:
Escondiendo el recurso, es decir, no anunciandolo a ciertas maquinas de la red.
Estableciendo un sistema de validacion para restringir el acceso, basado en contrase~na.
El anuncio de servicios esta limitado al \grupo de trabajo". Cada maquina Windows puede ser miembro
de un solo grupo, y por tanto, solo puede pertener a un conjunto de maquinas que compartan los mismos
recursos. Es posible de este modo separar conjuntos de recursos compartidos, creando distintos grupos
de trabajo. Si lo que deseamos es tener maquinas accediendo a los recursos de varios grupos distintos, es
necesario pasar por un sistema de autenticacion.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 125
Existen varias formas de autenticacion, cada una con sus ventajas e inconvenientes:
La autenticacion por usuario y contrase~na: Se trata del metodo por defecto. Representa la ventaja
de permitir una gestion na de los permisos. Para cada usuario es posible denir el acceso o no a
unos recursos. Este metodo presenta un inconveniente: cada usuario debe disponer de una cuenta en
la maquina Unix, para permitir la autenticacion.
El control de acceso por comparticiones: Se trata de un metodo mas global: cada recurso compartido
es protegido por unpasswordpropio. Para ello es necesario que varios usuarios conozcan el mismo
passwordy que recuerden la contrase~na adecuada para cada recurso compartido al que accedan.
Este metodo presenta la ventaja de que no son necesarias tantas cuentas de usuario como usuarios
haya, sino tantas como recursos se compartan.
Autenticacion contra otro servidor: Existen tambien dos metodos indirectos de control de acceso.
El metodoserver: Consiste en consultar con otro servidor CIFS, que se encargara de la auten-
ticacion.
El metododomain: Consiste en validarse contra el servidor de dominio NT.
9.5.5. Parametros globales
Es necesario elegir algunos parametros de funcionamiento del servidor y para identicarlo y conseguir
que se integre en la red.
El camposerver string: Permite elegir la descripcion que acompa~na al nombre del servidor en la
lista de recursos anunciados.
El camponetbios name: Permite denir el nombre de la maquina, no como un nombre de DNS, sino
como un nombre de resolucion de nombres propio del protocolo NetBIOS. Es importante entender
que son dos cosas totalmente diferentes.
El campoworkgroup: Permite elegir el grupo de trabajo del servidor Samba.
El campointerfaces: Permite identicar la o las tarjetas de red que enlazan el servidor con el grupo
de trabajo.
Tambien disponemos de una serie de parametros referidos al control de acceso:
El camposecurity: Permite elegir el metodo de autenticacion, podemos elegir uno de los vistos
anteriormente.
Los menushosts allowyhost denypermiten controlar el acceso a los recursos de ciertas maquinas.
Las conguraciones hechas en esta seccion se aplican a la totalidad de los recursos compartidos,
independientemente de la conguracion especica.
Las conguraciones realizadas por Swat se reejan en el archivo de conguracion /etc/smb.conf. Si
editamos dicho archivo podremos ver algo de este estilo:
[global]
workgroup = nombre_del_grupo
server string = Servidor Samba
security = SHARE
log file = /var/log/samba/log.%m
max log size = 50
Jose Antonio Escartn Vigo, Junio 2005.

126 Servidor Linux para conexiones seguras de una LAN a Internet
9.5.6. Impresoras
Samba permite compartir facilmente una impresora conectada fsicamente a una maquina Linux, ha-
ciendo asi accesible a todas las maquinas conectadas a la red.
Una impresora de red que no soporte mecanismos de autenticacion puede ser puesta a disposicion de
los usuarios gracias a un servidor de impresion de Samba, lo que permite controlar el acceso.
Esta operacion de elegir impresora, se realiza dentro del menuPRINTERS. Este presenta una lista
de impresoras existentes. Seleccionando una en la lista desplegable y usando el comandoChoose Printer
(elegir impresora) accederemos a su conguracion.
Por defecto Samba extrae la lista de impresoras disponibles de/etc/printcap. Si la maquina dispone de
otras impresoras, es posible a~nadirlas, introduciendo su nombre en el campoCreate Printery conrmando
la accion.
El camino de acceso (PATH), en una impresora se trata de del camino hacia el directorio utilizado por
Samba para conservar la cola de impresion. En general se adopta/var/spool/samba.
Autorizar elacceso guest, es permitir a cualquier usuario de una maquina miembro del grupo de
trabajo, usar la impresora.
Hay que tener mucho cuidado con esto, la integracion en un grupo de trabajo no es un metodo able de
validacion. Cualquier usuario de una maquina Windows puede cambiar su grupo de trabajo tantas veces
como desee sin que ningun mecanismo de autenticacion se lo impida. De este modo podra introducirse
en un grupo con permisos de impresion un usuario al que en principio habamos dejado fuera. Puede ser
necesario usar restricciones por nombre de maquina (archivoshost allowyhost deny) para una mayor
seguridad.
El menubrowseableindica que este recurso debe ser anunciado pornmbd, y por tanto ser visible para
todos los usuarios.
9.5.7. Comparticion de directorios
Algunas opciones son identicas a la comparticion de impresoras. Las opciones que permiten limitar el
acceso a ciertas maquinas, elegir el camino de acceso al recurso (en este caso, directorio a compartir), y la
autorizacion de un usuario invitado son identicas a las que hemos encontrado en la seccionPRINTERS.
En el caso de la comparticion de espacio en disco es posible tener un mejor control sobre el acceso.
Activando la opcionread only, autorizar solamente el acceso en modo lectura o denir sobre un mismo
directorio varios tipos de permisos. Por ejemplo, se podra ofrecer acceso de solo lectura a la totalidad del
grupo y luego anar un acceso de escritura a ciertos usuarios en concreto.
Si la seguridad esta en modo compartido (share), todos los usuarios disponen, previa autenticacion, de
los derechos correspondientes al directorio que es compartido. El sistema usa un metodo heuristico para
determinar el identicador de un usuario que se conecta, pero este metodo es facilmente manipulable.
As que mas vale usar la autenticacion en modo usuario. Este modo permite por ejemplo, compartir las
carpetas personales del usuario sin riesgo alguno.
Por defecto, Samba no utiliza contrase~nas cifradas. Esta eleccion le permite interoperar con clientes
de Windows 3.x y Windows95. Por culpa de esta compatibilidad perdemos seguridad y es necesario tocar
el registro del sistema de Windows en maquinas Win98 y posteriores para que todo funcione. Si en la red
no hay maquinas windows95 o anteriores, es muy recomendable congurar el servidor de Samba para que
use contrase~nas cifradas.
Esto se hace, a~nadiendo al archivosmb.confla siguiente lnea:
encrypt passwords = Yes, . . . dentro de [global]
Estas contrase~nas son almacenadas dentro del archivo/etc/smbpasswd. Las maquinas clientes contactan
con el servidor y reciben una clave codicada usando la contrase~na cifrada. El resultado es reenviado al
servidor, que hace la misma operacion. Si los dos resultados son identicos la autenticacion es correcta.
Esto impide a un usuario \malicioso" hacerse con los passwords que atraviesan la red camino al servidor
en busca de la autenticacion.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 127
9.5.8. Limitar acceso de los usuarios
Para cada recurso es posible restringir el acceso a ciertos usuarios. Esto se realiza en en/etc/smb.conf,
para cada una de las lneas de recursos compartidos que deseamos limitar, podemos a~nadir la lnea:
valid users = usuario1, usuario2
En ausencia devalid, el recurso es accesible por todos los usuarios del servidor Samba. Si esta lnea
esta presente el acceso esta reservado unicamente a los usuarios mencionados.
La opcionread only, permite impedir a los usuarios que escriban en el directorio compartido. Pudiendo
tambien limitar el acceso a unos usuarios concretos.
Para ello tenemos dos posibilidades:
Autorizar el acceso de escritura y bloquear ciertos usuarios con derecho de solo lectura, colocando
su nombre en la seccionread list=del recurso compartido.
Autorizar el acceso en solo lectura y dar el privilegio de escritura a ciertos usuarios gracias a la
seccionwrite list=del recurso compartido.
9.5.9. Integracion de Samba en un dominio NT
Los dominios NT son variantes de los grupos de trabajo. Igual que los grupos, permiten anunciar
los recursos a diferentes clientes. La principal diferencia se encuentra a nivel de autenticacion. Todos los
miembros de un dominio utilizan la misma base de datos de usuarios y contrase~nas.
Cuando un cliente miembro de un dominio intenta acceder a un recurso, enva una peticion a todas las
maquinas de la red, y se autentica contra la primera que responde. En una red NT, la tarea de responder
se lleva a cabo la maquina \mas activa" que tenga acceso a la base de datos de usuarios. Se trata del
Primary Domain Controller(PCD), el controlador del dominio principal. En su ausencia, los servidores
secundarios o BCDs pueden tomar el relevo.
Una vez la maquina cliente se ha autenticado con un controlador del dominio, el cliente no tiene porque
volver a validarse dentro del dominio aunque decida acceder a otro recurso compartido diferente del inicial.
El controlador del dominio \memoriza" las autenticaciones satisfactorias.
Es posible congurar un servidor Samba para que se integre dentro de un dominio NT, para ello hay
que seguir el siguiente metodo:
Lo primero consiste en declarar Samba como un miembro del grupo de trabajo del servidor NT.
Seleccionando en elSwat Security=SERVER, le estamos pidiendo al servidor de Samba que contacte
con un servidor NT.
El servidor NT, se encuentra indicado en la seccion passwordserver = nombredelservidor) para la
autenticacion. Evidentemente el servidor NT debe estar congurado para responder a las peticiones
de autenticacion del servidor de Samba.
Despues hay que crear una cuenta para el servidor:
#smbpasswd -j nombre_del_dominio
Por ultimo, hay que asegurarse de que cada usuario, que el servidor NT va a autenticar, tiene una
cuenta en la maquina NT consiguiendo con esto que los permisos funcionen.
Jose Antonio Escartn Vigo, Junio 2005.

128 Servidor Linux para conexiones seguras de una LAN a Internet
9.5.10. Conguracion de Samba como controlador de dominio
Samba es capaz de comportarse como un PDC (Controlador de Dominio Primario).
Para congurarlo, hay que realizar varias etapas:
1. Autorizar las peticiones de autenticacion de otras maquinas.
2. Congurar la autenticacion usuario por usuario.
3. DeclararseMaster Browser, es decir invertir el mecanismo de eleccion habitual en las maquinas NT
para llevarlas a nuestra maquina Samba.
En el archivo/etc/samba/smb.conf, la seccion[GLOBAL]debe contener los siguientes elementos:
domain logons = yes
security = user
os level = 34
local master = yes
preferred master = yes
domain master = yes
Si queremos compartir permitiendo la autenticacion de usuarios, creamos una comparticion cticia,
siguiendo este patron:
[netlogon]
path = /export/samba/logon
public = no
writeable = no
browsable = no
Esta comparticion no ofrece el acceso a ningun recurso, sin embargo permite la autenticacion de las
diferentes maquinas.
Autorizar la conexion de las maquinas NT
Las maquinas NT intentan conectarse directamente al servidor y no a un recurso en concreto. Es por
tanto preciso autorizarlas para ello. Necesitamos que las maquinas (y no los usuarios) dispongan de una
cuenta, como no van a conectarse al shell, no es necesario darles un usuario normal, con su directorio.
El identicador de una maquina es su nombre NetBIOS, seguido del caracter $.
As por ejemplo la maquinaiceberg, tendra como identicadoriceberg$. Hecho lo cual hay que a~nadir
esta cuenta de usuario a la base de datos de los usuarios de Samba, con el comando:
#smbpasswd -a -m maquina
9.5.11. Cliente Samba
Acceder a los recursos compartidos: smbclient
Este comando permite acceder, desde un cliente Linux, a los recursos disponibles a traves de servidores
CIFS, bien se trate de un servidor Samba o de un servidor basado en Windows. La interfaz es parecida a
la del ftp, es de este modo posible transferir archivos sin esfuerzo.
La sintaxis es:#smbclient //maquina/recurso
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 129
El recurso puede ser:
Un directorio.
Una impresora.
Un disco compartido.
El nombre de la maquina es su nombre de NetBIOS, que puede (y suele) ser diferente de su nombre
de DNS. La opcion-Rpermite elegir el modo de resolucion del nombre de la maquina:
-R lmhosts: Permite consultar el archivo/etc/lmhosts, que resuelve nombres de IP contra los nombres
de NetBIOS de la maquina.
-R wins: Permite lanzar la consulta a un servidor WINS para obtener dicha conversion.
Una vez conectado al servicio en cuestion, disponemos de una interfaz de transferencia de archivos
identica a la del FTP. Tambien podemos acceder a algunas opciones extra, tales comoprint archivo, para
imprimir un archivo local en el servidor.
Integrar un recursos compartido en nuestros directorios: smbmount y smbumount
El comandosmbmountnos permitira movernos de una manera mas comoda por los recursos com-
partidos mediante CIFS, se comporta de una forma similar a los montajes mediante NFS. El recurso
compartido CIFS se monta en un punto de nuestra jerarqua de directorios y podemos movernos por el
usando los comandos Unix habituales.
Smbclient se encarga de gestionar las interacciones entre los archivos presentes en el servidor. Para
desmontar un recurso compartido usamos el comandosmbumount.
Guardar datos de un recurso compartido: smbtar
El comandosmbtares muy similar al comandotar. Permite realizar copias de seguridad de los archivos
del servidor desde la maquina cliente Samba.
La sintaxis es la siguiente:
#smbtar -s servidor -x recurso -t lugar_de_almacenamiento
Es necesario disponer de permisos de lectura del directorio que deseamos almacenar. Es tambien posible
crear copias incrementales con la opcion-N fecha, que no almacena nada mas que los archivos que han
sido modicados a partir de la fecha especicada.
9.5.12. Conguracion graca de Samba, interfaz Webmin
Para facilitarnos la tarea de la conguracion de archivos en Debian, tambien disponemos de otra he-
rramienta web, esta vez para el entorno Webmin. Esta herramienta nos permitira una conguracion y
administracion de forma simple y sencilla.
Para instalar el modulo Samba de Webmin realizaremos un apt:
#apt-get install webmin-samba
En la gura 9.13 se puede observar una serie de pantallas de la interfaz.
Jose Antonio Escartn Vigo, Junio 2005.

130 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 9.13: Modulo Webmin para Samba
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 9. Servicios de red 131
9.6. ProFTPD: Servidor FTP
El protocolo de transferencia de archivos (FTP, File Transfer Protocol) es empleado en redes IP, como
es el caso de Internet, para la transmision de archivos. Uno de los mejores servidores FTP que podemos
encontrar en Linux es ProFTPD. Este servidor soporta la creacion de hosts virtuales permitiendonos dis-
poner, de esta forma, de \mas de un servidor FTP" en una sola maquina. Se dise~no como un servidor
FTP especialmente orientado a sistemas de tipo Unix, tomando muchas de las ideas y conceptos propios
de Apache, como la modularidad.
Para instalarlo desde nuestro sistema Debian realizaremos un apt:
#apt-get install proftpd
La instalacion da la opcion de colocarlo en elinetdo utilizarlo como un servicio independiente.
Una vez instalado en el servidor necesitaremos editar el archivo/etc/inetd.confo/etc/xinted.conf.
Si utilizamosinetd.confeditamos el archivo y a~nadimos # (comentario) al principio de la lnea:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
y, a cambio, agregamos la siguiente:
ftp stream tcp nowait root /usr/sbin/proftpd proftpd
Ahora que ya hemos instalado el servidor tendremos que modicar los archivos de conguracion.
9.6.1. Servidor ProFTP
La conguracion se encuentra almacenada en el archivo:/etc/proftpd.conf.
Sera necesario editar este archivo y al menos, realizar los siguente cambios:
1. EnServerName, colocamos el nombre de nuestro servidor.
2. EnServerType, colocamos el tipo de servidor (standaloneoinetd) en funcion de lo que hayamos
especicado al instalar.
3. Colocamos, despues deServerType, la lneaServerIdent o. De esta forma el servidor no mostrara su
version cuando se establece una conexion.
4. Especicamos elUsery elGroup, si colocamosnobodynadie podra acceder al servidor. Si queremos
colocar un usuario anonimo, se suele utilizar:user:ftpygroup:nogruop.
5. CambiamosMaxClientspor el numero maximo de conexiones simultaneas que deseamos permitir.
Este valor lo tendremos que determinar en funcion del numero de usuarios del servidor, el ancho de
banda disponible y los recursos de la maquina.
Podemos especicar multiples opciones mas, que se detallan en el archivo mediante comentarios, o
podemos instalar el paquete de documentacion y consultarlo all:
#apt-get install proftpd-doc
El archivo de conguracion/etc/ftpuserscontendra los nombres de los usuarios, a los que se les per-
mitira el uso del servicio FTP.
Jose Antonio Escartn Vigo, Junio 2005.

132 Servidor Linux para conexiones seguras de una LAN a Internet
9.6.2. Conguracion graca de ProFTP, interfaz Webmin
Estas misma tareas administrativas se pueden realizar comodamente con la herramienta web: Webmin.
Para instalar el modulo de ProFTPD para webmin:
#apt-get install webmin-proftpd
Figura 9.14: Modulo Webmin para ProFTPD
Desde la ventana de ProFTP accederemos a las opciones de conguracion global del servidor y de los
diferentes servidores virtuales que tengamos denidos.
Algunos de los parametros mas importantes a ajustar son el control de acceso y la autenticacion.
Cuando conguramos un servidor virtual podemos volver a ajustar algunos de los parametros establecidos
en las opciones globales, como por ejemplo las opciones de autenticacion de los usuarios y grupos en el
caso de que tengamos que establecer una conguracion de seguridad diferente en cada servidor virtual.
Desde las opciones de conguracion del servidor virtual tambien podremos establecer el directorio
utilizado para guardar los archivos a disposicion de los usuarios que se conecten a nuestro servidor de
forma anonima.
9.6.3. Clientes FTP
En Internet es posible encontrar diversas aplicaciones que nos permiten trabajar con servidores FTP
de una forma facil y rapida.
Desde nuestro entorno Debian se ponen a nuestra disposicion: gFTP (GNU FTP).
Para instalarlo:
#apt-get install gftp, . . . para ejecutarlo:#gftp
Es un cliente FTP, muy intuitivo y con entorno graco.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10
Servicios de usuario
10.1. Cuotas de usuario
Las cuotas permiten especicar lmites en dos aspectos del almacenamiento en disco:
El numero de inodos que puede poseer un usuario o un grupo
El numero de bloques de disco que puede ocupar un usuario o un grupo.
La idea que se esconde detras de las cuotas es que se obliga a los usuarios a mantenerse debajo de su
limite de consumo de disco, quitandoles su habilidad de consumir espacio ilimitado en un sistema.
Las cuotas se manejan en base al usuario o grupo y al sistema de archivos. Si el usuario espera crear
archivos en mas de un sistema de archivos, las cuotas deben activarse en cada sistema de archivos por
separado.
Primero deberemos de asegurarnos que la opcionquotaesta activada dentro de nuestro kernel (opcion
CONFIGQUOTA=yes). Para habilitar las cuotas, tanto para nuestros usuarios Linux, como los usuarios
Windows (Samba) necesitaremos instalar el programa:quote, para el manejo de cuotas.
Para ello realizaremos el siguiente apt:
#apt-get install quota
10.1.1. Arrancar el sistema de cuotas
Tenemos que que cambiar nuestro/etc/fstabpara indicarle que vamos a utilizar quotas, tenemos que
insertar lneas como las siguientes, ajustandolas al perl de nuesto sistema:
/dev/hda6 /usr ext2 defaults,grpquota 1 1
/dev/hda10 /home ext3 defaults,usrquota 1 1
/dev/hda7 /tmp ext2 defaults,usrquota,grpquota 0 2
El parametrogrpquota, habilita las cuotas de grupo en la particion que corresponde a/usr. El parame-
trousrquota, habilita las cuotas de usuario en la particion que corresponde a/home. En una misma
particion pueden haber cuotas de usuario y grupo, colocando los dos parametros (en el ejemplo/tmp).
Ahora debemos de crear los siguientes archivos, para manejar las cuotas de la particion/home:
#touch /home/quota.group
#touch /home/quota.user
Ambos archivos de registro, deben pertenecer a root y solo el tendra permisos de lectura y escritura:

134 Servidor Linux para conexiones seguras de una LAN a Internet
#chmod 600 /home/quota.user
#chmod 600 /home/quota.group
Los comandos que se muestran a continuacion nos permiten interactuar con el servicio de cuotas:
Comando Descripcion
#repquota -a Produce un resumen de la informacion de cuota de un sistema de archivos.
#quotacheck -avug Para realizar el mantenimiento de las cuotas. Se utiliza para explorar el
uso de disco en un sistema de archivos, y actualizar los archivos de registro
de cuotasquota.useryquota.gruop, al estado mas reciente. Se recomienda
ejecutar quotacheck periodicamente al arrancar el sistema o mediante el
anacroncada cierto tiempo (por ejemplo cada semana).
#edquota -g <cuota>Edita la cuota de elgrupo.
#quotaon -vaug Activa las cuotas.
#quotaoff -vaug Desactiva las cuotas.
Para arrancar el sistema de cuotas deberemos de colocar el servicio en uno de los archivosrc#.d
(runlevels, para mas informacion vease el apendice D). Es preciso arrancar las cuotas siempre despues de
que los sistemas de archivos incluidos en/etc/fstabhallan sido montados, en caso contrario las cuotas no
funcionaran.
Para obtener mas informacion podemos consultar el manual:
$man quota
$man -k quota
10.1.2. Asignar cuotas a los usuarios
Esta operacion se realiza con el comandoedquota. Es recomendable ejecutarquotacheck -avugpara
obtener el uso de los sistemas de archivos lo mas actualizado posible antes de editar cuotas.
Si ejecutamos el siguiente comando:
#edquota -u <user>
Se editaran todos los dispositivos que permitan tener cuotas de usuario, especicado en/etc/fstab.
Permitiendo modicar las cuotas deluser.
Los mismo ocurre en los grupos, si ejecutamos el comando:
#edquota -g <grupo>
Se editaran todos los dispositivos que permitan tener cuotas de grupo, especicado en/etc/fstab.
Permitiendo modicar las cuotas delgrupo.
10.1.3. Conguracion graca de Quote, interfaz Webmin
Para facilitarnos la tarea de administracion de cuotas, podemos utilizar el modulo Webmin para cuotas.
Para instalarlo, realizaremos un sencillo apt:
#apt-get install webmin-quota
Desde all podremos realizar, de forma graca, los mismos pasos que desde la lnea de comandos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 135
Figura 10.1: Gestion de cuotas de disco, en este caso/tmp
Jose Antonio Escartn Vigo, Junio 2005.

136 Servidor Linux para conexiones seguras de una LAN a Internet
10.2. Cups: Servidor de impresion
Como servidor de impresion utilizare Cups frente a LPD, este ultimo es un sistema bastante engorroso
en algunas conguraciones.
Como ventajas de Cups respecto a LPD, podemos citar las siguientes:
Es mas sencillo hacer funcionar impresoras extra~nas, es decir que estan poco difundidas.
Cada usuario puede tener su propia conguracion y no es necesario instalar varias impresoras cuando
cambiamos los parametros de una impresora (econofast, presentaciones, color, 600x600, . . . ).
Usa SLP e IPP para descubrimiento/publicacion del servicio e impresion, respectivamente. Esto
quiere decir que en una red debidamente congurada se puede encontrar las impresoras de todo el
mundo que las tiene compartidas, sin problemas.
Dispone de una interfaz de conguracion por web.
Pero no todo son alegras, tambien existen una serie de desventajas respecto a lpd:
LPD es bastante mas sencillo de hacer funcionar, para una maquina aislada con la impresora en
local.
Si no necesitamos soporte a usuarios Microsoft igual nos estamos complicando la vida con Cups.
10.2.1. Servidor Cups
Para instalar el servidor de impresion y que se pueda compartir por Samba, necesitaremos instalar
varios paquete mediante el siguiente apt:
#apt-get install cupsys cupsomatic-ppd cupsys-driver-gimpprint samba samba-common
Debemos de asegurarnos de tener soporte en el kernel, para puerto paralelo o en mi caso para usb
(necesitaremos hotplug). Si lo tenemos activado pero en el kernel lo dejamos como modulo, lo podremos
cargar con la herramienta:#modconf, en caso contrario, no tendremos mas remedio que recompilar el
kernel, con las opciones adecuadas a nuestro sistema de impresion.
Conguracion del servidor
Una vez tengamos instalados los archivos en el sistema vamos a congurar el servicio Cups. Para ello
editaremos el archivo:/etc/cups/cupsd.conf
Aqu estableceremos el acceso a la interfaz web, que nos permitira realizar la conguracion de una
forma mucho mas visual y agradable. Para conseguirlo modicaremos las siguientes opciones:
ServerName host.dominio.com
ServerAdmin [email protected]
HostNameLookups On
<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.0.*
</Location>
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 137
<Location /admin>
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 192.168.0.*
</Location>
En la opcion deAllow Frompondremos la IP, o rango de IP desde las cuales accederemos al servidor
Cups. En el ejemplo, se deniega el acceso a todo el mundo y despues se permite a las direcciones del rango
192.168.0.*
Como se detalla en los comentarios del archivo, podemos especicar los host y los rangos de IPs, de
diversas formas:
# All
# None
# *.domain.com
# .domain.com
# host.domain.com
# nnn.*
# nnn.nnn.*
# nnn.nnn.nnn.*
# nnn.nnn.nnn.nnn
# nnn.nnn.nnn.nnn/mm
# nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
# @LOCAL
# @IF(name)
Cuando hayamos terminado con la conguracion, reiniciaremos el servidor Cups:
#/etc/init.d/cupsys restart
Conguracion graca va web
Una vez hemos congurado los accesos, probaremos a conectarnos al servicio de administracion va
web. Para ello, nos conectaremos al host donde se encuentre el servidor, accediendo por el puerto631:
http://host.dominio.com:631
http://IP:631
http://localhost:631, si nos encontramos en local.
Utilizaremos el navegador que mas nos guste y el metodo de acceso que resulte mas adecuado a nuestro
sistema. En la gura 10.2 podemos observar la pantalla de presentacion.
Figura 10.2: Interfaz graca de conguracion para Cups
Jose Antonio Escartn Vigo, Junio 2005.

138 Servidor Linux para conexiones seguras de una LAN a Internet
Una vez situados en la web, para congurar la impresora debemos de seguir los siguientes pasos:
Seguidamente iremos al menu deAdministraciony nos autenticaremos como usuario root.
Ahora hacemos clic enA~nadir impresora. En este menu estableceremos un nombre a la impresora y
estableceremos el tipo de conexion.
Despues solo queda elegir el fabricante y el modelo adecuados.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 139
Una vez realizado esto tendremos la impresora congurada, desde el menu impresoras podemos impri-
mir una pagina de prueba y comprobar que la conguracion es correcta.
Figura 10.3: Impresora HP815 congurada para usar Cups
10.2.2. Servidor Cups para Samba
Para congurar Cups rn Samba editaremos el archivo/etc/samba/smb.conf, para a~nadir lo siguiente:
[global]
#Nombre del servidor Samba
server string = Paquito
obey pam restrictions = Yes
#Tipo de autenticacion. En este caso la base de datos, tdbsam que viene por defecto
passdb backend = tdbsam, guest
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n *Retype\snew\sUNIX\spassword:* %n .
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
printcap name = cups
dns proxy = No
panic action = /usr/share/samba/panic-action %d
printing = cups
security = share
# Habilitaremos localhost y nuestra subred
hosts allow = 192.168.0. 127.0.0.1
[HP815]
#El nombre tiene que ser el mismo en Cups y Samba
comment = HP Deskjet 815
browseable=yes
writable=no
printable=yes
create mode = 0700
Una vez realizada la conguracion basica de Samba, deberamos a~nadir los usuarios Samba para que
se puedan autenticar contra el servidor. Lo realizaremos de la siguiente forma:
#smbpasswd usuario, . . . nos pedira que le establezcamos una contrase~na.
Una vez realizado esto, volveremos a la conguracion Cups y realizaremos los siguientes cambios:
Editaremos el archivo/etc/cups/mime.convsy descomentaremos las lnea:
application/octet-stream
application/vnd.cups-raw
Editaremos el archivo/etc/cups/mime.typesy descomentaremos la lnea:
application/octet-stream.
Ahora solo queda reiniciar los servicios Samba y Cups. Despues todo debera funcionar.
/etc/init.d/samba restart
/etc/init.d/cupsys restart
Jose Antonio Escartn Vigo, Junio 2005.

140 Servidor Linux para conexiones seguras de una LAN a Internet
10.2.3. Clientes Linux
La conguracion del cliente, es muy similar a la instalacion del servidor Cups.
Para ello seguiremos una serie de pasos:
Agregamos al sistema los paquetes necesarios, con un apt:
#apt-get install cupsys cupsomatic-ppd cupsys-driver-gimpprint
Si no tenemos Ghostscript en el sistema, tambien lo a~nadimos:
#apt-get install ghostscript ghostscript-fonts
Ahora iniciaremos el servicio Cups:
#/etc/init.d/cupsys restart
Y entraremos va web a nuestro host cliente (http://localhost:631) para congurar una nueva im-
presora. La a~nadiremos de la misma forma que en el servidor.
La diferencia esta en la conexion, en este caso asignaremos una impresora del tipoWindows Printer
va Samba. Y en elDevice URI, colocaremos:
smb://<usuario:password>@<host.dominio.com>/<impresora>
Una vez nalizada podemos imprimir una pagina de prueba, para ver si todo esta congurado correc-
tamente.
10.2.4. Clientes Microsoft
Vamos a realizar la instalacion, mediante los siguientes pasos:
Accedemos aInicio->Conguracion->Panel de Control.
SeleccionamosImpresoras y faxes->Agregar nueva impresora.
En el asistente, especicamos la impresora como local y seleccionamosCrear un nuevo puerto->
Local Port
Establecemos como nombre de puerto:\host.dominio.com\<nombre_impresora>
Por ultimo, seleccionamos el modelo de impresora que vamos a agregar (en mi caso, HP 815).
Una vez hecho esto la impresora debera estar congurada y lista para imprimir.
10.2.5. Solucionar problemas
Si lo hemos congurado bien, pero no tenemos ni idea de porque no funciona podemos consultar los
logs de Cups (/var/log/cups/errorlog) y buscar all el problema.
Si queremos aumentar el nivel de debug de los logs, tendremos que cambiar la opcion \LogLevel" del
archivo/etc/cups/cupsd.conf, a niveldebug, de esta forma podremos encontrar el fallo.
Otra cosa primordial es consultar la documentacion Cups, a lo mejor nos encontramos con que el
modelo concreto de impresora que tenemos no esta soportado.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 141
10.3. Servidor Web
Un servidor web
1
es un programa que implementa el protocolo HTTP (hypertext transfer protocol).
Este protocolo esta dise~nado para transferir lo que llamamos hipertextos, paginas web o paginas HTML
(hypertext markup language): textos complejos con enlaces, guras, formularios, botones y objetos incrus-
tados como animaciones o reproductores de sonidos.
Sin embargo, el hecho de que HTTP y HTML esten ntimamente ligados no debe dar lugar a confundir
ambos terminos. HTML es un formato de archivo y HTTP es un protocolo.
Un servidor web se encarga de mantenerse a la espera de peticiones HTTP llevada a cabo por un
cliente HTTP que solemos conocer como navegador. El navegador realiza una peticion al servidor y este le
responde con el contenido que el cliente solicita. El cliente es el encargado de interpretar el codigo HTML,
es decir, de mostrar las fuentes, los colores y la disposicion de los textos y objetos de la pagina; el servidor
tan solo se limita a transferir el codigo de la pagina sin llevar a cabo ninguna interpretacion de la misma.
Sobre el servicio web clasico podemos disponer de aplicaciones web.

Estas son fragmentos de codigo
que se ejecutan cuando se realizan ciertas peticiones o respuestas HTTP. Hay que distinguir entre:
Aplicaciones en el lado del cliente: El cliente web es el encargado de ejecutarlas en la maquina
del usuario. Son las aplicaciones tipo Java o Javascript, el servidor proporciona el codigo de las
aplicaciones al cliente y este, mediante el navegador, las ejecuta. Es necesario, por tanto, que el cliente
disponga de un navegador con capacidad para ejecutar aplicaciones (tambien llamadas scripts).
Normalmente, los navegadores permiten ejecutar aplicaciones escritas en lenguaje javascript y java,
aunque pueden a~nadirse mas lenguajes mediante el uso de plugins.
Aplicaciones en el lado del servidor: El servidor web ejecuta la aplicacion. Una vez ejecutada, genera
cierto codigo HTML, el servidor toma este codigo recien creado y lo enva al cliente por medio del
protocolo HTTP.
Las aplicaciones de servidor suelen ser la opcion por la que se opta en la mayora de las ocasiones para
realizar aplicaciones web. La razon es que, al ejecutarse esta en el servidor y no en la maquina del cliente,
este no necesita ninguna capacidad adicional, como s ocurre en el caso de querer ejecutar aplicaciones
javascript o java. As pues, cualquier cliente dotado de un navegador web basico puede utilizar.
10.3.1. Servidor Apache
El servidor HTTP Apache es un servidor HTTP de codigo abierto para plataformas Unix (BSD,
GNU/Linux, etc.), Windows y otras, que implementa el protocolo HTTP/1.1 (RFC 2616) y la nocion de
sitio virtual. Cuando comenzo su desarrollo en 1995 se baso inicialmente en codigo del popular NCSA
HTTPd 1.3, pero mas tarde fue reescrito por completo. Su nombre se debe a que originalmente Apache
consista solamente en un conjunto de parches a aplicar al servidor de NCSA. Era, en ingles, a patchy
server (un servidor parcheado).
El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software
Foundation.
Apache presenta entre otras caractersticas mensajes de error altamente congurables, bases de datos
de autenticacion y negociado de contenido, pero fue criticado por la falta de una interfaz graca que ayude
en su conguracion (en nuestro caso esto queda resuelto con Webmin).
En la actualidad (2005), Apache es el servidor HTTP mas usado, siendo el servidor HTTP del 68 %
de los sitios web en el mundo y creciendo aun su cuota de mercado.
1
Denicion obtenida de Wikipedia, la enciclopedia libre: http://es.wikipedia.org
Jose Antonio Escartn Vigo, Junio 2005.

142 Servidor Linux para conexiones seguras de una LAN a Internet
Conguracion de Apache
Para instalar el servidor web y realizar su conguracion de una forma comoda y sencilla, utilizaremos
unos modulos para la herramienta web Webmin.
Para instalarlos, realizaremos el siguiente apt:
#apt-get install apache apache-doc webmin-apache webmin-htaccess
En la gura 10.4 podemos observar la pantalla de presentacion del modulo Webmin y los parametros
de conguracion que podemos modicar del mismo.
Figura 10.4: Interfaz Webmin para Apache
Directorios y archivos de conguracion
En nuestra distribucion Debian, los directorios de conguracion se encuentran colocados en los siguien-
tes puntos del sistema:
ServerRoot:/etc/apache, . . . directorio base de los archivos de conguracion.
DocumentRoot:/var/www, . . . directorio base de las paginas web del servidor.
Ejecutables de Apache:/usr/bin
El directorio base de los archivos de conguracion del servidor web se especica en el archivohttpd.conf,
utilizando la directivaServerRoot. Cuando el servidor web se inicia mediante los scripts de inicializacion,
la ruta de acceso ahttpd.confse especica en la lnea de comandos del servidor (httpd) y, desde all, se
especica el resto de archivos de conguracion (con la opcion-f).
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 143
Hay cuatro archivos de conguracion basicos en el directorio de conguracion. Estos archivos, y su
contenido habitual se describen en el cuadro 10.1. Los cambios de conguracion de Apache mas habituales
se realizan enhttpd.conf.
Cuadro 10.1: Archivos de conguracion de Apache
Archivo Contenido
httpd.confParametros generales de conguracion del servidor. Este archivo tiende ahora a contener
toda la conguracion, suprimiendo la necesidad desrm.confyaccess.conf.
srm.conf Directrices del procesamiento de las peticiones, entre otras: respuestas de error, opciones
de indexacion del directorio y de procesamiento de scripts. Este archivo dene el arbol
de documentos (espacio de nombres) visible por todos los usuarios, ademas de como el
servidor enva informacion de ese arbol a clientes remotos. La estructura del arbol de
documentos no tiene que coincidir necesariamente con la estructura del directorio de su
sistema de archivos local. Por lo general, este archivo no se sigue utilizando.
access.confOpciones de cada directorio: entre otras, control de acceso y restricciones de seguridad,
este archivo ya no se suele utilizar.
mime.typesDeniciones de tipos de archivo MIME para diferentes extensiones de archivos.
Historicamente, los archivos.confcontienen los diferentes tipos de informacion. Sin embargo, todas
las directrices del servidor web se pueden colocar en cualquiera de los tres archivos, y el servidor web las
interpretara correctamente. Con el n de reducir la confusion, Apache se distribuye ahora con todas las
opciones en el archivo principalhttpd.conf. Si existen los demas archivos.conf, se procesaran en el orden
siguiente:http.conf,srm.confyaccess.conf. Los archivos de conguracion adicionales (especialmente los
relacionados con la seguridad) deberan estar presentes en el arbol de documentos real que el servidor
procesa.
Estos archivos pueden ser modicados desde el modulo Webmin de Apache. Los parametros a los que
se puede acceder los podemos observar en la gura 10.5.
Sintaxis de los archivos de conguracion:
Los archivos de conguracion de Apache contienen una directiva por lnea. Se puede usar \n" al nal
de una lnea para indicar que una directiva continua en la proxima. No puede haber otros caracteres o
espacio en blanco entre el caracter \n" y el n de la lnea.
En las directivas, dentro de los archivos de conguracion, no se hace distincion entre mayusculas y
minusculas. Las lneas que comiencen con el caracter \#" seran consideradas comentarios, siendo ignora-
das. No se pueden incluir comentarios en una lnea, despues de una directiva de conguracion. Los espacios
y lneas en blanco antes de una directiva de conguracion se ignoran, de manera que se puede dejar una
sangra en las directivas para mayor claridad.
Podemos hacer un chequeo de la sintaxis de sus archivos de conguracion sin tener que reiniciar el
servidor, usandoapachectl congtesto la opcion-tde la lnea de comandos.
Directivas relevantes en los archivos de conguracion:
Las directivas mas habituales son las siguientes:
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<Location>
<LocationMatch>
<VirtualHost>
Jose Antonio Escartn Vigo, Junio 2005.

144 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 10.5: Parametros de conguracion de APACHE
Las directivas que se pongan en los archivos principales de conguracion se aplicaran a todo el servidor.
Si queremos cambiar unicamente la conguracion de una parte del servidor, podemos cambiar el rango de
accion de las directivas poniendolas dentro de las secciones<Directory>,<DirectoryMatch>,<Files>,
<FilesMatch>,<Location>, y<LocationMatch>. Estas secciones limitan el dominio de aplicacion de las
directivas dentro de ellas, a locales particulares dentro del sistema de archivos o URLs particulares. Estas
secciones pueden ser anidadas, para permitir un grado de seleccion mas no.
Apache tiene la capacidad de servir varios sitios web diferentes al mismo tiempo, esto se llama Hospe-
daje Virtual. El dominio de aplicacion de las directivas tambien puede ser delimitado poniendolas dentro
de<VirtualHost>, de manera que solo tendran efecto para pedidos de un sitio web en particular.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 145
A pesar de que la mayor parte de las directivas pueden ir dentro de estas secciones, hay algunas
directivas que pierden su sentido en algunos contextos. Por ejemplo, las directivas que controlan la creacion
de procesos solo pueden ir en el contexto del servidor principal. Para descubrir que directivas pueden estar
dentro de que secciones, revise el contexto de la directiva.
Proteccion implcita de archivos del servidor:
Una de las caractersticas de Apache que puede causar problemas de seguridad por ser mal interpretada
es el acceso implcito.
Si no se congura correctamente Apache es posible recorrer todo el sistema de archivos del servidor
desde una pagina web. Para evitarlo hemos de a~nadir las instrucciones siguientes a la conguracion del
servidor:
<Directory />
Order Deny, Allow
Deny from all
</Directory>
De esta forma evitaremos el acceso implcito al sistema de archivos. Para dar acceso a un conjunto
determinado de directorios a~nadiremos el siguiente codigo:
<Directory /home/*/public_html>
Order Deny, Allow
Allow from all
</Directory>
Archivos .htaccess
Apache permite una administracion descentralizada de la conguracion, a traves de archivos colocados
dentro del arbol de paginas web. Los archivos especiales se llaman normalmente.htaccess, pero se puede
especicar cualquier otro nombre en la directivaAccessFileName. Las directivas que se pongan dentro de los
archivos.htaccessse aplicaran unicamente al directorio donde este el archivo, y a todos sus subdirectorios.
Siguen las mismas reglas de sintaxis que los archivos principales de conguracion. Como los archivos
.htaccessse leen cada vez que hay una peticion de paginas, los cambios en estos archivos comienzan a
actuar inmediatamente.
Para ver que directivas se pueden colocar, podemos consultar el contexto de cada directiva. El admi-
nistrador del servidor pueden controlar aun mas que directivas son permitidas congurando la directiva
AllowOverrideen los archivos principales de conguracion.
Con se puede observar en la gura 10.6, en el moduloWebmin-htaccess, podemos especicar los direc-
torios a los que se va a tener acceso a traves de Apache.
Figura 10.6: Interfaz Webmin para HtAccess de Apache
Jose Antonio Escartn Vigo, Junio 2005.

146 Servidor Linux para conexiones seguras de una LAN a Internet
Archivos de log
Cualquier persona que pueda escribir en el directorio donde Apache escribe los logs, seguramente
podra tambien acceder al codigo de usuario (UID) con el que se ha arrancado el servidor, que normalmente
es el usuario root. No debemos permitir que los usuarios puedan escribir en el directorio donde se guardan
los logs sin tener presente las posibles consecuencias.
Fichero pid: Al arrancar Apache almacena el numero del proceso padre del httpd en el archivo
logs/httpd.pid. Este nombre de archivo se puede cambiar con la directivaPidFile. El numero del
proceso es para el uso del administrador, cuando quiera terminar o reiniciar el demonio.
Si el proceso muere (o es interrumpido anormalmente), entonces necesitaremos matar los procesos
hijos.
Log de errores: El servidor registrara los mensajes de error en un archivo de log, que sera por defecto
logs/errorlog. El nombre del archivo se puede alterar usando la directivaErrorLog; se pueden usar
diferentes logs de error para diferentes antriones virtuales.
Log de transferencia: El servidor normalmente registrara cada pedido en un archivo de transferencia
que, por defecto, seralogs/accesslog. El nombre del archivo se puede alterar usando la directiva
CustomLog; se pueden usar diferentes archivos de transferencia para diferentes antriones virtuales.
Estadsticas Webalizer
Para poder ver las estadsticas de uso del apartado Web de nuestro sistema, podemos instalar el pa-
queteWebalizer, pudiendose controlar por web mediante un modulo para Webmin.
Para realizaremos el siguiente apt:
#apt-get install webalizer webmin-webalizer
La instalacion nos pedira que indiquemos donde esta situado el archivo de logs de Apache. Tambien
es capaz de realizar estadisticas para el proxy Squid y los servidores FTP.
El archivo de conguracion de Webalizer es:/etc/webalizer.conf
Si ejecutamos desde el programa desde la lnea de comandos:#webalizer, se generara el reporte de
estadsticas, estos reportes quedaran almacenados, en formato html, en el directorio:/var/www/webalizer.
Si utilizamos el modulo para Webmin, lo primero que necesitaremos sera a~nadir los archivos de log de
Apache, situados en el directorio:/var/log/apache/.
En la gura 10.7 se muestran diferentes pantallas del modulo Webmin.
Hosts virtuales
El terminoHost Virtualse utiliza para referirse a la practica de mantener mas de un servidor web en
una sola maquina, as como para diferenciarlos por el nombre de servidor que presentan. En determinadas
circunstancias puede suceder que una empresa que dispone de un servidor quiera tener mas de un dominio
activo en el servidor, por ejemplo:www.empresa1.comywww.empresa2.com.
El servidor web Apache fue uno de los primeros que incluyo soporte de hosts virtuales basados en
IP y basados en nombre. A partir de la version 1.3.13 Apache tiene una nueva funcionalidad en la que
si cualquiera de los archivos de conguracion es un directorio, Apache entrara en ese directorio y anali-
zara cualquier archivo (y subdirectorio) que se encuentre all, tratandolos como archivos de conguracion.
Un posible uso de esta funcionalidad consistira en a~nadir servidores virtuales (VirtualHosts), creando
peque~nos archivos de conguracion para cada servidor virtual, y colocandolos en un directorio de con-
guracion. As, se puede insertar o eliminar servidores virtuales sin tener que editar ningun archivo, sino
simplemente quitando o copiando archivos. Esto facilita la automatizacion de estos procesos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 147
Figura 10.7: Modulo de Webmin para Webalizer
Con el boom de Internet y el consiguiente aumento del numero de sitios web, cada vez es mas frecuente
encontrar una sola maquina actuando como servidor para mas de un sitio web.
Existen unas cuantas formas de proporcionar mas de un sitio web desde una maquina. Una de ellas
consiste en ejecutar multiples copias de un servidor web, una para cada sitio; sin embargo, puede resultar
imposible por lo que respecta a los recursos de la maquina.
Hay dos metodos para soportar hosts virtuales como un solo servidor. Uno se basa en utilizar multiples
direcciones IP, una para cada sitio web, y otro se basa en soportar multiples nombres de host en (normal-
mente) una sola direccion IP. Se denominan, respectivamente, hospedaje virtual basado en IP y basado
en nombres. Una variante menor del hospedaje virtual basado en IP es el hospedaje virtual basado en
puertos, donde solo el puerto que forma parte de la direccion diferencia los hosts virtuales.
Los procedimientos y los parametros necesarios para congurar el hospedaje virtual utilizando estos
metodos diferentes se tratan en las secciones siguientes. He aqu unas cuantas preguntas que podemos
utilizar para seleccionar una de los metodos de hospedaje virtual:
>Disponemos de mas de una direccion IP?
>Cuantos sitios web pensamos hospedar?
>Necesitan todos los sitios utilizar el puerto HTTP predeterminado (80)?
>Se han asignado multiples nombres a la maquina?
>Deseamos separar estrictamente los sitios web?
Jose Antonio Escartn Vigo, Junio 2005.

148 Servidor Linux para conexiones seguras de una LAN a Internet
Para a~nadir un host virtual en Apache utilizaremos la directiva<VirtualHost>.
En el siguiente ejemplo podemos ver como se denira un servidor virtual para el dominiowww.aucad.com.
<VirutalHost www.aucad.com aucad.com>
ServerName www.aucad.com
DocumentRoot /usr/local/etc/httpd/vhost/aucad
ServerAdmin [email protected]
TransferLog /usr/local/etc/httpd/vhosts/aucad/logs/access_log
ErrorLog /usr/local/etc/httpd/vhosts/aucad/logs/error_log
ScripAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/
</VirtualHost>
En la gura 10.8, podemos observar la conguracion graca de Webmin para Servidores virtuales
Figura 10.8: Servidores Virtuales en Apache
Compartir carpetas en el servidor web
Una vez tenemos montado el servidor virtual, en cada servidor podemos colocar las carpetas web que
queramos, en la gura 10.9 podemos observar como se congurara.
Figura 10.9: Comparticion de carpetas en Apache
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 149
Arrancar el servidor Apache
El procesohttpd, se ejecuta como un demonio en segundo plano para atender las peticiones que se
realicen. Es posible que Apache sea invocado por el demonio Internet,inetdoxinetd, cada vez que se
realice una conexion al servicio HTTP usando la directivaServerType, aunque esto no se recomienda.
En el caso de que el puerto especicado en el archivo de conguracion sea el puerto por defecto, 80
(o cualquiera por debajo de 1024), sera necesario tener privilegios de root para poder iniciar Apache.
Una vez que el servidor ha arrancado y completado las actividades preeliminares como la apertura de
los archivos de registro, ejecutara los procesos hijo que realizan el trabajo de escuchar y responder las
peticiones de los clientes. El proceso principalhttpdcontinuara ejecutandose como root, pero los procesos
hijo se lanzaran con un usuario con menos privilegios.
La primera tarea que realizahttpdcuando es invocado es localizar y leer el archivo de conguracion
httpd.conf. Es posible especicar la ruta del archivo en el momento de la ejecucion la opcion-fen la lnea
de comandos de la forma:
#httpd -f /etc/apache/httpd.conf
En lugar de ejecutarhttpdirectamente, podemos utilizar el script llamando aapachectlque sirve para
controlar el proceso demonio con comandos simples como:
#apachectl start, . . . para arrancar el servidor
#apachectl stop, . . . para detener el servidor
Si el servidor Apache se ejecuta correctamente volvera a aparecer el smbolo del sistema y si ejecutamos
en un navegador:http://localhost, podremos ver la pagina de prueba ubicada en el directorio especicado
enDocumentRoot.
Si nos da algun fallo al arrancar normalmente es debido a que ya haba otra instancia de Apache corrien-
do o a que estamos intentado arrancar el servidor por un puerto privilegiado, sin utilizar privilegios de root.
Si queremos que Apache arranque automaticamente, lo deberemos colocar en uno de los scripts runlevel
(vease apendice D), de inicio del sistema. Si hemos realizado un apt, ya se habra colocado all.
Modulos Apache
Apache es un servidor modular. Esto implica que en el servidor basico se incluyen unicamente las
funcionalidades mas basicas. Otras funcionalidades se encuentran disponibles a traves de modulos que
pueden ser cargados por Apache. Por defecto, durante la compilacion se incluye en el servidor un juego
de modulos base. Los modulos van por separado y pueden ser incluidos en cualquier momento usando la
directivaLoadModule. Las directivas de conguracion pueden ser incluidas en forma condicional depen-
diendo de la presencia de un modulo particular, poniendolas dentro de un bloque<IfModule>. Para ver
que modulos han sido cargados en el servidor, se puede usar la opcion de lnea de comandos-l.
Para poder realizar las conguracion, en conjunto con el resto del sistema, podra ser interesante
utilizar alguno de los siguientes modulos Apache:
apache-utils
libapache-mod-security
apache-perl libapache-mod-perl
apache-php libapache-mod-php4
libapache-mod-jk
libapache-mod-auth-shadow
Jose Antonio Escartn Vigo, Junio 2005.

150 Servidor Linux para conexiones seguras de una LAN a Internet
libapache-mod-auth-radius
libapache-mod-ldap
libapache-mod-auth-mysql libapache-mod-acct-mysql
libapache-mod-repository
. . .
Como se muestra en la gura 10.10, podemos observar que modulos se encuentran instalados en el
sistema y habilitar o deshabilitar su uso.
Figura 10.10: Modulos instalados en APACHE
10.3.2. Apache-SSL: Conexiones seguras
Para instalar Apache con SSL, realizaremos el siguiente apt:
#apt-get install apache-ssl libapache-mod-ssl libapache-mod-ssl-doc
La informacion de esta seccion a sido obtenida de [BN00].
En esta seccion nos ocuparemos de otro aspecto de la seguridad: hacer privadas las comunicaciones
mantenidas entre los clientes y su servidor web, lo cual se consigue codicando dichas comunicaciones a
traves del protocolo SSL (Secure Sockets Layer).
El hecho de que el protocolo SSL este disponible para utilizarlo con los servidores web, supone un in-
teresante dilema para los gobiernos que desean controlar los sistemas de codicacion con el n de impedir
que caiga en las manos de entidades extranjeras a las que espiar.
SSL es un protocolo que fue denido, inicialmente, por Netscape Communications Corporation con el
n de posibilitar que dos maquinas que se comunicasen a traves de TCP/IP, codicasen la informacion
que se enviaran la una a la otra. Despues de garantizar, de esta manera, la seguridad de una sesion de
comunicacion, las dos maquinas pueden intercambiar informacion privada o condencial sin preocuparse
de que alguien pueda escuchar y utilizar la informacion. La seguridad es una caracterstica fundamental
para los servidores web utilizados para el comercio en Internet, esta actividad requiere con frecuencia la
transferencia de informacion personal y condencial, como numeros de tarjetas de credito o codigos de
cuentas bancarias.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 151
Sistemas de clave publica-privada
Para codicar los paquetes que viajan entre dos maquinas, las maquinas deben entender una codica-
cion de algoritmos comun, y deben intercambiar informacion que permita a una maquina descodicar lo
que la otra codica. Las partes de la informacion de seguridad utilizadas para codicar y descodicar la
informacion se llamanclaves.
La codicacion se realiza introduciendo una modicacion en la informacion localizada en una ubicacion,
mediante una clave. Se transmite, entonces, la informacion a otra ubicacion, donde se utiliza una clave para
restaurar la informacion a su forma original (descodicarla). En un sistema sencillo, la clave utilizada para
codicar la informacion es la misma que se utiliza para descodicarla. Es a esto a lo que se llamasistema
de clave privada, porque el contenido de la clave se debe mantener en secreto para que la informacion se
mantenga tambien en secreto. Sin embargo, los sistemas de clave privada presentan un problema porque
la clave se debe transmitir, de algun modo, de forma segura a la nueva ubicacion. SSL utiliza una forma
especial de codicacion denominadainfraestructura de clave publica (PKI), como parte del sistema global
que utiliza para proporcionar sesiones de comunicacion segura.
En un sistema de claves como este, se utilizan dos claves para el proceso de codicacion y descodica-
cion, y una de ellas (la clave publica) se puede hacer disponible para cualquiera sin que se vea afectada
la seguridad de las comunicaciones entre dos maquinas. De esta forma se soluciona el problema de la
seguridad de la distribucion de claves, inherente a los sistemas de claves.
Certicados: Vericacion de quien esta al otro lado de una sesion segura
Otro asunto relacionado con las comunicaciones seguras es si debemos conar en el servidor web con
el que nos estamos comunicando. Aunque un servidor web puede enviar a un cliente una clave para
realizar una comunicacion segura con el mismo, es posible que el servidor este hablando con el servidor
web erroneo (por ejemplo, el cliente puede proporcionar un numero de tarjeta de credito a un servidor
falso ejecutado por estafadores). Cuando se utiliza un sistema de clave publica-privada, tambien es posible
transmitir informacion adicional, lo que se denomina un certicado, donde se describa al servidor web y
a la organizacion que hay detras del mismo.
Este certicado puede estar \rmada" electronicamente por una agencia de conanza. Existen varias
agencias que investigan a la organizacion que este ejecutando el sitio web y la informacion recopilada en
el certicado y, despues, rman el certicado, por un precio. Los navegadores clientes poseen una lista de
agencias de conanza que utilizan para vericar que se esta comunicando con el servidor con el que el
usuario desea (es decir, que el servidor esta siendo ejecutado por la organizacion que el usuario espera).
Cuando instalemos un servidor web, debemos crear una pareja de claves publicas-privadas y un certi-
cado para utilizarlos con el servidor. Si deseamos ejecutar un sitio web seguro para uso publico, debemos
hacer que una de estas agencias de conanza rme el certicado.
Utilizacion del HTTP seguro: HTTPS
En las comunicaciones a traves de un servidor web seguro, el cliente utiliza un protocolo diferente,
denominado HTTPS (o HTTP seguro), en lugar de HTTP. Como se deduce del nombre, es similar al
HTTP, pero con seguridad a~nadida. Para acceder a un servidor web seguro, un usuario debe especicar
la URL con el identicador de protocolo HTTPS, como indico a continuacion:
https://www.example.com/cgi-bin/procesodetarjetasdecredito
Uno de los errores mas comunes que cometen los nuevos administradores de servidores de web seguros,
es no utilizar el tipo de protocolo correcto (https) en las URL que remiten al sitio web seguro. Mientras el
puerto predeterminado TCP para el protolo HTTP es el puerto 80, el puerto predeterminado para HTTPS
es 443. Cuando un navegador intenta acceder a un servidor seguro en un puerto equivocado, parece que
el navegador se boquea y, nalmente, se agota el tiempo de espera.
Esto puede desconcertar al usuario nal, de modo debemos prestar especial atencion a la comprobacion
de todas las URL que creemos y que esten vinculadas al sitio seguro.
Jose Antonio Escartn Vigo, Junio 2005.

152 Servidor Linux para conexiones seguras de una LAN a Internet
10.3.3. Creacion de un servidor web seguro
Debido a las restricciones gubernamentales impuestas en los EEUU a la exportacion, la mayora de las
distribuciones no proporcionan directamente la funcionalidad de servidor de web seguro. Linux se distri-
buye en todo el mundo y el gobierno de EEUU no permite la venta fuera de sus fronteras de determinadas
formas de codicacion. Lo que signica, desafortunadamente, que hay que ingeniarselas para conseguir,
generar e instalar la funcionalidad del servidor web seguro para Apache.
Existen dos opcion para agregar el protocolo SSL a Apache; la que se describe a continuacion, y que
se recomienda usar, se denominamodssl. Consiste en un conjunto de parches y un modulo especial para
utilizarlos con el codigo fuente de Apache y utiliza una biblioteca de criptografa, llamada OpenSSL, que
proporciona las funciones de SSL. OpenSSL se basa en una biblioteca mas antigua llamadaSSLeay, y
modsslse basa en el paquete que utilizamos,Apache-SSL. El hecho de que un paquete pueda constituir
la base para otro, aunque sea de la competencia, es uno de los mejores valores de la losofaOpen Sopurce
(de codigo fuente abierto).
Preparacion de los archivos especiales necesarios para la seguridad
El servidor necesita varios archivos especiales para operar de modo seguro. Alguno de ellos requieren
un procesamiento especial llevado a cabo por una agencia de conanza (una autoridad de certicacion)
para que el publico en general utilice correctamente el sitio web.
Los archivos siguientes se utilizan para la seguridad del servidor:
Un archivo de claves del servidor: Este archivo contiene una clave publica y una privada, utilizadas
por el servidor para codicar y descodicar operaciones.
Un archivo de certicado. Este archivo indica que la clave y el sitio web son gestionados por una
determinada organizacion. Si es una agencia de conanza quien rma este certicado, el usuario
puede conar en que es ciertamente esa organizacion la que ejecuta el sitio web.
Una peticion de rma del certicado: Este archivo contiene informacion del certicado, as como in-
formacion sobre la clave. Se debe enviar a la agencia de conanza (llamada autoridad de certicacion)
para que sea rmado.
Todos estos archivos son creado durante el proceso de instalacion de Apache-SSL. As como los nuevos
archivos de conguracion que quedaran alojados en:/etc/apache-ssl/.
A partir de ahora nuestrohttpd.conf, se encontrara situado en:/etc/apache-ssl/httpd.conf
Pareja de claves publica-privada:
La pareja de claves publica-privada se guarda en el archivoserver.key, de manera predeterminada.
Este archivo contiene las claves que utiliza el servidor para realizar la codicacion.
La clave privada de la pareja de claves publica-privada debe ser protegida en todo momento. Por
este motivo, durante la creacion de la clave, se nos pedira que introduzcamos una frase de contrase~na
para codicar el archivo que contiene la clave. Una vez que el archivo este codicado, se nos pedira que
introduzcamos la frase de contrase~na cada vez que el servidor se inicie para que pueda acceder al archivo.
Aunque pueda resultar molesto, es muy peligroso dejar sin codicar la clave privada en el disco, sin
protegerla con una frase de contrase~na.
Hay que utilizar la directivaSSLCerticateKeyFiledel archivo de conguracionhttpd.confdel servidor
para especicar el archivo de claves que ha de usarse para que las operaciones sean seguras.
El certicado del servidor
El archivo de certicado del servidor contiene informacion sobre la organizacion que ejecuta el sitio
web.

Este es transmitido al cliente cuando se establece una sesion segura, y el cliente lo utiliza para vericar
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 153
que el sitio es legal. A veces se le llama archivo X.509 porque ese es el nombre del estandar que dene el
formato utilizado para este archivo.
Para que el cliente acepte el certicado, debe ser rmado digitalmente por una CA (Certicate Autho-
rity, Autoridad de certicacion). Cada uno de los principales navegadores que soportan el protocolo SSL
posee una lista de las autoridades de certicacion de conanza cuyas rmas acepta. Cuando un navegador
se encuentra ante un certicado rmado por una CA que no conoce, suele proporcionar al usuario la infor-
macion sobre dicha autoridad y el certicado preguntandole si debe continuar. De modo que dependera del
usuario si confa o no en que el sitio al que esta conectado sea valido.
El archivo de certicados que se ha de utilizar aparece especicado en el archivo de conguracion del
servidor, mediante la directivaSSLCerticateFile
La peticion de rma del certicado
Si deseamos que los clientes confen en nuestro sitio, deberemos poseer un certicado rmado por una
agencia de conanza que funcione como autoridad de certicacion. Para que una autoridad de certicacion
nos rme el certicado, deberemos de crear un CSR (Certicate Signing Request, Peticion de rma del
certicado) y envarla a la autoridad con la documentacion y el dinero.
Existen varias agencias que actuan como autoridades de certicacion, lo que implica vericar la in-
formacion recopilada en el certicado y rmarlo digitalmente. El precio de este servicio se cobra por el
coste derivado de investigar la informacion que contiene el CSR y por asumir la responsabilidad de la
certicacion de nuestro sitio web.
En la siguiente lista se pueden observar algunas autoridades de certicacion:
CatCert: http://www.catcert.net
CertiSing: http://certisign.com.br/servidores
Entrust: http://www.entrust.net
IKS GmbH: http://www.iks-jena.de/produkte/ca
Thawte: http://www.thawte.com
VeriSign: http://www.verisign.com/site
Todas estas compa~nas aceptan las peticiones de rma de certicados generadas por el paquetemodssl,
para su uso con Apache ymodssl. Cuando creemos nuestro archivo de claves de servidor y el certicado,
se creara tambien la peticion de rma del certicado. La informacion solicitada para esta peticion debe
coincidir exactamente con el nombre de la compa~na, nombre registrado del dominio y otro datos que
la autoridad de certicacion solicita para que puedan procesar la peticion. Ademas, el archivo se cifra
automaticamente en un formato especial. Podemos encontrar informacion detallada sobre los precios y
las instrucciones para la creacion de la CSR, as como la documentacion solicitada por la autoridad de
certicacion, en los sitios web de cada compa~na.
POdemos actuar como nuestra propia autoridad de certicacion y rmar nuestro certicado para
comprobar nuestro servidor o para ejecutarlo internamente en nuestra organizacion. A esto se le denomina
autocerticacion. Los navegadores que se conecten a nuestro servidor no reconoceran nuestra rma, como
una de las que las autoridades de certicacion contemplan como validas, pero los usuarios lo pueden
aceptar manualmente en los navegadores cuando aparezca el mensaje de error.
Para nuestro uso interno, podemos eliminar el mensaje de error que aparece en el cliente, agregando
un archivo de autoridad de certicacion al navegador del cliente.
Cuando hayamos recibido un certicado rmado por una autoridad de certicacion real, sustituiremos
el certicado autormado copiando el nuevo sobre el archivo antiguo, o modicando el valor de la directiva
SSLCerticateFile.
Jose Antonio Escartn Vigo, Junio 2005.

154 Servidor Linux para conexiones seguras de una LAN a Internet
Ejemplo de la creacion de certicados para un servidor
Deberemos de tener instalado el SSL, ya se habra instalado conapache-ssl, pero para asegurarnos
realizamos el siguiente apt:
#apt-get openssl install ssl-cert ca-certificates
Esta es la parte facil, el siguiente paso es crear el conjunto de llaves, y despues congurar el httpd.conf
para utilizarlo correctamente. Busca donde esta instalado el OpenSSL y nos aseguraremos de que esta en el
$PATH, despues vamos al directorio donde tengamos los archivos de conguracion deapache-ssl(/etc/apache-
ssl/conf.d/).
Si se necesita crear un certicado de prueba, para uso interno, se puede hacer:
#openssl genrsa -des3 > httpsd.key
#openssl req -new -x509 -key httpsd.key > httpsd.crt
Los navegadores se quejaran sobre este certicado, puesto que esta creado por la persona que lo rma,
y no son ables. Si quieres generar un certicado, y una peticion de certicado para enviar a alguien como
CatCert o Verisign, entonces hay que hacer:
#openssl genrsa -des3 > httpsd.key
#openssl req -new -key httpsd.key > httpsd.csr
Ahora, conguraremos Apache para que utilize estos certicados. Se necesitan a~nadir varias cosas al
archivo de conguracion de Apache, para conseguir que ejecute las extensiones SSL con nuestros certi-
cados. Tambien sera preciso a~nadir algunas conguraciones globales.
Pasemos a ver las modicaciones de la conguracion de/etc/apache-ssl/httpd.conf:
# Hay que decirle al Apache que escuche en el puerto 443, por defecto solo escucha en el 80
Listen 443
# Si utilizamos mas de un sitio seguro en una IP necesitaremos:
NameVirtualHost 10.1.1.1:443
# Es una buena idea deshabilitar el SSL globalmente y habilitarlo basado en hosts
SSLDisable
# SSL cache server, sin esto el servidor se caera
SSLCacheServerPath /usr/bin/gcache
# Puerto en el que se ejecuta el servidor
SSLCacheServerPort 12345
# timeout del SSL cache, 300 es un buen valor, lo acortaremos para realizar pruebas
valueSSLSessionCacheTimeout 300
Ahora crearemos un host virtual con SSL habilitado:
<VirtualHost www.example.com:443>
DocumentRoot /www/secure/
ServerName www.example.com
ServerAdmin [email protected]
ErrorLog logs/https_error.log
TransferLog logs/https_access.log
# Habilitar SSL para este host virtual
SSLEnable
# Esto prohibe el acceso excepto cuando se utiliza el SSL. Muy comodo para defenderse contra errores de configuracion que
# ponen al descubierto elementos que deberian estar protegidos
SSLRequireSSL
SSLCertificateFile /usr/conf/httpsd.crt
# Si la llave no esta combinada con el certificado, utilizamos esta directiva para apuntar al archivo de la llave.
SSLCertificateKeyFile /usr/conf/httpsd.key
# Si se requiere que los usuarios tengan un certificado, se necesitaran un monton de certificados raiz, para que se puedan
# verificar sus certificados personales SSLCACertificateFile /etc/ssl/ca-cert-bundle.pem
SSLVerifyClient none
</VirtualHost>
Con estas modicaciones ya deberamos poder acceptar peticiones por el puerto seguro. Para probarlo
podemos ejecutar la siguiente lnea en un navegador:https://localhost:443
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 155
Directrices de seguridad especiales
Se a~naden las directrices de seguridad para el control demodssla la documentacion de Apache que
se instala cuando genera el servidor web seguro (podemos estudiarlas en profundidad all). Sin embargo,
merece la pena destacar aqu unas cuantas directrices de seguridad para dar una vision general sobre su
utilizacion.
Debemos utilizar la directivaSSLCipherSuitepara controlar que algoritmos se permiten para las
sesiones de seguridad. A menos que seamos expertos en seguridad, deberamos dejar estas congu-
raciones tal y como se encuentran.
Debemos utilizar la directivaSSLSessionCachepara indicar si deseamos soportar una cache para
comunicar la informacion entre los procesos que intervengan de la sesion SSL (y, si as fuera, cual va
a ser el nombre del archivo). Debido a que las sesiones seguras requieren un trabajo importante de
conguracion, y debido a que las peticiones de los clientes pueden ser servidas por multiples procesos
servidores hijos, el uso de una cache de sesion para compartir la informacion entre los procesos hijo
puede acelerar las cosas considerablemente. Debemos utilizar el valornone(ninguna) para desactivar
la cache de la sesion odbm, seguido de la ruta del archivo que se va a utilizar para la cache de sesion.
Debemos utilizar las directivas SSLLog y SSLLogLevel para crear registros donde almacenar la
informacion especca de SSL.
Finalmente, los certicados SSL y X.509 pueden ser utilizados tambien por el servidor para la au-
tenticacion de los clientes utilizando los certicados:SSLCACerticatePath, SSLCACerticateFile,
SSLVerifyClient, SSLVerifyDepth y SSLRequire.
Comprobacion de la legalidad
En su innita sabidura, las comisiones del gobierno de los EEUU han creado leyes que convierten
en un delito exportar desde este pas ciertos programas potentes de codicacion. Aparentemente, se ha
tomado esta medida para impedir que una herramienta de codicacion muy potente caiga en manos de
terroristas y gobiernos no simpatizantes. El resultado de esta situacion, sin embargo, es que la mayora de
los programas buenos de codicacion se desarrollan en otros pases y es EEUU el pas que los importa, en
lugar de ser al contrario. El software de codicacion que EEUU importa, ya no puede ser exportado desde
EEUU, ni al propio autor original.
Hasta hace muy poco tiempo, la compa~naRSA Data Security, Inc.posea una patente norteamericana
sobre determinados algoritmos de codicacion de claves publicas-privadas utilizados en el protocolo SSL.
La patente del algoritmo de RSA expiro en el 2000, de modo que ya no existen restricciones en la mayor
parte del codigo. Sin embargo, si tenemos codigo especcamente de RSA, todava nos encontraremos
ligados por el contrato de licencia.
Si simplemente pensamos utilizar Apache conmodsslcomo un servidor web seguro dentro de nuestra
organizacion seguramente no tendremos problemas. Si, por el contrario, pensamos distribuir el servidor web
o una maquina que lo contenga al extranjero, es necesario consultar con un abogado para conocer cuales
son las leyes de exportacion e importacion de criptografa en el lugar, debemos asegurarnos de atenernos
a ellas. Por suerte, los cambios que se han producido recientemente tanto en el gobierno norteamericano,
como en sus leyes, hacen la circulacion de la criptografa mas facil. Con el tiempo se vera hacia donde nos
lleva esta tendencia.
Jose Antonio Escartn Vigo, Junio 2005.

156 Servidor Linux para conexiones seguras de una LAN a Internet
10.3.4. Apache 2.x
La version 2.x de Apache incorporara una gran cantidad de mejoras y nuevas opciones entre las que
cabe citar las siguientes:
Soporte de multi-threads: De esta forma Apache puede ejecutarse utilizando multiples procesos como
suceda con la version 1.3.x, con multiples hebras de un unico proceso o en una forma hbrida,
proporcionando de esta forma una mejor escalabilidad.
Soporte para multiple protocolos: Apache incluye la infraestructura necesaria para servir multiples
protocolos.
Nueva API: La version 2.x incorpora multiples cambios en la API (Aplication Programming Inter-
face) mejorandola y a~nadiendo nuevas funciones que permiten incorporar nuevas capacidades a los
modulos. Uno de los inconvenientes de estas modicaciones es la incompatibilidad con los modulos
existentes para Apache 1.3.
Soporte para IPv6: Apache permite trabajar con el protocolo IPv6.
Filtrado: Los modulos de Apache ahora pueden actuar como ltros analizando el contenido que es
servido.
Errores multilenguaje: Los mensajes de error devueltos al navegador pueden proporcionarse de forma
automatica en funcion del idioma del navegador.
Conguracion simplicada: Algunas directivas confusas han sido simplicadas. Tambien han sufrido
mejoras algunos de los modulos que se incluyen por defecto en la instalacion basica de Apache.
Algunos de estos modulos son:
mod_ssl: Este nuevo modulo proporciona una interfaz a los protocolos de encriptacion SSL/TLS
proporcionados por OpenSSL.
mod_dav: Es un modulo nuevo que implementa DAV (Distributed Authoring and Versioning)
para HTTP. DAV es una especicacion para publicar y mantener el contenido de una web.
mod_proxy: Este modulo ha sido completamente reescrito para aprovechar las nuevas carac-
tersticas de ltrado e implementar de una forma mas eciente HTTP/1.1
Para instalarlo deberemos ejecutar el siguiente apt:
#apt-get install apache2 apache2-doc
10.3.5. Ataques al servidor Web
Actualmente casi todas las empresas tienen que ejecutar un servidor web, sin embargo, los servidores
web se sabe que tienen defectos y brechas de seguridad. La idea intrnseca de un servidor web (un usuario
puede extraer archivos del servidor sin ninguna autenticacion) establece las brechas de seguridad. Este
gran numero se debe al aumento creciente de tipos de protocolos y comandos con los que los servidores
tienen que tratar. Cuando las paginas web solo consistan en HTML, era mucho mas facil controlarlo todo.
Pero ahora que los servidores tienen que interpretar ASP, PHP y otro tipo de traco que contiene codigo
ejecutable. Ahora que las aplicaciones web son cada vez mas complejas, con el tiempo estos problemas
solo se incrementaran.
Algunos servidores web son mas seguros que otros, pero todos tienen sus problemas. Y un servidor
web pirateado puede signicar mas que la verguenza de una pagina web deformada si el servidor tambien
tiene acceso a bases de datos y otros sistemas internos, algo bastante comun en nuestros das.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 157
10.4. Servidor de correo
Para montar el servidor de correo, el siguiente conjunto de programas:
Exim4: Servidor de correo corporativo (MTA), para uso local.
Fetchmail: Servidor de correo externo, para importar cuentas ajenas.
Courier-imap: Servidor de IMAP para dar acceso desde internet.
Horde: Webmail, para consultar el correo por IMAP desde Internet. Para hacer funcionar Horde,
deberemos ejecutar ademas los siguientes servicios.
Apache.
PHP.
Para autenticar usuarios: LDAP o MySQL.
Procmail: Procesador de correo. Es utilizado para ltrar los correos a traves de los siguientes pro-
gramas
ClamAv: Antivirus de correo.
SpamAssassin: Filtro de Spam, basado en reglas.
Bogolter: Filtro de Spam, basado en el teorema de Bayes.
El sistema es un poco complejo pero consigue tener correo interno y externo, centralizado en el servidor
corporativo. Ademas podra ser consultado desde el exterior mediante el Portal WebHorde, consiguiendo
que este libre de virus y Spam.
En las siguientes secciones detallo la conguracion del sistema.
Basado en artculos publicados en http://bulma.net
10.4.1. Exim: Correo corporativo
Para instalar un servidor de correo corporativo, lo primero que necesitaremos es disponer de programa
que haga las veces de servidor de correo local (MTA, Mail Transfer Agent), en nuestro caso elegiremos el
servidorExim4.
Para instalarlo ejecutamos el siguiente apt:
#apt-get install exim4
Durante la conguracion especicaremos el uso de un unico archivo de conguracion global:
/etc/exim4/exim4.conf.template
Ademas se nos pedira que contestemos a una serie de preguntas para congurar el servidor:
1. Tipo de uso que vamos a dar a Exim. Como posteriormente queremos enviar nosotros mismos los
e-mails, seleccionaremos la primera opcion.
2. Nombre visible de nuestro sistema, es decir, el \mail name" o nombre de dominio en la direccion de
correo. Si no sabemos que contestar, colocamos cualquier cosa, despues lo podemos modicar desde
el archivo de conguracion.
3. Si tenemos otro nombre para el correo entrante, presionamos intro para dejar la opcion por defecto.
4. Servidores virtuales de correo, en este caso no lo vamos a utilizar.
5. Hacer de elay" para otros dominios, tampoco se aplica en nuestra situacion.
Jose Antonio Escartn Vigo, Junio 2005.

158 Servidor Linux para conexiones seguras de una LAN a Internet
6. Quien recibira los mensajes del \postmaster" o oot", es decir, quien recibira los logs de error.
Colocamos un usuario del sistema que habilitemos para esta tarea.
7. Por ultimo preguntara si queremos guardar nuestro archivo dealiaseso sobrescribir el ya existente.
Por si lo necesitamos mas adelante, es mejor guardar la conguracion anterior.
En el archivo,/etc/exim4/exim4.conf.template, encontramos reunidos todos los parametros de con-
guracion. Editaremos este archivo, para que reparta el correo local en el formatoMaildir, consiguiendo
que sea compatible con \courier-imap" (lo utilizaremos mas adelante para el Webmail).
La parte que tenemos que cambiar es la que hace referencia al reparto local de los e-mails, por defecto
los enviara al archivo:/var/mail/<usuario>, concatenandose uno detras de otro, esto es precisamente lo
que queremos evitar.
Nos situamos en la seccion:30exim4-congmailspool. Una vez all comentaremos la siguiente lnea:
file = /var/spool/mail/${local_part}, . . . agregandole un # delante.
Y a cambio, debajo de esa lnea a~nadiremos lo siguiente:
driver = appendfile
maildir_format = true
directory = /home/${local_part}/Maildir
create_directory = true
group = mail
mode = 0600
check_string = ""
escape_string = ""
prefix = ""
suffix = ""
Con esas lneas conseguiremos que el reparto se realice en el directorio de correo de cada usuario:
/home/<usuario>/<Maildir>, siendousuariocualquier usuario del sistema yMaildiruna carpeta que
hemos creado para guardar el correo. Podemos colocar la que queramos, en esta carpeta se guardara el
correo del usuario en formatomaildir.
Al reiniciar Exim:/etc/init.d/exim restart, . . . ya tedremos el correo en formatoMaildir.
Monitor de Exim, interfaz Webmin
Podemos monitorizar el servidor de correo Exim si instalamos el siguiente modulo para Webmin:
#apt-get install webmin-exim
Como se aprecia en la gura 10.11, podremos visualizar las siguientes informaciones:
Los Logs del servidor
La cola de correo del servidor
Estadistas de mensajes
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 159
Figura 10.11: Monitor para Exim a traves del modulo para Webmin
10.4.2. Fetchmail: Correo externo
Fetchmail es un cliente de IMAP y POP que permite a los usuarios descargar automaticamente el
correo de cuentas remotas en servidores IMAP y POP y almacenarlos en carpetas de correo locales. Una
vez en local, se puede acceder a los correos de una forma mas sencilla y utilizando multitud de programas
cliente.
Como caractersticas mas habituales podemos citar:
Soporte de POP3, APOP, KPOP, IMAP, ETRN y ODMR.
Puede reenviar correo utilizando SMTP lo que permite que las reglas de ltrado, reenvo y \aliasing"
funcionen correctamente.
Se puede ejecutar en modo daemon para comprobar periodicamente el correo entrante.
Puede recuperar correo de multiples carpetas y reenviarlos, en funcion de la conguracion establecida,
a varios usuarios locales.
Para instalarlo simplemente ejecutaremos el siguiente apt:
#apt-get install fetchmail fetchmail-ssl
El archivo de conguracion general del sistema se situa en/etc/fetchmaily desde aqu se puede
redireccionar el correo a cada usuario. Este podra ser un listado tpico:
Jose Antonio Escartn Vigo, Junio 2005.

160 Servidor Linux para conexiones seguras de una LAN a Internet
set logfile "/home/josan/.fetchmail.log"
# establecemos el tiempo en segundos entre el que se estar\'a
# intentando recuperar el correo de los distintos servidores.
set daemon 120
#
# Recuperamos el correo de [email protected] y lo
# depositamos en el buzon de correo local de josan.
#
#
poll servidorcorreo.dominio.com #Colocamos el servidor de correo externo
proto pop3 #En este caso POP3
user usuario #Usuario del correo externo
pass "mi_password" #Password del correo externo
to josan #Usuarios local, que recibira el correo
Creamos este archivo y lo modicamos con los parametros de las cuentas POP3 de los usuarios, el
bloquecuenta-usuariolo podemos repetir tantas veces como sea necesario.
Despues solo tenemos que crear un archivo por usuario para que cuando ese usuario ejecute Fetchmail
lea las opciones del archivo de conguracion y se descargue el correo. Ese archivo se llamara:~/.fetchmailrc
Podriamos simplicar la conguracion de los archivos de usuario mediante el paquetefetchmailconf.
Para instalarlo realizamos el siguiente apt:
#apt-get install fetchmailconf
Este podra ser el archivo tipico de usuario~/.fechmailrc:
set postmaster "pepe"
set bouncemail
set no spambounce
set properties ""
# set daemon 90
# Cuentas de correo de ono: [email protected] y [email protected]
poll pop3.ono.com with proto POP3
user 'pepe1' there with password 'ElPasswordDePepe1' is 'pepe' here
user 'pepe2' there with password 'ElPasswordDePepe2' is 'pepe' here
#
# Cuentas de correo terra: [email protected] [email protected] y [email protected]
poll pop3.terra.es
user 'pepe2' there with password 'ElPasswordDePepe2' is 'pepe' here
user 'pepe3' there with password 'ElPasswordDePepe3' is 'pepe' here
user 'pepe4' there with password 'ElPasswordDePepe4' is 'pepe' here
#
# Cuentas de correo de Microsoft: [email protected] ;-)
poll microsoft.com with proto POP3
user 'wgates' there with password 'Hasecorp' is 'pepe' here
Automatizar la descarga de correo externo
Para ejecutar Fetchmail automaticamente tenemos las siguientes opciones:
Ponerlo en el cron
Ejecutarlo como demonio del sistema. Para ello descomentamos la lnea:set daemon, del archivo de
conguracion.
Si lo ejecutamos en modo daemon, le indicaremos cada cuantos segundos se ejecutara Fetchmail. Para
lanzar el demonio de forma automatica tenemos que ejecutarlo, en alguno de los archivos de perl, como
.proleo.bashrc(incluiremos la instruccion, fetchmail). Si preferimos lanzarlo manualmente, ejecutamos
desde la lnea de comandos:#fetchmail
Si lo queremos ejecutar en el cron, a~nadiremos al archivo/var/spool/cron/crontabs/<usuario>, en
nuestro casopepe:*/3 * * * * /usr/bin/fetchmail -s
Esto indicara que se ejecute fetchmail cada tres minutos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 161
Conguracion graca de Fetchmail, interfaz Webmin
Para simplicar el proceso de conguracion podemos utilizar nuestra herramienta de conguracion por
web: Webmin.
Para instalar el modulo realizaremos el siguiente apt:
#apt-get install webmin-fetchmail
Figura 10.12: Modulo Webmin para Fetchmail
10.4.3. Horde: Webmail
Un Webmail no es mas que una interfaz para leer el correo electronico del servidor de correo, por medio
de una pagina web.
Horde es un programa gestor de correo IMAP para ser usado con un navegador y que esta disponible
para todas las cuentas de correo de los servidores locales.
El protocolo IMAP (Internet Message Access Protocol), es un protocolo de red de acceso a mensajes
electronicos almacenados en el servidor. Mediante IMAP se puede tener acceso al correo electronico desde
cualquier equipo que tenga una conexion a Internet. Una vez congurada la cuenta IMAP, podemos espe-
cicar las carpetas que deseamos mostrar y las que deseamos ocultar, esta caracterstica lo hace diferente
del protocolo POP3.
Horde cuenta con las siguientes caractersticas:
Enviar y Recibir mensajes con multiples archivos adjuntos.
Despliegue en lnea de archivos adjuntos de imagenes
Interfaz de usuario amigable y atractiva basada en iconos.
Soporte para multiples mensajes, incluyendo Ingles, Espa~nol, Frances, Aleman, Hungaro, Italiano,
Polaco, Portugues, Noruego, Ruso, . . .
Multiples carpetas, por defecto cuenta con la opcionenviar, lapapeleray soporta algunas creadas
por los usuarios.
Conguracion en lmite del tama~no para archivos adjuntos en salida.
Preferencias de usuarios, incluyendo numero de mensajes en pantalla, lenguaje, rma y estilo.
Cada usuario tiene su propias libreta de direcciones.
Jose Antonio Escartn Vigo, Junio 2005.

162 Servidor Linux para conexiones seguras de una LAN a Internet
La ventaja de usar la web es que lo podemos hacer desde cualquier ordenador y siempre tendremos la
misma conguracion, los mensajes quedan en el servidor organizados en carpetas. En cambio eso no pasa
con POP3, ya que nos bajamos los mensajes y los tenemos que organizar en nuestro disco local.
Para instalar el Webmail Horde, simplemente deberemos ejecutar el siguiente apt:
#apt-get install horde3
Para acceder de forma directa a este gestor de correo, deberemos usar las direcciones:
http://dominio.tld:2095/horde/
https://dominio.tld:2096/horde/, . . . puerto seguro
Para poder utilizar Horde tenemos dos opciones:
Validar los usuario mediante directorio LDAP
Utilizar una base de datos de usuarios MySQL
Es mejor decantarse por la opcion MySQL, ya que Jabber tambien lo utiliza y nos sera util mas
funciones. Es decir, para poder utilizar Horde necesitamos tener instalados los:
Apache
PHP
MySQL
Si vamos a instalar el Webmeil Horde, podemos obtener toda la informacion detallada en la siguiente
direccion de Internet:
http://patux.glo.org.mx/imp-mini-como.html, HowTo sobre como instalar el servidor IMAP a traves
de Horde.
10.4.4. Protocolo IMAP
El protocolo IMAP nos servira para consultar el correo va web con cualquier navegador, pudiendo
realizar las conexiones desde un lugar ajeno a la empresa o mediante un cliente IMAP.
La necesidad surge ya que el protocolo POP3 es poco exible y accediendo desde otros correos nos
puede descargarnos los e-mails al host local, si es que as esta congurado en ese cliente, con la consiguiente
perdida de los e-mails del usuario que se encontraban almacenados en el servidor.
El servidor IMAP, lo que hace es recoger el correo que se encuentra en el$HOMEde un usuario y
servirlo al cliente IMAP interactivamente. Es decir, los mensajes siempre estan en el servidor y solo bajan
al cliente si son seleccionados para lectura en local, y no por Internet.
Para utilizarlo, necesitaremos tener el servidor de correoEximpara enviar los correos y tambienFetch-
mailpara obtener los correos externos. En este punto supondremos que tenemos instalado y funcionando
en el sistema: Exim4 y Fetchmail.
En Debian para poder realizar la tarea de servidor IMAP tenemos dos paquetes:Corier-imapyMail-
drop.
Conguracion de Courier-imap
Para instalarlo es muy simple:
#apt-get install courier-imap courier-imap-ssl
Ahora, editaremos el archivo de conguracion de courier-imap:/etc/courier/imapd.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 163
All cambiaremos la siguiente lnea:ADDRESS = 0porADDRESS = 127.0.0.1,localhost
Es recomendable, por motivos de seguridad, congurar courier-imap sobre SSL. Si lo hacemos no
debemos olvidar congurar la cuenta cliente como SSL.
Conguracion Maildrop
Para que el servidor solo sea accesible desde nuestra maquina. Deberemos instalar un ltro de e-mails,
para que nos coloque el correo en nuestra carpetaMaildir, o como la hayamos llamado.
Para instalarlo es muy simple:
#apt-get install maildrop courier-maildrop
Nos permite ltrar los e-mails para as colocarlos en subcarpetas, segun el asunto, el remitente, etc.
La conguracion basica es que nos deje todos los emails en el directorioMaildir. Estas opciones son con-
gurables desde el archivo de conguracion:~/.maillter.
El contenido del archivo debe de ser el siguiente:
DEFAULT="$HOME/Maildir"
logfile "$DEFAULT/.maildroplog"
Finalmente, creamos la carpetaMaildir, con el comando maildirmake:
#maildirmake Maildir
Ahora solo falta comprobar su funcionamiento. Cada cierto tiempo el usuario, medianteFetchmail,
descargara el correo en la carpeta. Despues solo es necesario congurar un cliente de correo para que lea
del servidor de correo Imap. Por ejemplo, podemos congurarMutt, que comprende a la perfeccion el
correo en formatoMaildir.
A la hora de acceder al correo, deberemos colocar como nombre de servidorlocalhosty como usua-
rio/contrase~na, el que tengamos asignado en el sistema.
10.4.5. Filtrado de correo, eliminar virus y Spam con Procmail
Ahora que ya tenemos todas nuestras cuentas de correo centralizadas en nuestra maquina, vamos a
procesar el correo. Esta tarea la lleva a cabo Procmail, justo antes de que se deje el correo en el Maildir
de cada usuario.
Para instalar Procmail, simplemente ejecutaremos el siguiente apt:
#apt-get install procmail
Procmail es una herramienta muy potente que permite repartir el correo, ltrarlo, organizarlo en car-
petas, reenviarlo automaticamente, etc. Nosotros lo utilizaremos para pasar el antivirusClamAvy los
ltros de Spam:SpamAssassinyBogolter.
Las posibilidades son practicamente ilimitadas y dependen de nuestra imaginacion y de nuestras ha-
bilidades, pero basicamente el proceso consiste en dos pasos:
Identicar el correo
Procesar el correo
Para identicar el correo, usaremos las expresiones regulares, de forma que los todos correos que
cumplan unas determinadas condiciones, pasaran a realizar el proceso que queramos.
Jose Antonio Escartn Vigo, Junio 2005.

164 Servidor Linux para conexiones seguras de una LAN a Internet
Redireccionamiento de correo
Si queremos redireccionar el correo desde Fetchmail, necesitamos editar o crear el archivo de congu-
racion Fetchmail del usuario:~/.fetchmailrc.
En el agregaremos las siguientes lneas:
$ cat $HOME/.forward
| procmail
Con esto, cada vez que nos llegue un correo (.forward), se ejecutara Procmail de forma automatica.
Otra opcion interesante es procesar directamente un archivo de correo (*.mbox) de forma manual, a
el se aplicaran los ltros indicados en el~/.procmailrc:
$formail -s procmail < INBOX.mbox
En este caso es recomendable utilizar un script para Procmail, como el siguiente:
#!/bin/sh
ORGMAIL=/var/mail/$LOGNAME
if cd $HOME &&
test -s $ORGMAIL &&
lockfile -r0 -l1024 .newmail.lock 2>/dev/null
then
trap "rm -f .newmail.lock" 1 2 3 13 15
umask 077
lockfile -l1024 -ml
cat $ORGMAIL >>.newmail &&
cat /dev/null >$ORGMAIL
lockfile -mu
formail -s procmail <.newmail &&
rm -f .newmail
rm -f .newmail.lock
fi
exit 0
Conguracion de Procmail y reglas de ltrado
Los archivos de conguracion de Procmail, son los siguientes:
/etc/procmailrc: Archivo de conguracion del servidor Procmail.
~/.procmailrc: Archivo de conguracion Procmail, por cada usuario.
Este sera un archivo~/.procmailrctpico:
PATH=/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
:0fw: spamassassin.lock
* < 256000
| spamassassin
# Algunas versiones de Spamassassin eliminan la letra "F"
# de la cabecera "From"
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "
:0 fhw
| sed -e '1s/^/F/'
}
Opcionalmente podramos mandar los correos de Virus y Spam a/dev/null, pero los ltros no son
infalibles, por lo que por lo menos al principio, es mejor revisarlos antes de borrarlos.
Este sera el formato, que habra que a~nadir al~/.procmailrc, para borrar los correos que cumplan una
determinada regla:
:0
* ^X-Regla: Yes
/dev/null
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 165
Conguracion graca de Procmail, interfaz Webmin
Para simplicar el proceso de conguracion podemos utilizar nuestra herramienta de conguracion por
web: Webmin.
Para instalar el modulo realizaremos el siguiente apt:
#apt-get install webmin-procmail
Figura 10.13: Modulo Webmin para Procmail
Desde este modulo, ademas de editar manualmente el archivo de conguracion/etc/procmail, como
podemos observar en la gura 10.14, podemos especicar las acciones que ejecutara el ltro.
Figura 10.14: Crear acciones gracamente en Procmail
10.4.6. ClamAV: Antivirus para correo
Mediante ClamAv podemos escanear, los mensajes recibidos, es el ltro antivirus que pasaremos a
traves de Procmail.
ClamAv tiene licencia GPL, funciona bastante bien y se actualiza a menudo.
Para instalar el programa, simplemente ejecutaremos el siguiente apt:
#apt-get install clamav clamav-daemon
Jose Antonio Escartn Vigo, Junio 2005.

166 Servidor Linux para conexiones seguras de una LAN a Internet
Durante el proceso de instalacionclamav-freshclam(el actualizador de bases de datos de virus), pre-
guntara por que interfaz estamos conectados a Internet y un servidor (se apuntan varios por defecto) desde
donde bajarse las actualizaciones. Tambien podemos establecer el modo de ejecucion declamav-freshclam,
se recomienda ejecutar como demonio del sistema.
El archivo de conguracion del demonio ClamAv es:/etc/clamav/clamd.conf
En ese archivo podemos encontrar las siguientes opciones:
ScanMail, para que escanee correo.
ScanArchive, para que escanee archivos.
ScanHTML, para que escanee codigo HTML.
Situados en este punto, suponemos que nuestro servidor de correo entrega los correos locales correc-
tamente a Procmail. Este ejecutara las reglas de ltrado de/etc/procmailrc(y despues las de: ~/.proc-
mailrc,. . . para cada usuario) y lo dejara, tpicamente en:/var/mail/<usuario>.
Para que Procmail ejecute ClamAv a~nadiremos al archivo:/etc/procmailrc, las siguientes lneas:
SHELL=/bin/sh
AV_REPORT=`clamdscan --stdout --disable-summary - | cut -d: -f 2`
VIRUS=`if [ "$AV_REPORT" != " OK" ]; then echo Yes; else echo No;fi`
:0fw
| formail -i "X-Virus: $VIRUS"
:0fw
* ^X-Virus: Yes
| formail -i "Virus: $AV_REPORT" -i "Subject: MENSAJE CON VIRUS: $AV_REPORT"
Vamos a observar cada una de las lneas detenidamente:
La lnea deSHELL=/bin/shes necesaria porque se pueden tener usuarios en/etc/passwdsin shell,
en estos casos no se ejecutara el codigo entre comillas simples.
EnAVREPORTse almacena\OK", si no tiene virus o el nombre de ese virus en caso contrario.
A la variableVIRUSse le asigna \Yes" si contiene virus y \No" en caso contrario.
En la primera regla de ltrado, a~nadimos la cabeceraX-Viruscon \Yes" o \No" (as el usuario nal
lo puede ltrar facilmente, tambien nos sirve para saber que el correo ha sido escaneado).
En la segunda regla de ltrado, si el correo contiene virus, le agregamos una cabecera llamada
\Virus" que contiene el reporte de ClamAv. Ademas, modicamos elSubjecty en su lugar ponemos
el nombre del virus.
Como funcion adicional, en lugar de modicar elSubjectlo podramos eliminar directamente.
Para que esta conguracion funcione necesitamos tener lanzado el demonio:clamav-daemon.
Para probar que el sistema funciona, en la direccion:http://www.eicar.org/download/eicar.com.txt,
encontraremos la siguiente lnea:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Es un test, si nos la mandamos por e-mail, ClamAv debera detectarlo como virus.
Una vez congurado este sistema, solo tendremos que jarnos que todos los correos nuevos que lleguen
a los usuarios contengan la nueva cabecera de X-Virus.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 167
10.4.7. SpamAssassin: Filtro basado en reglas
El SpamAssassin es un ltro basado en scripts en Perl que procesan los mensajes y detectan, en base
a unas reglas bastantes complejas, si el mensajes es spam. A los correos, les son asignados una serie de
puntos, si supera determinado valor (5.0 por defecto) es considerado un spam.
La mejor manera de hacerlo funcionar es arrancar el demonio spamd y comunicarse con el a traves del
spamc, que sera ejecutado por Procmail. Para identicar el correo spam, usaremos expresiones regulares,
de forma que los todos correos que cumplan unas determinadas condiciones, pasaran a realizar el proceso
asignado en Procmail.
Para instalarlo nada mas facil que realizar el siguiente apt:
#apt-get install spamassassin spamc spampd
El paquetespampd, instala el demonio SMTP/LMTP demonio proxy de SpamAssassin.
El paquetespamc, instala el cliente para comunicarse con el demonio de SpamAssassin.
Para poder usar SpamAssasin como demonio es necesario retocar el archivo:
/etc/default/spamassassiny cambiar ENABLED a 1.
En el archivo de conguracion deprocmail, a~nadiremos la siguiente regla:
:0fw
| spamc -f -s 100000 -u $LOGNAME
Una vez instalados ambos y arrancado elspamd, solo hay que hacer que elspamcltre todos los men-
sajes para detectar spam.
El spamd agrega las siguientes cabeceras para indicar los resultados:
X-Spam-Prev-Content-Type: text/html; charset="us-ascii"
X-Spam-Prev-Content-Transfer-Encoding: 7bit
X-Spam-Status: Yes, hits=11.7 required=5.0
tests=NO_REAL_NAME,MSG_ID_ADDED_BY_MTA,INVALID_MSGID,SUBJ_REMOVE,
UPPERCASE_25_50,MAILTO_WITH_SUBJ,MAILTO_TO_REMOVE,
MAILTO_WITH_SUBJ_REMOVE,BIG_FONT,MAILTO_LINK,
FROM_AND_TO_SAME
version=2.30
X-Spam-Flag: YES
X-Spam-Level: ***********
X-Spam-Checker-Version: SpamAssassin 2.30 (devel $Id: SpamAssassin.pm,v 1.94 2002/06/14 23:17:15 hughescr Exp $)
Ademas, agrega la siguiente cabecera alSubjectdel mensaje:
Subject: *****SPAM***** Say Goodbye to YELLOW, STAINED Teeth!
Y las siguientes lneas en el texto para describir las reglas aplicadas:
SPAM: -------------------- Start SpamAssassin results ----------------------
SPAM: This mail is probably spam. The original message has been altered
SPAM: so you can recognise or block similar unwanted mail in future.
SPAM: See http://spamassassin.org/tag/ for more details.
SPAM:
SPAM: Content analysis details: (25.5 hits, 5 required)
SPAM: NO_REAL_NAME (-1.1 points) From: does not include a real name
SPAM: INVALID_DATE_TZ_ABSURD (4.4 points) Invalid Date: header (timezone does not exist)
SPAM: FAKED_UNDISC_RECIPS (3.5 points) Faked To "Undisclosed-Recipients"
SPAM: PLING (0.1 points) Subject has an exclamation mark
SPAM: DOUBLE_CAPSWORD (1.1 points) BODY: A word in all caps repeated on the line
SPAM: CLICK_BELOW (1.5 points) BODY: Asks you to click below
SPAM: CALL_FREE (0.7 points) BODY: Contains a tollfree number
SPAM: NORMAL_HTTP_TO_IP (3.3 points) URI: Uses a dotted-decimal IP address in URL
SPAM: REMOVE_PAGE (2.2 points) URI: URL of page called "remove"
SPAM: MAILTO_WITH_SUBJ (1.9 points) URI: Includes a link to send a mail with a subject
SPAM: CLICK_HERE_LINK (0.8 points) BODY: Tells you to click on a URL
SPAM: MAILTO_LINK (0.8 points) BODY: Includes a URL link to send an email
SPAM: FREQ_SPAM_PHRASE (2.4 points) Contains phrases frequently found in spam
SPAM: [score: 14, hits: click here, email address,]
SPAM: [enter your, list please, please click, this]
SPAM: [message, you wish, your email, your]
SPAM: [name]
SPAM: DATE_IN_FUTURE_06_12 (2.4 points) Date: is 6 to 12 hours after Received: date
SPAM: FORGED_YAHOO_RCVD (1.5 points) 'From' yahoo.com does not match 'Received' headers
SPAM:
SPAM: -------------------- End of SpamAssassin results ---------------------
Jose Antonio Escartn Vigo, Junio 2005.

168 Servidor Linux para conexiones seguras de una LAN a Internet
Conguracion del Procmail, con SpamAssassin
Se pueden aplicar ltros en el Procmail del usuario, en el generico para todo el sistema (Hay que usar
con cuidado esta opcion, borrar o modicar un mensaje de terceros sin su aprobacion puede ser un delito)
o en el propio cliente (MUA) de correo electronico, que es la opcion mas recomendable.
En este apartado lanzaremos el cliente (spamc) desde:/etc/procmailrcy ejecutarlo de forma global.
Editaremos el archivo y a~nadiremos las siguientes lneas:
DROPPRIVS=yes
:0fw
| /usr/bin/spamc -f
Despues en el~/.procmailrcltramos los spams a una carpeta especial para separarla del correo valido
y poder revisar, en busca de falsos positivos:
:0:
* ^X-Spam-Status: Yes
mail/spams
Los Spams son enviados al directorio:~/mail/spams, pero si nuestras reglas estan lo sucientemente
probadas y no nos importa perder algun e-mail valido, podemos eliminarlos, enviandolos a/dev/null
Conguracion graca de SpamAssassin, interfaz Webmin
Para simplicar el proceso de conguracion podemos utilizar nuestra herramienta de conguracion por
web: Webmin. Para instalar el modulo realizaremos el siguiente apt:
#apt-get install webmin-spamassassin
Figura 10.15: Modulo Webmin para SpamAssassin
Como opcion adicional se pueden especicar las opciones de conguracion de Procmail para que pro-
cese el correo con SpamAssassin.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 169
En las siguientes guras (10.16) podremos observar la multitud de opciones que podemos congurables
gracamente.
Figura 10.16: Opciones de conguracion SpamAssassin
10.4.8. Bogolter: Filtro bayesiano
El problema fundamental con el SpamAssassin es que esta basado en el reconocimiento de patrones
de texto usando reglas, lo que obliga a estar continuamente actualizando y agregando nuevas reglas para
adaptarse a los cambios del spam. Ademas hay que elaborar reglas para cada lenguaje.
Esto produce que el proceso de analisis de cada mensaje sea aun mas lento de lo que ya es actualmente,
entre otras cosas porque esta implementado en Perl y el numero de reglas es muy grande.
Y no acaba aqu, en problema, lo que es el mas grave, puede dar falsos positivos, que son mensajes que
no son spams pero son considerados como tal por el ltro. Esto es lo peor que le puede pasar, podemos
perder o dejar de leer mensajes importantes. Tambien de vez en cuando, llegan spam que haya pasado el
ltro (falso negativo), pero en este caso no pasa nada realmente grave.
El SpamAssasin al poco tiempo muestra sus problemas, es muy facil para los spammers encontrar
los trucos para saltarse las reglas de ltrados, ya que son de dominio publico y comun para todas las
instalaciones.
La solucion pasa por usar metodos que \aprendan" de los mensajes que recibe el usuario y generan
una base de datos propia. Esta base de datos sirve para calcular las probabilidades combinadas de que un
mensaje sea o no spam, en funcion de las palabras que contiene. Este metodo se denomina ayesiano" y
Jose Antonio Escartn Vigo, Junio 2005.

170 Servidor Linux para conexiones seguras de una LAN a Internet
esta basado en el \Teorema de Bayes" sobre probabilidad, y se adapta automaticamente al idioma y a los
tipos de mensajes que recibe cada usuario.
El problema fundamental de esta aproximacion es que hay que entrenar inicialmente al programa con
un conjunto relativamente grande de mensajes spams y otros validos para que arme su base de datos. A
partir de all, el programa puede aplicar los metodos bayesianos y usar esos mismos mensajes, ya clasi-
cados como spam o no, para realimentar la base de datos. Para que el ltro aprenda, por cada mensaje
spam en la base de datos, tenemos que proporcionarle al menos tres mensajes buenos. Si no hacemos esto
dara muchos falsos positivos.
Una implementacion mejorada de este metodo es Bogolter, el ltro bayesiano que aqu propongo.
Conguracion de Bogolter
Para instalarlo realizaremos el siguiente apt:
#apt-get install bogofilter
Bogolter mantiene un par de bases de datos en el directorio:~/.bogolter:
goodlist.db
spamlist.db
Cada una de ellas mantiene una lista de okens" (palabras) junto con la cantidad de veces que esa
palabra ha aparecido en mensajes validos y mensajes spams. Esos numeros son usados para calcular la
probabilidad de que el mensaje sea un spam.
Una vez que se han calculado las probabilidades, se usan aquellas mas alejadas de la media para
combinarlas usando elTeorema de Bayesde probabilidades combinadas. Si la probabilidad combinada es
mayor que 0.9, bogolter retorna 1, caso contrario retorna 0.
La abilidad del bogolter depende exclusivamente de la cantidad de palabras que tenga en su base de
datos, mientras mas contenga y mayor sea la cantidad de apariciones de cada palabra en un mensaje valido
o spam, mejores seran sus resultados. Si solo le ense~namos cuales son mensajes validos, no podra detectar
los spams. Al contrario, si solo le \ense~namos" spams, considerara a muchos mensajes validos como spams
(falsos positivos . . . ). O sea, el aprendizaje inicial es importantsimo, y nos ahorrara mucho trabajo de
mantenimiento de la base de datos.
Para congurarlo realizaremos los siguientes pasos:
Entrenarlo con un conjunto grande de mensajes validos que tengamos almacenados.
Entrenarlo con un conjunto grande de spams.
Congurar~/.procmailrc
Seguimiento y mantenimiento los primeros das, para evitar falsos positivos.
Si queremos probar otros, el sistema Debian pone a nuestra disposicion, mas ltros bayesianos como
por ejemplo,spamprobe.
Entrenarlo con mensajes validos
Este paso es muy importante, caso contrario puede generar falsos positivos. Lo mejor en estos casos
es entrenarlo con los mensajes que tengamos almacenados en nuestro cliente de correo. Se aconsejan al
menos 1.000 mensajes.
Si tenemos los mensajes almacenados en formato mbox, basta con hacer lo siguiente:
#bogofilter -n < archivo_mbox
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 171
Si por el contrario lo tenemos en formato Maildir, y debido a que el estandar de este formato quita
las lneas de \From" de inicio de mensaje, el Bogolter no es capaz de separar y contar los mensajes, por
lo que hay que llamarlo por cada mensaje almacenado. Esto se puede realizar facilmente con el siguiente
script:
for f in directorio_maildir/*
do
bogofilter -n < $f
done
Si hemos seguido los pasos descritos en este capitulo, no sera necesario ya que en la seccion 10.4.5
hemos realizado un ltro que recompona esa lnea de \From".
Despues de este paso se habra creado la base de datos:~/.bogofilter/goodlist.db
Entrenarlo con spams
El siguiente paso sera entrenarlo con spams, en la direccion:
http://bulma.net/ gallir/BULMA/spams.txt.gz
Se puede encontrar una lista de mas de 700 mensajes de spams. Para entrenar el ltro con estos
mensajes usaremos la instruccion:
#zcat spams.txt.gz | bogofilter -s
Despues de este paso se habra creado la base de datos:~/.bogofilter/spamlist.db
Conguracion de Procmail
El siguiente paso es congurar Procmail. Para ello modicaremos el archivo de conguracion:~/.proc-
mailrcde cada usuario, ya que este ltro dependera de sus e-mails y no tendra sentido aplicarlo a toda
la organizacion (en el/etc/procmailrc).
Una vez el mensaje ha sido clasicado como spam, modicaremos la conguracion de Procmail para
que mueva los mensajes a otro archivo:~/mail/spams.
Ademas de ello, realimentaremos la base de datos con cada mensaje que llega, por lo que el sistema
ira aprendiendo con el tiempo, en pocas semanas ya no necesita casi mantenimiento.
El codigo que incluiremos en el ~/.procmailrc es el siguiente:
:0HB
* ? bogofilter
{
# Es un spam, realimentamos la base de datos de spam
:0HBc
| bogofilter -S
# lo movemos al archivo $HOME/mail/spams
:0
mail/spams
}
:0EHBc
# Es un mensaje valido, realimentamos la base de datos validos
| bogofilter -n
Jose Antonio Escartn Vigo, Junio 2005.

172 Servidor Linux para conexiones seguras de una LAN a Internet
Podemos realizar la actualizacion automatica mediante la opcion-uque indica al Bogolter que ac-
tualice directamente la base de datos de acuerdo a la clasicacion que se haga del mensaje.
Es decir la siguiente regla, insertada en~/.procmailrc, ya sera suciente:
:0HB
* ? bogofilter -u
mail/spams
Seguimiento y mantenimiento
Aunque con el entrenamiento ocial y usando un conjunto de mensajes grande, es suciente para que
el Bogolter casi no de falsos positivos, los primeros das deberemos de vericar los mensajes, resituando
los falsos positivos como mensajes validos.
Para recolocar las modicaciones realizadas, tenemos las versiones incrementales -N y -S. En ambos
casos lo que tenemos que hacer es grabar el mensaje en un archivo de texto y ejecutar con la opcion que
corresponda, -S si es un spam y -N si es un falso positivo.
Para marcar como spam un mensaje no detectado:
#bogofilter -S < mensaje.txt
Para marcar como valido un falso positivo:
#bogofilter -N < mensaje.txt, . . . esta situado en el archivo mbox:~/mail/spams.
10.5. Jabber: Mensajera instantanea para corporaciones
El protocoloJabber, sera una de las piezas claves del desarrollo y evolucion de la futura Internet, como
lo son y han sido los protocolos IP, FTP, Telnet, DNS, NNTP, ARP, ICMP, . . . , pero enfocado a la cada
vez mas utilizada mensajera instantanea.
Jabber a diferencia de otros sistemas de mensajeras instantaneos, es algo mas que un sencillo programa
para enviar y recibir mensajes de texto entre usuarios a traves de Internet, es un protocolo de Internet que
aspira a convertirse en parte fundamental de la misma, para lo cual cuenta con una serie de interesantes
caractersticas:
Buena documentacion.
Basado en estandares abiertos y libres.
Utiliza XML.
Es multiplataforma.
Su codigo esta liberado a la comunidad.
Existen multitud de clientes que lo utilizan
Utiliza pasarelas para interactuar con otros servicios (MSN, Yahoo, ICQ, IRC, . . . ).
Es modulable y escalable, lo que permite a~nadir mejoras facilmente.
Existen disponibles, libreras Jabber en varios lenguajes.
Esta basado en una arquitectura cliente/servidor.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 173
Esta formado por un servidor y clientes, que son los programas que utilizan los usuarios para enviar y
recibir mensajes entre s. Existen clientes para practicamente todas las plataformas (incluso varios escritos
en Java, con la consiguiente portabilidad).
Jabber es ideal para instalarlo en empresas, como complemento a la propia Intranet, puesto que
permite la comunicacion de los trabajadores de una forma eciente, rapida y muy economica. De forma
que permite, por ejemplo, intercambiar documentos, programas, datos, textos, . . . de una forma muy
sencilla sin tener que utilizar sistemas mas complejos como ftp o correo interno, es decir, consiguiendo
comunicacion instantanea y directa.
10.5.1. Servidor Jabber
Para poder instalar el servidor Jabber necesitamos realizar un apt:
#apt-get install jabber
Con esto, se guardaran en nuestro sistema todos los archivos basicos. Si observamos los archivos de
conguracion de usuarios (/etc/passwd) se ha creado un usuariojabber, para manejar el servidor Jabber
en el sistema. Ademas el servicio ha quedado agregado al arranque del sistema, en elinetd.
Para arrancar el servidor de jabber, a mano, ejecutaremos:#jabberd
Conguracion Jabber
La conguracion se encuentra centralizada en un unico archivo:/etc/jabber/jabber.xml
Lo primero que tendremos que hacer es especicar en que maquina esta el servidor, el nombre de la
misma ha de estar en formato FQDN, para que desde cualquier maquina de nuestra red pueda acceder a
los servicios proporcionados por Jabber. Otra opcion es poner directamente la direccion IP de la maquina,
e incluso para realizar pruebas en la propia maquina podemos poner localhost.
Cambiaremos la lnea:
<host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>
Por una de las siguientes opciones:
<host>localhost</host>
<host>FQDN_servidor_jabber<host>
<host>IP_servidor_jabber<host>
Una vez arrancado el servidor, tendremos que vericar si realmente todo funciona bien, para lo cual
utilizaremos algunos de los multiples clientes existentes para Jabber, (vease seccion 10.18). Desde el cliente
necesitamos crear un usuario y registrarlo en el servidor local.
Podemos a~nadirle tambien otras funcionalidades extras:
Si queremos que nuestro servidor Jabber soporte conferencia, es decir mas de dos usuarios simulta-
neos, necesitamosjabber-muc(Jabber Multi user chat), para ello realizaremos el siguiente apt:
#apt-get install jabber-muc
Jose Antonio Escartn Vigo, Junio 2005.

174 Servidor Linux para conexiones seguras de una LAN a Internet
Si queremos que nuestro servidor Jabber soporte la busqueda de usuarios, es decir poder buscar
en el archivo de usuarios del sistema, necesitamosjabber-jud(Jabber User Directory), para ello
realizaremos el siguiente apt:
#apt-get install jabber-jud
Si queremos que nuestro servidor se comunique con otros protocolos propietarios como (IRC, MSN,
Yahoo, ICQ, AIM, . . . ), tenemos disponibles pasarelas a esos protocolos:
#apt-get install jabber-irc: IRC
#apt-get install jabber-msn: MSN Messenger
#apt-get install jabber-jit: ICQ
#apt-get install jabber-aim: AIM messenger
#apt-get install jabber-yahoo: Yahoo messenger
Pero si aun necesitamos mas potencia para nuestro servidor de mensajera instantanea, en la direccion:
http://download.jabber.org/, encontraremos mas utilidades.
Para conseguir mas informacion sobre las opciones, podemos recurrir al manual:#man jabberd
O bien consultar la pagina ocial:http://www.jabber.org
10.5.2. Conguracion graca de Jabber, interfaz Webmin
Podemos hacer mas sencilla la conguracion de nuestro servidor, si utilizamos nuestra herramienta
web: Webmin. Para instalar el modulo de Jabber realizaremos el siguiente apt:
#apt-get install webmin-jabber
Pomo se puede observar en la gura 10.17, podemos acceder a las opciones generales, como pue-
den ser quien puede tener acceso al servidor jabber o tambien nos da acceso al archivo de coguracion
/etc/jabber/jabber.xml.
10.5.3. Clientes Jabber
Para poder interactuar con el servidor Jabber, necesitamos tener instalado un cliente. Existe muchos
clientes para jabber, personalmente utilizokopetebasado en el entorno de escritorio KDE.
Para instalarlo realizaremos un apt:
#apt-get install kopete
Desde el cliente nos conectaremos con una cuenta al servidor Jabber local y si no tenemos cuenta,
tambien podemos registrarla.
Como podemos observar en la gura 10.18, situando nuestra cuenta podemos interactuar con multitud
de servicios de mensajera ademas de Jabber, es un cliente muy versatil.
Existen otros Clientes multiprotocolo, como Gaim (vease gura 10.19), que tambien funcionan muy
bien.
Para instalarlo:#apt-get install gaim
Al nal todo es cuestion de probar y quedarnos con el cliente que mas nos guste.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 10. Servicios de usuario 175
Figura 10.17: Modulo Webmin para Jabber
Jose Antonio Escartn Vigo, Junio 2005.

176 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 10.18: Cliente de mensajera instantanea Kopete
Figura 10.19: Cliente de mensajera instantanea Gaim
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11
Comunicaciones seguras
En el interior y exterior de las redes de nuestro sistema pueden existir multiples peligros acechandonos
detras de cada switch o router, es necesario proteger nuestras conexiones y las de nuestros usuarios para
que no sean escuchadas por usuarios no autorizados o si esto no lo podemos asegurar, al menos que les
sean incomprensibles.
11.1. Shell seguro: OpenSSH
SSH es una herramienta de acceso remoto que nos permite iniciar la sesion en un sistema remoto de
una forma segura. El talon de Aquiles de la mayora de las redes es el hecho de que normalmente las
comunicaciones entre sistemas se pasan sobre una red en texto plano. Por lo tanto, podemos fortalecer las
maquinas individuales todo lo que deseemos, pero si iniciamos una sesion en ellas remotamente con un
programa de terminal inseguro, los ladrones pueden robar nuestras credenciales de registro con unsnier
de red (escucha clandestina de paquetes de red). Despues pueden iniciar una sesion sin ningun problema.
Una de las herramientas de acceso remoto mas populares, Telnet, sufre esta deciencia.
SSH soluciona el problema utilizando tanto la criptografa simetrica como la clave publica para cifrar
la sesion desde la primera pulsacion de tecla. De este modo, todo el que este escuchando su conexion
obtiene un sonido aleatorio. SSH no solo proporciona condencialidad para nuestros datos utilizando el
cifrado sino que ademas proporciona una solida autenticacion, que impide la suplantacion de identidad,
esto lo hace utilizando certicados digitales para autenticar a los usuarios.
No hay que confundir SSH con SSL, es estandar de cifrado Web. Aunque ambos realizan la misma
funcion, SSH funciona con cualquier protocolo, mientras que SSL esta dise~nado principalmente para las
comunicaciones Web.
SSH tambien incluye SCP, un reemplazo seguro para RPC, la herramienta de copia remota, y SFTP un
reemplazo seguro para FTP. SSH tambien puede utilizarse para crear un tunel con otros protocolos entre
maquinas, como HTTP y SMTP. Al utilizar esta familia de programas en lugar de sus homologos mas
antiguos, nos aseguramos de que no se estan leyendo nuestras comunicaciones remotas con los servidores.
Eliminar el uso de Telnet y FTP en nuestra red puede ser difcil, pero cuanto mas lo hagamos, mas
seguros estaremos.
11.1.1. Cliente OpenSSH
Para acceder al sistema remoto con SSH, necesitamos un cliente SSH en nuestro lado y tiene que existir
un servidor SSH ejecutandose en el lado remoto. Aunque SSH no esta tan difundido como Telnet, poco a
poco se esta haciendo mas popular. Cisco esta instalando SSH en sus enrutadores, aunque todava deja
activado el servidor Telnet de forma predeterminada, mientras que SSH es opcional.
Debemos asegurarnos de estar utilizando una version 3.6 o mas actual; algunas versiones anteriores
tenan fallos en su implantacion de protocolos criptogracos y son susceptibles de ataques. De hecho,

178 Servidor Linux para conexiones seguras de una LAN a Internet
es recomendable asegurarse de tener la utima version disponible, ya que el codigo se esta mejorando
constantemente y los algoritmos se estan ajustando.
SSH tiene un numero de usos realmente interesantes distintos a asegurar un inicio de sesion en un
sistema remoto. Se puede utilizar para crear un tunel para cualquier servicio a traves de un canal cifrado
entre servidores.
Para instalarlo en nuestro sistema hay que realizar un apt-get:
#apt-get install openssh-client-udeb
La sintaxis SSH basica para iniciar una sesion remotamente es:
$ssh -l login hotname
Dondelogines su nombre de usuario en el sistema remoto yhotnamees el antrion al que esta inten-
tando conectar con SSH. Tambien se puede utilizar:
$ssh login@hostname
Por lo tanto y a modo de ejemplo, para registrarse en el servidor Web denominadoweb.example.com
utilizando el nombre de inicio de sesion dejosan, tendramos que escribir:
$ssh [email protected]
Tambien podemos utilizar,$ssh -l josan web.example.compara iniciar la sesion. Si simplemente
escribirmos$ssh web.example.com, el servidor supondra que el nombre del usuario es igual que el del
inicio de sesion del sistema.
En la tabla 11.1 podemos encontrar el resto de opciones de SSH:
Cuadro 11.1: Opciones del cliente SSH
Opcion Descripcion
-c protocol Utiliza un protocolo criptograco especco (tiene que ser soportado por la version que
utilizamos de SSH)
-p port# Se conoceta a un numero de puerto especco en lugar de la puerto SSH predeterminado
(puerto 22)
-P port# Usa un puierto especco que no forma parte de la lista estandar de puertos propietarios, lo
que normalmente signica un numero por encima de 1024. Esto puede ser util si tenemos
un cortafuegos que imposibilita las comunicaciones en numeros de puertos inferiores.
-v Muestra la salida larga.

Util para la depuracion
-q: Informa en modo silencioso, cdontrario del modo largo
-C: Utiliza compresion del traco cifrado. PUde ser util para conexiones demasiado lentas,
como las telefonicas, pero es mejor tener un procesaro mas potente para realizar la com-
presion o ralentizara mucho el rendimiento.
Si queremos personalizar nuestras conexiones, en el directorio/etc/sshencontraremos los archivos de
conguracion del servicio SSH. El archivo de conguracion del cliente es/etc/ssh/sshcong.
11.1.2. Servidor OpenSSH
Para utilizar SSH debemos tener un cliente SSH ejecutandose en la maquina que deseamos conectar y
un servidor SSH en la maquina a la que deseamos conectarnos. Los clientes FTP y Telnet normales no se
conectaran a un servidor SSH. El cliente se encuentra integrado en la mayora de los sistemas operativos
Linux actuales, aunque puede que tengamos que seleccionar esta opcion al instalar el sistema. El servidor
SSH es normalmente opcional. Para determinar si ya esta instalado, escribimos$psy comprobamos si se
esta ejecutando el procesosshd. Si no se esta ejecutando, tendremos que instalar el servidor para permitir
las conexiones de su maquina a traves de SSH.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 179
Pasemos a describir el proceso de instalacion del servidor de SSH.
1. Lo primero es instalar el paquete si no lo tenemos en el sistema:
#apt-get install openssh-server-udeb
2. Despues hay que revisar los archivos de conguracion que se encuentran en el directorio/etc/ssh
para asegurarse de que coincide con los parametros de nuestro sistema. El archivo de conguracion
para el servidor es/etc/ssh/sshdcong.
A continuacion detallo los campos que hay que revisar dentro de este archivo:
Port: Es el puerto que escucha SSH para las conexiones entrantes. Su valor predeterminado es
22. Si lo cambiamos, las personas que intenten conectarse con su sistema tendran que cambiar
manualmente el numero de puerto en sus clientes SSH.
Protocols: Le indican al servidor los protocolos SSH que debe aceptar. El valor predeterminado
es aceptar conexiones de tipo SSH1 y SSH2.
Hostkey: Claves para aceptar conexiones de clientes, proporciona la ubicacion de las claves
utilizadas para generar la autenticacion de clientes.

Estas no son las mismas claves que las
claves del servidor generadas en la instalacion.
3. Antes de poder utilizar un servidor SSH tiene que generar sus distintas claves. Esto proporciona un
identicador unico para las claves de servidor. Para ello hay que escribir el siguiente comando:
#ssh make-host-key
4. Ahora se puede iniciar el servidor SSH en la lnea de comandos escribiendo:
#sshd &
As se ejecutara el demonio del servidor SSH en segundo plano y escuchara continuamente las co-
nexiones. Si se desea ejecutarsshdautomaticamente al inicio (opcion muy recomendable), hay que
colocar dicha lnea al nal de un archivo al estilo derc.localde otras distribuciones (vease apendice
D para componer este tipo de archivos).
Tambien es posible facilitar la conguracion mediante un modulo para la herramienta de administracion
web Webmin. Para la instalacion se utiliza el siguiente apt:
#apt-get install webmin-sshd
Puerto de envo con OpenSSH
Aunque SSH se dise~no en principio para una interaccion de lnea de comandos tipo Telnet, tambien
se puede utilizar para congurar un tunel entre dos maquinas para cualquier aplicacion. Podemos crear
una conexion segura entre dos servidores con la opcion de puerto de envo integrada en SSH. Para realizar
esta tarea, debemos tener SSH ejecutandose en ambos extremos de la conexion.
Con la siguiente declaracion emitida en el extremo del cliente podemos realizar cualquier servicio sobre
cualquier puerto:
#ssh -L local_port:local_host:remote_port remote_hostname -N &
Donde debemos reemplazar:
localport: Por un numero aleatorio, mayor de 1024, elegido para realizar la nueva conexion cifrada
localhost: Por la maquina local
remoteport: Por el puerto del servicio con el que deseamos abrir un tunel en el extremo remoto
Jose Antonio Escartn Vigo, Junio 2005.

180 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 11.1: Interfaz graca Webmin para el servidor SSHD
remotehostname: Por la direccion IP o nombre del servidor en el otro extremo de la conexion
La opcion-Lle indica a SSH que debe escuchar el localport en localhost y enviar cualquier conexion
a remoteport en remotehost.
La opcion-Nle indica a SSH que no intente iniciar la sesion, solo mantener la conexion abierta para
el traco enviado.
Si se desea que esta conguracion del sistema se mantenga en siguientes reinicios de la maquina hay
que a~nadirla a un archivo derc.localcomo se especica en la seccion D.
Esto podran ser ejemplos de este tipo de usos:
Si se necesita cifrar una conexion de correo electronico:
#ssh -L 5000:localhost:25 192.168.0.1 -N &, . . . donde la IP corresponde al servidor de correo
de la red
Si se necesita crear una conexion web segura con SSH en vez de SSL:
#ssh -L 5000:localhost:80 192.168.0.1 -N &, . . . utilizando en el navegadorlocalhost:5000se
realizaran envos a traves de tunel seguro con el puerto web(80) en la maquina remota.
Tambien podemos tener varios puertos al mismo servidor, como es nuestro caso:
#ssh -L 5000:localhost:25 -L 5001:localhost:80 192.168.0.1 -N &
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 181
Como se puede observar, SSH funciona extraordinariamente bien para crear una conexion segura entre
dos maquinas para casi cualquier protocolo.
11.2. Criptografa y cifrado
Hoy en da la solidez del cifrado normalmente se mide por el tama~no de su clave. Independientemente
de la solidez del algoritmo, los datos cifrados pueden estar sujetos a ataques por la fuerza en los que se
prueban todas las combinaciones posibles de claves. Al nal, el cifrado se puede romper. Para la mayora
de los codigos modernos con longitudes decentes, el tiempo para romper la clave a la fuerza se mide en
milenios. Sin embargo, un fallo inadvertido en un algoritmo o el avance en la tecnologa informatica o en
los metodos matematicos pueden reducir este tiempo considerablemente.
Normalmente se cree que la longitud de la clave debe ajustarse para mantener seguros los datos durante
una cantidad razonable de tiempo. Si el elemento es muy local, como las comunicaciones del campo de
batalla o la informacion diaria sobre las acciones, un codigo que proteja estos datos durante semanas o
meses esta bien. Sin embargo, algo como numero de tarjeta de credito o los secretos de seguridad nacional
tienen que mantenerse seguros durante un periodo de tiempo mas prolongado y de forma ecaz para
siempre. Por lo tanto, utilizar algoritmos de cifrado mas debiles o longitudes de clave mas cortas para
algunas cosas esta bien, siempre que la utilidad de la informacion para un intruso expire en un breve
periodo de tiempo.
11.2.1. Tipos de cifrado
Criptografa simetrica
El primer tipo de cifrado, denominado criptografa simetrica, o cifrado de secreto compartido, se ha
estado utilizando desde la epoca de los antiguos egipcios. Esta forma de cifrado utiliza una clave secreta,
denominada secreto compartido, para cifrar los datos en un galimatas inteligible. La persona que se
encuentra en el otro extremo necesita la clave compartida para desbloquear los datos (el algoritmo de
cifrado). Podemos cambiar la clave y los resultados del cifrado. Se denomina criptografa simetrica porque
se utiliza la misma clave para ambos extremos tanto para cifrar como para descifrar los datos.
El problema que surge con este metodo es que tenemos que comunicar la clave secreta de una for-
ma segura al destinatario pretendido. Si nuestro enemigo intercepta la clave, puede leer el mensaje. Se
han inventado todo tipo de sistemas para intentar solucionar esta fragilidad basica, pero el hecho sigue
existiendo: tendremos que comunicar la clave secreta de alguna forma al destinatario pretendido antes de
iniciar una comunicacion segura.
Criptografa asimetrica
Una revolucion en el cifrado fue la iniciada cuando Whiteld Die, Martin Hellman y Ralph Merkle
inventaron la criptografa de calve publica. (En realidad, todava existe algun debate sobre si el britanico
James Ellis en realidad invento esta clave antes y la mantuvo en secreto, pero Die, Hellman y Merkle
fueron los primeros en publicarla en 1976).
Estaban tratando de resolver el antiguo problema del intercambio de clave. Die se preguntaba como
dos individuos que deseaban realizar una transaccion nanciera por una red electronica podan hacerlo con
seguridad. Llevaba mucho tiempo pensando en ello porque Internet estaba naciendo en aquel momento
y el comercio electronico todava no exista. Si los gobiernos tenan muchos problemas tratando con el
problema del intercambio de clave, >como podra controlarlo una persona media? Quera llegar a crear
un sistema por el que las dos partes pudiesen mantener conversaciones protegidas y realizar transacciones
seguras sin tener que intercambiarse una clave cada vez. Saba que si resolva el problema del intercambio
de claves, sera un gran avance en la criptografa.
Die se asocio con Martin Hellman y Ralph Merkle. Tardaron algunos a~nos, pero nalmente consi-
guieron crear un sistema denominadoCifrado de clave publica(PKE, Public Key Encription), tambien
conocido comoCriptografa asimetrica.
La criptografa asimetrica utiliza un cifrado que divide la clave en dos claves mas peque~nas. Una de
las claves se hace publica y otra sigue siendo privada. El mensaje lo ciframos con la clave publica del
Jose Antonio Escartn Vigo, Junio 2005.

182 Servidor Linux para conexiones seguras de una LAN a Internet
destinatario.

Este puede descifrarla a continuacion con su propia clave privada. Y lo mismo pueden hacer
por nosotros, cifrando un mensaje con nuestra clave publica para poderlo descifrar con nuestra clave
privada. La diferencia es que nadie necesita la clave privada de nadie para enviar un mensaje seguro.
Utilizamos su clave publica, que no tiene que mantenerse segura (de hecho, se publican en repositorios
como si fueran una gua telefonica). Al utilizar la clave publica del destinatario, sabemos que solo esa
persona puede descifrarlo utilizando su propia clave privada. Este sistema permite que dos entidades se
comuniquen con seguridad sin ningun intercambio anterior de claves.
Normalmente la criptografa asimetrica se implanta mediante el uso de funciones de un sentido. En
terminos matematicos, estas son funciones faciles de calcular en una direccion pero muy difciles de calcular
a la inversa. De esta forma podemos publicar nuestra clave publica, derivada a partir de nuestra clave
privada, una tarea muy difcil de llevar a cabo al reves para determinar la clave privada. Una funcion
comun de un solo sentido utilizada actualmente, es la descomposicion en factores de numeros primos
grandes. Es facil multiplicar dos numeros primos y obtener un producto. Sin embargo, determinar cual de
las muchas posibilidades son los dos factores de un producto es uno de los problemas matematicos mas
complejos (su tiempo de computacion es NP-Completo
1
).
Si alguien inventase un metodo para deducir facilmente factores de numeros primos grandes
2
en tiem-
po de computacion lineal o polinomico, dara al traste con el mecanismo de cifrado de claves publicas
actual, haciendo que cualquier tipo de comunicacion basada en este tipo de algoritmos resultase insegura.
Afortunadamente, otras funciones de un solo sentido funcionan bien para este tipo de aplicacion, como los
calculos sobre curvas elpticas o el calculo de logaritmos inversos sobre un campo nito.
Poco despues del lanzamiento de Die, Hellman y Merkle, otro grupo de tres hombres desarrollo una
aplicacion practica de la teora. Su sistema para el cifrado publico se denomino RSA, por sus nombres:
Ronald Rivest, Adi Shamir y Leonard Adleman. Formaron una empresa que empezo a regular su sistema.
La velocidad de adopcion era lenta y su empresa estuvo a punto de quebrar, hasta que llego el momento
de aprovechar el emergente campo comercial de Internet con una empresa, entonces peque~na denominada
Netscape. El resto es historia y ahora RSA es el algoritmo de cifrado de clave publica mas utilizado. Die
y Hellman nalmente lanzaron una aplicacion practica de su propiedad, pero solo util para intercambios
de clave, mientras que RSA puede realizar la autenticacion y el no reconocimiento.
Panorama actual
Hoy en da, el cifrado de clave publica se encuentra detras de cada servidor web que nos ofrece una
compra segura. Nuestra transaccion se cifra sin tener que dar ni obtener una clave secreta y todo se
produce en segundo plano. Como usuarios, lo unico que conocemos es ese peque~no smbolo de candado
SSL que se muestra en nuestro explorador para sentirnos seguros. No se puede imaginar el efecto que
tendra sobre el comercio de Internet si cada vez que desearamos comprar algo online tuviesemos que
pensar en una clave secreta, cifrar el mensaje y comunicar posteriormente de alguna forma dicha clave
a la otra parte. Evidentemente, el comercio electronico no existira tal y como existe actualmente si no
existiese la criptografa de clave publica.
Por lo general las aplicaciones, combinan los dos tipos de criptografa. Utilizan primeramente cripto-
grafa de clave publica para acordar una clave simetrica aleatoria. Esta clave simetrica es una clave de
sesion y sirve para realizar mas rapidamente el cifrado y descifrado de la informacion que se mandan, ya
que tiene un coste computacional mucho mas bajo.
Existen muchos algoritmos de cifrado, protocolos y aplicaciones diferentes basadas en estos dos tipos
principales de cifrado. Las siguientes secciones explican algunos de estos tipos.
11.2.2. Estandares generales
El estandar de cifrado de datos (DES, Data Encryption Standar) es el estandar original que el gobierno
de los Estados Unidos empezo a promover para su uso gubernamental y comercial. Pensado originalmente
para se practicamente inquebrantable en los a~nos setenta, el aumento en potencia y el descenso en costo
1
Denominacion que se le da en informatica teorica a los problemas mas diceles de calcular, que necesitan un tiempo
exponencial para su resolucion).
2
Esto no es algo descabellado, hace muy pocos a~nos se ha conseguido desarrollar un algoritmo que resuelve el problema
de si un n.
o
tiene factores, en tiempo de computacion polinomico.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 183
de la informatica hicieron que su funcionalidad de clave de 56 bits quedase obsoleta para informacion muy
condencial. Sin embargo, todava se sigue utilizando en muchos productos comerciales y se considera
aceptable para las aplicaciones de seguridad inferior. Tambien se utiliza en productos que tienen proce-
sadores mas lentos, como las tarjetas inteligentes y los dispositivos que no procesan un tama~no de clave
mas largo.
TripleDES
Tambien llamado 3DES es la version DES mas moderna y actualizada, su nombre implica lo que hace.
Ejecuta DES tres veces en los datos en tres fases: cifrado, descifrado y cifrado de nuevo. En realidad no
multiplica por tres la solidez de su codigo (la primera clave de codigo se utiliza dos veces para cifrar los
resultados del proceso), pero sigue teniendo una longitud de clave efectiva de 168 bits, bastante solidez
para la mayora de usos.
RC4, RC5 y RC6
Este algoritmo de cifrado fue desarrollado por Ronald Rivest, uno de los desarrolladores de RSA, la
primera aplicacion graca de criptografa publica. Se han realizado mejoras a lo largo del tiempo para
hacerla mas solida y solucionar problemas menores. La version actual, RC6, permite una clave de 2.040
bits de tama~no y un tama~no de bloque variable de hasta 128 bits.
AES
Cuando el gobierno de los Estados Unidos se dio cuenta de que DES terminara llegando al nal de
su vida util, empezo a buscar un sustituto. Hubo muchos competidores, incluyendo RC6, Blowsh del
reconocido criptografo Bruce Schneier y otros algoritmos meritorios. El concurso se resolvio a favor de
AES, basado en un algoritmo denominado Rijindael dise~nado por dos criptografos belgas. Este hecho es
importante porque se utilizo una competicion abierta para decidir el estandar. Asimismo, al seleccionar
un algoritmo de dos desarrolladores no norteamericanos sin intereses comerciales signicativos ayudaba a
legitimar esta seleccion por todo el mundo. AES se esta convirtiendo rapidamente en el nuevo estandar del
cifrado. Ofrece una clave de hasta 256 bits, algo mas que suciente para el futuro previsible. Normalmente,
AES se implanta en modo de 128 o 192 bits.
11.2.3. Aplicaciones de la criptografa
Hash
Los hash son funciones especiales de sentido unico que proporcionan autenticacion y vericacion uti-
lizando el cifrado. Una funcion hash recoge un archivo y lo coloca en una funcion para que se produzca
un archivo de tama~no, en conjunto, mucho mas peque~no. Al hacerlo, se produce una huella digital unica,
lo que nos proporciona una forma segura de saber que el archivo no se ha alterado de ninguna manera.
Al utilizar una funcion hash para un archivo sospechoso y comparar su huella digital con la huella digital
correcta, podremos saber si se ha producido algun cambio en el archivo. Es muy poco probable que un
archivo con una estructura diferente produzca una huella identica. Incluso si cambia uno de los caracteres,
se cambia la huella digital signicativamente. Las posibilidades de que dos archivos diferentes produzcan
el mismo hash son innitesimales.
Normalmente los hash se proporcionan en versiones descargadas de software para asegurarse de que
esta obteniendo el software real, algo importante, especialmente con el software de libre distribucion que se
puede descargar desde replicas de los servidores ociales. El sitio web ocial normalmente incluye el hash
correcto de la ultima version. Si ambos no coinciden, sabremos que se han producido cambios, posiblemente
sin el permiso o el conocimiento de los desarrolladores del software. El algoritmo hash mas conocido se
denomina MD5.
Cuando se instala el sistema, se pregunta al usuario que algoritmo hash quiere usar para las contrase~nas.
Es muy recomendable establecer MD5 como predeterminado, ya que actualmente se le considera uno de
los mejores algoritmos de hash.
Jose Antonio Escartn Vigo, Junio 2005.

184 Servidor Linux para conexiones seguras de una LAN a Internet
Certicados digitales
Los certicados digitales son las \rmas" del mundo comercial en Internet. Utilizan una combinacion de
tipos de cifrado para proporcionar autenticacion y comprueban que quien se esta conectando es realmente
quien dice ser. En resumen, un certicado es una \certicacion" expedida por una autoridad de la que nos
emos y que permite arnos de la veracidad de lo que nos esta contando el titular del certicado.
Un certicado contiene la clave publica de la organizacion cifrada con la clave privada o la clave
publica de una autoridad de rmas. El uso de una autoridad de certicados o rmas se considera el
metodo mas seguro de los dos. Si podemos descifrar el certicado con su clave publica, podremos suponer
razonablemente que el sitio web pertenece a dicha organizacion.
Normalmente, los certicados se unen a un dominio determinado. Pueden ser emitidos por una entidad
central, o creados y rmados localmente. Existen varias organizaciones de este tipo, entre ellasVeriSign,
la empresa que ademas se encarga del sistema de nombres de dominio en Internet. Estas organizaciones
han sancionado a otras muchas empresas por ofrecer certicados de su parte, sin regulacion de ningun
tipo. Obtener un certicado deVeriSigno de una de las empresas autorizadas es como si respondieran por
nosotros. Generalmente, no emitiran un certicado hasta que veriquen la informacion incluida en el, bien
por va telefonica o bien por otro medio de documentacion en papel, como un contrato corporativo en el
que se pide autenticacion en persona. Cuando han \certicado" que nuestra informacion es correcta, cogen
esta informacion, incluyendo los URL que vamos a utilizar para el certicado y la \rman" digitalmente
cifrandola con su clave privada. Despues, un servidor Web o cualquier programa podran utilizar este
certicado.
Las entidades de certicacion descentralizan su mision en entidades de certicacion locales en las que
conan. En Catalu~na esta entidad es la Agencia Catalana de certicaciones, CATCERT.
En su pagina web podemos encontrar mas informacion: http://www.catcert.net
Cuando los usuarios externos reciben datos, como una pagina web del servidor, y adjunta un certicado,
pueden utilizar la criptografa de clave publica para descifrar el certicado y vericar nuestra identidad.
Se utilizan principalmente en los sitios de comercio electronico, pero tambien se utilizan en cualquier otra
forma de comunicacion. Programas como SSH y Nessus pueden utilizar certicados para la autenticacion.
Las VPN o las redes inalambricas tambien pueden utilizar certicados para la autenticacion en lugar de
contrase~nas.
11.2.4. Protocolos de cifrado
Un hecho bien conocido es que el protocolo IP tal y como se dise~no originalmente no era muy seguro.
La version 4 de IP (IPv4), utilizado por casi todo el mundo de la comunicacion con IP, no proporciona
ningun tipo de autenticacion ni condencialidad. Las cargas utiles del paquete se envan al descubierto y
los encabezados del paquete se pueden modicar facilmente ya que no se verican en el destino. Muchos
ataques de Internet se basan en esta inseguridad basica de la infraestructura de Internet. Para proporcionar
autenticacion y condencialidad a traves del cifrado, se ha desarrollado un nuevo estandar IP denominado
IPv6. Ademas, ampla el espacio de direccion IP utilizando una direccion de 128 bits en lugar de 32 bits
y mejora ademas otros elementos.
La implantacion completa del estandar IPv6 requiere actualizaciones de hardware a amplia escala, por
lo que el despliegue de IPv6 esta siendo bastante lento. Mientras no se acabe de implantar existen una
serie de protocolos que nos permiten tener una cierta seguridad.
IPsec
Para solventar los problemas de IPv4 se desarrollo una implantacion de seguridad para IP, denominada
IPsec, que no requera cambios importantes en el esquema del direccionamiento. Los suministradores de
hardware se aferraron a ello, convirtiendose IPsec poco a poco en un estandar de hecho para crear VPNs
en Internet.
No es un algoritmo de cifrado especco, sino una estructura para cifrar y vericar paquetes dentro del
protocolo IP. Puede utilizar diversos algoritmos y puede implantarse total o parcialmente. Para codicar
el contenido del paquete se utiliza una combinacion de clave publica y privada y ademas los hash a~naden
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 185
tambien autenticacion. Esta funcion se denomina encabezado de autenticacion (AH, Autentication Hea-
der). Con AH, un hash se crea a partir del encabezado IP y este pasa adelante. Cuando el paquete llega a
su destino, se crea un nuevo hash a partir de cada encabezado. Si no es comparable al enviado, sabra que
el encabezado se ha alterado de alguna manera durante el transito, lo que nos proporciona un alto nivel de
garanta de que el paquete proviene de donde dice. Podemos elegir descifrar la carga util pero no ejecutar
un AH ya que puede ralentizar el procesamiento. AH tambien puede estropearse en algunos entornos con
NAT o cortafuegos.
Existen otros dos modos de operacion diferentes en los que podemos ejecutar IPsec: en modo tunel o
en modo transporte.
En modo tunel, todo el paquete (encabezados incluidos) se encapsula y se cifra, se coloca en otro
paquete y se remite al procesador VPN central. Los extremos nales descifran los paquetes y despues los
envan al IP correcto. Una de las ventajas de utilizar este metodo es que los usuarios externos pueden
saber incluso cual es el destino nal del paquete cifrado. Otra ventaja es que VPN puede controlarse y
administrarse desde pocos puntos centrales. El inconveniente es que requiere un hardware dedicado en
ambos extremos para abrir el tunel.
En modo de transporte solo se cifran las cargas utiles del paquete; los encabezados se envan intactos,
lo que produce un despliegue mas facil y requiere menos infraestructura. Podemos seguir ejecutando AH
cuando utilicemos el modo de transporte y vericar la direccion de origen de los paquetes.
PPTP: Protocolo de tunel punto a punto
El protocolo PPTP (Point-to-Point Tunneling Protocol) es un estandar desarrollado por Microsoft,
3Com y otras grandes empresas que proporcionan cifrado. En PPTP se han descubierto algunos fallos
importantes que limitan su aceptacion. Cuando Microsoft implemento IPsec en Windows 2000, pareca
una admision tacita que IPsec haba ganado como nuevo estandar de cifrado. Sin embargo, PPTP sigue
siendo un protocolo util y economico para congurar VPN entre los PC mas antiguos de Windows.
L2TP: Protocolo de tunel de dos capas
El protocolo L2TP (Layer Two Tunneling Protocol) es otro protocolo desarrollado para la industria
y rmado por Microsoft y Cisco. Aunque se utiliza frecuentemente en dispositivos de cifrado basados en
hardware, su uso en software es relativamente limitado.
SSL: Capa segura de Sockets
El protocolo SSL (Secure Socket Layer) se dise~no especcamente para su uso en la Web (ApacheSSL
que explico en el proyecto lo contempla), aunque puede utilizarse en cualquier tipo de comunicacion TCP.
Originalmente lo dise~no Netscape para que su explorador ayudase a la simulacion de comercio electronico.
SSL proporciona cifrado de datos, autenticacion en ambos extremos e integridad de mensajes utilizando
certicados.
Normalmente, SSL se utiliza cuando se realiza una conexion a un servidor web para que sepa que la
informacion que enviamos se protege a lo largo del trayecto. La mayora de las personas ni siquiera se dan
cuenta de que SSL se esta ejecutando en segundo plano. Normalmente solo autentica un extremo, la parte
del servidor, ya que la mayora de usuarios nales no tienen certicados.
11.2.5. OpenPGP: Aplicacion de cifrado
El estandar PGP (Pretty Good Privacy o privacidad bastante buena), en el que esta basado OpenPGP,
se creo para proteger la informacion de los usuarios ante miradas indiscretas.
Historia del PGP
Phil Zimmerman es un programador muy implicado en los derechos humanos. Le preocupaba que el uso
creciente de los ordenadores y de las redes de comunicacion facilitase a las agencias de seguridad estatales
de regmenes represivos la interceptacion y recopilacion de informacion sobre los disidentes. Phil quera
escribir algun software que ayudase a dichas personas a mantener su informacion privada y segura frente
Jose Antonio Escartn Vigo, Junio 2005.

186 Servidor Linux para conexiones seguras de una LAN a Internet
a los brutales regimenes que los controlaban. Este software poda salvar literalmente la vida de algunas
personas. Tampoco crea que su propio gobierno no observara sus datos personales cuando se desplazaban
por redes interconectadas. Saba lo facil que poda ser para el gobierno crear sistemas para buscar cada
lnea de los mensajes de correo electronico para determinadas palabras clave. Deseaba proporcionar a las
personas una forma de proteger y garantizar su derecho constitucional a la privacidad.
Este software lo denomino Pretty Good Privacy (PGP), algo as como una Privacidad bastante buena,
ya que crea que haca una buena labor a la hora de proteger los datos ante los servicios de inteligencia de
los pases mas peque~nos. Sin embargo, la agencia de la informacion de los Estados Unidos, NSA, no lo vea
de esa forma. Zimmerman fue investigado por infringir las leyes federales de exportacion de municion por
permitir que su software se descargase fuera del pas. Originalmente, Phil pretenda buscar una empresa
que vendiera su innovacion. Sin embargo, cuando el gobierno inicio su persecucion, distribuyo libremente
el software por Internet para que se distribuyese por todas partes. Posteriormente formo una empresa para
vender las versiones comerciales del software pero existen implantaciones de libre distribucion de PGP
por todo Internet. Algunas de estas son mas populares que otras y algunas son aplicaciones que tienen
funciones especcas como el cifrado de mensajes de correo electronico. Se pueden encontrar una lista de
todas estas implementaciones de PGP enhttp://www.cypherspace.org/openpgp/.
GnuPG: GNU Privacy Guard
En el servidor he utilizado GnuPG, una de las implementaciones bajo licencia GPL basada en el
estandar OpenPGP.
La gran ventaja de la version Gnu a la version PGP comercial es que se encuentra bajo licencia GPL
y por lo tanto podemos utilizarla para cualquier aplicacion, comercial o personal, asi como ampliarla o
insertarla como queramos. El inconveniente es que se trata de una herramienta de lnea de comandos,
por lo que no tiene los bonitos complementos que ofrece la version comercial de PGP. No obstante hay
que tener cuidado, GnuPG probablemente no sea la mejor opcion para usuarios no tecnicos, a no ser que
a~nadamos su propia interfaz (Gnome dispone de una).
Para comprobar la version:
$gpg --version
Si no lo tenemos instalado, hay que ejecutar algunas sentencias apt:
#apt-get instal gnupg, . . . Programa GnuPG
#apt-get instal gpgp, . . . interfaz Gnome para GnuPG
Crear pares de claves
Si ya las tiene creadas y quiere importarlas,#gpg --import path/filename. Si tiene separadas la
clave publica y privada, el formato de archivo suele serpubring.pkrysecring.skr
Si se han de crear:
1. Escribimos:#gpg --gen-keyy seguimos las instrucciones de pantalla
2. GnuPG pide el tama~no de bits de sus claves. El predeterminado es 1.024, que generalmente se
considera suciente para una criptografa solida de clave publica. Podemos aumentar el tama~no
hasta 2.048 para una seguridad mucho mas fuerte.
3. Generalmente no se desea que las claves expiren, pero si tiene un caso especial en el que solo
utilizara esta clave durante un tiempo limitado, se puede establecer una fecha de nalizacion.
4. Por ultimo se pide que se introduzca una contrase~na que sirva de frase de paso.
Atencion: Es muy importante conservar copias de seguridad del par de claves en un lugar
seguro, en caso de perderlas, los datos cifrados se no se podran recuperar.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 187
$gpg --list-keys, . . . nos dara la lista de claves instaladas en el sistema.
En elhomedel usuario se crea un directorio oculto.gnupgdonde se almacenaran los archivos.
Crear un certicado de revocacion:
Una vez creadas las claves, tambien podemos crear un certicado de revocacion que se utiliza si perdemos
nuestras claves o si alguien obtiene acceso a nuestra clave privada. Despues podemos utilizar este certi-
cado para revocar nuestra clave de los servidores publicos. Podemos seguir descifrando mensajes recibidos
utilizando la clave publica antigua (suponiendo que no la hayamos perdido) pero nadie podra descifrar
ningun mensaje con las claves publicas incorrectas. Para crear un certicado:
$gpg --output revoke.asc --gen-revoke user
Donde se debe reemplazarusercon la frase secreta de dicho usuario, asignada cuando generamos el
par de claves. Este certicado hay que eliminarlo del disco y guardarlo en lugar seguro, ya que si alguien
se hace con el, tambien podra hacerse con el certicado de revocacion.
Publicar la clave publica
Se puede colocar la clave publica en un servidor de claves para que cualquiera pueda encontrarla facil-
mente y enviar mensajes. Para ello es necesario ejecutar el siguiente comando:
$gpg --keyserver server --send-keys user
Donde se debe reemplazarservercon el nombre de un servidor de claves publicas yusercon la direccion
de correo electronico de la clave que desea publicar. Puede utilizar cualquier servidor de claves publicas
PGP ya que todos se sincronizan con frecuencia. Existen muchos servidores de claves publicas, como por
ejemplo: pgp.mit.edu, certserver.pgp.com y usa.keyserver.net.
Jose Antonio Escartn Vigo, Junio 2005.

188 Servidor Linux para conexiones seguras de una LAN a Internet
Cifrar archivos con GnuPG
Para cifrar un archivo se utiliza el comando:
$gpg --output file.gpg --encrypt --recipient [email protected] file.doc
Reemplanzandole.gpgcon el nombre de archivo resultante deseado,[email protected] la di-
reccion de correo electronico del usuario al que esta realizando el envo yle.docpor el arcivo que se desea
cifrar. Tenga en cuenta que tiene que tener la clave publica del destinatario en su repositorio para poder
hacerlo.
Tambien se puede utilizar GnuPG para cifrar archivos con una criptografa simetrica, que puede utilizar
para sus archivos locales que desea proteger o para alguien del que no tiene su clave publica. Para ello,
utilice el comando:
$gpg --output file.gpg --symmetric file.doc
Reemplazadole.gpgcon el archivo de salida deseado yle.doccon el nombre del archivo que desea
cifrar.
Descifrar archivos
Para utilizar GnuPG para descifrar archivos recibidos, utilizamos el siguiente comando:
$gpg --output file.doc --decrypt file.gpg
Reemplazandole.doccon el nombre del archivo resultante deseado y siendole.gpgel archivo cifrado.
Tenemos que tener la clave publica del usuario para el que se ha realizado el cifrado en nuestro repositorio.
Un mensaje solicitara la frase de contrase~na y, una vez introducida correctamente, GnuPG producira el
archivo descifrado.
Firmar archivos
Tal y como he mencionado anteriormente, otro uso de GnuPG y PGP es rmar documentos para
vericar su integridad, algo que podemos hacer con el siguiente comando:
$gpg --output signed.doc --sign unsigned.doc
Siendosigned.docel nombre de archivo de salida resultante deseado yunsigned.docel archivo a rmar.
Este comando rma y cifra el documento y despues procesa el archivo de salidasigned.doc. Cuando se
descifra, GnuPG tambien vericara el documento.
Para vericar el archivo se utiliza el comando:
$gpg --verify signed.doc
Siendosigned.docel archivo cifrado que desea vericar. Tambien podemos crear rmas separadas
del archivo para poder acceder a usuarios sin GnuPG e incluir la rma.

Estos son los comandos para
conseguirlo:
$gpg --clearsign file.doc
Crea un apendice de texto al archivo con la rma. Si no desea alterar el archivo, puede crear un archivo
de rma separado, para dejar almacenada la rma o mandarla por separado, con el comando:
$gpg --output sig.doc --detached-sig file.doc
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 11. Comunicaciones seguras 189
Web de modelo de conanza de PGP/GnuPG
Tal y como hemos mencionado anteriormente, en lugar de utilizar un sistema de conanza jerarqui-
co como los certicados digitales y su autoridad de certicados central, PGP y GnuPG utilizan una web
de modelo de conanza. Al rmar las claves de las personas que conoce, puede vericar que sus claves
son de conanza. Y si rman las claves de otras personas que no conoce directamente, se crea una cadena
de conanza. El modelo se basa en la idea de que \cualquier amigo suyo es un amigo mo". En realidad
este modelo no funciona perfectamente; en algun lugar en la parte inferior de la cadena podra haber una
manzana podrida, pero la idea que se esconde detras del sistema es que se propaga organicamente y no
requiere ninguna estructura. Debido a ello puede desmantelarse o formarse facilmente a gran escala. La
forma de establecer esta web de conanza es rmar las claves de las personas y dejar que ellos rmen la
suya propia.
Firmar claves y administrar claves de conanza
En GnuPG, rmamos y administramos claves de conanza entrando en el modo de edicion de la clave
con el siguiente comando:
gpg --edit-key [email protected]
[email protected] con la direccion de correo electronico de la clave que desea r-
mar o administrar, tiene que ser una de la claves que tenemos en el repositorio. Este comando imprime
informacion basica sobre la clave. Dentro de este modo escribafprpara imprimir la huella dactilar de
la clave. Igual que las personas, la huella dactilar de la clave es un identicador especco para dicha
clave. Asegurese de que se trata de la clave de la persona en concreto comparandola con dicha persona
por telefono o por cualquier otro medio de comunicacion. Tambien puede comprobar si alguien mas ha
rmado esta clave escribiendocheck. Este comando imprime una lista de otros rmantes de esta clave y
puede ayudarla a decidir la validez de la misma.
Cuando se quiere asegurar de que se trata de la clave de una persona en concreto, escribasign. Este
comando rma la clave de dicha persona para que cualquiera que la este buscando sepa que confa en ella.
En este modo tambien puede editar los niveles de las diferentes claves en su repositorio. Se introduce este
modo dentro del modo de edicion de la clave escribiendotrust.
As se muestra el siguiente menu:
1=Don't know (No la conozco).
2=I do NOT trust (No confio en ella).
3=I trust marginally (Confio en ella un poco).
4=I trust fully (confio en ella plenamente).
d=Please show me more information (Mostrar mas detalles).
m=Back to the main menu (Volver al menu principal).
Al escoger uno de los elementos, dicha clave se marcara como realizada por nosotros.

Esta es otra
forma de poderse comunicar con otros a cerca de los usuarios que tienen su nivel mas alto de conanza y
cuales son usuarios en los que confa poco.
PGP y GnuPG son extraordinarios para cifrar archivos. Sin embargo, >y si desea cifrar todas las co-
municaciones entre dos puntos? PGP no es en realidad viable para esta funcion, esto es realizado por el
SSH, explicado en la seccion anterior.
Existen muchsimas mas opciones que se pueden consultar con:$man gpg
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12
Herramientas de seguridad
12.1. Herramientas basicas
Existen varios comandos de sistema operativo que utilizaremos con frecuencia en nuestra labor de
asegurar la seguridad. No son programas de seguridad completamente independientes, sino utilidades del
sistema operativo que se pueden utilizar para generar informacion de seguridad.
12.1.1. Ping
Ping (Packet Internet Groper, que se pude traducir como buscador de paquetes en Internet) es una
herramienta de diagnostico TCP/IP. Muchos creen que el ping es como un radar submarino: un ping sale,
rebota en un destino y vuelve. Aunque se trate de una buena analoga general, no describe exactamente
lo que sucede cuando incluimos un ping en una maquina. Los ping utilizan un protocolo de red denomi-
nado ICMP (Internet Control Message Protocol, o Protocolo de mensajes de control de Internet). Estos
mensajes se utilizan para enviar informacion sobre redes. Ping utiliza los tipos de mensaje ICMP 8 y 0,
conocidos tambien comoSolicitud de ecoyContestacion de ecorespectivamente. Cuando utilizamos el co-
mando ping, la maquina enva una solicitud de eco a otra maquina. Si se puede acceder a la maquina que se
encuentra en el otro extremo y se ejecuta una pila TCP conforme, respondera con una contestacion de eco.
Basicamente, las comunicaciones en un ping tienen la siguiente apariencia:
El sistema A enva un ping al sistema B: solicitud de eco, \>Estas ah?"
El sistema B recibe la solicitud de eco y enva una contestacion de eco: \Si, estoy aqu"
En una sesion ping tpica, este proceso se repite varias veces para comprobar si la maquina de destino
o la red estan bajando paquetes. Tambieen se puede utilizar para determinar la latencia, el tiempo que
tardan los paquetes entre dos puntos.
Tambien podemos obtener estos otros tipos de mensajes ICMP cuando mandamos un ping. Cada uno
tiene us propio signicado.
Red inalcanzable
Antrion inalcanzable
Con un ping podemos saber algo mas sobre un antrion que si simplemente esta activo o no. La forma en
que una maquina responde a un ping, normalmente, identica el sistema operativo que esta ejecutando.
Tambien podemos utilizar ping para generar una solicitud de busqueda DNS, que nos proporciona el
nombre del antrion de destino (si lo tiene), que a veces puede decirnos si esta maquina es un servidor,
un enrutador o quiza una conexion telefonica o conexion de ancho de banda. Podemos mandar un ping a
una direccion IP o a un nombre de dominio.

192 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 12.1: Opciones del comando ping
Opcion Descripcion
-c count Establece un numero de pings deteminado, por defecto es innito
-f Flujo de los ping. Enva tantos paquetes como puede, tan rapido como puede.

Util para
comprobar si un antrion esta bajando paquetes porque mostrara gracamente a cuantos
ping responde. Hay que tener cuidado con esta opcion porque puede producir la caida
de la red por DoS (denegacion de servicio)
-n No ejecuta DNS en la direccion IP. Puede aumentar la velocidad de una respuesta y
cancelar los problemas de DNS cuando existen problemas de diagnostico de la red
-s size Enva paquetes de longitudsize.

Util para probar como manipula los paquetes grandes
una maquina o un enrutador. Irregularmente, los paquetes grandes se utilizan en ataques
de denegacion de servicios para hacer caer una maquina o desbordarla
-p patternEnva un patron especco en el paquete ICMP de carga util. Tambien es util para probar
como responde una maquina a un estmulo ICMP inusual
La tabla 12.1 incluye los modicadores y las opciones adicionales para el comando ping, que pueden
resultar utiles.
Un ejemplo de este comando podra ser el siguiente:
# ping www.fib.upc.es
PING www.fib.upc.es (147.83.41.7): 56 data bytes
64 bytes from 147.83.41.7: icmp_seq=0 ttl=241 time=66.3 ms
64 bytes from 147.83.41.7: icmp_seq=1 ttl=241 time=130.4 ms
64 bytes from 147.83.41.7: icmp_seq=2 ttl=241 time=103.8 ms
64 bytes from 147.83.41.7: icmp_seq=3 ttl=241 time=62.0 ms
64 bytes from 147.83.41.7: icmp_seq=4 ttl=241 time=76.8 ms
64 bytes from 147.83.41.7: icmp_seq=5 ttl=241 time=61.5 ms
--- www.fib.upc.es ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 61.5/83.4/130.4 ms
12.1.2. Traceroute
Si no lo tenemos instalado basta con hacer:
#apt-get install traceroute
Este comando es similar a ping pero proporciona mas informacion sobre el antrion remoto. Basi-
camente, los pings que rastrean rutas (tracerotue) son antriones, pero cuando envan fuera el primer
paquete, establecen la conguracion TTL (tiempo de vida) del paquete en uno. Esta conguracion con-
trola la cantidad de puntos de conexion en el ordenador de la red que obtendra antes de morir por lo que
el primer paquete solo ira al primer enrutador o maquina mas alla de la nuestra en Internet y despues
devolvera un mensaje indicando que el paquete ha \expirado". A continuacion el siguiente paquete se
establece con un TTL de 2, y as sucesivamente hasta llegar a nuestro objetivo, mostrandonos el trazado
virtual (la ruta) que siguen los paquetes. Se resuelve el nombre de cada antrion encontrado a lo largo
del camino para que podamos ver como cruza Internet el traco. Puede ser muy interesante comprobar
como un paquete pasa por diferentes paises antes de llegar a su destino una fraccion de segundo despues
y a veces, por caminos impensables y lejanos.
Esta herramienta es muy practica cuando estamos intentando localizar el origen o la ubicacion de un
intruso que hemos encontrado en nuestro logs o alertas. Podemos rastrear la ruta de la direccion IP y
saber varias cosas sobre dicha direccion. La salida puede indicarnos si se trata de un usuario domestico
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 193
o de un usuario que se encuentra dentro de una empresa, cual es su ISP (para poder enviarle una queja
sobre el abuso), que tipo de servicio tiene y lo rapido que es y donde se encuentra geogracamente (a veces
depende de la capacidad de descripcion de los puntos intermedios).
Para ver como funciona podemos ejecutar el siguiente ejemplo:
# traceroute www.fib.upc.es
traceroute to www.fib.upc.es (147.83.41.7), 30 hops max, 38 byte packets
1 (192.168.0.1) 0.480 ms 0.459 ms 0.408 ms
2 213.0.184.252 (213.0.184.252) 46.732 ms 47.016 ms 116.462 ms
3 213.0.190.22 (213.0.190.22) 48.833 ms 51.344 ms 47.850 ms
4 tbvia1-tbest1-1.nuria.telefonica-data.net (213.0.248.146) 47.108 ms 45.986 ms
5 213.0.254.242 (213.0.254.242) 47.335 ms 52.532 ms 51.392 ms
6 montseny-catnix.catnix.net (193.242.98.2) 61.530 ms 66.452 ms 61.101 ms
7 upc-anella.cesca.es (84.88.18.18) 63.990 ms 129.435 ms 64.099 ms
8 * * *
Como se puede observar, la lectura de traceroute es mas un arte que una ciencia, pero con el tiempo
se aprende a reconocer mejor el signicado de las abreviaturas.
Traceroute nos ofrece mucha informacion para el seguimiento de una IP, si es el origen de una intrusion o
un ataque. Si identicamos el ISP, con el sitio web de la empresa podemos encontrar un numero de telefono
o una direccion de correo y quejarnos. Los ISPs habitualmente nalizan su contrato de suministro con
el cliente malintencionado. Tambien podemos utilizar el comando whois, para buscar contactos tecnicos
especcos para la empresa y organizacion.
12.1.3. Whois
El comando whois es util para intentar localizar el contacto de alguien que esta causando problemas
en nuestra red. Este comando consulta los servidores de nombre de dominio principales y devuelve toda
la informacion que tiene el registrador de nombres que le corresponda. Con esto podemos averiguar quien
es el propietario de un dominio.
Este comando es util para ataques que provienen tanto de dentro de las redes de empresas como de los
ISP. De cualquier modo, podemos averiguar quien es la persona responsable de dicha red y comunicarle
nuestro problema. Esta solucion no siempre es muy practica, pero por lo menos podemos probar.
Su sintaxis es:
$whois domain-name.com, . . . dondedomain-name.comes el nombre del dominio sobre el que estamos
buscando informacion.
Podemos observar esto en el siguiente ejemplo:
$whois www.google.com
Whois Server version 1.3
Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.
Server Name: WWW.GOOGLE.COM.TR
Registrar: TUCOWS INC.
Whois Server: whois.opensrs.net
Referral URL: http://domainhelp.tucows.com
Server Name: WWW.GOOGLE.COM.MX
Registrar: ENOM, INC.
Whois Server: whois.enom.com
Referral URL: http://www.enom.com
Server Name: WWW.GOOGLE.COM.BR
Registrar: ENOM, INC.
Whois Server: whois.enom.com
Referral URL: http://www.enom.com
Server Name: WWW.GOOGLE.COM.AU
Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE
Whois Server: whois.melbourneit.com
Referral URL: http://www.melbourneit.com
>>> Last update of whois database: Wed, 25 May 2005 08:39:49 EDT <<<
Jose Antonio Escartn Vigo, Junio 2005.

194 Servidor Linux para conexiones seguras de una LAN a Internet
Tambien nos puede pasar lo siguiente:
$whois www.fib.upc.es
Este TLD no dispone de servidor whois, pero puede acceder a la informacion de whois en
https://www.nic.es/ingles/
Con lo que, la unica solucion es buscar a mano en esa direccion. Solamente los dominios.com,.nety
.eduse encuentran incluidos en whois.
El comando whois normalmente muestra una lista de direcciones de correo electronico, direcciones de
correo postal y, a veces, numeros telefonicos. Nos dice cuando se creo el dominio y si se han hecho cambios
recientes en sus listados whois. Tambien muestra a los servidores de nombre de dominio responsables de
ese nombre de dominio. Se puede ampliar mas esta informacion con el siguiente comando:dig.
Si administra dominios propios, debe asegurarse de que su listado whois esta actualizado y es tan
generico como pueda serlo. Al colocar direcciones de correo electronico y nombre reales en los campos de
informacion, estamos proporcionando informacion que alguien del exterior puede aprovechar, ya sea para
una labor social como para atacar nuestros sistemas. Es mejor utilizar direcciones de correo electronico
genericas, dejando que los responsables reciban los mensajes enviados a esas direcciones de correo electroni-
co y evitar proporcionar una informacion valiosa sobre la estructura de nuestra organizacion tecnica.
12.1.4. Dig
El comando dig consulta en el servidor de nombres determinada informacion sobre un dominio. Dig
es una version actualizada del comandonslookup, que ha quedado desfasado. Podemos utilizarlo para
determinar los nombre de maquinas utilizados en una red, que direcciones IP se unen a dichas maquinas,
cual es su servidor de correo y otro tipo de informacion util.
La sintaxis general es:
$dig @ server domain type
Dondeserveres el servidor DNS al que deseamos consultar,domaines el dominio sobre el que estamos
preguntando ytypees el tipo de informacion deseada.
Como ejemplo podemos poner una direccion que viene en el manual:
$dig www.isc.org
; <<>> DiG 9.2.4 <<>> www.isc.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25173
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3
;; QUESTION SECTION:
;www.isc.org. IN A
;; ANSWER SECTION:
www.isc.org. 600 IN A 204.152.184.88
;; AUTHORITY SECTION:
isc.org. 3599 IN NS ns-ext.isc.org.
isc.org. 3599 IN NS ns-ext.lga1.isc.org.
isc.org. 3599 IN NS ns-ext.nrt1.isc.org.
isc.org. 3599 IN NS ns-ext.sth1.isc.org.
;; ADDITIONAL SECTION:
ns-ext.lga1.isc.org. 3599 IN A 192.228.91.19
ns-ext.nrt1.isc.org. 3599 IN A 192.228.90.19
ns-ext.sth1.isc.org. 3599 IN A 192.228.89.19
;; Query time: 696 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Wed May 25 21:30:18 2005
;; MSG SIZE rcvd: 192
En la tabla 12.2 podemos encontrar las opciones mas usuales del comando dig.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 195
Cuadro 12.2: Opciones del comando dig
Opcion Descripcion
AXFR Intenta obtener todo el archivo del archivo del dominio o de la \zona". Actualmente algunos
servidores se han congurado para no admitir transferencias de archivos de zona, por lo que
puede que tengamos que preguntar por registros especcos.
A Devuelve cualquier registro \A". Los registros \A" son nombres de antrion individuales
sobre la red
MX Devuelve el nombre del antrion de correo registrado para dicho dominio. Es util para
contactar con un administrador
CNAME Devuelve cualquier antrionCNAMED, conocidos como alias
ANY Devuelve cualquier informacion que puede generarse en el dominio. Algunas veces funciona
cuando falla AXFR
12.1.5. Finger
Finger es un antiguo comando Unix que ya no se utiliza pero que se sigue ejecutando en muchas
maquinas como servicio heredado. Originalmente se dise~no cuando Internet era un lugar comodo y los
usuarios permitan que otras personas al otro lado del mundo conociesen sus datos.
La mayora de los administradores lo eliminan de sus sistemas porque es una fuente de brechas de
seguridad, pero todava existen muchos enrutadores que lo incluyen y algunos Unix lo mantienen por de-
fecto. Ademas a esto se une que muchos administradores se les olvida desinstalarlo o no saben como hacerlo.
El comandongerpermite consultar, al sistema remoto, acerca de informacion de sus usuarios. La
sintaxis sera la siguiente:
$finger [email protected]
Tambien podemos especicar una direccion IP como dominio. El resultado del nger, podra ser usada
por una persona malintencionada para conseguir informacion mas relevante mediante ingeniera social.
Otro uso de nger es enviar el comando sin un nombre de usuario. As se genera una lista de todos
los usuarios conectados actualmente. Con esto podemos saber quien esta conectado y sus nombres reales
e incluso podemos saber si estan inactivos y durante cuanto tiempo. Por ultimo presenta una lista de las
estaciones y de donde provienen (si son locales o remotas), un usuario malicioso puede intentar secuestrar
una de esas sesiones inactivas. Los resultados del comando los podemos ver en el siguiente ejemplo:
$finger
Login Name Tty Idle Login Time Office Office Phone
josan Jose Antonio Escartin *:0 May 26 12:18
josan Jose Antonio Escartin pts/1 May 26 12:34 (:0.0)
Y despues se puede utilizar para para averiguar mas sobre un usuario:
$finger josan
Login: josan Name: Jose Antonio Escartin Vigo
Directory: /home/josan Shell: /bin/bash
On since Thu May 26 12:18 (CEST) on :0 (messages off)
On since Thu May 26 12:34 (CEST) on pts/1 from :0.0
No mail.
No Plan.
En este caso no hay demasiada informacion, pero otras veces podemos encontrar su correo electronico,
su plan de trabajo e incluso proyectos en los que este trabajando actualmente.
Tambien podemos hacer consultas sobre todos los que esten conectados con la siguiente opcion:
$finger -l
Jose Antonio Escartn Vigo, Junio 2005.

196 Servidor Linux para conexiones seguras de una LAN a Internet
12.2. Firewall o cortafuegos
Forman la primera lnea de defensa frente a los intrusos que quieren entrar en nuestra red corporativa.
Sin embargo, debido a la complejidad creciente y a la sosticacion de los atacantes, pueden ser unos meca-
nismos de defensa insucientes si no se han congurado correctamente. Una lnea de conguracion erronea
puede negar la proteccion que ofrece un cortafuegos. Un administrador muy ocupado que este intentando
establecer el acceso para los empleados errara normalmente mas en la parte de acceso en lugar de realizar
ah un mejor esfuerzo para congurar la seguridad. Se necesita mucha revision y paciencia a la hora de
establecer las reglas.
Los cortafuegos, se situan en la parte en la parte superior del sistema operativo y por lo tanto, pueden
ser vulnerables a todos los ataques normales a nivel de sistema operativo. Muchos cortafuegos utilizan un
servidor web como interfaz con otros usuarios y as pueden aprovecharse tambien de las brechas en las
interfaces web. Asegurar estas defensas de primera lnea es crtico y debe ser una de nuestras primeras
prioridades.
Por otra parte un cortafuegos solo nos protege de los ataques exteriores, contra ataques interiores no
tiene nada que hacer. Debemos de asegurarnos de que nuestros sistemas estan vigilados y no depender del
cortafuegos para toda la seguridad de nuestra red.
12.2.1. Polticas de seguridad
En algun momento, preferiblemente antes de instalar el cortafuegos, debemos comentar por escrito
su proceso de actuacion. Esto nos sera muy util para planicar la instalacion y conguracion. Este plan
documenta los procesos y procedimientos subyacentes para asegurarnos de que obtenemos un benecio.
La instalacion de un cortafuegos esta muy bien, pero sin instalar los procesos apropiados, puede que no
este ofreciendo a la organizacion la seguridad prometida.
Los siguientes pasos perlan un proceso para la implantacion y funcionamiento de un cortafuegos.
Desarrollar una poltica sobre el uso de la red
Trazar un mapa de los servicios internos y externos necesarios
Convertir la poltica sobre uso de la red y los servicios necesarios en reglas para el cortafuegos
Implantar y probar la funcionalidad y la seguridad. Despues de esto podemos activar el cortafuegos
y sentarnos a esperar las quejas.
Revisar y probar las reglas del cortafuegos periodicamente.
Dise~nar y utilizar un proceso como este nos ayudara a garantizar que obtenemos mucho mas de la
implantacion de nuestro cortafuegos.
12.2.2. Modos de conguracion
Existen dos formas de congurar un cortafuegos:
Permitir todo y bloquear lo que no deseemos
Denegar todo y a~nadir lo permitido
El metodo habitual, usado por la gran mayora de administradores es empezar con \denegar todo" y
despues a~nadir lo que deseamos permitir a los usuarios. Automaticamente bloqueamos todo el traco, a
no ser que se admita en la conguracion especcamente.
Para la mayora de los sitios, la solucion \denegar todo" es mucho mas seguro. Sin embargo, solo
porque optemos por esta solucion no signica que nuestra red sea totalmente segura. Los ataques pueden
provenir a traves de cualquier brecha que hayamos creado, como la web y el correo electronico.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 197
12.2.3. IPTables
Esta seccion describe como se congura un cortafuegos con IPTables, que es la utilidad integrada en la
mayora de los sistema Linux 2.4 y posteriores. Esta utilidad nos permite crear un cortafuegos empleando
comandos de nuestro sistema operativo.
Es una herramienta muy ecaz, pero compleja, y normalmente se recomienda para usuarios que esten
familiarizados con los cortafuegos y con el arte de congurarlos. Si es nuestro primer cortafuegos, es mejor
utilizar una de las herramientas de conguracion automatica disponibles para crear la conguracion, al
menos al principio. Estas herramientas utilizan IPTables para crear un cortafuegos utilizando nuestras
entradas. Sin embargo, es recomendable tener un conocimiento basico de lo que esta sucediendo ajo
cubierta" con IPTables antes de empezar a congurar con una de las herramientas gracas.
Instalar IPTables
La mayora de los sistemas Linux con kernel 2.4 o superior tendran integrado IPTables, por lo que no
es necesario instalar ningun programa adicional, el servicio lo proporciona el propio kernel.
Para comprobar si lo tenemos instalado hay que ejecutar:
$iptables -L, . . . debera mostrar una lista con el conjunto actual de reglas.
Si tenemos problemas lo mas probable es que no tengamos habilitado IPTables en el kernel, tenemos
que recompilar el kernel.
Modulos del kernel para IPTables
Para poder usar IPTables es necesario tener instalado en el kernel elnetltery cargados una serie de
modulos, depende para que usemos IPTables necesitaremos mas o menos.
Las opciones de IPTables se encuentran en:Networking-suport->Networking-options->Network-
packet-ltering.
1. Modulos basicos
CONFIGNETFILTER
CONFIGPACKET
CONFIGIPNFCONNTRACK
CONFIGIPNFFTP
2. Tablalter(actua como ltro)
CONFIGIPNFIPTABLES
CONFIGIPNFFILTER
CONFIGIPNFMATCHLIMIT
CONFIGIPNFMATCHMAC
CONFIGIPNFMATCHMARK
CONFIGIPNFMATCHMULTIPORT
CONFIGIPNFMATCHTOS
CONFIGIPNFMATCHTCTPMSS
CONFIGIPNFMATCHSTATE
CONFIGIPNFTARGETREJECT
Jose Antonio Escartn Vigo, Junio 2005.

198 Servidor Linux para conexiones seguras de una LAN a Internet
3. TablaNat(actua como router)
CONFIGIPNFNAT
CONFIGIPNFNATNEEDED
CONFIGIPNFNATFTP
CONFIGIPNFTARGETMASQUERADE
CONFIGIPNFTARGETREDIRECT
4. Tablamangle(altera paquetes especiales)
CONFIGIPNFMANGLE
CONFIGIPNFTARGETTOS
CONFIGIPNFTARGETMARK
CONFIGIPNFTARGETLOG
CONFIGIPNFTARGETTCPMSS
5. Compatibilidad con versiones anteriores
CONFIGIPCOMPATIPCHAINS
CONFIGIPCOMPATIPFWADM
Utilizar IPTables
La idea que se esconde detras de IPTables es crear canales de entradas y procesarlas de acuerdo con
un conjunto de reglas (la conguracion del cortafuegos) y enviarlas a continuacion a canales de salida. En
IPTables, estos canales se denominan tablas.
Las tablas basicas empleadas en IPTables son:
Input: Traco que entra en la maquina
Forward: Traco que pasa por la maquina
Prerouting: Enrutamiento previo
Postrouting: Enrutamiento posterior
Output: Traco que sale de la maquina
El formato que genera una declaracion IPTables es:
#iptables command rule-specification extensions
Dondecommand,rule-specicationyextensionsson una o mas opciones validas. La tabla 12.3 incluye
un resumen de las especicaciones de reglas y la tabla 12.4 de los comandos IPTables.
Existen otros comandos y opciones pero estos son los mas comunes. Para obtener una lista completa
de listados, consulte el manual de IPTables escribiendo:
$man iptables
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 199
Cuadro 12.3: Especicaciones de reglas de IPTables
Regla Descripcion
-s address/mask!portEspecica una determindada direccion de red origen a comparar. Para desig-
nar un rago de direcciones IP se usa la notacion estandar de barra oblicua.
Tambien se pude especicar un numero de puerto o un rango de numeros
de puerto colocandolos despues de un signo de exclamacion de apertura
-d address/mask!portEspecica una determindada direccion de red destino a comparar. Para
designar un rago de direcciones IP se usa la notacion estandar de barra
oblicua. Tambien se pude especicar un numero de puerto o un rango de
numeros de puerto colocandolos despues de un signo de exclamacion de
apertura
--sport Puerto de origen
--dport Puerto de destino
--tcp-flags Flags permitidos y ags activos. Los ags son:SYN ACK FIN RST URG
PSH ALL NONE (hay que especicarlos separados por comas)
-f Especica paquetes fragmentados
-m <modulo> Especica un modulo de opciones especiales
-m multiport Especica que se usara el modulo de multipuertos
-p protocol Especica un determinado protocolo con el que se compara la regla. Los
tipos de protocolo validos son icmp, tcp, udp o todos (all)
-i interface Especica una interfaz de entrada
-o interface Especica una interfaz de salida
-j target Indica lo que se tiene que hacer con el paqute si coincide
con las especicaciones. Las opciones validas paratargetson:
DROP Coloca el paquete sin ninguna accion posterior
REJECT Coloca el paquete y devuelve un paquete de error
LOG Registra el paquete en un de error
MARK Marca el paquete para una accion posterior
TOS Cambia el bit TOS (Tipo de servicio)
MIRROR Invierte las direcciones de origen y de destino y las enva
de nuevo, basicamente ebotandolas" de nuevo al origen
SNAT NAT estatica. Esta opcion se utiliza cuando se esta reali-
zando una Traduccion de direccion de red (NAT, Network
Address Translation). Convierte la direccion de origen en
otro valor estatico
DNAT NAT dinamica. Similar a la anterior pero usando un rango
dinamico de direcciones IP
MASQ Enmascara la IP usando una IP publica
REDIRECT Redirecciona el paquete
Crear un cortafuegos IPTables
La mejor forma de ver como funciona es mediante un ejemplo, que situaremos dentro de un script
ejecutable.
Se toman las siguientes premisas: Se supone que la LAN local es 192.168.0.1 - 192.168.0.254, que la
interfazeth1es la conexion LAN local y que la interfazeth0es la conexion WAN o Internet.
1. Empieza eliminando cualquier regla existente con el comandoFlush:
iptables -F FORWARD
As eliminamos cualquier regla para la cadena FORWARD, que es el \conducto" principal para
cualquier paquete que desea pasar por el cortafuegos.
Jose Antonio Escartn Vigo, Junio 2005.

200 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 12.4: Comandos IPTables
Comando Descripcion
-A chain A~nade una o mas reglas al nal de la declaracion
-I chain rulenumInserta una cadena en la ubicacionrulenum. Es util cuando deseamos que una
regla reemplace a las anteriores
-D chain Elimina la cadena indicada
-R chain rulenumReemplaza la regla en la ubicacionrulenumcon lachainproporcionada
-L Lista todas las reglas en la cadena actual
-F Purga todas las reglas en la cadena actual, eliminando basicamente la congu-
racion de nuestro cortafuegos. Es recomendable su uso cuando iniciamos una
conguracion para asegurarnos de que ninguna regla existente entrara en con-
icto con una regla nueva
-Z chain Pone a cero todas las cuentas de paquetes y bytes en la cadena denominada
-N chain Crea una nueva cadena con el nombre dechain
-X chain Elimina la cadena especicada. Si no se especica ninguna cadena, se eliminan
todas las cadenas
-P chain policy Establece la poltica para la cadena especicada enpolicy
2. Eliminamos las otras cadenas:
iptables -F INPUT
iptables -F OUTPUT
As eliminamos cualquier regla en su maquina local y en su cadena de salida, tambien podiamos
haber usado:iptables -F, afectando a todas las cadenas a la vez.
3. Inserta la declaracion \denegar todo" estandar justo al principio:
iptables -P FORWARD DROP
iptables -A INPUT -i eth0 -j DROP
4. Para aceptar paquetes fragmentados en IPTables, es necesario que se escriba lo siguiente explcita-
mente:
iptables -A FORWARD -f -j ACCEPT
5. Existen dos tipos de ataques comunes que debemos bloquear en seguida. Uno es el conocido como
spooong, que se produce cuando alguien falsica los encabezados de los paquetes IP para que
parezcan paquetes externos que tienen direcciones internas. As, alguien puede enrutar hacia nuestra
LAN incluso aunque tengamos idrecciones IP privadas. El otro tipo de ataque se lleva a cabo enviando
una gran cantidad de paquetes a las direcciones LAN para sobrecargar la red. Este tipo de ataque
se denomina ataquesmurf, ataca sobre el protocolo de transmision de archivos. Podemos bloquear
este tipo de ataques con dos sencillas declaraciones.
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -j DROP
iptables -A FORWARD -p icmp -i eth0 -d 192.168.0.0/24 -j DROP
La primera declaracion rechaza cualquier paquete que provenga de la interfaz eth0 de Internet con la
direccion interna 192.168.0.0/24. Por denicion, ningun paquete debera provenir de una interfaz de
no conanza con una direccion de fuente privada e interna. La segunda declaracion retira cualquier
paquete del protocolo ICMP que provenga de la direccion exterior a la interior.
Tambien se podran evitar las respuestas a pings externos mediante:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 201
6. Generalmente aceptaremos el traco entrante basado en conexiones iniciadas desde el interior, por
ejemplo, alguien que explora una pagina Web. Siempre que la conexion este en curso y se haya
iniciado internamente, probablemente sea correcta. Sin embargo, podemos limitar el tipo de traco
permitido. Supongamos que solo deseamos permitir a los empleados el acceso a la Web y al correo
electronico. Podemos especicar los tipos de traco para permitir solo el que este en una conexion ya
iniciada. Podemos saber si es una conexion existente comprobando si se ha establecido la parte ACK,
es decir, si se ha producido la conexion TCP de tres vas. Las siguientes declaraciones permiten el
traco web basado en este criterio.
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports www,smtp
--tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --sports www,smtp
--tcp-flags SYN,ACK ACK -j ACCEPT
La declaracion--dportsindica que solo se permite el correo electronico y la Web y la declaracion
de indicadores{tcpindica que solo deseamos paquetes con el campo ACK establecido
7. Para poder aceptar conexiones de entrada desde el exterior solo en determinados puertos, como un
mensaje correo electronico entrante en nuestro servidor de correo, usamos este tipo de declaracion:
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports smtp
--syn -j ACCEPT
El indicador de multiples puertos-mindica a IPTables que vamos a emitir una declaracion de
coincidencia para los puertos. La declaracion-synle indica que se permiten los paquetes SYN, lo
que signica que se deben iniciar las conexiones TCP. Y el indicador--dportspermite solo el traco
de correo SMTP.
8. Podemos permitir que los usuarios inicien conexiones de salida pero solo en los protocolos que
deseamos que usen. Aqu podemos evitar que los usuarios usen FTP y otros programas no esenciales.
Las direcciones que contienen todo ceros son una abreviatura de \cualquier direccion".
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 0.0.0.0 --dports www,smtp
--syn -j ACCEPT
9. Necesitaremos permitir determinados paquetes UDP entrantes. UDP se usa para DNS y si lo blo-
queamos, los usuarios no podran resolver direcciones. Como no disponen de un estado como los
paquetes TCP, no podemos arnos de la revision de los indicadores SYN o ACK. Deseamos admitir
UDP solo en el puerto 53, por lo que especicaremos:domain(una variable integrada para el puerto
53), como unico puerto admisible. Las declaraciones que debemos usar son:
iptables -A FORWARD -m multiport -p udp -i eth0 -d 192.168.0.0/24 --dports
domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth0 -s 192.168.0.0/24 --sports
domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth1 -d 0.0.0.0 --dports
domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth1 -s 0.0.0.0 --sports
domain -j ACCEPT
Las dos primeras declaraciones permiten los datagramas UDP entrantes y las otras dos declaraciones
permiten las conexiones salientes.
Jose Antonio Escartn Vigo, Junio 2005.

202 Servidor Linux para conexiones seguras de una LAN a Internet
10. Tambien podemos especicarlos para los paquetes ICMP. Lo que pretendemos es permitir todo tipo
de ICMP interno hacia el exterior, pero solo determinados tipos como la contestacion de eco hacia
el interior, algo que podemos conseguir con las siguientes instrucciones:
iptables -A FORWARD -m multiport -p icmp -i eth0 -d 192.168.0.0/24
--dports 0,3,11 -j ACCEPT
iptables -A FORWARD -m multiport -p icmp -i eth1 -d 0.0.0.0
--dports 8,3,11 -j ACCEPT
Es mas simple si lo controlamos a la entrada, haciendo un DROP de los 'echos de icmp', as estas
dos instrucciones no son necesarias.
11. Por ultimo, vamos a establecer el inicio de sesion para poder ver en los registros lo que se ha
rechazado. Es mejor revisar estos registros de vez en cuando, incluso aunque no exista ningun
problema, para tener una idea de los tipos de traco que se han rechazado. Si observa paquetes
rechazados repetidamente de la misma red o direccion, puede que este siendo atacado. Existe una
declaracion para registrar cada tipo de traco:
iptables -A FORWARD -m tcp -p tcp -j LOG
iptables -A FORWARD -m udp -p udp -j LOG
iptables -A FORWARD -m icmp -p icmp -j LOG
Con esto conseguiramos una proteccion a nivel de cortafuegos ante los ataques mas comunes de
internet. El siguiente codigo es el ejemplo en un script.
Cuadro 12.5: Ejemplo de IPTables
#! /bin/bash
# Punto 1
iptables -F FORWARD
# Punto 2
iptables -F INPUT
iptables -F OUTPUT
# Punto 3
iptables -P FORWARD DROP
iptables -A INPUT -i eth0 -j DROP
# Punto 4
iptables -A FORWARD -f -j ACCEPT
# Punto 5
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -j DROP
#iptables -A INPUT -p icmp --icmp-type echo-request -j DROP - OMITIDO , para evitar el punto 10
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Punto 6
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --sports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT
# Punto 7
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports smtp --syn -j ACCEPT
# Punto 8
iptables -A FORWARD -m multiport -p tcp -i eth0 -d 0.0.0.0 --dports www,smtp --syn -j ACCEPT
# Punto 9
iptables -A FORWARD -m multiport -p udp -i eth0 -d 192.168.0.0/24 --dports domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth0 -s 192.168.0.0/24 --sports domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth1 -d 0.0.0.0 --dports domain -j ACCEPT
iptables -A FORWARD -m multiport -p udp -i eth1 -s 0.0.0.0 --sports domain -j ACCEPT
# Punto 10 - OMITIDO
#iptables -A FORWARD -m multiport -p icmp -i eth0 -d 192.168.0.0/24 --dports 0,3,11 -j ACCEPT
#iptables -A FORWARD -m multiport -p icmp -i eth1 -d 0.0.0.0 --dports 8,3,11 -j ACCEPT
# Punto 11
iptables -A FORWARD -m tcp -p tcp -j LOG
iptables -A FORWARD -m udp -p udp -j LOG
iptables -A FORWARD -m icmp -p icmp -j LOG
Es necesario darle permisos de ejecucion:#chmod 700 nombre_script
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 203
El resultado de nuestro cortafuegos despues de ejecutar el script sera el siguiente:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
DROP icmp -- anywhere anywhere icmp echo-request
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -f anywhere anywhere
DROP all -- 192.168.0.0/24 anywhere
ACCEPT tcp -- anywhere 192.168.0.0/24 multiport dports www,smtp tcp flags:SYN,ACK/ACK
ACCEPT tcp -- anywhere 192.168.0.0/24 multiport sports www,smtp tcp flags:SYN,ACK/ACK
ACCEPT tcp -- anywhere 192.168.0.0/24 multiport dports smtp tcp flags:SYN,RST,ACK/SYN
ACCEPT tcp -- anywhere 0.0.0.0 multiport dports www,smtp tcp flags:SYN,RST,ACK/SYN
ACCEPT udp -- anywhere 192.168.0.0/24 multiport dports domain
ACCEPT udp -- 192.168.0.0/24 anywhere multiport sports domain
ACCEPT udp -- anywhere 0.0.0.0 multiport dports domain
ACCEPT udp -- 0.0.0.0 anywhere multiport sports domain
LOG tcp -- anywhere anywhere tcp LOG level warning
LOG udp -- anywhere anywhere udp LOG level warning
LOG icmp -- anywhere anywhere icmp any LOG level warning
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Enmascarar IP con IPTables
Cuando se dise~no Internet originalmente, se reservaron varios bloques de direcciones para su uso
en redes privadas. Estas direcciones nos se van a enrutar a traves de Internet y se pueden utilizar sin
preocuparse de que vayan a tener conictos con otras redes. Los rangos de direcciones privadas son:
10.0.0.0 - 10.255.255.255
192.168.0.0 - 192.68.255.255
172.16.0.0 - 172.31.255.255
Al utilizar estas direcciones en nuestra LAN interna y tener una IP externa enrutable en nuestro cor-
tafuegos, estamos protegiendo con efectividad nuestras maquinas internas ante el acceso desde el exterior.
Podemos proporcionar esta capa adicional de proteccion facilmente con IPTables utilizando el enmasca-
rado IP. El encabezado IP interno se desprende en el cortafuegos y se reemplaza con un encabezado que
muestra el cortafuegos como el IP de origen. A continuacion se enva el paquete de datos a su destino con
una direccion IP de origen de la interfaz publica del cortafuegos.
Cuando vuelve de nuevo, el cortafuegos recuerda el IP interno al que se dirige y vuelve a dirigirlo para
una entrega interna. Este proceso tambien se conoce como Traduccion de direccion de red (NAT, Network
Address Translation). Con las siguientes declaraciones podemos hacerlo en IPTables:
iptables -t nat -P POSTROUTING DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
El indicadorMASQUERADE se puede abreviar comoMASQ.
Conclusiones
Bueno, ahora ya sabemos como crear un cortafuegos basico. Se trata de una conguracion bastante
sencilla y las posibles variaciones son innitas. Podemos enviar determinados puertos a servidores inter-
nos para que no tengan una direccion IP publica. Podemos colocar otra tarjeta de red en el servidor y
convertirla en una interfaz DMZ para servidores con direccion publica. Existen libros completos sobre la
conguracion avanzada de cortafuegos y muchas listas de correo.
Existen otros metodos mas simples y rapidos de crear un cortafuegos, sin introducir comandos y
tener que recordar la sintaxis. Muchas herramientas crean las declaraciones del cortafuegos utilizando una
interfaz graca, es decir, de forma automatica.
Para simplicar el metodo utilizare el modulo Firewall para Webmin, basado en IPTables.
Jose Antonio Escartn Vigo, Junio 2005.

204 Servidor Linux para conexiones seguras de una LAN a Internet
12.3. Squid: Proxy transparente
Lo primero es tener el IPTables y el squid funcionando. Con las opciones NAT denetlteren el kernel.
Veamos el proceso:
Activamos el reenvio de paquetes:
echo 1 > /proc/sys/net/ipv4/ip_forward
Hacemos que el NAT coja todas las peticiones que vayan a un puerto (por ejemplo el 80) y las
redirija al puerto del proxy (por ejemplo 3128):
iptables -t nat -A PREROUTING -s $NUESTRA_RED -p tcp --dport 80 -j REDIRECT
--to-port 3128
Instalacion del proxy squid:
#apt-get install squid webmin-squid
El chero de conguracion del squid es:/etc/squid/squid.conf. Lo conguramos para permitir el
acceso del proxy a nuestra red interna:
En#ACCESS CONTROLS :
acl redInterna src 192.168.1.0/255.255.255.0
En#Only allow cachemgr access from localhost, hay que poner antes de las denegaciones:
http_access allow redInterna
Y en#HTTPD-ACCELERATOR OPTIONS :
httpd_accel_host virtual
httpd_accel_uses_host_header on
httpd_accel_with_proxy on
Tambien podemos congurar el proxy en modo graco mediante la herramienta de administracion
Webmin. Para cargar el modulo realizaremos un apt:#apt-get install webmin-squid
Ahora veamos un ejemplo del archivo/etc/squid/squid.confdonde se limita el ancho de banda, para
la conexion:
Cuadro 12.6: Ejemplo del archivo /etc/squid/squid.conf
#Sacado de http://debaser.ath.cx/deal/manuales/Limitar-ancho-de-banda-COMO/html/install.html
#Todas las opciones de este archivo se encuentran muy bien documentadas en el
#propio squid.conf asi
#como en http://www.visolve.com/squidman/Configuration%20Guide.html
#Los puertos por los que escuchara nuestro Squid.
http_port 8080
icp_port 3130
#los cgi-bin no se cachearan.
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
#La memoria que usara Squid. Bueno, Squid usara mucha mas que esa.
cache_mem 16 MB
#250 significa que Squid usara 250 megabytes de espacio en disco.
cache_dir ufs /cache 250 16 256
#Lugares en los que iran los archivos de bitacora de Squid.
cache_log /var/log/squid/cache.log
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
cache_swap_log /var/log/squid/swap.log
#Cuantas veces rotar los archivos de bitacora antes de borrarlos.
#Acuda a la FAQ para m\'as informaci\'on.
logfile_rotate 10
redirect_rewrites_host_header off
cache_replacement_policy GDSF
acl localnet src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 210 119 70 20 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 205
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
maximum_object_size 3000 KB
store_avg_object_size 50 KB
#Configure esto si quiere que su proxy funcione de manera transparente.
#Eso significa que por lo general no tendra que configurar todos los
#navegadores de sus clientes, aunque tiene algunos inconvenientes.
#Si deja esto sin comentar no pasara nada peligroso.
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#Todos los usuarios de nuestra LAN seran vistos por los servidores web
#externos como si usasen Mozilla en Linux.
anonymize_headers deny User-Agent
fake_user_agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.6+) Gecko/20011122
#Para acelerar aun mas nuestra conexion ponemos dos lineas similares a las
#de mas abajo. Apuntaran a un servidor proxy [parent] que usara nuestro propio
#Squid. No olvide cambiar el servidor por uno mas rapido para usted.
#Puede utilizar ping, traceroute y demas herramientas para comprobar la
#velocidad. Asegurese de que los puerto http e icp son los correctos.
#Descomente las lineas que comienzan por "cache_peer" de ser necesario.
#Este es el proxy que va a usar para todas las conexiones...
#cache_peer w3cache.icm.edu.pl parent 8080 3130 no-digest default
#...excepto para las direcciones e IPs que comiencen por "!".
#No es buena idea usar un mayor
#cache_peer_domain w3cache.icm.edu.pl !.pl !7thguard.net !192.168.1.1
#Esto resulta util cuando queremos usar el Cache Manager.
#Copie cachemgr.cgi al cgi-bin de su servidor web.
#Podra acceder a el una vez lo haya hecho introduciendo en un navegador
#la direccion http://su-servidor-web/cgi-bin/cachemgr.cgi
cache_mgr your@email
cachemgr_passwd secret_password all
#Este es el nombre de usuario con el que trabajara nuestro Squid.
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
buffered_logs on
#####DELAY POOLS
#Esta es la parte mas importante para configurar el trafico entrante con
#Squid. Para una descripcion detallada acuda al archivo squid.conf o a la
#documentacion de http://www.squid-cache.org
#No queremos limitar las descargas en nuestra red local.
acl magic_words1 url_regex -i 192.168
#Queremos limitar la descarga de este tipo de archivos
#Ponga todo esto en una unica linea
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt
.ram .rm .iso .raw .wav .mov
#No bloqueamos .html, .gif, .jpg y archivos similares porque por lo general
#no consumen demasiado ancho de banda.
#Queremos limitar el ancho de banda durante el dia permitiendo
#el ancho de banda completo durante la noche.
#Cuidado! con el acl de abajo sus descargas se interrumpiran
#a las 23:59. Lea la FAQ si quiere envitarlo.
acl day time 09:00-23:59
#Tenemos dos delay_pools diferentes
#Acuda a la documentaci\'on de Squid para familiarizarse
#con delay_pools y delay_class.
delay_pools 2
#Primer delay pool
#No queremos retrasar nuestro trafico local
#Hay tres cases de pools; aqui solo hablaremos de la segunda.
#Primera clase de retraso (1) de segundo tipo (2).
delay_class 1 2
#-1/-1 significa que no hay limites.
delay_parameters 1 -1/-1 -1/-1
#magic_words1: 192.168 que ya hemos puesto antes
delay_access 1 allow magic_words1
#Segundo delay pool.
#Queremos retrasar la descarga de los archivos mencionados en magic_words2.
#Segunda clase de retraso (2) de segundo tipo (2).
delay_class 2 2
#Los numeros siguientes son valores en bytes;
#Debemos recordar que Squid no tiene en cuenta los bits de inicio/parada
#5000/150000 son valores para la red al completo
#5000/120000 son valores para la IP independiente
#una vez los archivos descargados exceden los 150000 bytes,
#(o el doble o el triple)
#las descargas proseguiran a 5000 bytes/s
delay_parameters 2 5000/150000 5000/120000
#Ya hemos configurado antes el dia de 09:00 a 23:59.
delay_access 2 allow day
delay_access 2 deny !day
delay_access 2 allow magic_words2
#EOF
Jose Antonio Escartn Vigo, Junio 2005.

206 Servidor Linux para conexiones seguras de una LAN a Internet
12.4. Bastille Linux: Herramienta de seguridad
Una vez instalado nuestro sistema operativo, necesitamos fortalecerlo para utilizarlo como sistema
de seguridad. Este proceso implica cerrar los servicios innecesarios, restringir los permisos y, en general,
minimizar las partes de la maquina que estan expuestas. Los detalles de este proceso seran diferentes
dependiendo del uso pretendido de la maquina.
Antes el fortalecimiento sola ser un proceso manual intensivo a medida que se probaban y testeaban
las posibles modicaciones. Sin embargo, en Linux, existen herramientas que realizaran automaticamente
un fortalecimiento del sistema. As se puede ahorrar tiempo sin olvidarnos de nada.
En este caso utilizare la herramienta Bastille Linux, disponible en la distribucion Debian. A pesar de lo
que pueda parecer, no se trata de un sistema operativo independiente, sino de un conjunto de secuencias de
comandos que llevan a cabo determinadas conguraciones del sistema basandose en nuestras indicaciones.
Simplica extraordinariamente el proceso de fortalecimiento y lo reduce a responder a algunas preguntas.
Si necesitamos mas informacion la podemos obtener en la pagina web ocial: www.bastille-linux.org.
12.4.1. Ejecucion
Es muy recomendable instalar esta herramienta, primeramente, en un entorno de pruebas. Este tipo
de programas pueden desconectar los servicios necesarios para el funcionamiento de algun servidores,
produciendo cortes de servicio o detencion del mismo. Cuando haya probado su efecto y vericado su
estabilidad, podremos ejecutar la herramienta en nuestro entorno de trabajo.
Para instalar hay que ejecutar:
#apt-get install bastille
Para poder usar la aplicacion deben de estar instalados los siguientes paquetes:
Perl 5.5003 o superior
Perl TK Module 8.00.23 o superior
Perl Curses Module 1.06 o superior
Para ejecutar Bastille linux:
#/usr/sbin/bastille, . . . para el modo graco.
#/usr/sbin/bastille -c, . . . para el modo texto (curses).
Tambien podemos ejecutar Bastille en lo que se denomina modo no interactivo. Este modo ejecuta Bas-
tille automaticamente, sin hacer preguntas, desde un archivo de conguracion preasignado. cada vez que
ejecutamos Bastille, se crea un archivo de conguracion. A continuacion podemos utilizarlo para ejecutar
Bastille en otras maquinas en modo no interactivo. Esta tecnica es util para cerrar rapidamente multiples
maquinas. Cuando disponga del archivo de conguracion con los elementos deseados, simplemente cargue
Bastille en las maquinas adicionales y copie el archivo de conguracion en dichas maquinas (o deje que
accedan al archivo por la red).
Para ejecutarlo escribimos:
#bastille non-interactive config-file
Dondecong-lees el nombre y la ubicacion del archivo de conguracion que deseamos utilizar.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 207
12.4.2. Modos de funcionamiento
Normalmente ejecutaremos Bastille en modo interactivo. En este modo responderemos a una serie de
preguntas sobre como vamos a utilizar la maquina. Basandose en las respuestas, Bastille desconecta los
servicios innecesarios o restringe los privilegios de los usuarios y servicios.
Nos pregunta cosas como \>Desea utilizar esta maquina como acceso a maquinas Windows?". Si res-
pondemos negativamente, desconecta el servidor Samba, que permite a nuestra maquina interactuar con
las maquinas Windows. Samba podra introducir algunas brechas de seguridad potenciales en nuestro
sistema, por lo que es recomendable desconectarlo si no lo necesitamos.
Si tenemos que ejecutar algunos servidores (por ejemplo, SSH), intentara establecerlos con privilegios
limitados o utilizando unchrooted jail, es decir, si un servidor tiene que ejecutarse con acceso a la raz del
sistema, tiene una capacidad limitada de afectar a otras partes del sistema, lo que suaviza los efectos de
cualquier ataque con exito sobre dicho servicio.
A cada pregunta le acompa~na una peque~na explicacion de porque esa conguracion es importante,
as podemos decidir si es apropiada para nuestra instalacion. Tambien existe un boton de detalle con
informacion adicional.
Bastille adopta la solucion de intentar educar al administrador mientras esta cerrando el sistema.
Cuanta mas informacion tenga, mejor armado estara para los deberes de seguridad de su red. Si no
esta seguro, puede saltarse una pregunta y volver a ella mas adelante. No hay que preocuparse, se ofrece una
oportunidad nal para terminar todas las conguraciones. Tambien puede ejecutar Bastille posteriormente
despues de investigar sobre la respuesta y cambiar la conguracion. Otra ventaja es que Bastille nos ofrece
una lista de \cosas para hacer" al nal de la sesion de fortalecimiento para cualquier elemento del que
Bastille no se haya ocupado.
12.5. Copias de seguridad
Para realizar las copias de seguridad necesarias en nuestro servidor y dependiendo de las necesitades de
nuestra empresa, necesitamos disponer de una medio seguro donde poder almacenarlas. Para ello, podemos
aplicar una las siguientes soluciones:
Almacenar las copias en el propio disco fsico del servidor (no se recomienda).
Utilizar cintas de backup.
Utilizar DVDs de backups.
Si realizamos las copias en el propio disco o en cintas de backup, el proceso puede ser automatizado
mediante elcrondel sistema.
12.5.1. Dispositivos de cinta
Las unidades de cinta SCSI, usan el siguiente esquema de nombres:
/dev/stX: Dispositivo de cinta SCSI de rebobinado automatico;xes el numero de la unidad de
cinta. Las unidades de cinta se numeran por su orden en la controladora SCSI.
/dev/nstX: Dispositivo de cinta SCSI sin rebobinado automatico;xes el numero de la unidad de
cinta. Las unidades de cinta se numeran por su orden en la controladora SCSI.
Probablemente tendremos en nuestro sistema un dispositivo de enlace simbolico a la cinta:/dev/tape.
Jose Antonio Escartn Vigo, Junio 2005.

208 Servidor Linux para conexiones seguras de una LAN a Internet
12.5.2. Mt
El programamtproporciona controles simples para la unidad de cinta, como el rebobinado, expulsion
o la busqueda de un archivo. En el contexto de las copias de seguridad,mtes muy util como mecanismo
de rebobinado y busqueda.
Todas las acciones demtse especican en la lnea de comandos. El cuadro 12.7 muestra los parametros
del comando.
Cuadro 12.7: Opciones del comandomt, para manipular cintas de backup
Parametros Descripcion
-f <dispositivo>Especica el dispositivo de cinta.
fsf <cuenta> Avanza un numero (cuenta) de archivos. La cinta se coloca en el primer bloque
del archivo siguiente; por ejemplo,fsf 1debera dejar la cabeza preparada para
leer el segundo archivo de la cinta.
asf <cuenta> Posiciona la cinta al comienzo del archivo indicado porcuenta. El posicionamiento
se hace primero con un rebobinado de la cinta y despues se avanzacuentaarchivos.
rewind Rebobina la cinta.
erase Borra la cinta.
status Da el estado de la cinta.
offline Deja la cinta inactiva y, si es aplicable, la descarga.
load Carga la cinta (aplicable a cambiadores de cinta).
lock Bloquea la puerta de la unidad (solo aplicable a ciertas unidades de cinta).
unlock Desbloquea la puerta de la unidad (solo aplicable a ciertas unidades de cinta).
Podemos ver los siguientes ejemplos:
#mt -f /ver/nst0 rewind,. . . Para rebobinar la cinta en/dev/nst0.
#mt -f /dev/nst0 asf 2,. . . Mueve la cabeza lectora, para leer el tercer archivo de la cinta.
12.5.3. Dump y Restore
Las herramientas que utilizaremos seran dos:
dump
restore
Para instalarlas ejecutaremos un apt:
#apt-get install dump
La herramientadumptrabaja haciendo una copia de un sistema de archivos entero. La herramienta
restorepuede tomar esa copia y restaurarla.
Para soportar backups incrementales,dumpusa el concepto de niveles de dump. Un nivel de dump
de 0 signica una copia de seguridad completa. Cualquier nivel de dump superior a 0 es un incremento
relativo a la ultima vez que se realizo un dump con un nivel de dump menor. Por poner un ejemplo, si
consideramos que tenemos tres dump: el primero de nivel 0, el segundo de nivel 1 y el tercero tambien
de nivel 1. El primer dump es una copia completa. El segundo dump contiene todos los cambios hechos
desde el primer dump. El tercer dump tiene todos los cambios desde el primer dump.
La utilidad dump almacena toda la informacion sobre sus operaciones en el archivo/etc/dumpdates.
Este archivo lista cada copia de seguridad de un sistema de archivos, cuando se hizo y de que nivel. Dada
esta informacion, podemos determinar que copia debemos restaurar.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 209
En el cuadro 12.8 se muestran los parametros mas usuales del comando dump:
Cuadro 12.8: Parametros del comando dump
Parametro Descripcion
-n El nivel de dump, dondenes un numero entre 0 y 9.
-b <tam_bloque>Congura el tama~no del bloque de dump atambloque, el cual se mide en kilobytes.
Si hacemos copias de archivos muy grandes, al usar un tama~no de bloque mayor
aumentara el rendimiento.
-B <cuenta> Especica el numero (cuenta) de registros por cinta. Si hay mas datos sobre los que
hacer dump, que espacio de cinta, dump muestra un smbolo del sistema pidiendo
que se inserte una cinta nueva.
-f <archivo> Especica una localizacion (archivo) para el archivo dump resultado. Podemos
hacer el archivo dump como un archivo normal que reside en otro sistema de
archivos, o podemos escribirlo en un dispositivo de cinta.
-u Actualiza el archivo/etc/dumpdatesdespues de un dump con exito.
-d <densidad> Ladensidadde una cinta en bits por pulgada.
-s <tam> El tama~no (tam) de la cinta en pies.
Para colocar el backup sobre una cinta, comprimiendolo, podemos hacer lo siguiente:
#dump -O -f - /dev/hda1 | gzip --fast -c > /dev/st0
Hay que tener cuidado con dump, se considera peligroso hacer dump de sistema de archivos que esten
en uso. Para asegurarse de que no estan en uso, hay que desmontar el sistema de archivos primero. Desa-
fortunadamente, muy poca gente se puede permitir el lujo de desmontar un sistema el tiempo necesario
para hacer una copia de seguridad. Lo mejor es realizar la poca atractiva tarea de vericar las copias de
seguridad sobre una base normal. La vericacion se hace comprobando que el programarestorepuede leer
completamente la copia y extraer los archivos de ella. Es tedioso y nada divertido, pero muchos adminis-
tradores de sistemas perdieron su trabajo despues de copias de seguridad erroneas (y no queremos ser uno
de ellos).
Durante mis estudios en la FIB (Facultad de Informatica de Barcelona) coincid con varios profesores
que eran, al mismo tiempo, muy buenos administradores de sistemas. Y uno de ellos, Alex Ramirez, nos
dijo la siguiente frase, \La primera tarea de un administrador de sistemas es hacer copias de seguridad,
nadie quiere hacerlas y por eso nos pagan a nosotros para que las hagamos. Las copias de seguridad, solo
se hechan de menos cuando nadie las ha hecho".
Uso de dump para hacer backup de un sistema entero
La utilidad dump trabaja haciendo un archivo de un sistema de archivos. Si el sistema entero contiene
varios sistemas de archivos, necesitaremos ejecutar dump por cada sistema de archivos. Puesto que dump
crea su salida como un gran archivo independiente, podemos almacenar varios dumps en una sola cinta
mediante el uso de un dispositivo de cinta sin rebobinado automatico, otra solucion factible es el uso de
DVDs grabables. Primero tenemos que decidir sobre que sistemas de archivos vamos a hacer la copia,
esta informacion esta en el archivo/etc/fstab.
Si por ejemplo queremos hacer un backup de: /dev/hda1, /dev/hda3, /dev/hda5 y /dev/hda6. Y
grabarlo en /dev/nst0, comprimiendo los archivos dump, debemos ejecutar los siguientes comandos:
#mt -f /dev/nst0 rewind
#dump -Ouf - /dev/hda1 | gzip --fast -c > /dev/st0
#dump -Ouf - /dev/hda3 | gzip --fast -c > /dev/st0
#dump -Ouf - /dev/hda5 | gzip --fast -c > /dev/st0
#dump -Ouf - /dev/hda6 | gzip --fast -c > /dev/st0
#mt -f /dev/nst0 rewind
#mt -f /dev/nst0 eject
Jose Antonio Escartn Vigo, Junio 2005.

210 Servidor Linux para conexiones seguras de una LAN a Internet
Uso de restore
El programa restore lee los archivos dump y extrae archivos y directorios individuales de ellos. Aunque
restore es una herramienta de lnea de comandos, ofrece un modo interactivo muy intuitivo que le mueve
a traves de la estructura de directorios de la cinta.
El cuadro 12.9 muestra las opciones de lnea de comandos de la utilidad restore.
Cuadro 12.9: Opciones del comando RESTORE
Opcion Descripcion
-i Activa el modo interactivo de restore. La utilidad leera el contenido del directorio
de la cinta y nos dara una interfaz parecida a la shell en la cual nos podemos mover
entre los directorios y se~nalar los archivos que queramos, restore ira al dump y los
restaurara. Este modo es util para recuperar archivos individuales, especialmente
si no estamos seguro en que directorio estan.
-r Reconstruye un sistema de archivos. en el caso de que pierda todo un sistema de
archivos (por ejemplo, por un fallo de disco), puede recrear un sistema de archivos
vaco y restaurar todos los archivos y directorios del archivo dump.
-b tam_bloque Congura el tama~no del bloque de dump atambloquekilobytes. Si no proporciona
esta informacion, restore se la pedira.
-f nom_archivoLee un dump del archivonomarchivo.
-T directorio Especica el espacio de trabajo temporal (directorio) para el restore. Por defecto
es/tmp.
-v La opcion verbal; muestra cada paso del restore.
-y En el caso de un error, reintenta automaticamente en lugar de preguntar al usuario
si quiere probar de nuevo.
Un restore tpico podra ser el siguiente:
#restore -ivf /dev/st0
Donde tenemos el archivo dump en/dev/st0, visualizaremos cada paso que tome restore y entraremos
en una sesion interactiva donde decidiremos que archivos se restauran.
Y para un restore completo desde la cinta/dev/st0, si perdemos el sistema de la unidad SCSI/dev/sda1
que contiene/home, sustituimos la unidad y lo recrear ayudandonos conmke2fs.
#mke2fs /dev/sda1
#mount /dev/sda1 /home
#cd /home
#restore -rf /dev/st0
12.5.4. Conguracion graca de backups, interfaz Webmin
Para realizar de una forma mucho mas simple las copias de seguridad, podemos utilizar la herramienta
de conguracion por web: Webmin.
Para instalar el modulo de copias de seguridad ejecutaremos un apt:
#apt-get install webmin-fsdump
Este modulo permite hacer backups de:
Sistemas EXT2
Sistemas EXT3
Archivos TAR
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 12. Herramientas de seguridad 211
Figura 12.1: Modulo Webmin para realizar Backups del sistema
12.5.5. K3B: Grabacion de CDs y DVDs
Si queremos guardar las copias en CDs o DVDs, nos resultara muy util una interfaz graca simple e
intuitiva, como la que nos ofrece el programaK3Bbasado en el entorno KDE.
Lo podemos instalar con un apt:#apt-get install k3b
Y para ejecutarlo introduciremos el comando:#k3b
Figura 12.2: Programa K3B para grabar CDs y DVDs
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13
Sistemas de deteccion de intrusiones
Los Sistemas de deteccion de intrusiones (IDS, Intrusion Detection System) son basicamente sniers
modicados que pueden ver todo el traco de la red e intentan detectar un traco potencialmente da~nino,
alertandonos de ello cuando aparezca.
La forma principal de conseguirlo es examinando el traco de entrada e intentandolo comparar con
una base de datos de actividades da~ninas conocidas denominadas rmas. Esta utilizacion de las rmas es
muy similar a la forma en que funcionan los programas antivirus.
La mayora de los tipos de ataques tienen una apariencia muy distintiva a nivel TCP/IP. Un IDS puede
denir ataques basandose en las direcciones IP, los numeros de puertos, el contenido y cualquier numero
de criterios.
Existe otra forma de realizar una deteccion de intrusion en el nivel del sistema comprobando la inte-
gridad de los archivos clave y asegurandose de que no se ha realizado ningun cambio en dichos archivos.
Tambien existen otras tecnologas emergentes que combinan el concepto de deteccion de intrusion y
cortafuegos o realizan una accion posterior mas alla de la pura deteccion.
Esta seccion esta basada en el libro [How05].
13.1. Tipos de IDS
Existen tres tipos diferenciados de IDS:
NIDS: IDS de red, basado en rmas
IDS basado en actividad anomala
IPS: IDS que responde a las alertas con acciones automaticas
En las siguientes secciones se explican en detalle.
13.1.1. NIDS (Network Intrusion Detection System)
Un sistema deteccion de intrusion de red (NIDS, Network Intrusion Detection System) puede proteger-
nos contra los ataques que entran a traves del cortafuegos hasta la LAN Interna. Los cortafuegos pueden
estar mal congurados, permitiendo la introduccion de traco no deseado en nuestra red. Incluso cuando
funcionan correctamente, los cortafuegos normalmente dejan pasar algun traco de aplicacion que puede
ser peligroso. Lo que llega a los puertos del cortafuegos, y esta permitido por las reglas, se enva a los
servidores internos provocando un traco potencialmente da~nino. Un NIDS puede comprobar dicho traco
y marcar los paquetes sospechosos. Congurado correctamente puede hacer una doble comprobacion de las
reglas de nuestro cortafuegos y proporcionarnos una proteccion adicional para los servidores de aplicacion.
Aunque es util para protegernos contra ataques externos, una de las ventajas principales de un NIDS
es cazar los ataques y la actividad sospechosa de orgenes internos. El cortafuegos nos protegera de muchos
ataques externos, sin embargo, cuando el atacante se encuentra en la red local puede hacer muy poco.

214 Servidor Linux para conexiones seguras de una LAN a Internet
Solo puede ver el traco que lo atraviesa desde el exterior y son ciegos respecto a la actividad de la LAN.
Podemos pensar en los NIDS y en los cortafuegos como dispositivos de seguridad complementarios, el
cerrojo de la puerta principal y el sistema de seguridad de nuestra red. Uno protege nuestro permetro y
el otro nuestro interior.
Hay una buena razon para vigilar nuestro traco interno de red. Las estadsticas demuestran que un
setenta por ciento de los incidentes en crmenes informaticos provienen de un origen interno. Por mucho
que nos guste pensar que nuestros compa~neros no van a hacer nada para da~narnos, a veces no es el caso,
los intrusos internos no siempre son piratas informaticos que trabajan por la noche. Pueden ser desde
un administrador de sistemas contrariado, un empleado descuidado o hasta la se~nora de la limpieza. El
simple hecho de descargar un archivo o de abrir un archivo adjunto de un mensaje de correo electronico
puede cargar un troyano que creara toda una brecha en nuestro cortafuegos para todo tipo de fechoras.
Con un NIDS, podemos captar este tipo de actividad as como otros problemas en cuanto se producen.
Bien ajustado, puede ser el \sistema de alarma" de nuestra red.
13.1.2. IDS (Deteccion de actividades anomalas)
En lugar de utilizar rmas estaticas, que solo pueden captar una actividad da~nina cuando se dene
explcitamente, estos sistemas de nueva generacion registran los niveles normales para distintos tipos de
actividad en nuestra red. Si observa una subita oleada de traco FTP, nos avisara. El problema con este
tipo de sistemas es que son muy propensos a los falsos positivos, estos se producen cuando se dispara una
alerta aunque la actividad que esta marcando es normal y permitida en nuestra LAN, por ejemplo una
persona que esta descargando un archivo particularmente grande activara la alarma.
As mismo se tarda mucho en que un IDS de deteccion de anomalas desarrolle un modelo preciso de
la red. Al principio, el sistema generara tantas alertas que es casi inutil.
Adicionalmente, estos tipos de sistemas de deteccion de intrusion pueden ser enga~nados por alguien que
conozca bien la red. Si los piratas informaticos son sucientemente furtivos y habiles utilizaran protocolos
usados en nuestra LAN y no activaran este tipo de sistemas.
Sin embargo, una gran ventaja es que no tiene que actualizar rmas continuamente. A medida que
esta tecnologa madure y se haga mas inteligente, probablemente se convierta en una forma muy popular
de detectar intrusiones.
Un ejemplo de IDS basado en actividades anomalas y de libre distribucion esSpade, un modulo gratuito
para el NIDS Snort.
13.1.3. IPS (Intrusion Prevention System)
Un nuevo tipo de NIDS denominado Sistema de prevencion de intrusion (IPS, Intrusion Prevention
System) se esta publicitando como la solucion para la seguridad de las empresas. Este tipo de sistemas
responderan a las alertas a medida que se generen. Esto puede realizarse trabajando con un cortafuegos o
con un enrutador, escribiendo reglas personalizadas en el momento que se detecta el problema, bloqueando
e interrogando la actividad de las direcciones IP sospechosas o incluso contraatacando al sistema ofensivo.
Aunque esta nueva tecnologa se encuentra en una constante evolucion, todava esta muy lejos de poder
proporcionar el analisis y el juicio de una persona. El hecho es que cualquier sistema que dependa al cien
por cien de una maquina y de su software, tarde o temprano podra ser burlado por algun intruso.
Un ejemplo de IPS de libre distribucion esInline Snortde Jed Haile, un modulo gratuito para el NIDS
Snort.
13.2. Ubicacion del NIDS
Para elegir la ubicacion del NIDS hay que valorar el grado de interoperabilidad con el resto de nuestras
protecciones de red. Existen varias posibilidades y cada una tiene distintas ventajas e inconvenientes.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 215
1.En la red LAN local, detras del cortafuegos: Es el lugar mas comun, ofrece la mejor proteccion frente
a las amenazas externas e internas. Al escuchar el cable local, podemos detectar la actividad interna
de otros usuarios (como la actividad entre estaciones de trabajo o el uso ilcito de un programa).
Tambien refuerza el cortafuegos, detectando una actividad sospechosa que de alguna manera ha
conseguido pasar los ltros del cortafuegos. De hecho, se pude utilizar un IDS para probar un
cortafuegos y comprobar lo que permite pasar.
Sin embargo, este sistema generara muchas alertas basadas en el traco de red de Windows, por lo que
debemos estar preparados para realizar muchos ajustes en este area. As mismo, si nos encontramos
en una LAN conmutada, necesitaremos la capacidad de reejar todos los puertos sobre un puerto
monitor para poder permitir al IDS escuchar todo el traco LAN.
2.En el segmento DMZ: Podemos colocar un sensor Snort en la DMZ para registrar la actividad que
entra en los servidores publicos. Como esos servidores son los mas expuestos y normalmente repre-
sentan recursos valiosos, es buena idea supervisarlos con un IDS. El problema de esta conguracion
es ordenar todas las alertas. Aunque todas ellas puedan ser alertas validas, con el nivel de ataque de
traco general actual en Internet, cualquier IP publica es atacada de forma aleatoria todos los das.
Reaccionar ante ello intentando localizar dichas alertas sera excesivo y contraproducente.
Por lo tanto, >como podemos saber que alertas son solo gusanos que estan atacando a nuestro
servidor y que alertas estan realmente avisandonos de un intruso real?. Una forma de hacerlo es
reduciendo el numero de rmas a un peque~no numero que solo se activen si el host esta realmente
comprometido, por ejemplo, reglas especcas a las aplicaciones que se estan ejecutando en el host,
comoMySQL.rules,web-iis.ruleso reglas relacionadas con la administracion de conexiones.
3.Entre el ISP y el cortafuegos: Esta conguracion ltrara todo el traco entrante y saliente de la
LAN y DMZ. Lo bueno es que capturara todos los ataques tanto a los servidores publicos como a
la LAN interna. Lo malo es que no podremos ver ningun traco interno y el volumen general de las
alertas puede ser bastante alto, debido al traco de ataque general subyacente.
Igual que en el ejemplo anterior, se puede probar a reducir las alertas y dejar solo las que realmente
van a mostrar algun problema para este segmento. As mismo, al situarlo entre el sensor ISP y el
cortafuegos, puede crear un cuello de botella y un punto de errores para nuestro traco de red.
Todas las formas puede ser validas para utilizar un IDS y no hay razon para que no podamos seguir
las tres, siempre que tengamos el hardware y el tiempo necesario para hacerlo.
13.3. El problema de los falsos positivos de NIDS
Uno de los problemas principales con los sistemas de deteccion de intrusion es que suelen generar
muchos falsos positivos. Un falso positivo se produce cuando el sistema genera una alerta basandose
en lo que cree que es una actividad da~nina o sospechosa pero en realidad es un traco normal en esa
LAN. Generalmente, cuando establecemos un NIDS con sus conguraciones predeterminadas, va a buscar
todo lo que sea ligeramente inusual. La mayora de los sistemas de deteccion de intrusion de red tienen
grandes bases de datos predeterminadas con miles de rmas de posibles actividades sospechosas. Los
suministradores de IDS no tienen forma de saber la apariencia de nuestro traco de red, por lo que lo
incluyen todo.
Existen otras muchas fuentes de falsos positivos, dependiendo de la conguracion de nuestra red y
de su nivel de actividad. Un NIDS con una instalacion predeterminada puede generar cientos de falsos
positivos en un solo da, algo que puede conducir a un sensacion de desesperacion en el administrador
del sistema. La reaccion normal, es que las alertas de estos sistemas se ignoran a menudo debido a su
falta de ecacia. Sin embargo, con poco esfuerzo y utilizando las tecnicas descritas en este captulo un
IDS puede convertirse en una herramienta util, en lugar de en la version electronica de la ni~na del exorcista.
Las causas mas comunes de los falsos positivos se describen en los siguientes apartados.
Jose Antonio Escartn Vigo, Junio 2005.

216 Servidor Linux para conexiones seguras de una LAN a Internet
Actividad del sistema de supervision de red
Muchas empresas utilizan sistemas de supervision de redes (NMS, Network Monitorig System) como
HP OpenViewoWhatsUp Goldpara tener registros de la actividad de sus sistemas. Estos programas
generan mucha actividad de sondeo y descubrimiento en nuestra red.
Normalmente utilizan SNMP o algun protocolo similar para obtener el estado, pero pueden tambien
utilizar pings y pruebas mas intrusivas. De forma predeterminada, la mayora de los sistemas de deteccion
consideraran hostil esta actividad, o al menos, sospechosa. Un NMS en una red grande puede generar
miles de alertas por hora, si se ha establecido en el IDS marcar este tipo de actividad. Se puede evitar
haciendo que nuestro NIDS ignore la actividad desde y hacia la IP del NMS. Tambien podemos eliminar
este tipo de alertas de la base de datos de nuestro NIDS, si no consideramos estas alertas importantes.
Escaneado de vulnerabilidad y escaneres de puertos de red
Si estamos realizando una prueba de vulnerabilidad de red o un escaneado de puertos utilizando
programas comoNessusoNmap, nuestro NIDS se volvera loco cada vez que se ejecuten dichos programas.
Estos programas estan dise~nados para hacer exactamente lo que hacen los piratas informaticos. De hecho,
probablemente exista una alerta para la mayora de los complementos del programa Nessus. Una vez mas,
podemos deshabilitar el informe de la direccion IP de nuestro servidor Nessus o Nmap dentro del NIDS.
Una mejor manera de controlar esta situacion es apagar nuestro IDS durante los escaneados programados.
As, la IP del escaner seguira protegida contra un ataque cuando no este escaneando y nuestra base de
datos de alertas no se cargara con datos de nuestra actividad de escaneado.
Actividad de usuario
La mayora de los sistemas de deteccion de intrusion de redes se conguran para marcar diversas
actividades de usuario peligrosas, como compartir archivos punto a punto, mensajera instantanea, etc.
Sin embargo, si permitimos este tipo de actividad, bien por poltica formal o simplemente sin imponer las
polticas existentes, se mostraran como alertas en nuestro registros.

Este sera un buen momento para imponer o crear polticas contra su utilizacion ya que podemos
demostrar cuanto ancho de banda y tiempo consumen, sin mencionar las implicaciones de seguridad.
Aunque si pretendemos seguir permitiendo esta actividad, deberamos comentar estas reglas para no
rellenar los registros con alertas innecesarias.
Comportamientos parecidos a los troyanos o gusanos
Normalmente, virus, gusanos y troyanos viven para la red. Intentan ejecutar diversas actividades por
la red, incluyendo la infeccion de nuevas maquinas y el envo en masa de mensajes de correo electronico.
Estas actividades las puede detectar un NIDS, sin embargo, estas rmas tambien pueden ser activadas
por una actividad normal de nuestra red. Podramos desactivar las alertas que reconocen esta actividad,
aunque exista un traco potencialmente da~nino, para evitar vernos agobiados por los falsos positivos.
Cadenas largas de autenticacion basica
Este tipo de alerta busca las cadenas de registro web largas, algunos ataques utilizan este metodo para
conseguir un desbordamiento de memoria y obtener acceso al sistema.
Sin embargo, hoy en da, muchas webs llenan este campo de informacion. Aunque, si desactivamos la
regla para evitar falsos positivos, puede viajar codigo da~nino por nuestra red y pasar inadvertido para el
NIDS.
Actividad de autenticacion de base de datos
Algunos sistemas de deteccion de intrusion de red buscan actividades administrativas sobre bases de
datos. La teora es que el uso de bases de datos no debera de tener demasiada actividad administrativa
en curso y ello podra ser se~nal de que alguien estan intentando sabotearla. Sin embargo, muchas bases
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 217
de datos tienen trabajos en proceso y mucha actividad administrativa incluso si no se estan consultando.
Esta actividad, aunque legtima, generara muchas de estas alertas.
Si nuestras bases de datos estan en constante desarrollo, probablemente deberemos desactivar dichas
alertas, al menos hasta que se estabilicen y tengan un uso normal.
13.4. Obtener lo maximo del IDS
Para darnos cuenta del verdadero potencial de un sistema de deteccion de intrusion necesitaremos
seguir unas pautas antes y despues de la instalacion.
13.4.1. Conguracion apropiada del sistema
Si simplemente instalamos un IDS y lo activamos con una conguracion predeterminada, rapidamente
nos inundaran miles de alertas de falsos positivos. Podemos ajustarlo despues de estar activo, pero nos
ahorraremos mucho tiempo y esfuerzo congurandolo cuidadosamente de antemano. No debemos confor-
marnos con las conguraciones por defecto, hay que ajustarlas al perl de nuestra LAN.
La mayora de los sistemas de deteccion agrupan las alertas en categoras. Es preciso examinar cada
grupo para comprobar si es relevante en nuestra red. Si hay un grupo de rmas basadas en Unix pero
no tenemos ningun sistema Unix, podemos desactivar con seguridad esas alertas. Algunos tienen alertas
que buscan la utilizacion de mensajera instantanea o la utilizacion de software punto a punto. Si ya
tenemos sistemas que ltran estas actividades o las permitimos en nuestro sistema, es mejor desactivar
esas alarmas. Tenemos que repasar los grupos de alertas con detalle. Por ejemplo, desearemos utilizar la
mayora de las alertas basadas en Windows, pero existiran algunas irrelevantes para nuestra red o que
causen falsos positivos, esas las podemos desactivar.
Tambien podemos excluir algunos hosts del examen. Si efectuamos desde una maquina constantes
sondeos SNMP por nuestra red o frecuentemente estamos iniciando sesion como administrador remoto,
generaremos alertas que no merece la pena proteger.
Aunque reduzcamos el nivel de proteccion proporcionado y podamos dejar sin proteccion alguna maqui-
na crtica, podemos hacer el IDS mas efectivo y merecera la pena asumir ese riesgo. Tardar algunas horas
en congurar nuestro sistema antes de activarlo puede ahorrarnos mucho tiempo y frustracion en el futuro.
Si vamos a ejecutar un IDS es mejor que nos tomemos el tiempo necesario para hacerlo funcionar
correctamente.
13.4.2. Ajuste del IDS
Cuando ya se esta ejecutando, incluso el IDS mas meticulosamente congurado empezara a generar
alertas. Al principio, si nos tomamos el tiempo necesario para analizarlas y empezamos a desactivar las
reglas que no nos importen en nuestra red, podremos reducir rapidamente el numero de falsos positivos
que esta produciendo el IDS.
Tambien nos proporcionara un conocimiento de como esta trabajando nuestra red y del tipo de traco
que se esta revisando, algo util para cualquier administrador de redes.
Es preciso reservar un tiempo semanal para modicar las conguraciones IDS. En algunos sistemas es
relativamente facil marcar una alerta como falso positivo mientras que en otros podemos encontrarnos con
mas dicultades. En general, se tardan algunos meses antes de que un IDS este ajustado correctamente
para enviar alertas utiles sobre una actividad procesable.
13.4.3. Herramientas de analisis IDS
Los sistemas de deteccion normalmente ofrecen a los administradores varios metodos de noticacion
de una alerta.
En su nivel mas basico, las alertas pueden simplemente enviarse a un archivo de registro para una
revision posterior, algo que no es muy recomendable ya que requiere que el administrador revise
los registros. Si no se supervisan diariamente, pueden pasar das o semanas antes de descubrir los
intentos de intrusion.
Jose Antonio Escartn Vigo, Junio 2005.

218 Servidor Linux para conexiones seguras de una LAN a Internet
La otra alternativa es enviar un mensaje de correo electronico o una pagina, a la persona apropiada
siempre que se genere una alerta. Sin embargo, incluso en un sistema bien ajustado, puede ser
molesto recibir correos varias veces al da. As mismo, las alertas de correo electronico no estaran en
un formato en el que se puedan comparar con alertas pasadas o analizadas de otra forma.
La mejor solucion para controlar las alertas IDS es insertarlas en una base de datos, para permitir un
analisis mas profundo. Existe una herramienta de libre distribucion para los sistemas de deteccion
de intrusiones denominadaAnalysis Console for Intrusion Database(ACIDlab, vease seccion 13.8).
13.5. IDS Snort (NIDS)
Es una herramienta desarrollada por Martin Roesch, aunque ahora ya cuenta con 30 desarrolladores
mas en su equipo principal, sin contar con los que escriben reglas y otras partes del software. Existen
muchos recursos disponibles para Snort y todos ellos son recursos gratuitos disponibles en Internet.
Snort es principalmente un IDS basado en rmas, aunque con la adicion del moduloSpade, puede
realizar una deteccion de actividad de anomalas. Existen tambien otros modulos de complemento como
Inline Snortque permite a Snort realizar acciones predeterminadas ante determinadas alertas.
Para obtener mas informacion sobre el programa, estos modulos o otros podemos consultar la web:
http://www.snort.org
O consultar la informacion que podemos obtener en nuestro sistema Debian:
#apt-get install snort-doc
13.5.1. Caractersticas basicas
Libre distribucion: Snort es de libre distribucion y portable a casi cualquier sistema operativo
Unix/Linux. Tambien existen versiones disponibles para Windows y otros sistemas operativos.
Ligero: Debido a que el codigo se ejecuta de una forma eciente, no requiere mucho hardware, lo
que permite poder analizar traco en una red de 100 Mbps a una velocidad cercana al cable, algo
bastante increble si pensamos lo que hace con cada paquete.
Snort personaliza reglas: Snort ofrece una forma facil para ampliar y personalizar el programa es-
cribiendo nuestras propias reglas o rmas. Existe mucha documentacion que puede ayudarnos a
aprender a hacer reglas (vease seccion 13.5.9), sin mencionar la cantidad de foros sobre el tema.
13.5.2. Instalacion
Para instalarlo simplemente realizaremos el apt del paquete:
#apt-get install snort
Los archivos importantes de snort son los siguientes:
/etc/snort/snort.conf : Archivo de conguracion por defecto
/etc/snort/snort.<host>.conf: Archivo de conguracion para el host
/etc/snort/snort.<dispositivo>.conf : Archivo de conguracion para un dispositivo de red concreto
/etc/snort/rules/* : Archivos de reglas
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 219
13.5.3. Modos de ejecucion
Snort se ejecuta desde la lnea de comandos, en tres modos diferentes:
Snier de red
Registro de paquetes
IDS
La mayora de los usuarios lo ejecutaran en este ultimo modo para obtener las ventajas de IDS, pero
tambien hay usos para los dos primeros modos.
Modo de snier de paquetes
En este modo, Snort actua como un snier, mostrando el contenido sin ltrar en el cable. Evidente-
mente. Si lo unico que necesitamos es un snier podramos utilizarTcpdumpoEthereal(mas completos).
Sin embargo, el modo snier de paquetes es bueno para asegurarse de que todo funciona correctamente y
Snort esta viendo los paquetes.
En este modo tenemos las siguientes opciones:
Opcion Descripcion
-v Imprime en la pantalla los encabezados de los paquetes TCP/IP en Ethernet
-d Igual que la opcion anterior pero ademas imprime los datos de la capa de aplicacion
-e Igual que la opcion anterior pero ademas imprime la capa de enlace de datos
Hay que incluir al menos el comando-vpara utilizar el modo snier de paquetes.
Estos serian algunos ejemplos de su uso:
#snort -v
#snort -vde
Pulsamos CTRL+C para salir y veremos un resumen de la sesion de escucha de la red.
La siguiente salida, es una conexion a una pagina web desde el servidor:
#snort -v
Running in packet dump mode
Initializing Network Interface eth0
--== Initializing Snort ==--
Initializing Output Plugins!
Decoding Ethernet on interface eth0
--== Initialization Complete ==--
,,_ -*> Snort! <*-
o" )~ Version 2.3.2 (Build 12)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/team.html
(C) Copyright 1998-2004 Sourcefire Inc., et al.
06/09-13:09:39.402225 195.149.189.15:80 -> 192.168.0.11:3516
TCP TTL:62 TOS:0x0 ID:47630 IpLen:20 DgmLen:52 DF
***A***F Seq: 0xB744B52F Ack: 0x34B0D324 Win: 0x1974 TcpLen: 32
TCP Options (3) => NOP NOP TS: 217975842 8827642
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
06/09-13:09:39.442220 192.168.0.11:3516 -> 195.149.189.15:80
TCP TTL:64 TOS:0x0 ID:24732 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x34B0D324 Ack: 0xB744B530 Win: 0x736 TcpLen: 32
TCP Options (3) => NOP NOP TS: 8837681 217975842
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
06/09-13:09:43.433979 192.168.0.11:3516 -> 195.149.189.15:80
TCP TTL:64 TOS:0x0 ID:24734 IpLen:20 DgmLen:52 DF
***A***F Seq: 0x34B0D324 Ack: 0xB744B530 Win: 0x736 TcpLen: 32
TCP Options (3) => NOP NOP TS: 8841673 217975842
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
06/09-13:09:43.819445 195.149.189.15:80 -> 192.168.0.11:3516
TCP TTL:253 TOS:0x0 ID:0 IpLen:20 DgmLen:52 DF
***A**** Seq: 0xB744B530 Ack: 0x34B0D325 Win: 0x1974 TcpLen: 32
TCP Options (3) => NOP NOP TS: 217976284 8841673
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
..........................................................................
..........................................................................
Jose Antonio Escartn Vigo, Junio 2005.

220 Servidor Linux para conexiones seguras de una LAN a Internet
==========================================================================
Snort received 263 packets
Analyzed: 263(100.000%)
Dropped: 0(0.000%)
==========================================================================
Breakdown by protocol:
TCP: 247 (93.916%)
UDP: 12 (4.563%)
ICMP: 0 (0.000%)
ARP: 4 (1.521%)
EAPOL: 0 (0.000%)
IPv6: 0 (0.000%)
IPX: 0 (0.000%)
OTHER: 0 (0.000%)
DISCARD: 0 (0.000%)
==========================================================================
Action Stats:
ALERTS: 0
LOGGED: 0
PASSED: 0
==========================================================================
Snort exiting
Modo de registro de paquetes
Este modo es similar al anterior pero nos permite registrar paquetes \olfateados" al disco para su
utilizacion y analisis futuros. Para ejecutar Snort en el modo de registro de paquetes, simplemente lo
ejecutamos con los mismos comandos que en el modo snier de paquetes, pero a~nadiendo un modicador
adicional:-l logpath, reemplazandologpathcon la ruta de acceso en la que deseamos que Snort registre los
paquetes (tiene que ser un directorio).
Por ejemplo:#snort -vde -l /var/log/snort
Creara archivos de registro en el directorio/var/log/snort. Snort registra paquetes por direccion IP y
crea un directorio independiente para cada IP registrada. Si estamos registrando traco en una red local
grande con muchas direcciones, esto puede escaparse rapidamente a nuestro control.
Podemos utilizar otra conguracion para indicarle a Snort que registre los paquetes de la LAN en la
que se encuentra con el comando:-h homenet, dondehomenetes el rango de direcciones IP en la notacion
de barra inclinada. Esto hace que Snort coloque las direcciones basandose en la direccion IP del paquete
externo a la LAN, para poder ver con mas facilidad el traco ajeno a la red. Si tanto los antriones de
destino como de origen son locales, Snort los coloca en el directorio con el numero de puerto superior,
aparentemente para recoger el host de conexion sobre el host servidor.
Snort utiliza la direccion de origen como nombre del directorio en el que se colocaran los datos de los
paquetes, cuando registramos alertas de intrusion es importante saber con facilidad de donde esta provi-
niendo el traco de alertas marcado.
Por lo tanto, el comando para el modo de registro de paquetes sera:
#snort -vde -l /var/log/snort -h 192.168.0.0/24
Esta declaracion especica una red interna en el rango comprendido entre 192.168.0.1 y 192.168.0.254.
Tambien podemos utilizar la opcion:-bpara registrar todos los datos en un solo archivo binario,
apropiado para su lectura posterior con un snier de paquete (comoEtherealoTcpdump). Si se realiza
as el registro, no es necesario especicar la red local al utilizar el modicador-bya que registrara los
archivos secuencialmente en un gran archivo. Este metodo es mucho mas rapido para registrar redes de
muchos registros o si Snort funciona en un maquina lenta. Tambien facilita el analisis con herramientas
mas complejas, algo necesario si vamos a buscar sobre una gran cantidad de datos de red capturados.
Modo de deteccion de intrusion (IDS)
Este modo lo utiliza Snort para registrar paquetes sospechosos o que merecen una consideracion es-
pecial. Solo necesitamos un modicador adicional a la declaracion anterior para que Snort entre en este
modo. El modicador:-c congle, le indica a Snort que utilice un archivo de conguracion para dirigir
los paquetes que registra. Este archivo determina la conguracion de Snort, se incluye un archivo prede-
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 221
terminado, pero debemos realizar cambios antes de ejecutarlo, para que reeje nuestro perl de red.
Por lo tanto, si escribimos:
#snort -de -l /var/log/snort -h 192.168.0.0/24 -c /etc/snort/snort.conf
Ejecutaremos Snort en modo IDS utilizando el archivo de conguracionsnort.confpredeterminado.
Hay que tener en cuenta que no hemos utilizado el modicador-vpara ejecutar Snort en modo IDS.
Cuando intentamos comparar todos los paquetes con las rmas, obligar a Snort a escribir tambien las
alertas en la pantalla puede causar que algunos paquetes se omitan, especialmente en redes con mucho
traco. Tambien podemos omitir el modicador-esi no necesitamos registrar las capas de enlace de datos.
Si omitimos el modicador-l, Snort de forma predeterminada utilizara/var/log/snortcomo su directorio
de registro. Tambien podemos utilizar el modicador-bsi deseamos registrar un archivo binario para un
analisis posterior con un programa independiente.
El comando para ejecutar Snort en el modo IDS es:
#snort -h 192.168.0.0/24 -c /etc/snort/snort.conf
13.5.4. Modos de alerta
Ahora que ya estamos registrando los paquetes de alerta, tendremos que decidir el detalle y el formato
de la alerta. El cuadro 13.1 incluye una lista con las opciones que podemos usar desde la lnea de comandos,
utilizando el modicador-A.
Cuadro 13.1: Opciones de alerta del comando Snort
Opcion Descripcion
-A full Informacion completa de la alerta, incluyendo datos de aplicacion. Es el modo prede-
terminado de alerta y se utilizara cuando no especiquemos nada.
-A fast Modo rapido. Registra solo la informacion de encabezado del paquete y el tipo de
alerta. Es util para redes muy rapidas pero si se necesita mas informacion forense hay
que utilizar el modicadorfull.
-A unsockReenva la alerta a un socket
-A none Desactiva las alertas.
Tambien podemos utilizar las opciones,Syslog,SMBy opciones de salida de bases de datos. Estas
opciones no utilizan el modicador-Adesde la lnea de comandos sino modulos de salida independientes
que ofrecen una variedad mas amplia de opciones de salida.

Estas deben congurarse en el tiempo de
compilacion con modicadores a~nadidos a la declaracion de conguracion.
SMB: Enva las alertas al servicio de menu emergente de Windows. Para esta opcion hay que
descargar las fuentes y compilarlas con la opcionenable-smbalerts.
Para ejecutar Snort con esta conguracion:#snort -c /etc/snort/snort.conf -M workstations
Dondeworkstationses el nombre del host Windows al que se envan las alertas.
Syslog: Enva alertas al servidorSyslogde Unix. Este es un servicio, que captura y guardar archivos
de registro, lo que nos ayudara a consolidar registros de red en un lugar unico. Este servicio diculta
a un intruso borrar los rastros de la intrusion. Podemos especicar los formatosSyslogdentro del
archivo de conguracion y enviar ah las alertas incluyendo el modicador-s.
Snort admite directamente cuatro tipos de salida a base de datos: MySQL, PostgreSQL, Oracle y
unixODBC. El modulo de salida de base de datos requiere: parametros y conguraciones, dentro del
archivo de conguracion y en tiempo de compilacion.
Jose Antonio Escartn Vigo, Junio 2005.

222 Servidor Linux para conexiones seguras de una LAN a Internet
13.5.5. Optimizar la conguracion
Ahora que ya sabemos como funciona Snort y conocemos los comandos basicos, tendremos que editar
el archivo de conguracion para convertirlo en un IDS able y obtener los resultados deseados. Muchas
lneas del archivo contienen informacion util para aclarar cada una de las partes de la conguracion.
Para denir el archivo de conguracion seguiremos los siguientes pasos:
1.Establecemos nuestra red local: Tendremos que indicarle a Snort las direcciones de nuestra red local
para que pueda interpretar correctamente los ataques provenientes del exterior. Para ello utilizaremos
la siguiente declaracion:
var HOME_NET addresses
Donde debemos de reemplazaraddressescon el espacio de direcciones de nuestra red local. Si existen
multiples redes, podemos introducirlas todas separandolas por comas. Podemos incluso introducir
un nombre de interfaz y utilizar la direccion IP y la mascara de red asignada a dicha interfaz como
nuestroHOMENET. El formato para hacerlo es:
var HOME_NET $ interfacename
Donde debemos reemplazarinterfacenamecon la interfaz de red donde esta escuchando Snort.
Tambien podemos denir nuestras redes externas con una declaracion similar aHOMENET, reem-
plazandola porEXTERNAL NET. La entrada predeterminada para ambas variables esany. Es
recomendable denir la red interna pero dejar la red externa aany.
2.Conguramos los servidores internos: En el archivo de conguracion podemos denir nuestros ser-
vidores de red, incluyendo web, mail, dns, telnet, . . . As, limitaremos los falsos positivos para los
servicios en esas maquinas.
Tambien podemos especicar los numeros de puertos para dichos servicios, entonces si nuestros
usuarios usan ese puerto, no se registrara ninguna alerta. Todas estas opciones de conguracion
pueden ayudarnos a reducir el numero de falsos positivos que obtenemos y alertarnos solo con
informacion que tiene valor real.
3.Conguramos los decodicadores y procesadores previos de Snort: Diversos modicadores y congu-
raciones controlan los decodicadores y procesadores previos de Snort en el archivo de conguracion.
Estas rutinas se ejecutan en el traco antes de pasar por ningun conjunto de reglas, normalmente
para formatearlas correctamente o para tratar con un tipo determinado de traco que sea mas facil de
procesar directamente en lugar de utilizar los conjuntos de reglas. Un ejemplo de este tipo de traco
seran los paquetes fragmentados-defragmentados. Muchos ataques intentan ocultar su verdadera
naturaleza fragmentando los paquetes, en esos casos, esta opcion es muy valiosa.
Otro decodicador es para los paquetes de escaneado de puertos. Como estos suelen entrar en grupos
y con un gran volumen, es mejor procesarlos directamente en masa en lugar de intentar comparar
cada paquete con una rma. Esto hace que el IDS sea mas seguro ante una denegacion de servicio.
Las conguraciones predeterminadas para estos subsistemas son muy generales, a medida que expe-
rimentemos con Snort, podremos ajustarlas para obtener un mejor rendimiento y resultados.
4.Conguramos los modulos de salida: Es un paso importante si deseamos utilizar una base de datos
para controlar las salidas de Snort. Como ya hemos visto anteriormente, existen varios modulos de
salida que podemos utilizar, dependiendo del formato en el que deseemos los datos:Syslog,Database
y el nuevo modulo denominadoUnied, que es un formato binario generico para exportar datos a
otros programas.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 223
El formato general para congurar los modulos de salida es:
output module_name: configuration options
Siendomodulenamebienalertsyslog,databaseoalertunieddependiendo del modulo que cargue-
mos.
Las opciones de conguracion para cada modulo de salida son las siguientes:
Syslog:
output alert_syslog: LOG_AUTH LOG_ALERT
output alert_syslog: host= hostname:port, LOG_AUTH LOG_ALERT
Dondehostanameyportson la direccion IP y el puerto de nuestro servidorSyslog.
Database:
output database: log, database_type, user= user_name
password= password dbname host= database_address
Donde debemos reemplazardatabasetypepor una base de datos valida,usernamepor un
nombre de usuario valido en la base de datos ypasswordpor la contrase~na asociada al usuario.
La variabledbnameidentica el nombre de la base de datos en la que se va a realizar el registro.
Por ultimo,databaseaddresses la direccion IP del servidor que contiene la base de datos.
No se recomienda intentar ejecutar Snort y la base de datos en el mismo servidor, suele provocar
una bajada considerable del rendimiento del sistema.
Unied: Es un formato binario basico para registrar los datos y usarlos en el futuro.
Los dos argumentos adminitidos sonlenameylimit:
output alert_unified: filename snort.alert, limit 128
5.Personalizamos los conjuntos de reglas: El archivosnort.confpermite a~nadir o eliminar clases enteras
de reglas. En la parte nal del archivo podremos ver todos los conjuntos de reglas de alertas.
Podemos desactivar toda una categora de reglas comentando la lnea. Por ejemplo, podramos
desactivar todas las reglasicmp-infopara reducir los falsos positivos del tracopingo todas las
reglasNetBIOSsi no tenemos maquinas Windows en nuestra red. Tambien podemos encontrar
disponibles conjuntos de reglas que se han ajustado para entornos especcos.
13.5.6. Clases de reglas
La forma mas facil de limitar el traco de las alertas es desactivar reglas que no se aplican en nuestro
sistema, esto lo podemos hacer entrando en la conguracion de Snort. El directorio/etc/snort/rules/
contiene muchos archivos con la extension.rules, cada uno de ellos contiene las reglas agrupadas por
categora.
Podemos deshabilitar toda una clase de reglas comentandola en el archivo de conguracion o podemos
deshabilitar reglas individuales si queremos la proteccion del resto de reglas de la clase. Para comentar
una regla concreta, la buscamos en los archivos.rulesapropiados e insertamos un comentario delante de
la lnea de dicha regla. Hay que tener en cuenta que normalmente es mejor deshabilitar un sola regla que
toda la clase, a no ser que esta no se aplique en nuestra conguracion.
En el cuadro 13.2 podemos observar una lista con las clases de reglas mas habituales en Snort y una
peque~na descripcion de las mismas.
Jose Antonio Escartn Vigo, Junio 2005.

224 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 13.2: Clases de reglas de Snort (I)
Clase de reglas Descripcion
attack-response.rulesSon las alertas para paquetes de respuesta comunes despues de que un ata-
que haya tenido exito. Raramente se informan como falsos positivos y de-
bemos dejarlas activadas en la mayora de los casos.
backdoor.rules Estas reglas son signos comunes de una puerta trasera o de un programa
troyano en uso. Raramente son falsos positivos.
bad-traffic.rules Estas reglas representan el traco de red no estandar que normalmente no
debera verse en la mayora de las redes.
chat.rules Localizan transmisiones estandar para muchos programas conocidos de con-
versacion. Si la conversacion se permite implcitamente o explcitamente es-
tas alertas deben estar deshabilitadas. As mismo, hay que tener en cuenta
que estas alertas no son una solucion milagrosa para las conversaciones y
no detectaran todos los tipos de traco de conversaciones.
ddos.rules Busca tipos de ataques de denegacion de servicio distribuido estandares. En
DMZ y WAN, estas alertas no sirven de mucho porque si se ha producido
un ataque de este tipo probablemente lo sepamos en seguida. Sin embargo,
pueden ser muy utiles dentro de una LAN para comprobar si tenemos una
maquina zombi en otra red participando en un ataque de denegacion de
servicio (DoS) sin saberlo.
dns.rules Buscan algunos abusos estandar contra servidores DNS. Si no estamos eje-
cutando un servidor DNS propio, podemos desactivarlas.
dos.rules Similar al conjunto de reglas anterior.
experimental.rules Estan deshabilitadas de forma predeterminada. Generalmente se utilizan
solo para probar nuevas reglas hasta que se desplazan a otra categora.
exploit.rules Estas reglas son para el traco de abuso estandar, siempre habilitadas.
finger.rules Estas reglas marcan el traco que tiene que ver con los servidores nger. Si
no estamos ejecutando ninguno de estos servidores, las podemos deshabili-
tar. Sin embargo, este tipo de servidores normalmente se ejecutan ocultos
al administrador del sistema, por lo que podemos dejarlas habilitadas, ya
que no suelen generar falsos positivos.
ftp.rules Igual que las reglas anteriores pero buscan abusos de FTP. Una vez mas,
podemos dejarlas habilitadas aunque no tengamos servidores FTP ya que
nos avisaran de cualquier servidor FTP ilegal en el sistema.
icmp-info.rules Estas reglas registran el uso de los mensajes ICMP que cruzan la red, por
ejemplo, los ping. A menudo producen falsos positivos, podemos desacti-
var toda la clase a no ser que deseemos estar pendientes del traco ICMP
en nuestra red. Otra clase de traco ICMP da~nino conocido,icmp.rules,
captura los escaneados de puertos y similares.
icmp.rules Cubre el traco ICMP sospechoso o da~nino y es poco propenso a generar
falsos positivos. Sin embargo, es posible que se activen en una red ocupada
ejecutando muchos servicios de diagnostico.
imap.rules Reglas correspondientes al uso del protocolo de acceso a mensajes desde
internet (IMAP, Internet Message Access Protocol).
info.rules Capturan mensajes de errores diversos: Web, FTP y otros servidores.
local.rules En este archivo podemos a~nadir nuestras propias rmas o reglas personali-
zadas para la red, el archivo esta vaco de forma predeterminada.
misc.rules Reglas que no encajan en ninguna de las restantes categoras.
multimedia.rules Registra el uso de software de vdeo. Si permitimos las aplicaciones de vdeo
o utilizamos video-conferencia, debemos deshabilitar estas reglas.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 225
Cuadro 13.3: Clases de reglas de Snort (II)
Clase de reglas Descripcion
mysql.rules Vigila el acceso del administrador y otros archivos importantes en una base
de datos MySQL. Si no ejecutamos este tipo de base de datos, podemos des-
habilitar estas alertas. As mismo, si nuestra base de datos MySQL esta en
desarrollo, podran producirse muchos falsos positivos.
Netbios.rules Esta clase de reglas nos alerta de diversa actividad NetBIOS en la LAN.
Algunas de ellas son exploits evidentes. Sin embargo, otras, como las alertas
de sesion NULL, pueden producirse normalmente en una LAN Windows.
Tendremos que jugar con esta seccion para deducir cuales son las reglas
apropiadas en nuestra LAN.
nntp.rules Reglas relacionadas con el servidor de noticias. Si no ejecutamos noticias de
red en los servidores, es mejor deshabilitar estas reglas.
oracle.rules Reglas del servidor de base de datos Oracle. Si no tenemos un servidor de
este tipo, las deshabilitamos.
other-ids.rules Estas reglas se relacionan con exploits en los IDS de otros fabricantes. Es
muy probable que no tengamos ningun otro NIDS en la LAN, pero si es
as hay que dejarlas habilitadas.
p2p.rules Reglas que rigen el uso del software para compartir archivos punto a punto.
Estas reglas crearan alertas durante el uso normal de este software, si lo
permitimos, deberemos deshabilitarlas.
policy.rules Este archivo contiene diversas alertas relacionadas con toda la actividad
permitida en la LAN, como Go-to-my-pc y otros programas. Debemos re-
visarlas y habilitar solo las que se aplican en nuestras polticas internas.
pop3.rules Para servidores de correo, si tenemos un servidor de este tipo, hay que
dejarlas habilitadas.
porn.rules Estas reglas son trampas rudimentarias para la exploracion web relacionada
con la pornografa. No constituyen ni mucho menos un reemplazo para los
buenos sistemas de ltrado de contenido.
rpc.rules Esta clase controla las alertas de llamadas a procedimientos remotos (RPC).
Aunque creamos no ejecutar ninguno de estos servicios, normalmente se
activan como parte de otros programas, por lo que es importante tener
cuidado con lo sucede en la LAN. RPC puede habilitar la ejecucion remota
de codigo y normalmente se utiliza en los troyanos y exploits.
rservices.rules Registra el uso de diversos programas de servicios remotos, como rlogin y
rsh. Estas reglas en general, son de servicios inseguros, pero si tenemos que
utilizarlos, pueden examinarse con este conjunto de reglas.
scan.rules Alertas para utilizar programas de escaneado de puertos. Los escaneados de
puertos son una indicacion extraordinaria de una actividad ilcita. Si utiliza-
mos escaneres de puertos, podemos desactivar Snort durante su ejecucion o
deshabilitar esta regla en concreto para la IP donde se encuentra el escaner.
shellcode.rules Esta clase busca paquetes que contienen codigo de montaje, comandos de
bajo nivel tambien conocidos como codigo shell. Estos comandos normal-
mente forman parte integral de muchos exploits como los desbordamientos
de memoria. Capturar al momento un codigo shell es una buena indicacion
de que se esta produciendo un ataque.
smtp.rules Contienen las alertas para el uso del servidor de correo en la LAN. Esta
seccion necesitara algun ajuste ya que muchas actividades de servidor de
correo normales activaran reglas de esta seccion.
sql.rules Reglas para diversos programas de base de datos SQL. Si no ejecutamos nin-
guna base de datos, podemos deshabilitarlas, pero no es mala idea dejarlas
por si existen bases de datos SQL ejecutandose sin que lo sepamos.
Jose Antonio Escartn Vigo, Junio 2005.

226 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 13.4: Clases de reglas de Snort (III)
Clase de reglas Descripcion
telnet.rules Registra el uso de telnet sobre la red. Normalmente telnet se utiliza en
enrutadores o en otros dispositivos de lnea de comandos, por lo que es
recomendable realizar el registro incluso si telnet no esta en nuestros servi-
dores.
tftp.rules TFTP (FTP trivial) es un servidor FTP alternativo que se ejecuta normal-
mente en enrutadores. Puede utilizarse para cargar nuevas conguraciones
y por consiguiente es mejor que este conjunto de reglas este habilitado.
virus.rules Contiene las rmas de algunos gusanos y virus conocidos. Esta lista no
esta completa y no se mantiene con regularidad. No es un reemplazo para
el software de escaneado de virus pero puede capturar algunos gusanos que
se transmitan por la red.
web-attacks.rules Todas estas clases se reeren a diversos tipos de actividad web sospechosa.
web-cgi.rules Algunas son genericas, como las clases web-attacks. Otras clases, como
web-client.rules web-iis y web-frontpage, son especcas de una determinada plataforma de
web-coldfusion.rules servidor web. Sin embargo, aunque creamos que no estamos ejecutando un
web-frontpage.rules servidor web Microsoft o PHP, es mejor dejarlas habilitadas para descubrir
web-iis.rules cualquier tipo de esta actividad en nuestra LAN de la que debamos preocu-
web-php.rules parnos. Tendremos que ajustar estos conjuntos de reglas, especialmente si
los servidores web se encuentra en un desarrollo activo.
X11.rules Registra el uso del entorno graco X11 en su red.
13.5.7. Ejecutar como servicio del sistema
Si vamos a ejecutar Snort en un servidor que se va a utilizar las 24 horas del da, siete das a la semana,
tendremos que ejecutar Snort inmediatamente al inicio para que, en el caso en el servidor caiga, se pueda
volver a cargar Snort y siga protegiendo nuestra LAN. Una forma de conseguirlo es tener una peque~na
secuencia de comandos que ejecute Snort con los parametros de lnea de comandos en las rutinas de inicio.
Deberemos colocar el comando de arranque de Snort.
Como por ejemplo:snort -h 192.168.0.0/24 -c /etc/snort/snort.conf &
El signo de concatenacion & indica que se debe ejecutar Snort como un proceso en segundo plano.
13.5.8. Conguracion graca de Snort, interfaz Webmin
Realizar toda la conguracion para Snort desde la lnea de comandos puede llegar a ser algo tedioso.
Aunque todava no existe una interfaz graca para Snort, existe un modulo para la conocida herramien-
ta de administracion web Webmin que nos permite realizar ajustes y conguraciones desde un servidor web.
Algunas de las ventajas de este sistema son:
Acceso a los archivos de conguracion de Snort, basado en un formulario.
Niveles de acceso de usuario que permiten congurar diferentes usuarios con diferentes derechos.
Capacidad para para habilitar y deshabilitar conjuntos de reglas mediante un simple clic.
Indicador de estado para todas las reglas y conjuntos de reglas.
Enlaces incrustados a bases de datos externas como archNIDS, CVE y Bugtraq.
Registro de cambios.
Diferentes idiomas.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 227
Soporte para ejecutar Snort como servicio utilizando archivosrc.d.
Administracion remota segura a traves de SSL (si esta habilitado).
El modulo de Snort requiere la version 0.87 de Webmin o superior. Instalaremos el modulo con apt:
#apt-get install webmin-snort
Para acceder al sistema, con SSL y si no hemos cambiado el puerto por defecto:
https://localhost:10000
Una vez iniciada la sesion en la pagina de Snort (vease gura 13.1), podremos ver las secciones prin-
cipales del archivo de conguracion, las conguraciones del procesado previo y las opciones de inicio de
sesion en la parte superior de la ventana. Haga clic en cualquiera de las opciones de conguracion para
introducir su informacion personal para que Webmin realice los cambios apropiados en los archivos de
Snort.
Figura 13.1: Modulo Webmin de Snort
Todos los conjuntos de reglas aparecen en una lista, podemos ver cuales estan habilitados y cuales no.
Si queremos visualizar dicho conjunto de reglas o modicar una regla individual, hacemos clic en el
texto subrayado de color azul para dirigirnos a la paginaEdit RuleSet(editar conjunto de reglas). Aqu se
encuentran todas las reglas individuales dentro de dicho conjunto. Podemos ejecutar acciones en cada
regla como deshabilitarla, habilitarla o eliminarla del conjunto.
Si existen referencias a bases de datos externas dentro de la alerta, como los numeros de Vulnerabilidad
o exploit comunes (VCE, Common Vulnerability or Exploit), podemos hacer clic en un hipervnculo para
abrir mas detalles sobre lo que hace la alerta. En esta interfaz se puede ajustar el conjunto de alertas mas
facilmente.
Con el modulo Webmin Snort tambien podemos congurar usuarios para que puedan acceder a de-
terminadas conguraciones. Esto se realiza mediante el control de usuarios de Webmin, en la seccion
Jose Antonio Escartn Vigo, Junio 2005.

228 Servidor Linux para conexiones seguras de una LAN a Internet
correspondiente de acceso a Snort. Podemos controlar los archivos de conguracion a los que pueden ac-
ceder o simplemente dejar que visualicen los archivos sin poder editar ninguno de ellos. Como se puede
comprobar, el modulo Webmin Snort nos proporciona un control de acceso granular para que podamos
delegar las tareas diarias en usuarios con privilegios de administracion, a la vez que seguimos conservando
el control de la conguracion y los cambios.
13.5.9. Personalizar reglas
Aunque los conjuntos de reglas estandar incluidos en Snort proporcionan una proteccion adecuada
contra rmas de ataques conocidas, podemos dise~nar algunas reglas personalizadas especcas para que
nuestra red obtenga el mejor rendimiento del IDS.
Se pueden escribir reglas para:
Registra el acceso hacia o desde determinados servidores.
Buscar determinados tipos de nombres de archivos especcos en nuestra organizacion.
Vigilar determinados tipos de traco que no pertenecen a nuestra propia red.
La escritura de reglas de Snort es facil de aprender y nos permite a~nadir funcionalidades al programa,
sin muchos conocimientos de programacion. Como hemos podido comprobar, las reglas de Snort son
simplemente declaraciones de texto dentro de un archivo de reglas.
Si deseamos que Snort busque un comportamiento unico que debera ser sospechoso en nuestra red,
podemos codicar rapidamente una regla y probar el resultado. El formato de una regla de Snort es basi-
camente una sola lnea de texto que empieza con una accion (normalmentealert) seguida por diversos
argumentos. Se pueden a~nadir multiples lneas simplemente a~nadiendo una barra inclinada (/) al nal
de cada lnea. Tambien se puede llamar a otros programas utilizando una declaracion de inclusion para
obtener una regla mas compleja.
En su forma basica, una regla de Snort consta de dos partes:
Un encabezado de regla
Las opciones de la regla
Aqu tenemos un ejemplo:
alert tcp any any 192.168.0.0/24 /
(content:"|00 05 A4 6F 2E|";msg:"Test Alert";)
El encabezado de la alerta es la parte anterior al parentesis de apertura. Esta declaracion contiene la
accion (en este caso,alert), el protocolo y las direcciones de puertos de origen y destino. La accion es lo
que va a hacer la regla, si esta es verdadera.
Las opciones para las acciones son:
alert Alerta del cumplimiento de la regla.
log Solo registra el paquete.
pass Ignora el paquete, es la accion predeterminada en paquetes que no coin-
ciden con la regla.
activateAlertar y a continuacion activar una regla dinamica.
DynamicPermanecer inactiva hasta que se active, a partir de entonces actua como
una regla normal registro.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 229
Los protocolos puede sertcp,udp,icmpoip, lo que signica cualquier protocolo IP (puede que en un
futuro se admitan protocolos no basados en IP, como IPX).
Los puertos de origen y destino se explican por s mismos. La direccion de origen es la primera, lis-
tada en la notacion de barra inclinada estandar para los rangos IP. Tambien podemos listar multiples
direcciones individuales y redes separandolas con una coma, sin espacios y escribiendo la declaracion entre
corchetes, por ejemplo:
alert tcp any <> [192.168.0.2,192.168.0.5,192.168.0.10] 80 /
(content:"|00 05 A4 6F 2E|";msg:"Test Alert";)
Esta sentencia se centra en el traco que proviene de cualquier direccion enlazada para las maquinas
192.168.0.2, 192.168.0.5 y 192.168.0.10 en el puerto 80. Suponiendo que se tratan de nuestros servidores
Web, la sentencia buscara el traco entrante con los datos hexadecimales de la seccion de contenido.
La segunda parte de una alerta Snort son las opciones de la regla. Aqu es donde podemos especicar
mas detalles sobre el tipo de traco que estamos buscando. Podemos buscar segun los campos del encabe-
zado TCP/IP o buscar simplemente la cargar util del paquete. Despues de cada comando debemos incluir
comillas y el valor que se esta buscando. Podemos a~nadir multiples opciones separandolas con un punto y
coma.
El cuadro 13.5 contiene los comandos de opcion validos en la confeccion de reglas.
13.6. Deteccion de intrusiones en el host
Hemos tratado con detalle la deteccion de intrusiones basadas en redes (NIDS). Sin embargo, existen
otras formas de encontrar intentos de intrusion.
Un metodo alternativo es buscar signos de intrusion en el propio sistema. Si se ha aprovechado un
exploit en una maquina, normalmente se alteraran determinados archivos del sistema. Por ejemplo, puede
cambiar el archivo de contrase~nas, pueden a~nadirse usuarios, pueden modicarse archivos de conguracion
del sistema o se pueden alterar los permisos de algunos archivos. Normalmente, estos archivos de sistema
no deberan cambiar mucho. Al buscar modicaciones podemos detectar una intrusion u otra actividad
inusual.
Este metodo de deteccion de intrusion puede ser mucho mas preciso, produciendo menos falsos posi-
tivos ya que no se activan a no ser que un sistema este realmente afectado. Algo mas complicado es el
mantenimiento ya que tenemos que cargar el software en cada sistema que deseamos proteger.
Podemos armar que merece la pena el tiempo y el esfuerzo empleados para detectar las intrusiones
basadas en hosts y en redes con el n de proteger los sistemas que ejecutan tareas crticas.
Los metodos de deteccion de intrusion basados en hosts tienen las siguientes ventajas:
Menos falsos positivos.
Se registran actividades en lugar de rmas, no necesitan actualizaciones constantes de rmas.
Necesitan menos ajustes.
Los metodos de deteccion de intrusion basados en hosts tienen los siguientes inconvenientes:
Hay que cargar y administrar el software en cada host a proteger.
La alerta tiene lugar despues de que un ataque haya tenido exito. Muy pocas veces los IDS de host
nos proporcionan un aviso previo.
Jose Antonio Escartn Vigo, Junio 2005.

230 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 13.5: Opciones de personalizacion en las reglas de Snort
Opcion Descripcion
msg Proporciona la descripcion del texto de una alerta.
logto Registra el paquete para un nombre de archivo especco de un usuario en lugar de para
el archivo de salida estandar.
ttl Prueba el valor del campo TTL del encabezado IP.
tos Prueba el valor del campo TOS del encabezado IP.
id Prueba el campo ID del fragmento del encabezado IP para un valor especco.
ipoption Vigila los campos de opcion IP buscando codigos especcos.
fragbits Prueba los bits de fragmentacion del encabezado IP.
dsize Prueba el tama~no de carga util del paquete frente a un valor.
ags Prueba los indicadores TCP para determinados valores.
seq Prueba el campo de numero de secuencia TCP para un valor especco.
ack Prueba el campo de reconocimiento TCP para un valor especco.
itype Prueba el campo de tipo ICMP frente a un valor especco.
icode Prueba el campo de codigo ICMP frente a un valor especco.
icmpid Prueba el campo ICMP ECHO ID frente a un valor especco
icmpseq Prueba el numero de secuencia ICMP ECHO frente a un valor especco.
content Busca un patron en la carga util del paquete.
content-list Busca un conjunto de patrones en la carga util del paquete.
oset Modicador para la opcion de contenido. Establece la compensacion en el intento de
coincidencia con el patron.
depth Modicador para la opcion de contenido. Establece la profundidad de busqueda para un
intento de coincidencia con el patron.
nocase Compara la cadena de contenido anterior sin tener en cuenta las mayusculas y las
minusculas.
session Descarga la informacion de la capa de aplicacion para una determinada sesion
rpc Vigila los servicios RPC en busqueda de determinadas llamadas de aplicaciones o proce-
dimientos.
resp Respuesta activa (por ejemplo, cerrar todas las conexiones).
react Respuesta activa. Responde con un conjunto de comportamientos cifrados (por ejemplo,
bloquear determinados sitios web).
referernce Los ID de referencia de ataques externos.
sid ID de regla Snort.
rev Numero de revision de regla.
classtype Identicador de clasicacion de regla.
priority Identicador de severidad de regla.
uricontent Busca un patron en la parte URI del paquete.
tag Acciones de registro avanzadas para las reglas.
ipproto Valor de protocolo del encabezado IP.
sameip Determina si la IP de origen es igual a la IP de destino.
stateless Valido independientemente del estado del ujo.
regex Coincidencia de patron de caracteres comodn.
bytetest Evaluacion numerica.
distance Obliga a que la coincidencia de patron relativa omita determinado numero de bytes en
el paquete.
bytetest Prueba numerica del patron.
bytejump Prueba numerica del patron y ajuste de compensacion
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 231
13.7. Integridad de archivos: IDS Tripwire
Originalmente, Tripwire era de libre distribucion. Al nal, los creadores fundaron una empresa para
venderlo y soportarlo comercialmente. Sin embargo, cogieron el codigo base original y lo distribuyeron
con licencia GPL para que pudiera continuar su desarrollo en la comunidad de la libre distribucion. Esta
version libre se ha ido actualizando desde su lanzamiento (version 2.2.1).
Ambas versiones funcionan creando una base de datos de atributos basicos, archivos importantes que
deseamos registrar para comprobar los atributos reales, en cualquier momento, frente a los atributos
basicos. Con ello determinaremos si ha cambiado algo.
Uno de los trucos favoritos de los piratas informaticos, una vez introducidos en un sistema, es reempla-
zar los archivos binarios clave con versiones de su propia cosecha. As cuando utilizamos comandos como
lsops, no vemos sus archivos ilcitos ni la ejecucion de determinados procesos. Tambien podemos utilizar
Tripwire durante una investigacion forense para descubrir donde ha estado un intruso, es como seguir las
huellas digitales de una persona.
Para instalar el programa hacemos un apt:
#apt-get install tripwire
Congurar Tripwire
Antes de ejecutar Tripwire hay que establecer la poltica. El archivo de polticas es muy importante
para el funcionamiento de Tripwire: le indica que archivos debe vigilar y a que nivel de detalle debe
introducirse. El archivo principal de polticas es:/etc/tripwire/twpol.txt.

Este no es el propio archivo de
polticas, sino una copia de la version cifrada que el programa utiliza. Para obtener una mejor seguridad,
deberamos hacer una copia y eliminarlo, una vez establecidas y probadas sus polticas.
Este archivo contiene en su parte superior algunas variables, un listado de los diversos archivos y
directorios que se chequearan, las directivas y las polticas que les aplicaremos.
Estas directivas se representan mediante letras de codigo o nombres de variable, denominadas mascaras
de propiedad, y representan las propiedades que esta registrando Tripwire.
El cuadro 13.6 recoge la lista de los elementos que se pueden registrar para cada archivo y sus letras
de codigo.
Cuadro 13.6: Mascaras de propiedad de Tripwire
Letras de codigo Atributos registrados
a

Ultimo acceso
b Bloques asignados
c Crear/modicar hora
d Dispositivo ID en el que reside el i-nodo
g ID de grupo del propietario del archivo
i Numero de i-nodo
l Si se permite crecer el archivo
m Modicacion de la fecha y hora impresa
n Numero de enlaces al i-nodo
p Leer/escribir/ejecutar permisos en el archivo
s Tama~no del archivo
t Tama~no del tipo
u ID de usuario del propietario del archivo
c Codigo CRC32
h Codigo Haval
m Codigo MD5
s Codigo SHA/SHS
Jose Antonio Escartn Vigo, Junio 2005.

232 Servidor Linux para conexiones seguras de una LAN a Internet
Las polticas de Tripwire operan sobre el concepto de ignorar los indicadores. Podemos congurar Trip-
wire para que registre o ignore diferentes propiedades de archivo. Para registrar propiedades utilizamos
un signo mas (+) y para ignorarlas un signo menos (-).
El formato para la declaracion de un archivo de polticas es el siguiente:
file/directory name -> property mask;
Por ejemplo, esta lnea en el archivo de polticas:
/etc/secreto.txt -> +amcpstu;
Producira que Tripwire nos noticase en cualquier momento, cuando se produjo el ultimo acceso, la
fecha de creacion o modicacion, los permisos, la propiedad o el tama~no del tipo de archivo, cambiado en
el archivo/etc/secreto.txt.
Existen ademas diversas mascaras de propiedad predenidas. En el cuadro 13.7 se incluyen dichas
mascaras plantilla y sus efectos.
Cuadro 13.7: Mascaras de propiedad de plantillas
Mascara de propiedad Efectos
$Readonly +pinugtsdbmCM-rlasSH
$Dynamic +pinugtd-srlbamcCMSH
$Growing +pinugtdl-srbamcCMSH
$Device +pugsdr-intlbamcCMSH
$IgnoreAll -pinugtsdrlbamcCMSH
$IgnoreNone +pinugtsdrlbamcCMSH
Estas variables predenidas encajan en el comportamiento de diferentes conjuntos de archivos. Por
ejemplo, podemos utilizar$Readonlypara nuestros archivos de conguracion clave, ya que sus fechas
de acceso estaran continuamente cambiando cuando los programas los utilicen, pero no deseamos que el
contenido o el tama~no cambien. Podemos utilizar$Growingpara nuestros archivos de registro ya que estan
constantemente creciendo.
El archivo de conguracion de polticas tambien dene algunas variables que son combinaciones de las
conguraciones predeterminadadas anteriores con algunas adiciones o sustracciones, proporcionandonos
un establecimiento rapido para las polticas de diversas clases de archivos.
El siguiente codigo muestra las variables contenidas en el archivo/etc/tripwire/twpol.txt:
@@section GLOBAL
TWBIN = /usr/sbin;
TWETC = /etc/tripwire;
TWVAR = /var/lib/tripwire;
#
# File System Definitions
#
@@section FS
#
# First, some variables to make configuration easier
#
SEC_CRIT = $(IgnoreNone)-SHa ; # Critical files that cannot change
SEC_BIN = $(ReadOnly) ; # Binaries that should not change
SEC_CONFIG = $(Dynamic) ; # Config files that are changed
# infrequently but accessed
# often
SEC_LOG = $(Growing) ; # Files that grow, but that
# should never change ownership
SEC_INVARIANT = +tpug ; # Directories that should never
# change permission or ownership
SIG_LOW = 33 ; # Non-critical files that are of
# minimal security impact
SIG_MED = 66 ; # Non-critical files that are of
# significant security impact
SIG_HI = 100 ; # Critical files that are
# significant points of
# vulnerability
.......................................................................
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 233
Debajo de las mascaras de propiedad, se establecen las polticas para los diversos archivos y directorios
del sistema. Podemos empezar con el archivo de polticas predeterminado y comprobar su funcionamiento.
Hay que tomarse tiempo para examinar a fondo el archivo y comprobar que archivos se estan registrando.
Una vez hecho esto, ya estaremos preparados para ejecutar Tripwire.
Inicializar la base de datos basica
El primer paso en la ejecucion de Tripwire es establecer la base de datos basica, creando as la lista
inicial de rmas frente a las que se deben utilizar las polticas. Recordemos que debemos ejecutar Tripwire,
idealmente, una vez instalado y congurado el sistema; y despues cuando sospechemos que no funcionan
bien algunos archivos en nuestro sistema.
Para establece la base de datos de archivo inicial utilizamos el siguiente comando:
#tripwire -m i -v
El modicador-mespecica el modo a ejecutar, en este casoipara inicializar. El modicador-vle
proporciona una salida por pantalla para que podamos ver lo que esta sucediendo. Tripwire audita todos los
archivos especicados en nuestro archivo de politicas, crea la datos en/var/lib/tripwire/<hotsname>.twd
y lo cifra utilizando la frase de contrase~na desite, especicada anteriormente.
Para que Tripwire sea realmente seguro, debemos hacer una copia de su base de datos basica en algun
medio seguro (disquete, CD o cinta). Si lo guardamos localmente siempre existe la posibilidad de que se
pueda alterar el archivo, aunque Tripwire tiene algunas protecciones contra este tipo de acciones.
Comprobar la integridad del archivo
Es el modo principal de ejecucion en Tripwire una vez se haya congurado. Compara los atributos
actuales de los archivos especicados con los de la base de datos de Tripwire.
El formato es el siguiente:
#tripwire -m c file.txt
Donde debemos reemplazarle.txtcon la ruta de acceso al archivo o a los directorios que deseamos
comprobar. Vericara los atributos de dicho archivo, segun las especicaciones del archivo de polticas y
devolvera un informe con los cambios producidos.
Por ejemplo podramos hacer algo as:
# tripwire -m c /bin/*
Integrity checking objects specified on command line...
Wrote report file: /var/lib/tripwire/report/debian-20050610-210613.twr
Tripwire(R) 2.3.0 Integrity Check Report
Report generated by: root
Report created on: vie 10 jun 2005 21:06:13 CEST
Database last updated on: Never
===============================================================================
Report Summary:
===============================================================================
Host name: debian
Host IP address: Unknown IP
Host ID: None
Policy file used: /etc/tripwire/tw.pol
Configuration file used: /etc/tripwire/tw.cfg
Database file used: /var/lib/tripwire/debian.twd
Command line used: tripwire -m c /bin/arch /bin/bash /bin/cat
/bin/chgrp /bin/chmod /bin/chown /bin/cp /bin/cpio /bin/csh /bin/date /bin/dd
/bin/df /bin/dir /bin/dmesg /bin/dnsdomainname /bin/echo /bin/ed /bin/egrep
/bin/false /bin/fgconsole /bin/fgrep /bin/fuser /bin/grep /bin/gunzip
/bin/gzexe /bin/gzip /bin/hostname /bin/kill /bin/ln /bin/loadkeys /bin/login
/bin/ls /bin/lsmod /bin/lsmod.modutils /bin/lspci /bin/mkdir /bin/mknod
/bin/mktemp /bin/more /bin/mount /bin/mountpoint /bin/mt /bin/mt-gnu /bin/mv
/bin/nano /bin/netstat /bin/pidof /bin/ping /bin/ps /bin/pwd /bin/rbash
/bin/readlink /bin/rm /bin/rmdir /bin/run-parts /bin/sed /bin/setpci
/bin/setserial /bin/sh /bin/sleep /bin/stty /bin/su /bin/sync /bin/tar
/bin/tcsh /bin/tempfile /bin/touch /bin/true /bin/umount /bin/uname
/bin/uncompress /bin/vdir /bin/zcat /bin/zcmp /bin/zdiff /bin/zegrep
/bin/zfgrep /bin/zforce /bin/zgrep /bin/zless /bin/zmore /bin/znew
Jose Antonio Escartn Vigo, Junio 2005.

234 Servidor Linux para conexiones seguras de una LAN a Internet
===============================================================================
Rule Summary:
===============================================================================
-------------------------------------------------------------------------------
Section: Unix File System
-------------------------------------------------------------------------------
Rule Name Severity Level Added Removed Modified
--------- -------------- ----- ------- --------
Root file-system executables 100 0 0 0
(/bin)
Total objects scanned: 82
Total violations found: 0
===============================================================================
Object Summary:
===============================================================================
-------------------------------------------------------------------------------
# Section: Unix File System
-------------------------------------------------------------------------------
No violations.
===============================================================================
Error Report:
===============================================================================
No Errors
-------------------------------------------------------------------------------
*** End of report ***
Tripwire 2.3 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.
Integrity check complete.
Actualizar la base de datos
A medida que ajustamos las polticas y realizamos cambios importantes en el sistema, podremos
actualizar la base de datos para que reeje con precision el estado valido de los archivos. Es importante
no solo que se a~nadan nuevos archivos y directorios a la base de datos sino tambien que se eliminen los
falsos positivos. No se debe actualizar la base de datos si existe alguna posibilidad de que nuestro sistema
haya sido comprometido.
As se invalidaran las rmas y nos aseguraremos de que la base de datos Tripwire es util. Podemos
actualizar los directorios seleccionados despues de todo, algunos elementos como pueden ser los binarios
del sistema, cambiaran en contadas ocasiones.
Para actualizar la base de datos de Tripwire, utilizaremos el siguiente comando:
#tripwire -m u -r path_reporte_anterior
Tendremos que reemplazarpathreporteanteriorcon el nombre y ruta de acceso del archivo de informe
mas reciente. La ejecucion de este comando nos mostrara todos los cambios que se han producido y las
reglas que los detectan.
Tendremos una X en los cuadros de los archivos en los que Tripwire haya detectado cambios. Si deja
ah la X, Tripwire actualizara la rma para dicho archivo cuando salgamos de este. Si elimina la X, Tripwire
supondra que la rma original es la correcta y no la actualizara. Al salir, Tripwire ejecutara dichos cambios.
Tambien, podemos especicar-cen el comando para salir realizando la vista previa y dejar que Tripwire
realice los cambios para los archivos que haya detectado.
Actualizar el archivo de polticas
Con el tiempo nos daremos cuenta que reglas no estan generando alertas validas y necesitaremos eli-
minar o cambiar las mascaras de propiedad. Para ello realizaremos los cambios necesarios en el archivo de
polticas de Tripwire.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 235
Una vez guardados ejecutaremos el comando siguiente, para que Tripwire actualice el archivo de polti-
cas:
#tripwire -m p politica.text
Donde debemos reemplazarpolitica.textcon el nuevo archivo de polticas. Tripwire nos pedira que
introduzcamos la contrase~nalocaly desiteantes de actualizar la poltica. Cuando hayamos ajustado
sucientemente las polticas de Tripwire, podremos crear una tarea que se ejecute diariamente (o con la
frecuencia deseada) para revisar el sistema de archivos en busca de archivos modicados.
13.8. ACIDlab: Analizar alertas IDS
La consola de analisis para bases de datos de alarmas de intrusion (ACID, Analysis Console for In-
trusion Databases) es un programa dise~nado para hacer un mejor uso de los dispositivos de deteccion de
intrusion. Esta es su pagina ocial:
http://acidlab.sourceforge.net/
La idea que se esconde detras de ACID es portar todos los datos de deteccion de intrusion a una
base de datos donde se puedan ordenar y organizar por prioridades. Nos proporciona un panel de control
basado en web para visualizar y manipular estos resultados.
Utiliza cualquier base de datos SQL y cualquier servidor web, admitiendo multiples sensores para los
datos de entrada. Acepta alertas Snort y archivos de registro ajustados a los registros del sistema.
Actualmente, ACID solo funciona directamente con un IDS, Snort, pero podemos importar registros en
la base de datos de ACID desde cualquier dispositivo que produzca una salida en formato tipo archivo de
registro utilizando una utilidad denominadaLogsnorter, que se encuentra disponible en la web de ACID.
Necesitamos cumplir unos requisitos previos para que funcione correctamente: Debemos tener instala-
dos una base de datos, un servidor web y el PHP.
Para instalarlo y hacerlo funcionar con Snort, necesitamos comunicar los dos programas a traves de
una base de datos, por ejemplo MySQL. Instalaremos los siguientes paquetes:
#apt-get install acidlab acidlab-doc acidlab-mysql
Si queremos enlazar Snort a traves de una base de datos MySQL con ACID debemos instalar el paquete:
#apt-get install snort-mysql
Sustituira el antiguo Snort por otro que produzca las salidas en una base de datos MySQL.
Es muy recomendable instalar ACID en una maquina independiente de Snort. Colocarlos en la misma
maquina no solo es poco recomendable desde el punto de vista de la seguridad sino que ademas inundara de
alertas el sensor Snort hasta hacerlo inservible. El host con ACID debe de ubicarse en un sitio donde no
pueda acceder el sensor de Snort.
Conguracion de ACID
Este es el archivo de conguracion del sistema ACIDlab:
/etc/acidlab/acid_conf.php
En la siguiente tabla se puede observar la descripcion de las variables contenidas en el archivo:
Jose Antonio Escartn Vigo, Junio 2005.

236 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 13.8: Variables de conguracion de ACID
Nombre de variable Descripcion
$DBtype Tipo de base de datos ACID que se va a utilizar. El valor predeterminado
esmysql, pero tambien podemos establecerpostgresqlomssql.
$alert_dbname El IDS desde donde se estan obteniendo las alarmas para ACID. Ac-
tualmente solo adminte Snort (snortlog), en el futuro admitira otros
IDS.
$alert_host El host en el que se va a guardar la base de datos de alerta. Puede ser
una direccion IP o un nombre de host. Si se esta ejecutando en la misma
maquina, seralocalhost. Para una mejor seguridad y rendimiento, es
recomendable ejecutar la base de datos en una maquina distinta a la del
servidor web con PHP.
$alert_port Puerto sobre el que se accese a la base de datos. Si es local, solo debemos
introducir \ " para este valor.
$alert_user Nombre de usuario de base de datos que va a utilizar ACID para registrar
los datos. Hay que asegurarse de que coincide con el nombre de usuario
MySQL creado en la conguracion de la base de datos
$alert_password La contrase~na para el usuario de la base de datos. Una vez mas, hay que
asegurarse de que coincide con la contrase~na MySQL para dicho usuario.
$archive_dbname Nombre de la base de datos de Snort. El valor predeterminado es
snortarchive, a no ser que estemos guardando multiples bases de da-
tos en esta maquina y deseemos escribir nombres mas descriptivos
$archive_host Host donde se va a ubicar la base de datos de archivo. Si esta en la
misma maquina debe serlocalhost.
$archive_port Puerto para iniciar la sesion en el servidor de base de datos. Introducimos
\ " si estamos iniciando la sesion localmente.
$archive_user Usuario de base de datos para registrar los datos de archivo. Normalmen-
te es el mismo valor que el de la variable anterior,$alert_user, aunque
se pude crear un usuario independiente para registrar los archivos.
$archive_password Contrase~na para que el usuario de la base de datos registre los datos de
archivo. Como en el caso anterior, el valor suele ser el mismo que el de
$alert_password.
$chartlib_path Ruta de acceso a los modulos de creacion de gracos.
$chart_file_format Formato de archivo de los gracos. El formato predeterminado espng.
Otros formatos validos sonjpgygif.
Ejecucion de ACID
Una vez ajustado el archivo de conguracion nos debemos conectar a la direccion:
http://localhost/acidlab/acid_main.php
Se muestra la pagina de conguracion de ACID. A partir de este momento podremos utilizar la interfaz
web para terminar la conguracion de ACID.
Hacemos clic sobre el botonCreate ACID AGpara crear una base de datos para los datos Snort. El
nombre predeterminado de la base de datos es \snort".
Una vez hecho esto debemos dirigirnos a:
http://localhost/acid
La pagina principal de ACID y para ver la base de datos de Snort.
Una vez hecho esto hemos terminado la conguracion de ACID y podemos empezar a utilizarlo para
administrar el sistema IDS.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 237
Utilizar ACID para ajustar y administrar nuestro NIDS
Antes de que el NIDS sea util debemos ajustarlo a nuestra red para eliminar alertas de falsos positivos.
ACID puede ser una herramienta muy valiosa en esa tarea. Cuando ajustamos por primera vez el NIDS,
todas las rmas de alerta se activaran y nuestra base de datos empezara a rellenarse con actividad de
las alertas. La mayora de estas seran falsos positivos, para que los datos de alerta sean importantes en
nuestra red, tenemos que empezar a eliminar algunas de estas rmas para reducir la actividad erronea y
proporcionar solo los datos procesables.
Cuando tengamos un numero suciente en la base de datos (al menos unas miles de alertas), podemos
empezar a analizar datos y asi eliminar los tipos de alertas que no nos proporcionen informacion.
Si pulsamos Unique Alerts (Alertas unicas) se mostraran las alertas mas recientes clasicadas por tipo
de alerta.
En esta pagina podemos clasicar y ordenar por los siguientes campos:
Nombre de la rma (<Signature>).
Clasicacion de la alerta (<Classification>).
Numero total de este tipo de alertas en la base de datos (<Total#>).
Numero de sensores desde donde proviene la alerta (Sensor#).
Numero de las diferentes direcciones IP de origen asociadas con dicha alerta (<Src. Addr.>).
Numero de las diferentes direcciones IP de destino asociadas con dicha alerta (<Dest. Addr.>).
Hora en la que se ha incluido la alerta (<Firt>y<Last>).
Hay que examinar las listas para averiguar si realmente es un problema de seguridad o un falso positivo:
>Se puede apreciar algun tipo de patron?
>Provienen todas las alertas de la misma direccion IP?
>Se dirigen todas las alertas a la misma direccion IP?
>Se producen a intervalos regulares o lo hacen de forma aleatoria?
Si este analisis no nos conduce a ninguna conclusion, se puede buscar con mas detalle haciendo clic en
las alertas individuales.
Basandose en la IP del emisor, podemos utilizar esta informacion para determinar si se trata de
una direccion que normalmente esta accediendo a nuestra red. Tambien podemos mirar mas abajo para
comprobar la parte util del paquete (Se ve en hexadecimal y ASCII).
Si determinamos que es un ataque al sistema podemos intentar tomar medidas. Normalmente seran
gusanos automatizados, ataque que se produce docenas de veces al dia. Aun as es mejor estar pendiente de
estas alertas para comprobar si la IP persiste. Al menos, podemos asegurarnos de que la maquina atacada
esta protegida contra ese tipo de ataque y enviar una queja al ISP del atacante. Tambien se pueden
ejecutar otras acciones contra la direccion IP que aparece como IP de origen, como una persecucion legal
o una accion civil, si se ha producido con exito la intrusion.
Al menos sabremos exactamente que tipo de ataques se estan produciendo en nuestra red y lo que
estan intentando hacer, As, nuestra red estara mas protegida y podremos reaccionar si se produce un
ataque.
Jose Antonio Escartn Vigo, Junio 2005.

238 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 13.2: Detalle de una alerta ACID
Otras formas de analizar datos de alerta utlizando ACID
Ahora que disponemos de nuestra base de datos llena de alertas, podremos buscar las respuestas a
algunas preguntas que se nos plantean a continuacion.
>Quien es el objetivo del ataque?Al utilizar ACID, buscamos las direcciones IP mas comunes ya que
muestran las direcciones IP que supuestamente son las mas atacadas y, por consiguiente, habra maquinas
sobre las que debemos centrar nuestros esfuerzos de proteccion, algo que nos ayudara a diferenciar entre
los falsos positivos y los positivos reales. Podremos localizar cualquier maquina que este generando un
gran numero de alertas desde una aplicacion que se esta ejecutando.
Un incremento subito en las alertas hacia una direccion IP determinada puede apuntar que se esta
iniciando un ataque sobre dicha maquina. A continuacion, podemos ejecutar escaneres de vulnerabilidad,
comprobar los niveles de seguridad, restringir direcciones de IP origen en el enrutador, etc.
>Quien esta atacando?Buscamos la direccion de origen IP que aparece con mas frecuencia. Para ello
nos debemos dirigir a la lista IP de origen; as podremos ver la IP y el nombre de dominio totalmente
calicado (FQDN, Fully Qualied Domain Name) que indica de donde proviene el ataque. La ordenacion
por el numero de alertas permite ver a los peores atacantes, segun la generacion de alertas. Si las direcciones
IP con la mayora de las alertas estan en nuestra red, puede existir un culpable interno o una aplicacion
que este activando una alerta.
Utilizamos el proceso analizado anteriormente para llegar al detalle de la alerta. Si provienen de
direcciones IP externas, tendremos que determinar si se trata de un enlace de traco legtimo de nuestra
red o son ataques reales. Buscamos en las alertas individuales para comprobar lo que esta pasando. Al
hacer clic en la direccion se abre una pagina con informacion adicional sobre la direccion y algunas opciones
para analizarla con mas detalle.
Analizando esas salidas podremos encontrar que organizacion es propietaria de dichas IP. Y podremos
registrar una queja en su centro de operaciones. As mismo, si comprobamos que determinadas direcciones
aparecen una y otra vez, podremos ltrar estas direcciones IP en nuestro cortafuegos.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 239
>Cual es el servicio mas atacado?Al buscar los puertos mas comunes en los que las alertas se estan
recibiendo podemos comprobar cuales son los servicios mas atacados. Si comprobamos que hay muchas
alertas basadas en web, deberemos de tener mas cuidado en el bloqueo de servidores web.
Si las alertas muestran mucha actividad NetBIOS de Windows, tendremos que mirar las polticas de
contrase~nas y permisos de Windows. As podremos saber cuales son los servicios en los que debemos
centrar primero nuestra atencion.
Mantener la base de datos ACID
A medida que crece nuestra base de datos, tendremos que ejecutar algun tipo de tarea de manteni-
miento periodico, para evitar que se haga demasiado grande. As mismo, nuestras estadsticas y gracos
seran mas precisos si archivamos nuestras primeras alertas, que van a contener muchos falsos positivos.
As mismo, la limpieza de nuestra base de datos de vez en cuando agilizara el proceso de consultas. Para
archivar las alertas, utilizamos el control de consulta que se encuentra en la parte inferior de la pantalla
principal. Podemos crear una consulta para las alertas que se desea archivar, por ejemplo, todas las aler-
tas generadas el ultimo a~no. Despues seleccionamosArchive Alerts(Archivar alertas) como accion para
la consulta. Podemos archivar alertas seleccionando por dato, alerta u otros criterios. Tambien podemos
elegir simplemente copiar las alerta en un archivo o eliminarlas. Las alertas archivadas se situaran en la
propia base de datos, con el nombre establecido en el archivoacidconf.phpdurante la conguracion.
Debemos archivar todas las alertas desde los primeros meses de funcionamiento cuando estabamos
ajustando el sensor de Snort. A partir de ahora, los datos seran mas importantes para los ataques reales
frente a los falsos positivos. Es recomendable archivar al menos una vez al a~no o quiza trimestralmente,
dependiendo del volumen de alertas que se esten registrando. Como regla general, no es recomendable
tener mas de 100.000 alertas en la base de datos.
13.9. Logcheck: Analizar logs
Leer los logs, de nuestro sistemas es una tarea pesada y requiere bastante tiempo. Si tenemos bastante
trabajo como administradores de sistemas, es probable que pasemos das o semanas sin mirarlos. Debido a
esto, no sabemos que oscuras criaturas pueden estar penetrando nuestro sistema. Ademas, cuando leemos
logs la proporcion de informacion util respecto a la inutil es alarmantemente baja . . .
Se hace necesario disponer de una herramienta que analize automaticamente esa informacion y solo
extraiga las partes interesantes de esos logs. Haciendolos mucho mas faciles de consultar y, sobre todo,
leer.
Logcheck revisa periodicamente los logs del sistema , analizando y clasicando cada lnea y segun dife-
rentes niveles de alerta. Reportandolo al administrador del sistema en un formato facil de leer, descartando
las lneas que no tengan relevancia. Normalmente estos datos son enviados por correo.
Logcheck chequeara cada lnea frente a cuatro niveles de seguridad: Ignorar, actividad inusual, viola-
cion de seguridad y ataque.
Para instalar el programa necesitaremos hacer un apt:
#apt-get install logcheck
Logcheck opera encontrando expresiones regulares. Itera sobre cada uno de los archivos de log tres
veces (para localizar mensajes inusuales, violaciones de seguridad y alertas de ataque) utilizandoegrep
para buscar los patrones. Podemos consultar el manual deegreppara poder construir reglas mas potentes.
Archivos que utiliza Logcheck
Al instalar Logcheck nos encontramos en el sistema los siguientes archivos:
logcheck.sh: Es el programa que se ejecutara cada vez que sea invocado logcheck. Es un script en
shell normal, e incluye la conguracion en un formato facil de comprender.
Jose Antonio Escartn Vigo, Junio 2005.

240 Servidor Linux para conexiones seguras de una LAN a Internet
logcheck.hacking: Tiene la lista de cadenas con las que una lnea sera identicada como intento de
entrar al sistema o de conseguir informacion acerca de el, y por tanto seran reportadas como ataques
activos, llamando la atencion de manera especial al administrador.
logcheck.ignore: Tiene la lista de expresiones que son muy comunes y no vale la pena reportarlas al
administrador.
logcheck.violations: Tiene la lista de expresiones que pueden ser consideradas moderadamente peli-
grosas, y son etiquetadas como violaciones de seguridad.
logcheck.violations.ignore: Permite ser mas especco: Si una lnea concuerda con una de las expre-
siones de logcheck.violations pero tambien concuerda con una de este archivo, la lnea es ignorada.
tmp: Es el directorio temporal utilizado por el programa para procesar los datos.
Ademas de estos archivos, logcheck instala el programalogtailen/usr/local/bin. Este programa man-
tiene la informacion de que logs han sido analizados y hasta que punto, para no perder ni repetir lneas.
Logcheck por defecto analizara los archivos/var/log/messages,/var/log/securey/var/log/maillog.
Opciones de logcheck.sh
En el archivo logcheck.sh encontraremos las siguientes opciones de conguracion:
PATH: Indica donde buscara el sistema los binarios. Debemos recordar que se ejecutara con una
llamada desde cron, por lo que no hace da~no denirlo, y tal vez limitarlo al mnimo necesario.
SYSADMIN: Es la persona que recibira el reporte por correo. Si no lleva una direccion completa,
asume que es una direccion local.
LOGTAIL: Indica el path completo para el programa logtail.
TMPDIR: Especica el directorio temporal que usara el programa. Este debe ser un directorio
seguro, que no tenga acceso de escritura mas que para el usuario que ejecute Logcheck.
GREP: Indica el nombre del comando grep a ejecutar. En muchos sistemas Unix hay diferentes grep
con diferentes caractersticas, sugerimos instalar el egrep de GNU.
MAIL: Es el comando empleado para mandar un correo. Tpicamente seramail, aunque en algunos
sistemas puede sermailx.
HACKINGFILE: Es el pathname y nombre completo del archivo logcheck.hacking
VIOLATIONSFILE: Es el pathname y nombre del archivo logcheck.violations
VIOLATIONSIGNOREFILE: Es el pathname y nombre del archivo logcheck.violations.ignore
IGNOREFILE: Es el pathname y nombre completo del archivo logcheck.ignore
Ejecucion de logcheck.sh
Logcheck no es un programa que funcione continuamente, sino que es llamado cada vez que el admi-
nistrador lo cree adecuado. Como cada reporte sera enviado por correo, lo mas comun es hacerlo cada
hora. Para ello es necesario crear una entrada en el crontab de root o de algun usuario que tenga permiso
de leer los archivos localizados en/var/log.
La lnea a ser agregada en el crontab sera similar a la siguiente:
0 * * * * /bin/sh /usr/local/etc/logcheck.sh
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 241
Con esto, cada hora el administrador recibira un mensaje similar al siguiente:
From [email protected] Wed Sep 27 21:46:33 2000
Date: Wed, 27 Sep 2000 19:00:04 -0500
From: root <[email protected]>
To: [email protected]
Subject: hostname.dominio.com 09/27/00:19.00 system check
Security Violations
=-=-=-=-=-=-=-=-=-=
Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service
Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0)
Sep 27 18:23:11 hostname sshd[14075]: log: Password authentication for root accepted.
Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as 'root' from hostname2.dominio.com
Sep 27 18:23:43 hostname PAM_pwdb[14075]: (ssh) session closed for user root
Unusual System Events
=-=-=-=-=-=-=-=-=-=-=
Sep 27 18:02:26 hostname proftpd[13963]: hostname.dominio.com (lab1-15.dominio.com [192.168.1.16]) - FTP no transfer timeout, disconnected.
Sep 27 18:14:40 hostname proftpd[14030]: hostname.dominio.com (lab1-15.dominio.com [192.168.1.16]) - FTP no transfer timeout, disconnected.
Sep 27 18:22:19 hostname proftpd[13875]: hostname.dominio.com (lab2-21.dominio.com [192.168.2.21]) - FTP no transfer timeout, disconnected.
Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service
Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0)
Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as 'root' from dir-03.dominio.com
Sep 27 18:00:12 hostname sendmail[13610]: RAB13605: SAA13610: DSN: Host unknown (Name server: mail.internet.com: host not found)
En caso de haberse registrado algun evento que concuerde con alguna lnea delogcheck.hacking, para
que el reporte sea visto mas rapidamente por el administrador cambiaran los encabezados, quedando as:
From [email protected] Wed Sep 27 21:52:58 2000
Date: Wed, 27 Sep 2000 21:00:05 -0500
From: root <[email protected]>
To: [email protected]
Subject: hostname.dominio.com 09/27/00:21.00 ACTIVE SYSTEM ATTACK!
Active System Attack Alerts
=-=-=-=-=-=-=-=-=-=-=-=-=-=
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.0.111 to TCP port: 1019
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.0.111 has been blocked via wrappers with string: "ALL: 192.168.0.111"
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.0.111 has been blocked via dropped route command: "/sbin/iptables -I input -s 192.168.0.111 -j DENY -l"
(...)
Security Violations
=-=-=-=-=-=-=-=-=-=
Sep 27 20:09:19 hostname PAM_pwdb[14589]: authentication failure; (uid=0) -> root for ssh service
Sep 27 20:09:22 hostname PAM_pwdb[14589]: (ssh) session opened for user root by (uid=0)
Sep 27 20:09:22 hostname sshd[14589]: log: Password authentication for root accepted.
(...)
Unusual System Events
=-=-=-=-=-=-=-=-=-=-=
Sep 27 20:10:47 hostname sshd[14624]: fatal: Did not receive ident string.
Sep 27 20:19:43 hostname PAM_pwdb[14985]: authentication failure; (uid=0) -> llec for ssh service
Sep 27 20:09:34 hostname in.telnetd[14610]: connect from 192.168.0.111
(...)
Interfaz web para Logchek
Podemos manejar gracamente este util programa desde nuestro Webmin. Para instalar:
#apt-get install sentry
El la gura se puede observar que la conguracion de la herramienta se vuelve un juego de ni~nos.
13.10. PortSentry: Detectar escaneos de puertos
Cuando un atacante decide probar suerte en nuestro sistema, lo primero que necesita es recopilar cuan-
ta informacion le sea posible acerca de el. Todo puede serle util: Sistema operativo, version, servicios que
ofrecemos, version de los programas que tenemos... Cualquiera de estos datos puede ser suciente para que
su ataque sea exitoso. Basta con que el atacante vea, por ejemplo, que tenemos una version vieja de un
programa, aunque no tenga este ninguna vulnerabilidad importante, para que se de cuenta que no somos
administradores muy cuidadosos y probablemente tengamos otros servicios descuidados.
La manera mas comun en que un atacante va a intentar obtener informacion acerca de nosotros es
el barrido de puertos: Intentar conectarse a cada uno de los puertos que tiene abiertos nuestro servidor,
anotando que es lo que tiene activo y analizando dicha informacion. Una de las herramientas mas comunes
para realizar barridos de puertos es el Nmap (vease seccion 17.2).
Jose Antonio Escartn Vigo, Junio 2005.

242 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 13.3: Modulo Webmin para LogCheck
Tras haber hecho esta prueba, el atacante puede intentar entrar a cada uno de los puertos abiertos,
revisando si encuentra alguna version vieja o vulnerable.
Detectar un barrido de puertos es muy facil: Muchas conexiones casi simultaneas a una gran cantidad
de puertos originadas desde la misma direccion. Si bien los programas barredores se han vuelto muy
sosticados y cada vez es mas difcil detectarlos por diferentes estrategias que emplean (Nmap sabe hacer
desde una sencilla conexion TCP hasta un barrido silencioso con SYN, FIN, Xmas, Null, UDP, paquetes
fragmentados y barridos paralelos de diferentes tipos), el principio basico es el mismo.
Hay un excelente programa dedicado precisamente a encontrar este patron y tomar la accion que le
indique el administrador del sistema: Portsentry.
Para instalar el programa necesitaremos hacer un apt:
#apt-get install portsentry
Portsentry es un programa muy sencillo. Su mision es \sentarse y escuchar" en los puertos que le
indiquemos que deben permanecer siempre inactivos. En caso de llegar una conexion a uno de ellos puede
marcarlo en los logs del sistema, bloquear toda la comunicacion con la direccion identicada como agre-
sora, o ejecutar un comando externo.
El archivo de conguracion de PortSentry es:
/etc/portsentry/portsentry.conf
El programa tiene varios modos de operacion:
Modo clasico
Modo stealth
Modo avanzado
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 243
Modo clasico
En este modo, le especicamos a Portsentry que escuche determinados puertos TCP y UDP, especi-
cados con las opciones UDPPORTS y TCPPORTS y por los cuales no estamos dando ningun servicio.
Por ejemplo, puede que nuestro servidor no este dando servicio de red SMB (Samba, red tipo Microsoft).
Sin embargo, es comun que las computadoras windows manden mensajes broadcast buscando a un sistema
en especco, con lo que podramos recibir una gran cantidad de alertas falsas. Vienen varios puertos
predenidos en el archivo de conguracion, y es recomendable utilizarlos inicialmente.
Modo stealth
En este modo Portsentry abre sockets crudos, lo que le permite detectar una mayor cantidad de barridos
y ataques: Ataques de conexion normal, SYN/half-open, FIN, NULL y XMAS. Este modo es un tanto
experimental, por lo cual no funcionara en todos los sistemas.
Modo avanzado
Este modo es tambien considerado hasta cierto punto perteneciente a la categora stealth. En este modo,
Portsentry no abre ningun puerto, sino que le pide al kernel que le notique si llega alguna peticion a algun
puerto menor al especicado en las opciones ADVANCEDPORTSTCP y ADVANCED PORTSUDP.
Tendremos que excluir algunos puertos que sean particularmente ruidosos (como el comentado en
la seccion anterior, SMB) y para ello tenemos las opciones ADVANCEDEXCLUDETCP y ADVAN-
CEDEXCLUDEUDP.
El modo avanzado es mucho mas sensible que el modo clasico, dado que escucha muchos mas puertos,
por lo que puede efectivamente causar una negacion de servicio si no es congurado con cuidado.
Otras opciones de conguracion
Tras haber especicado los puertos que deseamos escuchar, hay algunos parametros adicionales que
debemos especicar:
IGNOREFILE: Es el nombre del archivo que incluye la lista de direcciones en las que conamos y
por tanto no queremos bloquear si intentan acceder a un puerto bloqueado. Por ejemplo, sera muy
molesto que quisieramos ejecutar Nmap contra uno de nuestros servidores para asegurarnos de que
no haya servicios abiertos que no requiramos y que nosotros mismos quedaramos bloqueados.
HISTORYFILE: Contiene la lista de direcciones que Portsentry ha detectado intentando acceder a
puertos monitoreados.
BLOCKEDFILE: Es equivalente a HISTORYFILE, pero relevante unicamente a la sesion actual
de Portsentry.
BLOCKTCP: Especica que hacer cuando un barrido de puertos TCP es detectado. Tiene tres po-
sibles valores: 0 (solo registrar el intento), 1 (bloquear la direccion que intento acceder a la maquina)
y 2 (ejecutar un comando externo especicado en KILLRUNCMD).
BLOCKUDP: Es equivalente a BLOCKTCP para barridos de puertos UDP.
KILLROUTE: Guarda el comando utilizado para descartar toda la comunicacion con una direccion.
En un sistema que incluya un ltro de paquetes (por ejemplo, iptables en Linux o ipf en los *BSD)
es muy preferible manejar una regla bloqueando la conexion.
KILLHOSTSDENY: Tiene la lnea que debera ser agregada a/etc/hosts.denypara que la direccion
atacante sea bloqueada porTCPwrappers. Es conveniente activarlo, pues a diferencia de las reglas
manejadas por KILLROUTE este archivo sobrevivira a la baja del sistema. Pero, no hay que
conarseTCPwrapperssolo maneja determinados servicios, y si solo nos protegemos con el, el sistema
podra seguir proporcionando informacion importante a nuestro atacante.
Jose Antonio Escartn Vigo, Junio 2005.

244 Servidor Linux para conexiones seguras de una LAN a Internet
KILLRUNCMD: Puede guardar un comando a ser ejecutado de ser detectada una intrusion. No
se recomienda utilizar esta opcion, ya que puede facilmente llevar a una negacion de servicio. Hay
administradores que sugieren utilizar esta opcion para lanzar un contraataque contra el atacante.
Nosotros categoricamente les indicamos que esto es una muy mala idea { La mejor defensa es tener
nuestro sistema seguro, no atacar al enemigo. Al atacar al enemigo, lo mas probable es que centre
mas su atencion en nosotros y, con el paso del tiempo, logre penetrar nuestra seguridad. Es mucho
mejor aparentar que nada ocurrio o simplemente tirar la conexion que atacarla.
SCANTRIGGER: Indica con cuantos intentos de conexion se deben realizar, para marcarla como
un ataque. Probablemente, si a la primera bloqueamos toda comunicacion con el presunto atacante,
dejaremos fuera a muchos usuarios legtimos que por casualidad hicieron la conexion equivocada. Sin
embargo, si ponemos un numero muy alto nos exponemos a dar mas informacion de la que hubieramos
querido. Un valor de 1 o 2 es recomendado, aunque los muy paranoicos querran mantenerlo en 0.
Inicializacion automatica
Hay que incluir la ejecucion en uno de los archivos que se ejecutan al iniciar la maquina. Las opciones
que podemos establecer son las siguientes:
Cuadro 13.9: Opciones de PortSentry
Opcion Descripcion
-tcp Iniciar en modo clasico, escuchar TCP
-udp Iniciar en modo clasico, escuchar UDP
-stcp Iniciar en modo stealth, escuchar TCP
-sudp Iniciar en modo stealth, escuchar UDP
-atcp Iniciar en modo avanzado, escuchar TCP
-audp Iniciar en modo avanzado, escuchar UDP
Tpicamente levantaremos dos copias del programa en el mismo modo general, una escuchando UDP
y la otra TCP.
Almacenamiento en los logs del sistema
El simple hecho de que Portsentry evite ciertos ataques al sistema es de por s muy bueno y deseable.
Sin embargo, para que esto nos sea realmente util, tenemos que analizar nuestros logs y llevar registros de
quien y cuando intento se intentaron escanear nuestros puertos. Ademas, solo leyendo los logs sabremos
si estamos limitando de mas, bloqueando el acceso de maquinas legtimas.
Afortunadamente, Portsentry utilizasyslogpara reportar toda la informacion que el administrador
debe saber, por lo cual todo lo que necesitamos estara tpicamente en el archivo/var/log/messages, o
donde se lo hayamos especicado en elsyslogd.conf.
La deteccion de un barrido hecho por Nmap en un sistema Linux se ve as:
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 1019
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.1.3 has been blocked via wrappers with string: "ALL: 192.168.1.3"
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.1.3 has been
blocked via dropped route using command: "/sbin/iptables -I input -s 192.168.1.3 -j DENY -l"
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 70
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 934
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 267
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 202
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 613
(...)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 245
Readmitiendo hosts marcados como atacantes
Cuando conguremos Portsentry es muy comun que marquemos direcciones como atacantes por error.
Eliminarlos de la lista de bloqueo es afortunadamente muy sencillo.
Si asumimos que queremos volver a permitir acceso a la direccion 192.168.1.3. Todo el proceso debe-
remos realizarlo como root.
Nuestro primer paso sera editar el archivo/etc/hosts.denyy buscar la direccion que queremos
eliminar, en nuestro caso la tercera:
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
ALL: 216.98.66.42
ALL: 210.124.182.137
ALL: 192.168.1.3
ALL: 200.36.163.106
ALL: 202.111.97.171
Consultamos la tabla de direcciones ltradas por iptables. El comando iptables-save es de gran utili-
dad para esa tarea, pues muestra las lneas con los comandos que seran necesarios para insertarlas.
# /sbin/iptables-save
:input ACCEPT
:forward ACCEPT
:output ACCEPT
Saving `input'.
-A input -s 216.98.66.42/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
-A input -s 210.124.182.137/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
-A input -s 192.168.1.3/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
-A input -s 200.36.163.106/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
-A input -s 202.111.97.171/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
Una lnea es insertada en iptables con -A, y es eliminada con -D, por lo cual basta con que hagamos:
#iptables -D input -s 192.168.1.3/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l
Con esto, el host con la direccion 192.168.1.3 ya tendra de nuevo acceso a nuestro sistema.
Interfaz web para Portsentry
Podemos manejar gracamente este util programa desde nuestro Webmin. Para instalar:
#apt-get install sentry
El la gura se puede observar que la conguracion de la herramienta se vuelve un juego de ni~nos.
13.11. Detectores de sniers
Un grave problema de nuestra red son las escuchas clandestinas, >como podemos estar seguros que
no hay nadie escuchando nuestras conexiones? Disponemos de varias herramientas para la deteccion de
tarjetas de red en modo promiscuo (sniers), aqu mostraremos las siguientes:
Neped
Sentinel
Estas herramientas, utilizan las siguientes tecnicas para descubrir sniers:
Jose Antonio Escartn Vigo, Junio 2005.

246 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 13.4: Modulo Webmin para Portsentry
El test DNS
En este metodo, la herramienta de deteccion en s misma esta en modo promiscuo. Creamos numerosas
conexiones TCP falsas en nuestro segmento de red, esperando un snier pobremente escrito para atrapar
estas conexiones y resolver la direccion IP de los inexistentes hosts. Algunos sniers realizan busquedas
inversas DNS en los paquetes que capturan. Cuando se realiza una busqueda inversa DNS, una utilidad
de deteccion de sniers \huele" la peticion de las operaciones de busqueda para ver si el objetivo es aquel
que realiza la peticion del host inexistente.
El Test ICMP Etherping
Este metodo confa en un problema en el nucleo de la maquina receptora. Podemos construir una peti-
cion tipo \ICMP ECHO" con la direccion IP de la maquina sospechosa de hospedar un snier. Enviamos
un un paquete \ICMP ECHO" al objetivo con la direccion IP correcta, pero con una direccion de MAC
deliberadamente erronea. La mayora de los sistemas desatenderan este paquete ya que su direccion MAC
es incorrecta. Pero en algunos sistemas Linux, NetBSD y NT, puesto que el NIC esta en modo promis-
cuo, el snier identicara este paquete de la red como paquete legtimo y respondera por consiguiente.
Si el blanco en cuestion responde a nuestra peticion, sabremos que esta en modo promiscuo. Los sniers
avanzados ltran tales paquetes para que parezca que el NIC no hubiera estado en modo promiscuo.
El Test ICMP de latencia
Ping de Latencia. En este metodo, hacemos ping al blanco y anotamos el Round Trip Time (RTT,
retardo de ida y vuelta o tiempo de latencia) Creamos centenares de falsas conexiones TCP en nuestro
segmento de red en un perodo de tiempo muy corto. Esperamos que el snier este procesando estos
paquetes a razon de que el tiempo de latencia incremente. Entonces hacemos ping otra vez, y comparamos
el RTT esta vez con el de la primera vez. Despues de una serie de tests y medias, podemos concluir o no
si un snier esta realmente funcionando en el objetivo.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 247
El test ARP
Podemos enviar una peticion ARP a nuestro objetivo con toda la informacion rapida excepto con una
direccion hardware de destino erronea. Una maquina que no este en modo promiscuo nunca vera este
paquete, puesto que no era destinado a ellos, por lo tanto no contestara. Si una maquina esta en modo
promiscuo, la peticion ARP sera considerada y el nucleo la procesara y contestara. La maquina que
contesta esta en modo promiscuo.
13.11.1. Neped
NePED es una herramienta imprescindible para cualquier administrador de redes. Al ejecutarlo, el
programa nos informara de todos los equipos conectados a nuestra red local con la tarjeta ethernet en
modo promiscuo.
Lo podemos descargar desde su pagina web:
http://apostols.org/projectz/neped/
La forma de uso es muy sencilla:
#neped <dispositivo>
Esto sera un ejemplo de su funcionamiento:
#neped eth0
----------------------------------------------------------
> My HW Addr: 00:00:F4:C2:0E:2A
> My IP Addr: 192.168.0.2
> My NETMASK: 255.255.255.0
> My BROADCAST: 192.168.0.255
----------------------------------------------------------
> Scanning ....
*> Host 192.168.0.3, 00:60:08:64:06:FF **** Promiscuous mode detected !!!
> End.
La tecnica empleada para la deteccion es sumamente sencilla. Se trata de realizar una simple peticion
ARP para cada una de las IPs de nuestra red, con la salvedad de que los paquetes no van destinados
al broadcast (FF:FF:FF:FF:FF:FF), sino a una direccion arbitraria (cualquiera que no exista). Solo las
maquinas con la tarjeta ethernet en modo promiscuo son capaces de ver estos paquetes, y por lo tanto,
solo ellas contestaran a nuestras peticiones.
13.11.2. Sentinel
Lo podemos descargar desde su pagina web:
http://www.packetfactory.net/Projects/sentinel/
Utiliza los metodos de busqueda de snifers:
Test DNS, test ARP, test ICMP Etherping y test ICMP de latencia.
La forma de uso es muy sencilla:
#sentinel <metodo> [-t <ip>] <opciones>
Como metodo de uso podemos especicar uno o varios de los siguentes:
-a: test ARP
-d: test DND
-i: ICMP test ping de latencia
-e: ICMP test etherpingt
Las opciones mas comunes se detallan a continuacion:
Jose Antonio Escartn Vigo, Junio 2005.

248 Servidor Linux para conexiones seguras de una LAN a Internet
-f <nombre>: Donde nombre representa, un chero o una IP
-c <x.x.x>:Clase Ca monitorizar
-n <n\'umero de paquetes a enviar>
-I <dispositivo>
Y estos seran algunos posibles ejemplos de uso de Sentinel:
Test ARP en el host 192.168.0.2
#sentinel -a -t 192.168.0.2
Test DNS en el host 192.168.0.2
#sentinel -d -f 1.1.1.1 -t 192.168.0.2
Escanear una red deClase C(192.168.0) usando el test ARP, DNS y test etherping
#sentinel -aed -c 192.168.0
13.12. Chkrootkit: Detector de rootkits
Chkrootkit es un shell script que busca en nuestro sistema binarios modicados porRootKits, estos
son usados por los piratas informaticos para comprometer sistemas.
Para instalarlo solo hay que realizar un apt:
#apt-get install chkrootkit
Los piratas informaticos, suelen camuar o sustituir algunos cheros binarios del sistema por sus pro-
pios cheros, algunos de los ejemplos tpicos son:login, su, telnet, netstat, ifcong, ls, nd, du, df, libc,
sync, asi como los binarios listados en/etc/inetd.conf.
Este programa nos ayuda a vericar que tenemos la version original de estos cheros, en la ultima
version disponible detecta troyanos en los siguientes cheros:
aliens, asp, bindshell, lkm, rexedcs, snier, wted, z2, amd, basename, bi, chfn, chsh, cron, date, du,
dirname, echo, egrep, env, nd, ngerd, gpm, grep, hdparm, su, ifcong, inetd, inetdconf, identd, killall,
login, ls, mail, mingetty, netstat, named, passwd, pidof, pop2, pop3, ps, pstree, rpcinfo, rlogind, rshd, slo-
gin, sendmail, sshd, syslogd, tar, tcpd, top, telnetd, timed, traceroute, write.
Tambien es capaz de detectar los siguientesRootKits:
Solaris rootkit, FreeBSD rootkit, lrk3, lrk4, lrk5, lrk6, t0rn (and t0rn v8), some lrk variants, Ambient's
Rootkit for Linux (ARK), Ramen Worm, rh[67]-shaper, RSHA, Romanian rootkit, RK17, Lion Worm,
Adore Worm, LPD Worm, kenny-rk, LKM, ShitC Worm, Omega Worm, Wormkit Worm, dsc-rootkit.
Al ser un shell scrip una vez compilados los programas (chkwtmp, chklastlog, chkproc, chkwtmp, ifpro-
misc) utilizaran elchkrootkitpara realizar parte de su trabajo.
En el sistema que he utilizado para el proyecto provoca la siguiente salida:
# chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not infected
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 249
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not found
Checking `grep'... not infected
Checking `hdparm'... not infected
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not infected
Checking `inetdconf'... not infected
Checking `identd'... not found
Checking `init'... not infected
Checking `killall'... not infected
Checking `ldsopreload'... not infected
Checking `login'... not infected
Checking `ls'... not infected
Checking `lsof'... not infected
Checking `mail'... not infected
Checking `mingetty'... not found
Checking `netstat'... not infected
Checking `named'... not found
Checking `passwd'... not infected
Checking `pidof'... not infected
Checking `pop2'... not found
Checking `pop3'... not found
Checking `ps'... not infected
Checking `pstree'... not infected
Checking `rpcinfo'... not infected
Checking `rlogind'... not found
Checking `rshd'... not found
Checking `slogin'... not infected
Checking `sendmail'... not infected
Checking `sshd'... not infected
Checking `syslogd'... not infected
Checking `tar'... not infected
Checking `tcpd'... not infected
Checking `tcpdump'... not infected
Checking `top'... not infected
Checking `telnetd'... not found
Checking `timed'... not found
Checking `traceroute'... not infected
Checking `vdir'... not infected
Checking `w'... not infected
Checking `write'... not infected
Checking `aliens'... no suspect files
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while... /usr/lib/mozilla-firefox/.autoreg /usr/lib/kaffe/.system
Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
Searching for MonKit... nothing found
Searching for Showtee... nothing found
Searching for OpticKit... nothing found
Searching for T.R.K... nothing found
Searching for Mithra... nothing found
Searching for OBSD rk v1... nothing found
Searching for LOC rootkit... nothing found
Searching for Romanian rootkit... nothing found
Searching for Suckit rootkit... nothing found
Searching for Volc rootkit... nothing found
Searching for Gold2 rootkit... nothing found
Searching for TC2 Worm default files and dirs... nothing found
Searching for Anonoying rootkit default files and dirs... nothing found
Searching for ZK rootkit default files and dirs... nothing found
Searching for ShKit rootkit default files and dirs... nothing found
Searching for AjaKit rootkit default files and dirs... nothing found
Searching for zaRwT rootkit default files and dirs... nothing found
Searching for Madalin rootkit default files... nothing found
Searching for anomalies in shell history files... nothing found
Checking `asp'... not infected
Checking `bindshell'... not infected
Checking `lkm'... You have 2 process hidden for readdir command
You have 2 process hidden for ps command
Warning: Possible LKM Trojan installed
Checking `rexedcs'... not found
Checking `sniffer'... lo: not promisc and no packet sniffer sockets
eth0: PACKET SNIFFER(/sbin/dhclient[3930], /usr/sbin/snort[4577])
Checking `w55808'... not infected
Checking `wted'... nothing deleted
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... nothing deleted
Vaya!, parece que ha detectado un archivo sospechoso, un posible troyano y que Snort esta instalado.
Jose Antonio Escartn Vigo, Junio 2005.

250 Servidor Linux para conexiones seguras de una LAN a Internet
13.13. HoneyPots: Entretener a los atacantes
Informacion obtenida de la web: http://www.xombra.com
El papel de la tecnologa del sistema de deteccion de intrusos basado en se~nuelos (o \honeypots")
esta evolucionando. Los honeypots, que alguna vez fueron utilizados, principalmente por los investiga-
dores, como una forma de atraer a los intrusos a un sistema de redes para estudiar sus movimientos y
comportamiento, estan adquiriendo una importancia cada vez mayor en la seguridad empresarial. En efec-
to, al brindar deteccion temprana de actividad no autorizada en las redes, los honeypots son ahora mas
utiles que nunca para los profesionales de la seguridad informatica. Aqu se analiza el funcionamiento de
los honeypots y su tecnologa, que se esta convirtiendo en el componente clave del sistema de capas de
proteccion contra intrusos.
Los honeypots son una emocionante tecnologa nueva, con un enorme potencial para la comunidad
informatica. Los primeros conceptos fueron introducidos primeramente por varios iconos en la seguridad
informatica, especialmente por Cli Stoll en el libro \The Cuckoo's Egg" y el trabajo de Bill Cheswick
\An Evening with Berferd". Desde entonces, han estado en una continua evolucion, convirtiendose en la
poderosa herramienta de seguridad que es hoy en da. En esta seccion se detalla exactamente: que son los
honeypots, sus ventajas y desventajas, y su importancia en la seguridad.
Los Honeypots (o tarros de miel)\Consisten en activar un servidor y llenarlo de archivos tentadores,
hacer que sea difcil, pero no imposible penetrarlo y sentarse a esperar que aparezcan los intrusos. Los ho-
neynets (conjuntos de honeypots) dan a los crackers un gran espacio para recorrer. Presentan obstaculos
que poseen el nivel de complejidad suciente para atraerlos, pero sin irse al extremo para no desalentar-
los. . . Juegan con los archivos y conversan animadamente entre ellos sobre todos los fascinantes programas
que encuentran, mientras el personal de seguridad observa con deleite cada movimiento que hacen. Fran-
camente, siento una combinacion de sentimientos con respecto a espiar a la gente, aunque no sean buenas
personas".Dan Adams.
Loshoneynetsson conjuntos de Honeypots, compuestos por servicios reales, as se abarca mas informa-
cion para el estudio. Hacen mas fascinante el ataque al intruso, lo cual incrementa el numero de ataques.
La funcion principal a parte de la de estudiar las herramientas de ataque, es la de desviar la atencion del
atacante de la red real del sistema y la de capturar nuevos virus o gusanos para su posterior analisis. Una
de las multiples aplicaciones que tiene es la de poder formar perles de atacantes y ataques.
Son sistemas que deliberadamente se decide exponerlos a ser atacados o comprometidos. Estos, no
solucionan ningun problema de seguridad, son una herramienta que nos sirve para conocer las estrategias
que se emplean a la hora de vulnerar un sistema. Son una herramienta muy util a la hora de conocer
de forma precisa los ataques que se realizan contra la plataforma de trabajo que hemos elegido, o bien,
las plataformas conguradas de la misma forma, con el claro objetivo de acceder a informacion sensible.
As mismo nos permiten conocer nuevas vulnerabilidades y riesgos de los distintos sistemas operativos,
entornos y programas, los cuales aun no se encuentren debidamente documentados.
En general, existen dos tipos de honeypots:
Honeypots para la investigacion: Gran parte de la atencion actual se centra en este tipo. Los ho-
neypots para la investigacion, que se utilizan para recolectar informacion sobre las acciones de los
intrusos. El proyectoHoneynet
1
, por ejemplo, es una organizacion para la investigacion sobre segu-
ridad voluntaria, sin animo de lucro que utiliza los honeypots para recolectar informacion sobre las
amenazas del ciberespacio.
Honeypots para la produccion: Son los que se utilizan para proteger a las organizaciones. Sin embargo,
se les concede cada vez mas importancia debido a las herramientas de deteccion que pueden brindar
y por la forma como pueden complementar la proteccion en la red y en los hosts.
1
Proyecto Honeynet en castellano: http://his.sourceforge.net/trad/honeynet/
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 251
13.13.1. >Como funcionan?
Los honeypots tambien se pueden describir como de alta o baja interaccion, distincion que se basa en
el nivel de actividad que permiten al atacante. Un sistema de baja interaccion ofrece actividad limitada,
la mayora de las veces emula los servicios y sistemas operativos. Las principales ventajas de los honeypots
de baja interaccion es que son relativamente faciles de instalar y mantener; tambien implican un riesgo
mnimo porque el atacante nunca tiene acceso a un sistema operativo real para perjudicar a otros sistemas.
Honeyd (vease seccion 13.13.7) es un ejemplo de honeypot de baja interaccion, cuya funcion principal
es monitorear el espacio de direcciones IP no utilizado. Cuando Honeyd detecta un intento de conectarse
a un sistema que no existe, intercepta la conexion, interactua con el atacante ngiendo ser la vctima para
captar y registrar al ataque.
Por el contrario, los honeypots de alta interaccion utilizan sistemas operativos reales y aplicaciones rea-
les, no emulan nada. Al ofrecerles a los atacantes sistemas reales para que interactuen, se puede aprender
mucho sobre su comportamiento. Los honeypots de alta interaccion no imaginan como se comportara un
atacante y proporcionan un ambiente que rastrea todas las actividades, lo que permite conocer un com-
portamiento al que de otra manera no tendran acceso.
Los sistemas de alta interaccion tambien son exibles y los profesionales de la seguridad informatica
pueden implementarlos en la medida que quieran. Ademas, este tipo de honeypot proporciona un objetivo
mas realista, capaz de detectar atacantes de mayor calibre. Pueden ser complejos de instalar, sin embargo,
requieren que se implementen tecnologas adicionales para evitar que los atacantes los utilicen para lanzar
ataques a otros sistemas.
13.13.2. Ventajas y desventajas
Los honeypots son un concepto increblemente simple, las cuales ofrecen una fortaleza muy poderosa.
Podemos observar sus ventajas en los siguientes puntos:
Obtienen un conjunto de datos peque~nos, pero de gran importancia: Los Honeypots recolectan
peque~nas cantidades de informacion. En lugar de logear 1 Gb por da, logean solo 1 Mb de datos por
da. En vez de generar 10.000 alertas por da, pueden generar solo 10 alertas por da. Recordemos
que los honeypots solo capturan actividad sospechosa ya que cualquier interaccion con un honeypot
es muy probablemente actividad no autorizada o una actividad maliciosa. Propiamente dicho, los
honeypots reducen el uido" recogiendo solo los datos indispensables y de gran valor, los producidos
unicamente por \chicos malos". Esto signica que es mucho mas facil (y barato) de analizar los datos
que un honeypot recoge.
Nuevas herramientas y tacticas: Los honeypots son dise~nados para capturar cualquier cosa que
interactua con ellos, incluyendo herramientas o tacticas nunca vistas.
Mnimos recursos: Los honeypots requieren mnimos recursos, solo capturan actividad irregular. Esto
signica que un viejo Pentium con 128 mb de RAM puede manejar facilmente una entera red de
clase B entera.
Encriptacion en IPv6: A diferencia de la mayora de las tecnologas para la seguridad, como los
sistemas IDS, honeypots trabajan bien en entornos encriptados como IPv6. No importa lo que los
\chicos malos" lancen hacia el honeypot, el honeypot lo detectara y lo capturara.
Informacion: Los honeypots pueden recoger informacion \en profundidad" como pocos, si es que
existen tecnologas que se le parezcan.
Simplicidad: Finalmente, los honeypots son conceptualmente simples. No hay por que desarrollar
algoritmos raros, ni complejas tablas que mantener, o rmas que actualizar. Mientras mas simple
sea la tecnologa, menos posibilidades de errores o desconguraciones habra.
Jose Antonio Escartn Vigo, Junio 2005.

252 Servidor Linux para conexiones seguras de una LAN a Internet
Como en cualquier otra tecnologa, los honeypots tambien tienen su debilidad. Esto es debido a que
no reemplaza a la actual tecnologa, sino que trabaja con las existentes.
Vision Limitada: Los honeypots pueden solo rastrear y capturar actividad que interactuen directa-
mente con ellos. Los Honeypots no podran capturar ataques a otros sistemas vecinos, al menos que
el atacante o la amenaza interactue con el honeypot al mismo tiempo.
Riesgo: Todas las tecnologas de seguridad tienen un riesgo. Los rewalls tienen el riesgo de que sean
penetrados, la encriptacion tiene el riesgo de que los algoritmos sean rotos, los sensores IDS tienen el
riesgo de que fallen al detectar ataques. Los Honeypots no son diferentes, tienen un riesgo tambien.
Especcamente, los honeypots tienen el riesgo de que sean apoderados y controlados por los \chicos
malos" y que lo utilicen para da~nar otros sistemas. El riesgo es variado para los diferentes honeypots.
Dependiendo del tipo de honeypots puede haber un riesgo, equivalente a un fallo del sensor IDS,
mientras que en otros honeypots puede que haya que enfrentarse a una situacion crtica.
13.13.3. Utilidades de honeypots
Cuando son utilizados con propositos productivos, los honeypots estan protegiendo la organizacion.
En este mundo se incluye, prevencion, deteccion y respuesta a un ataque.
Cuando son utilizados con propositos de investigacion, los honeypots son utilizados para recolectar
informacion. La importancia de esta informacion depende segun las organizaciones. Algunas organizacio-
nes querran estudiar la tendencia de las actividades intrusivas, mientras otras estaran interesadas en la
prediccion y prevencion anticipada, o las fuerzas legales.
En general, honeypots de baja interaccion son utilizados con propositos productivos, mientras ho-
neypots de alta interaccion son utilizados con propositos de investigacion. Sin embargo, los dos tipos de
honeypots pueden funcionar para ambos propositos.
Los honeypots pueden ayudar a prevenir ataques en varias formas. El primero es contra ataques au-
tomatizados, como los gusanos. Estos ataques son basados en herramientas que aleatoriamente escanean
redes enteras buscando sistemas vulnerables. Si un sistema vulnerable es encontrado, estas herramientas
automatizadas atacaran y tomaran el sistema (con gusanos que se replican en la vctima). Uno de las
metodos para protejer de tales ataques es bajando la velocidad de su escaneo y potencialmente detenerlos.
Llamados \sticky honeypots" (Tarros de miel \pegajosos"), estas soluciones monitorean el espacio IP no
utilizado. Cuando los sistemas son escaneados, estos honeypots interactuan con el y disminuyen la velo-
cidad del ataque. Hacen esto utilizando una variedad de trucos TCP, como poniendo el \Window size" a
cero o poniendo al atacante en un estado de espera continua.

Esto es excelente para bajar la velocidad o
para prevenir la diseminacion de gusanos que han penetrado en la red interna. Un ejemplo de un sticky
honeypot es:LaBrea Tarpit. Los \honeypots pegajosos" son mas comunes encontrarlos entre soluciones de
baja interaccion (hasta podra llamarsele soluciones o interactivas", ya que reducen tanto la velocidad
que hacen \gatear" al atacante. Los Honeypots pueden tambien protejer nuestra organizacion de intrusos
humanos. Este concepto se conoce como enga~no o disuacion. La idea es confundir al atacante, hacerle
perder el tiempo y recursos interactuando con honeypots. Mientras tanto, detectaremos la actividad del
atacante y tendremos tiempo para reaccionar y detener el ataque. Hasta se puede dar un paso mas alla: si
un atacante sabe que nuestra organizacion esta utilizando honeypots pero no sabe cuales son los sistemas
honeypots y cuales son sistemas legtimos, quizas tenga miedo de ser capturado por honeypots y decida
no atacarlo. Por lo tanto, honeypots disuaden al atacante. Un ejemplo de honeypot dise~nado para hacer
esto, es elDeception Toolkit, un honeypot de baja interaccion.
La segunda forma por la cual honeypots pueden ayudar a protejer una organizacion es por medio de
la deteccion. La deteccion es crtica, su proposito es la identicacion de fallos para para la prevencion. No
importa cuan segura sea nuestra organizacion, siempre habran fallos si los hombres estan involucrados en
el proceso... Detectando al atacante, podran rapidamente reaccionar ante ellos, deteniendolos, o mitigando
el da~no que hicieron. Tradicionalmente, la deteccion ha sido extremadamente dicil de hacer. Tecnologas
como sensores IDS y sistemas de logueo han sido inefectivos por diversas razones: Generan muchos datos,
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 253
grandes porcentajes de falsos positivos, inhabilidad de detectar nuevos ataques, y la inhabilidad de tra-
bajar en forma encriptada o en entornos IPv6. Los Honeypots son excelentes en deteccion, solventando
muchos de los problemas de la deteccion clasica. Los honeypots reducen los falsos positivos, capturando
peque~nas cantidades de datos de gran importancia, capturan ataques desconocidos como nuevosexploits
oshellcodes polimorcos, y trabajan en forma encriptada o en entornos IPv6. En general, honeypots de
baja interaccion son la mejor solucion para la deteccion y tienen un riesgo limitado.
La forma tercera y nal por la cual honeypots nos pueden ayudar a protejer una organizacion es en la
respuesta. Una vez que una organizacion detecta un fallo, >como debe responder? Esto es a menudo uno
de los grandes retos a los que nos debemos enfrentar. Hay por lo general poca informacion acerca de quien
es el atacante, como ingreso al sistema o cuanto da~no hizo. En estas situaciones, la informacion detallada
acerca a las actividades del atacante son cruciales.
Hay dos problemas que afectan a la respuesta al incidente: el primero, a menudo los sistemas com-
prometidos no pueden ser desconectados de la red para ser analizados. Sistemas de produccion, como el
servidor de correo de una organizacion, son tan crticos que aunque esten compremetidos los administra-
dores no pueden desconectarlos y hacer un analisis forense como corresponde. Estan limitados a analizar
el sistema encendido mientras sigue proveyendo sus servicios productivos. Esto merma la habilidad para
analizar que sucedio, cuanto da~no hizo el atacante, e incluso si el atacante accedio a otros sistemas de la
red. El otro problema es que incluso en el caso de que este desconectado, hay tanta polucion de datos que
es muy difcil determinar que es lo que hizo el \chico malo". Con polucion de datos me reero que hay
tanta actividad (logeo de usuarios, lecturas de cuentas de mail, archivos escritos a bases de datos, etc. . . )
que puede ser difcil determinar cual es la actividad normal del da a da y que es lo que hizo el atacante.
Los Honeypots pueden ayudar a solventar ambos problemas. Honeypots son un excelente herramienta de
incidencias ya que pueden rapidamente y facilmente ser sacados de la red para un analisis forense comple-
to, sin el impacto en las operaciones empresariales de todos los das. Recuerden que la unica actividad que
guardan los honeypots son las relacionadas con el atacante, ya que no las utilizan nadie (son se~nuelos),
excepto los atacantes. La importancia de los honeypots aqu es la rapida entrega de la informacion, ana-
lizada en profundidad, para responder rapida y ecientemente a un incidente. En general, los honeypots
de alta interaccion son la mejor solucion para la respuesta. Para reaccionar ante un intruso, se necesita
conocimientos en profundidad sobre que hicieron, como ingresaron, y que herramientas utilizaron.
13.13.4. Tipos de honeypots
Los honeypots vienen con diversidad de colores y gustos, haciendo difcil su comprension. Para ayudar-
nos a entender mejor a los honeypots y a todos los diferentes tipos, dividiremos a dos categoras generales:
honeypots de aja interaccion" y de \alta interaccion". Estas categoras nos ayudan a entender con
que tipo de honeypots estamos trabajando, sus fortalezas y debilidades. La interaccion dene el nivel
de actividad que un honeypot le permite tener un atacante. Los honeypots de baja interaccion tienen
una interaccion limitada, normalmente trabajan unicamente emulando servicios y sistemas operativos. La
actividad del atacante se encuentra limitada al nivel de emulacion del honeypot. Por ejemplo, un servicio
FTP emulado escuchando en el puerto 21 probablemente estara emulando un login FTP o probablemente
suportara algunos comandos FTP adicionales. Las ventajas de un honeypot de baja interaccion es su
simplicidad, estos honeypots tienden a ser faciles de utilizar y mantener con un riesgo mnimo.
Por lo general es instalar un software, elegir el sistema operativo y el servicio a emular y monitorear,
y dejar que el programa camine por s solo desde ah . . . Este proceso cercano al \plug and play" hace
que la utilizacion de estos sea muy facil. Incluso, los servicios emulados mitigan el riesgo conteniendo la
actividad del intruso, que nunca tiene acceso al sistema operativo real donde puede atacar o da~nar otros
sistemas. Las principales desventajas de los honeypots de baja interaccion es que registran unicamente
informacion limitada y son dise~nados para capturar actividad prevista, los servicios emulados solo pueden
llegar hasta ah. Tambien es facil para un atacante detectar un honeypot de baja interaccion, sin importar
cuan buena sea la emulacion. Un intruso habil puede, con el debido tiempo, detectar su presencia. Ejemplos
de honeypots de baja interaccion se incluyen:Specter,Honeyd, yKFSensor.
Los honeypots de alta interaccion son diferentes, estos generalmente son soluciones complejas ya que
implica la utilizacion de sistemas operativos y aplicaciones reales. Nada es emulado, le damos a los in-
Jose Antonio Escartn Vigo, Junio 2005.

254 Servidor Linux para conexiones seguras de una LAN a Internet
trusos algo real. Si queremos un honeypot Linux corriendo un servidor FTP, tendremos que construir un
verdadero sistema Linux y montar un verdadero servidor FTP. Las ventajas de dicha solucion son dos:
Primero, usted capturaramos grandes cantidades de informacion dandoles a los intrusos algo sistemas
reales con la cual interactuar, podremos aprender la completa extension de sus actividades, cualquier cosa
desde rootkits nuevos hasta sesiones internacionales de IRC. La segunda ventaja es que los honeypots de
alta interaccion no asumen nada, acerca del posible comportamiento que tendra el atacante, en lugar de
eso proveen un entorno abierto que captura todas las actividades realizadas. Esto permite a las solucio-
nes de alta interaccion conocer comportamientos no esperados. Un excelente ejemplo de esto es como un
honeypot capturo comandos ack door" codicados en un protocolo IP no estandard (especcamente
protocolo IP 11, Network Voice Protocol). No obstante, esto tambien incrementa el riesgo de los honey-
pots ya que los atacantes pueden utilizar estos sistemas operativos reales para lanzar ataques a sistemas
internos que no forman parte de los honeypots. En consecuencia, se requiere la implementacion de una
tecnologa adicional que prevenga al atacante de da~nar otros sistemas que no son honeypots. En general,
honeypots de alta interaccion pueden hacer todo lo que uno de baja interaccion puede hacer y mucho
mas, pero pueden ser mas complejos de utilizar y mantener. Ejemplos de honeypots de alta interaccion
sonSymantec Decoy Servery losHoneynets.
13.13.5. Otras caractersticas
Algunos honeypots, como Honeyd, no solo emulan servicios sino que tambien emulan el Sistema Ope-
rativo. En otras palabras, Honeyd puede aparentar ser un router Cisco, un webserver WinXP o un servidor
DNS Linux. Existen varias ventajas al emular diferentes sistemas operativos. Primero, el honeypot puede
encajar mejor con la red existente, si el honeypot tiene la misma apariencia y comportamiento que las
computadoras productivas. Segundo, se puede apuntar a atacantes especcos proveyendoles sistemas y
servicios sobre los que queremos aprender. Hay dos elementos en sistemas operativos emulados:
El primero es el servicio emulado, cuando un atacante se conecta a ese servicio, este se comporta como
si fuera legitimo y aparenta tener un sistema operativo determinado. Por ejemplo, si tiene un servicio emu-
lando un webserver y quiere que su honeypot aparente ser un Win2000 servidor, entonces debera emular
el comportamiento de un IIS webserver, y para el caso de un Linux, debera emular el comportamiento
de un webserver Apache. La mayora de los honeypots emulan el SO de esta manera. Algunos honeypots
sosticados llevan la emulacion un paso adelante (como lo hace el Honeyd): No solo emulan en el nivel de
servicio, sino que en el nivel del stack del IP. Si alguien realizaactive ngerprintingpara determinar el SO
de su honeypot, muchos honeypots responderan al nivel del IP Stack del SO real en donde este instalado
el honeypot. Honeyd falsea la respuesta, emulando no solo el servicio sino emulando tambien el stack del
IP, comportandose como si fuera realmente otro sistema operativo. El nivel de emulacion y sosticacion
depende de la tecnologa del honeypot que elijamos.
Esto es un resumen de algunos de los HoneyPots que podemos utilizar:
1. De alta interaccion: No hay emulacion, suministra sistemas operativos y servicios reales.
Honeynets
Symantec Decoy Server
2. De baja interaccion: Emula sistema operativos y servicios.
Honeyd
Specter
KFSensor
Deception Toolkit
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 13. Sistemas de deteccion de intrusiones 255
13.13.6. Honeynets: alta interaccion
Los Honeynets son un ejemplo ideal de honeypots de alta interaccion. Honeynets no son un producto,
no son una solucion software que se instala en una computadora. En lugar de eso, los Honeynets son una
arquitectura, una red entera de maquinas dise~nados para ser atacadas. La idea es tener una arquitectura
que sea una red altamente controlada, un lugar donde toda actividad sea controlada y capturada. En
esta red nosotros ponemos a nuestras victimas en forma intencionada, computadoras reales corriendo
aplicaciones reales. Los \chicos malos" encuentran, atacan, rompen estos sistemas en su propia iniciativa.
Cuando hacen esto, ellos no saben que estan en un Honeynet. Toda su actividad, desde sesiones encriptadas
SSH hasta correos y archivos subidos son capturados sin que lo noten. Esto es realizado introduciento
modulos en el kernel de los \sistemas vctima" que capturan toda las acciones de los atacantes. Al mismo
tiempo, el Honeynet controla la actividad del atacante. Los Honeynets hacen esto mediante la utilizacion de
ungateway Honeywall. Este gateway permite el traco de entrada a los \sistemas vctima", pero controla
el traco de salida usando tecnologas de prevencion contra instrusos. Esto le da al atacante la exibilidad
de interactuar con las sistemas vctimas, pero previene al atacante de da~nar otros sistemas que no forman
parte del Honeynet.
13.13.7. Honeyd: baja interaccion
Honeyd es un honeypot de baja interaccion. Desarrollado por Niels Provos, Honeyd es OpenSource
y esta dise~nado para correr principalmente en sistemas Unix/Linux (aunque fue portado a Windows).
Honeyd trabaja con el concepto del monitoreo del espacio IP no utilizado. Cuando observa un intento de
conexion a un IP no utilizado, intercepta la conexion e interactua con el atacante, pretendiendo ser la
vctima. Por defecto, Honeyd detecta y logea cualquier conexion a puertos UDP o TCP. Como si fuera
poco, se pueden congurar los servicios emulados para que monitoreen puertos especcos, como un ser-
vidor FTP emulado, monitoreando el puerto TCP 21. Cuando un atacante conecta el servicio emulado,
el honeypot no solo detecta y logea la actividad, sino que captura tambien toda la actividad del atacante
con el servicio emulado. En caso del servidor FTP emulado podemos potencialmente capturar el logins y
passwords, los comandos que introduce y quizas tambien descubrir lo que esta buscando o su identidad.
Todo depende del nivel de emulacion del honeypot. La mayora de los servicios emulados trabajan de la
misma manera. Ellos esperan un tipo especco de comportamiento, y estan programados para reaccionar
en una forma predeterminada. La limitacion esta en que si el atacante hace algo que la emulacion no tiene
previsto, entonces no saben como responder. La mayora de los honeypots de baja interaccion, incluyendo
Honeyd, simplemente generara un mensaje de error. Podemos ver cuales son los comandos que soporta el
servidor FTP emulado de Honeyd viendo el codigo fuente.
En nuestra instalacion Debian utilizaremos este paquetehoneyd, ya que tiene licencia GPL y es gra-
tuito. Para instalarlo ejecutamos el siguiente apt:#apt-get install honeyd honeyd-common
Tambien podemos encontrar un \kit de herramientas Honeyd para Linux" (Honeyd Linux Toolkit).
Mientras los posibles atacantes se entretienen intentando acceder a servicios que no existen, los IDS
de nuestro sistema los detectaran y podremos tomar acciones preventivas contra sus IP, como ltrarlas en
el rewall.
Una de sus grandes caractersticas es que podemos asignar a cada una de nuestros dispositivos virtuales
el SO que queramos. Esta personalidad tambien se especica con un chero normal de rmas de SO de
Nmap, permitiendonos convertirnos en el SO que queramos. Si ejecutamos la conguracion que viene como
ejemplo, veremos de lo que es capaz.
Despues de instalarlo, hay un chero que se llamacong.localhostcon un monton de dispositivos con-
gurados. Lo podemos encontrar en:/usr/share/doc/honeyd/examples/config.localhost
Jose Antonio Escartn Vigo, Junio 2005.

256 Servidor Linux para conexiones seguras de una LAN a Internet
Si observamos la denicion del dispositivo 10.0.0.1 de ejemplo, veremos lo siguiente:
#cat /usr/share/doc/honeyd/examples/config.localhost|more
...
route entry 10.0.0.1
route 10.0.0.1 link 10.0.0.0/24
...
create routerone
set routerone personality "Cisco 7206 running IOS 11.1(24)"
set routerone default tcp action reset
add routerone tcp port 23 "router-telnet.pl"
...
bind 10.0.0.1 routerone
...
La explicacion a grandes rasgos es que tenemos un dispositivo cuya direccion IP es 10.0.0.1, que se
comportara como unCisco 7206ejecutando unaIOS 11.1(24), reseteara todas las conexiones TCP menos
las que vayan al puerto 23, ya que entonces el script router-telnet.pl (una emulacion del demonio telnet)
sera ejecutado.
Ahora ejecutemosNmappara comprobar el SO que se ejecuta en el dispositivo virtual que acabamos
de crear:
# nmap (V. 3.10ALPHA4) scan initiated: nmap -v -sS -oN nmap4.
Warning: OS detection will be MUCH less reliable because we did not find at least
Interesting ports on 10.0.0.1:
(The 1604 ports scanned but not shown below are in state: filtered)
Port State Service
23/tcp open telnet
Remote OS guesses: Cisco 7206 running IOS 11.1(24), Cisco 7206 (IOS 11.1(17)
TCP Sequence Prediction: Class=random positive increments
Difficulty=26314 (Worthy challenge)
IPID Sequence Generation: Incremental
# Nmap run completed -- 1 IP address (1 host up) scanned in 178.847 s
Cuando recibimos los paquetes deNmap,honeydresponde con la personalidad que hemos escogido.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14
Redes inalambricas
En el proyecto he habilitado una red wi, pero hoy los administradores de sistemas y conocen los
peligros que esto entra~na, seran muy reacios a implantar este tipo de redes, pero es muy probable que las
circunstancias lo obliguen a implantar este tipo de tecnologa.
Aunque no tengamos red inalambrica, debemos auditar la red frecuentemente y asegurarnos que nadie
esta ejecutando un punto de acceso ilegal.
Hasta hace muy poco los administradores de red solo tenan que preocuparse de asegurar los bienes
de la tecnologa de informacion fsicos y jos, incluyendo los servidores, los enrutadores y los cortafuegos:
todo lo que congura sus redes de lnea de cable. Sin embargo, con el advenimiento del equipamiento de
redes inalambricas existe todo un espectro nuevo de problemas seguridad que tratar.
Esta nueva tecnologa ha ayudado a rebajar el coste del despliegue de redes, ha trado acceso a sitios
a los que no se poda acceder antes y ha convertido el termino \informatica movil" en una realidad.
Ha cambiado drasticamente el permetro de seguridad de redes de las empresas de todos los tama~nos.
Tradicionalmente, las redes corporativas se conectaban al mundo exterior en solo unos pocos lugares. As,
los administradores de redes se podan concentrar en proteger estos puntos de acceso limitados. Podan
colocar cortafuegos o otras defensas en esos puntos de contencion cruciales. El interior de la red se trataba
como de conanza porque no haba forma de introducirse que no fuese a traves de los puntos protegidos.
Ahora con una LAN inalambrica desplegada, nuestro permetro de seguridad se convierte literalmente
en el aire que nos rodea. Los atacantes sin cables pueden provenir de cualquier direccion. Si tenemos
desplegado un acceso sin cables, cualquiera con una tarjeta de unos 50epuede escuchar potencialmente
el cable de nuestra red sin poner un pie en nuestro local. Si estamos utilizando la tecnologa sin cables
para parte de nuestra red, nuestras amenazas de seguridad crecen considerablemente.
Antes de asegurar correctamente nuestra red inalambrica, tenemos que saber como funcionan las redes
del area local inalambrica y cuales son sus puntos debiles.
Los fabricantes del equipamiento LAN inalambrico han reducido tanto los precios que ahora es una
alternativa muy viable para las redes domesticas. En lugar de cablear nuestra casa para conectar nuestros
PCs a Ethernet, podemos comprar un punto de acceso (AP, Access Point) y un par de tarjetas inalambricas
y utilizar Internet desde cualquier habitacion de nuestra casa (o fuera de ella). El amplio despliegue de la
tecnologa LAN inalambrica ha llegado denitivamente para quedarse y tarde o temprano tendremos que
tratar con ella.
14.1. Estandar 802.11 (Wi)
El protocolo mas popular para la tecnologa LAN inalambrica es actualmente la serie 802.11, conocido
comunmente como wi. Los estandares inalambricos de 802.11 son basicamente una extension del protocolo
Ethernet, es la razon por la que funciona tambien con las redes Ethernet con cables. Utiliza las frecuencias
de 2.4 GHz para 802.11b y 802.11g y 5 GHz para 802.11a para se~nales de transmision de datos. Estas
frecuencias son del espectro de uso general, por lo que no tendremos que pedir ninguna licencia para
utilizarlas. El inconveniente es que otros dispositivos pueden utilizar tambien estas longitudes de onda.
Algunos telefonos inalambricos y microondas se encuentran en la banda de los 2.4 GHz, por lo que si

258 Servidor Linux para conexiones seguras de una LAN a Internet
tenemos este tipo de dispositivos u otras redes wi en nuestro area podemos encontrarnos con algunas
interferencias.
Esta longitud de onda es perfecta para el corto rango deseado para wi. Sus parametros de dise~no
permiten aproximadamente unos 45,72 metros interiores y unos 244 metros exteriores en condiciones nor-
males. Sin embargo, con una antena de alta potencia y alcance, podemos tener hasta un rango de 32,19
Km., algo atractivo para las comunicaciones de ocina a ocina dentro de una ciudad. El cuadro 14.1
incluye una descripcion de los cuatro tipos de estandares inalambricos 802.11 que han aparecido.
Cuadro 14.1: Estandares de 802.11 inalambricos
Estandar Descripcion
802.11a Esta version del estandar utiliza una logitud de onda de 5 GHz, un espectro menos aba-
rrotado y menos propenso a tener problemas de interferencias. El potencial teorico para
esta tecnologa es de 54 Mps, una gran cantidad de ancho de banda, pero la mayora de
las aplicaciones en el sector no se acercan a esa cantidad.
802.11b Utiliza una longitud de onda de 2.4 GHz, como Bluetooth y otros dispositivos. Ofrece hasta
11 Mps de ancho de banda, aunque las aplicaciones practicas por debajo de las condiciones
optimas trabajan a la mitad de dicha cantidad.
802.11g Actualmente es el estandar inalambrico mas conocido. Proporciona hasta 54 Mps de ancho
de banda, pero en el mismo espectro de 2.4 GHz que 11b. Tambien es compatible hacia
atras con el hardware de 11b.
802.11i Este nuevo protocolo es basicamente una extension de 802.11b que se adhiere al protocolo
de cifrado para ser mucho mas seguro. El IEEE acaba de aprobarlo y ya podemos encontrar
productos que lo implementan.
Una red wi inalambrica puede operar en uno de estos dos modos:
Modo adhoc: Nos permite conectar directamente dos nodos juntos. Este modo es util para conectar
algunos PCs juntos que necesiten acceso a una LAN o a Internet.
Modo de infraestructura: Nos permite establecer una estacion base, conocida como punto de acceso
(AP, Access Point), y conectarla a nuestra LAN. Todos los nodos sin cables se conectan a la LAN
traves de este punto.

Esta es la conguracion mas comun en redes corporativas ya que permite al
administrador controlar el acceso sin cables a un punto. Cada punto de acceso y tarjeta inalambricos
tiene un numero asignado, es el ID del nodo cliente (BSSID, Basic Station System ID).

Esta es
la direccion MAC para los clientes inalambricos que se asocian al nodo servidor. Este nombre no
es necesariamente unico a dicho punto de acceso. De hecho, la mayora de los fabricantes asignan
un SSID predeterminado a los AP para que puedan utilizarse inmediatamente. El SSID del punto
de acceso es necesario para conectarse a la red. Algunas estaciones base tienen una funcionalidad
adicional, incluyendo enrutadores y servidores DHCP incorporados. Existen incluso algunas unidades
integradas que actuan como puntos de acceso sin cables, cortafuegos y enrutador para usuarios
domesticos y de peque~nos negocios. Yo dispongo de un router 3Com ADSL 11g de este tipo.
Podemos congurar un nodo de red inalambrica instalando una tarjeta de interfaz de red (NIC, Net-
work Interface Card) en un ordenador. Una NIC inalambrica puede ser de varios tipos: puede ser una
tarjeta que se introduce en la ranura del PC, una tarjeta PCMCIA, un dispositivo USB, etc. Una red
inalambrica 802.11 en un modo de infraestructura tiene un punto de acceso que actua como puente entre
la LAN de Ethernet con cables y uno o mas puntos extremo sin cables. El punto de acceso enva frecuen-
temente transmisiones de \se~nales luminosas" para que cualquier nodo sin cables sepa que esta ah. Las
transmisiones de se~nales luminosas actuan como un faro invitando a cualquier nodo sin cables del area a
iniciar la sesion. Estas se~nales forman parte del problema con wi. es imposible desactivar completamente
dichas se~nales, lo que diculta ocultar el hecho de que hay una red inalambrica. Cualquiera que tenga
una tarjeta inalambrica puede, al menos, ver las se~nales luminosas si se encuentran dentro de un rango,
aunque algunos receptores permiten limitar la cantidad de informacion que sale de dichas transmisiones.
Estas se~nales contienen informacion basica sobre el punto de acceso inalambrico, normalmente inclu-
yendo su SSID. Si la red no esta utilizando ningun cifrado ni ninguna otra proteccion, esto es todo lo que se
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 259
requiere para que un intruso acceda a la red. Sin embargo, incluso en una red inalambrica cifrada, el SSID
normalmente se transmite al descubierto y los paquetes cifrados pueden ser escuchados clandestinamente
en el aire y estan sujetos a intentos de decodicacion.
14.2. Peligros de las LAN inalambricas
Aunque ofrecen la misma exibilidad y funcionalidad que pueden ofrecer las LAN con cables, tambien
introducen algunos retos y peligros unicos para el administrador de redes preocupado por la seguridad.

Estos son algunos de los que tenemos que tener en cuenta al a~nadir una LAN inalambrica a nuestra
infraestructura:
Escuchas clandestinas: Lo mas acil para un intruso en una red inalambrica es recopilar paquetes
utilizando un snier. Poco podemos hacer frente a ello, Los dise~nadores de las redes inalambricas
pensaron sobre ello e introdujeron en el dise~no un cifrado estandar denominadoPrivacidad equivalen
al cable(WEP, Wired Equivalente Privacy) para que los datos se pudieran cifrar. Lamentablemente,
un fallo fundamental en como funcionan los algoritmos RC4 en los que esta basado hacen que los
datos se puedan descifrar. Por lo tanto, incluso aunque se ejecute WEP, cualquier dato que viaje
por una red inalambrica esta potencialmente sujeto a su inspeccion por personas ajenas a la red.
Alguien podra escuchar sobre nuestro enlace sin cables para buscar los registros de inicio de sesion,
las contrase~nas o cualquier otro dato.
Acceder a los PC sin cables: Un enlace inalambrico proporciona a un atacante potencial un vector en
una maquina de nuestra red. Aparte de los puntos de acceso, las maquinas con tarjetas inalambricas,
a veces, se pueden ver desde el exterior. Si utilizan este modo de acceso pueden lanzar ataques contra
una maquina que probablemente no esta protegida por el cortafuegos y puede que no se bloqueen
como las defensas del permetro o los servidores publicos.
Acceder a la LAN: Probablemente este sea el mayor peligro que presentan las redes inalambricas.
Si los intrusos pueden obtener el acceso a nuestra LAN a traves de un punto de acceso inalambrico,
normalmente tienen las llaves de nuestro reino. La mayora de las LAN ejecutan un servidor DHCP
sin restringir, por lo que los intrusos pueden obtener una direccion IP valida y empezar a explorar
nuestra red. A continuacion pueden ejecutar un escaner de vulnerabilidades (como Nesus) o un
escaner de puertos como Nmap (Vease seccion 17) para encontrar maquinas de su interes y buscar
brechas que puedan aprovechar.
Acceso anonimo a Internet: Aunque los intrusos no esten interesados en lo que contienen nuestra
LAN, pueden utilizar nuestro ancho de banda para otros usos. Al iniciar la sesion en nuestra red y
acceder despues a Internet, pueden piratear nuestra red y hacer el da~no que quieran sin que podamos
seguirles la pista. Cualquier ataque o da~no perpetrado desde esta conexion se rastreara hacia nuestra
red. Las autoridades pueden llamar a nuestra puerta, no a la suya. Este metodo de piratera se
hara cada vez mas comun a medida que los intrusos se den cuenta de lo difcil que es rastrear
los ataques que se originan de esta manera. Existen pocas posibilidades de capturar a alguien que
proviene de una red inalambrica a no ser que tenga un equipo de triangulacion situado de antemano,
algo bastante caro y poco habitual. Las LAN inalambricas no aseguradas ofrecen a los intrusos el
mejor acceso anonimo que existe.
Vulnerabilidades especcas de 802.11: Ademas de las inseguridades de las LAN inalambricas, existen
algunos problemas especcos del estandar 802.11. Algunos de ellos se deben a un mal dise~no del
fabricante o a las conguraciones predeterminadas, otros problemas se deben al dise~no general de
estandar.
SSID predeterminados: Cada estacion base wi tiene un identicador especco que debemos conocer
para entrar en la red. Este identicador proporciona algun nivel de seguridad si se implanta correc-
tamente. Lamentablemente, muchas personas no cambian el SSID predeterminado del fabricante,
comolinksys,default, etc. Cuando un intruso lo encuentra, puede suponer que el administrador no
ha perdido mucho tiempo en congurar y asegurar la red inalambrica.
Jose Antonio Escartn Vigo, Junio 2005.

260 Servidor Linux para conexiones seguras de una LAN a Internet
Transmision de se~nales luminosas: La transmision de se~nales luminosas son un problema inherente a
las redes inalambricas. La estacion base debe emitir regularmente su existencia para que los emisores
del usuario nal puedan encontrar y negociar una sesion y como los dispositivos legtimos del usuario
no se han autenticado todava, esta se~nal debe transmitirse al descubierto. Cualquiera puede capturar
esa se~nal y, como mnimo saber que tenemos una LAN inalambrica. Muchos modelos nos permiten
desactivar la parte SSID de la transmision para que, al menos, sea mas difcil de captar para las
escuchas clandestinas de redes inalambricas, pero SSID se sigue enviando cuando una estacion se
conecta, por lo que sigue existiendo una peque~na ventana de vulnerabilidad.
Comunicaciones sin cifrar de forma predeterminada: La mayora de los dispositivos LAN inalambri-
cos de hoy en da ofrecen la opcion de activar el cifrado WEP estandar . El problema es que normal-
mente se tiene que hacer manualmente. Muchos fabricantes comercializan su equipamiento con esta
opcion desconectada de forma predeterminada. Muchos administradores tienen prisa por congurar
su red inalambrica y no tienen mucho tiempo para activar esta importante funcion. Si una persona
no tecnica congura la red, es muy probable que no se active el cifrado. Tambien existe el problema
de la clave compartida por todos nuestros usuarios ya que WEP utiliza una sola clave entre todos
ellos, lo que puede llegar a convertirse en una pesadilla si tenemos muchos usuarios conectandose sin
cables.
Punto debil de WEP: Incluso cuando se utiliza el cifrado incorporado, la se~nal sigue teniendo el riesgo
de ser leda. Existen algunos puntos debiles fundamentales en la implantacion del algoritmo RC4
utilizado para el cifrado en WEP que permiten que se descifren una vez interceptada una cantidad de
traco. Estos puntos debiles tienen que ver con la forma en que se programan las claves. WEP utiliza
vectores de inicializacion debiles con un porcentaje sucientemente alto como para que nalmente
puedan descifrarse. Una vez roto el cifrado, no solo los atacantes pueden leer todo el traco de la red
inalambrica sino que probablemente puedan entrar en la red. Por lo tanto, aunque WEP ofrece una
proteccion basica frente a escuchas clandestinas casuales, cualquier intruso serio tendra el software
como para descifrar potencialmente el cifrado.
14.3. El fenomeno del \Wardriving"
La busqueda de LANs inalambricas inseguras se ha convertido en un pasatiempo popular entre los
piratas informaticos. Esta practica se conoce como \wardrive" o \wardriving", funciona de la misma forma
que el marcado telefonico en masa o guerra del marcado telefonico, de los primeros piratas informaticos,
consiste en seleccionar de forma aleatoria bancos de numeros de telefono para encontrar modems activos.
En general, los piratas informaticos conducen un automovil con una tarjeta inalambrica y algun soft-
ware buscando una se~nal de una red. El software puede registrar la ubicacion exacta de la red inalambrica
a traves del GPS as como otra gran cantidad de informacion como: si esta cifrada o no y que tipos de
protecciones se encuentran activas. Los que realizan el \wardring" pueden explorar Internet o la LAN
local sobre el enlace sin cables. No se requiere un alto nivel de conocimientos para hacerlo, por lo que hay
intrusos de todos los niveles.
Las empresas que utilizan LAN en entornos densos alrededor de sus ocinas o cerca de carreteras
principales y autopistas son los entornos mas propensos a este tipo de actividad, como ocinas en entornos
urbanos y areas del centro donde hay muchos edicios altos. Las redes inalambricas que utilizan 802.11b
tienen una distancia efectiva de un par de cientos de metros. Es facil crear un puede entre el espacio
comprendido entre dos edicios o varias plantas en un edicio alto. En una zona del centro densa, es
comun encontrar varias LAN inalambricas sin proteccion dentro de un edicio. Desde el punto de vista de
la seguridad, los edicios altos suelen ser uno de los peores lugares para ejecutar una LAN inalambrica.
el tpico edicio de cristal permite que las se~nales de su LAN viajen a mucha distancia. Si hay otros
edicios cerca, es casi seguro que podran recoger algunas de sus se~nales. Incluso es peor los edicios altos
que se encuentran junto a una zona residencial. Imaginemonos a los adolescentes y otros recien llegados
escaneando en busca de las LAN inalambricas disponibles, desde la comodidad de sus habitaciones en las
afueras de una ciudad.
Aproximadamente un 60 por ciento de las LAN inalambricas son completamente inseguras. Los que
realizan los paseos de batalla han llegado incluso a anunciar puntos de acceso sin cables en bases de datos
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 261
online con mapas para que cualquiera pueda encontrar una LAN Inalambrica bierta en cualquier parte.
Las catalogan por tipo de equipamiento, cifradas o no cifradas, etc. Si tenemos una LAN inalambrica en
un area metropolitana importante, es probable que este catalogada en uno de estos sistemas, esperando
solo a que cualquier intruso oportunista de su zona al que le sobre algo de tiempo. Las siguientes son bases
de datos online que se pueden consultar para ver si nuestra LAN se encuentra ya catalogada:
http://www.wimaps.com/
http://www.nodedb.com/europe/es
http://www.cybergeography.org/spanish/wireless.html
Existe hasta un catalogo de simbolos estandarizado para identicar redes wis urbanas:
Figura 14.1: Smbolos urbanos de redes wi
Jose Antonio Escartn Vigo, Junio 2005.

262 Servidor Linux para conexiones seguras de una LAN a Internet
Es tan grande este fenomeno que hace unos meses en las islas canarias, se organizo el primer campeona-
to de Wardriving de Espa~na (Canarias Wardrive'05), podemos encontrar mas informacion en esta direccion:
http://www.canariaswardrive.org/
Estas son las curiosas bases del concurso:
\Solo necesitamos explorar nuestra propia ciudad empleando un simple portatil, pda o similar,
dotado de una tarjeta wi. La competicion se divide en tres categoras territoriales:
Competicion de Wardrive en Tenerife
Competicion de Wardrive en Gran Canaria
Competicion de Wardrive en toda Canarias
En estas competiciones se permite la participacion individual o por equipos. Trabajando en
equipo se cubre mas territorio y se encuentran los focos emisores mas rapidamente. Una com-
peticion sin caracter regional es la de los MiniGames, se celebraran en Tenerife. En ellos se
plantearan a los competidores retos tales como intentar romper la seguridad de redes. Un sis-
tema homologado de puntuacion asignara una cantidad de puntos dependiendo del tipo de red
local. La participacion en este tipo de competicion exige inexorablemente un comportamiento
deportivo intachable."
Ha mas de un administrador de sistemas se le pondran los pelos de punta al leer esto.
14.4. Seguridad en redes inalambricas
Si tenemos la red inalambrica sin cifrado, cualquier intruso podra leer los datos que mandemos o incluso
entrar en nuestra red. Es necesario implantar una serie de medidas: cifrado de datos, concienciacion del
personal, auditorias, etc.
14.4.1. Clave WEP (Wired Equivalente Privacy)
La clave WEP es una clave asimetrica, compartida por todos los usuarios inalambricos. Esta basada
en el algoritmo RC4 y tiene un nivel de seguridad debil. Es debido a un fallo del algoritmo, crea una serie
de vectores de inicializacion debiles que con un traco de red suciente, permiten deducir la clave. Fue
introducida con el estandar 802.11a y actualmente ha quedado superado por WPA.
Si en vez de tener una red abierta, al menos, ciframos los datos con clave WEP, los intrusos tendran
que perder tiempo y esfuerzo en obtenerlos. Esto desanimara a intrusos casuales, y hara que los serios
tengan que quedarse por nuestra zona varios das, aumentando las posibilidades de que el personal de
seguridad o los vigilantes noten su presencia.
La clave WEP, no es recomendable, ya que WPA representa una mejor forma de proteccion. En
determinadas situaciones, puede ser suciente pero esto solo tiene lugar en entornos que no manejan datos
sensibles y donde se produzca muy poco traco de red.
14.4.2. Clave WPA (Wi Protected Access)
Esta destinada a garantizar la seguridad en las especicaciones IEEE 802.11a, 802.11b y 802.11g,
mejorando las claves WEP; En abril de 2003 aparecieron en el mercado los primeros productos que
incorporaban tecnologa de cifrado WPA.
En la gura 14.2 podemos ver una comparativa entre las claves WEP Y WPA.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 263
Figura 14.2: Comparativa entre WEP y WPA
Privacidad e integridad con TKIP
TKIP (Temporal Key Integrity Protocol) ampla y mejora a WEP, solucionando sus vulnerabilidades.
Ampla la longitud de la clave de 40 a 128 bits y pasa de ser unica y estatica, a ser generada de forma
dinamica, para cada usuario, para cada sesion (teniendo una duracion limitada) y para cada paquete
enviado. Conceptualmente el vector de inicializacion pasa de 24 a 48 bits, minimizando la reutilizacion de
claves. Tambien utiliza claves para traco de difusion y multidifusion.
Utiliza el algoritmo \Michael" para garantizar la integridad, generando un bloque de 4 bytes (denomi-
nado MIC) a partir de la direccion MAC de origen, de destino y de los datos, a~nadiendo el MIC calculado
a la unidad de datos a enviar. Posteriormente los datos (que incluyen el MIC) se fragmentan y se les asigna
un numero de secuencia. La mezcla del numero de secuencia con la clave temporal genera la clave que se
utilizara para el cifrado de cada fragmento.
Autenticacion mediante 802.1X/EAP
El estandar IEEE 802.11x dene un protocolo para encapsular, protocolos de autenticacion sobre
protocolos de enlace de datos. IEEE 802.11x permite utilizar diversos metodos para autenticar al usuario
a traves del protocolo de autenticacion extensible (EAP). Se concibe como una ampliacion de la capa de
enlace de datos:
Figura 14.3: Funcionamiento WPA/EAP
Jose Antonio Escartn Vigo, Junio 2005.

264 Servidor Linux para conexiones seguras de una LAN a Internet
IEEE 802.11x dene 3 entidades:
El solicitante (supplicant), reside en la estacion inalambrica
El autenticador (authenticator), reside en el AP
El servidor de autenticacion, reside en un servidor AAA (Authentication, Authorization, & Accoun-
ting), como los servidores Radius
Utiliza un metodo de control de acceso basado en el concepto de puerto (PAE, Port Acess Entity). El
autenticador crea un puerto logico por cliente, existiendo dos caminos uno autorizado y otro no. Mientras
el cliente no se ha autenticado con exito unicamente se permite traco 802.11x/EAP hacia el servidor de
autenticacion.
Figura 14.4: Autenticacion mediante un servidor Radius
El solicitante cuando pasa a estar activo en el medio, selecciona y se asocia a un AP. El autenticador
(situado en el AP) detecta la asociacion del cliente y habilita un puerto para ese solicitante, permitiendo
unicamente el traco 802.11x, el resto de traco se bloquea. El cliente enva un mensaje \EAP Start". El
autenticador responde con un mensaje \EAP Request Identity" para obtener la identidad del cliente, la
respuesta del solicitante \EAP Response" contiene su identicador y es retransmitido por el autenticador
hacia el servidor de autenticacion. A partir de ese momento el solicitante y el servidor de autenticacion
se comunicaran directamente, utilizando un cierto algoritmo de autenticacion que pueden negociar. Si el
servidor de autenticacion acepta la autenticacion, el autenticador pasa el puerto del cliente a un estado
autorizado y el traco sera permitido.
Los metodos de autenticacion denidos en WPA son:EAP-TLS,EAP-TTLSyPEAP. Estos metodos se
basan en la infraestructura de clave publica (PKI) para autenticar al usuario y al servidor de autenticacion,
utilizando certicados digitales. La premisa es la existencia de una Autoridad de Certicacion (CA) de
conanza para la corporacion, que emita certicados para los usuarios y el servidor de autenticacion. La
CA puede ser privada (empresarial) o publica (basada en CAs de Internet como Verisign).
EAP-TLS (TRANSPORT LAYER SECURITY)
Los usuarios y el servidor de autenticacion deben tener un certicado digital. El solicitante, tras la
asociacion y la creacion del puerto de acceso por el autenticador, enva su identicacion (nombre de
usuario) hacia el autenticador y este hacia servidor de autenticacion. Este ultimo enva su certicado al
cliente, al validarlo el cliente responde con su certicado. El servidor de autenticacion comprueba si el
certicado es valido y corresponde con el nombre de usuario antes enviado, si es as autentica al cliente.
Cliente y servidor generan la clave de cifrado para esa sesion, y el servidor de autenticacion la enva al
punto de acceso, de forma que ya puede comunicarse el cliente de forma segura.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 265
PEAP y EAP-TTLS
EAP-TLS exige que todos los clientes dispongan de un certicado digital lo que puede ser, en muchos
casos, un inconveniente tecnico y economico. Para evitar esta necesidad aparecen 2 metodos: Protected
EAP (PEAP) y EAP-Tunneled TLS (EAP-TTLS), que requieren unicamente del certicado en el servidor
de autenticacion.
La idea subyacente es que si el servidor de autenticacion dispone de un certicado digital, el cliente
podra enviarle datos cifrados, creandose un unel de seguridad" por donde el cliente podra enviar sus
datos de autenticacion.
PEAP fue dise~nado por Microsoft, Cisco y RSA. Cuando el cliente ha validado el certicado del
servidor de autenticacion y creado el tunel, usando TLS se inicia una nueva autenticacion donde negocian
un metodo, por ejemplo MS-CHAP v2, tras autenticar el servidor al cliente, ambos generan la clave de
sesion. EAP-TTLS fue dise~nado por Funk Software. Tambien se basa en crear en primer lugar un tunel TLS
pero los mensajes que intercambia son pares valor atributo (\attribute-value pairs"-AVPs) muy similares
a los que utiliza Radius. TTLS soporta todos los metodos EAP y se abre a nuevos metodos.
WPA y seguridad en peque~nas ocinas
Los metodos soportados por EAP necesitan de una cierta infraestructura, fundamentalmente de un
servidor Radius, lo que puede limitar su implementacion en redes peque~nas. Wi ofrece los benecios de
WPA mediante el uso de una clave pre-compartida (PSK, pre-shared key) o contrase~na. Esto posibilita el
uso de TKIP, pero congurando manualmente una clave en el cliente wireless y en el punto de acceso.
WPA y el uso de AES
Las directrices del estandar nal IEEE 802.11i (denominado RSN: Robust Security Network) marcan
como algoritmo de cifrado a AES (Advanced Encryption Standard), basado en el algoritmo Rijndael para
proporcionar privacidad y en claves de 128 bits o mas. Parece que la implementacion mas probable es el
modo Cipher Block Chaining Counter Mode (CBC-CTR) con Cipher Block Chaining Message Authenticity
Check (CBC-MAC), conocido el conjunto como CBC-CCM. AES ya ha sido adoptado como estandar para
cifrado en sistemas de computacion y comunicaciones. WPA indica el soporte de AES como opcional,
existiendo dispositivos que lo implementan.
Implementacion de WPA
Para soportar WPA, en caso de que los productos no esten certicados por su uso, debemos actualizar
el rmware de los puntos de acceso y de los adaptadores de red inalambricos de las estaciones. En las
estaciones se debera actualizar el sistema operativo para soportar 802.11x y el metodo EAP elegido. Por
ejemplo, Windows XP soporta WPA mediante una actualizacion.
Segun el metodo EAP elegido habra que denir la conguracion del servidor Radius. Tambien es posible
que tengamos que utilizar o implementar los servicios de una Autoridad de certicacion.
Conclusiones sobre el uso de WPA
La seguridad es una cuestion conjunta por lo que las directivas aplicables a los segmentos de redes
inalambricas deben integrarse con el resto de directivas. Por ejemplo, el uso de cortafuegos para conectar la
red inalambrica con la red corporativa, a~nadiendo capacidades de deteccion de intrusos e incluso de analizar
el traco inalambrico y detectar puntos de acceso no autorizados son mecanismos de seguridad necesarios
para garantizar los requerimientos de seguridad. Asimismo, tanto los clientes como servidores deberan de
seguir las directivas de seguridad denidas que deben incluir, como mnimo, el uso de antivirus, cortafuegos
personales, deteccion de intrusos, actualizacion de software, eliminacion de servicios innecesarios
A la espera de poder implementar el estandar nal sobre seguridad en redes inalambricas (802.11i)
la especicacionWi Protected Access(WPA) ofrece una solucion able y robusta para garantizar la
privacidad, integridad y autenticacion. Garantizando, ademas, la interoperabilidad entre fabricantes y
ofreciendo un modo atural" de migrar hacia WPA2.
Jose Antonio Escartn Vigo, Junio 2005.

266 Servidor Linux para conexiones seguras de una LAN a Internet
14.4.3. Clave WPA2 (Estandar 802.11i)
Aunque hace ya varios a~nos que se desvelaron las vulnerabilidades del protocolo WEP (razon por
la que fue sustituido por WPA basado en TKIP), esta tecnologa dejo de ser un borrador a nales de
junio de 2004, por lo que ya podemos referirnos a ella como un estandar aprobado por el IEEE. Esta
nueva especicacion utiliza el algoritmo de cifrado AES (Advanced Encryption Standard), un mecanismo
extremadamente seguro que merecio en su da la aprobacion del NIST (National Institute of Standards
and Technology).
WPA2 se basa en 802.11i y es compatible con WPA. La llegada de 802.11i debe ser acogida con
entusiasmo debido al elevado nivel de seguridad que ofrece. Aun as, es necesario tener en cuenta que el
algoritmo de cifrado AES requiere unas condiciones y una exigencia al hardware bastante alta, lo que
signica que algunas interfaces inalambricas antiguas no seran capaces de satisfacer los requisitos de este
estandar.
Dentro de algun tiempo WPA2 se convertira en el estandar de seguridad para las redes inalambricas.
14.4.4. Medidas preventivas
La implantacion de cualquier acceso inalambrico tiene un riesgo, pero se puede reducir tomando una
serie de medidas preventivas.
Tratar la red inalambrica como de no conanza
Como no se puede controlar el traco entrante por el aire, no se debera tratar de forma distinta a la
parte publica del cortafuegos. Si nos lo podemos permitir, es recomendable situar un cortafuegos entre su
red inalambrica y la LAN privada o situarla en una DMZ (Zona desmilitarizada). Despues se puede ltrar
determinados tipos de paquetes de ataque, limitar los tipos de traco y registrar cualquier actividad que
provenga de dicha interfaz.
Auditar el permetro inalambrico regularmente
Hay que probar la distancia de la se~nal, si la red esta superpuesta sobre otras redes cercanas.
Es necesario realizar una tarea periodica para localizar cualquier punto de acceso o controlado".
La tecnologa inalambrica es ahora tan barata que cualquier usuario de nuestro sistema puede comprar,
instalar y congurar una tarjeta wi para algun proposito licito o no, como puede ser una demostracion sin
cables en una sala de conferencias, abriendo as nuestra red para los ataques inalambricos. Actualmente
podemos encontrar hasta tarjetas de red wi para USB.
Asimismo, no hay que olvidar que muchos PCs nuevos, especialmente portatiles, tienen incorporadas
tarjetas wi y habilitarlas es cosa de ni~nos. Podemos estar funcionando de forma inalambrica en nuestra
red sin darnos cuenta. Una auditora inalambrica es la unica forma de descubrirlo.
Congurar correctamente la red inalambrica
Existen muchas opciones y conguraciones que podemos utilizar para aumentar considerablemente
nuestra seguridad y aunque no todos los equipamientos admiten estas opciones, podemos intentarlas.
Desactivar la transmision de SSID: Esta tarea requiere que el usuario conozca el SSID para establecer
una sesion con la estacion base. Actua como una contrase~na debil. Sin embargo, si una escucha
clandestina descifra el cifrado, podra obtener el SSID facilmente.
Restringir el acceso por la direccion MAC: As es mas difcil para alguien obtener acceso a nuestra
red a traves de una estacion base inalambrica. En la mayora de los puntos de acceso, podemos
restringir el mismo a determinadas direcciones MAC hardware, un metodo bastante solido para la
autenticacion, ya que solo las personas con la tarjeta con un numero de serie correcto pueden obtener
acceso. Sin embargo, puede ser incomodo para un administrador mantener el registro de las tarjetas
NIC autorizadas, eso si contar que no permite el acceso instantaneo a un nuevo usuario en nuestra
ocina. As mismo, si el atacante conoce una de las direcciones MAC autorizadas, es posible falsicar
esta direccion en su propia tarjeta y hacerse pasar por el propietario.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 267
Formar al personal
Igual que sucede con todo lo referente a la seguridad informatica, el elemento humano puede ser el
punto mas debil o el mas fuerte. Hay que asegurese de que los guardas de seguridad, los recepcionistas y
otro tipo de personal sepan buscar un comportamiento sospechoso. Por ejemplo, si ven a alguien sentado
en su aparcamiento durante mucho tiempo dentro del coche, posiblemente con una antena extra~na en el
techo del mismo, es muy probable que se trate de alguien que busca entrar en nuestra red inalambrica.
Asimismo, hay que desarrollar una poltica a nivel de toda la empresa. Algunas veces una demostracion
es la mejor forma de mostrar este tipo de peligro. Un personal informado puede ser nuestra mejor defensa.
14.5. Servidor Radius: FreeRadius
Lo que vamos a montar es un sistema EAP-TLS (Vease seccion 14.4.2) donde el servidor y los usuarios
necesitan tener un certicado digital para comunicarse. Es necesario que el servidor Radius se coloque en
la misma maquina donde se encuentra el cortafuegos.
Para congurar el sistema hay que seguir el siguiente esquema (Vease gura 14.5):
Instalamos FreeRadius:#apt-get install freeradius
Conguramos FreeRadius para trabajar con EAP-TLS
Generamos los certicados
Comprobamos que FreeRadius funciona correctamente
Conguramos el AP (Router 3Com)
Conguramos los clientes Linux
Conguramos los clientes Windows XP (Actualizado a Service Pak 2)
La informacion utilizada se puede encontrar en los siguientes HowTos:
HowTo 802.1x:http://tldp.org/HOWTO/htmlsingle/8021X-HOWTO/
HowTo EAP-TLS:http://www.missl.cs.umd.edu/wireless/eaptls/
HowTo Radius en WindowsXP:http://www.dslreports.com/forum/remark,9286052~mode=at
14.5.1. Congurar FreeRadius con EAP-TLS
Los archivos de conguracion se encuentra en:/etc/freeradius/, los comentarios que llevan integra-
dos en el codigo ayudan bastante a la conguracion y es muy recomendable leerlos.
Hay que realizar las siguientes modicaciones:
/etc/freeradius/radiusd.conf: Fichero de conguracion general de Radius. Aqu denimos los siste-
mas de autenticacion. Hay muchas partes del chero que no he utilizado.
/etc/freeradius/eap.conf: Fichero de conguracion del servicio EAP del servidor radius.
/etc/freeradius/clients.conf: Aqu se conguran las IPs y las redes de sistemas que pueden ser clientes
de radius, en nuestro caso el AP (router 3Com, con IP 172.16.1.253)
client 172.16.1.253/32 {
secret = clave_secreta
shortname = localhost
}
Jose Antonio Escartn Vigo, Junio 2005.

268 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 14.5: Sistema con cortafuegos + servidor Radius
/etc/freeradius/users.conf: A~nadimos los usuarios a los que les vamos a permitir el acceso a la red
josan Auth-Type := Local, User-Password == "atitelovoyadecir"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.0.2,
Framed-IP-Netmask = 255.255.255.0,
Framed-Routing = Broadcast-Listen,
Framed-Filter-Id = "std.ppp",
Framed-MTU = 1500,
Framed-Compression = Van-Jacobsen-TCP-IP
Si no nos queremos complicar en exceso, para agregar mas usuarios, solo hay que cambiar User-Password
y la IP.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 269
14.5.2. Generar los certicados
Respecto a la generacion de certicados, obviamente la idea es que los emita una entidad certicadora
contrastada, pero tambien nos los podemos hacer nosotros.
Para ello utilizaremos OpenSSL, si todavia no lo hemos instalado realizamos el apt:
#apt-get install openssl libssl-dev ca-certificates
Ahora tenemos dos opciones:
Aprendemos a utilizar la infraestructura PKI (bastante complicada por cierto)
Utilizamos los scripts de generacion de certicados que vienen con FreeRadius y OpenSSL
Escogeremos la segunda opcion, usando los scripts predenidos, ya que, con muy pocas modicaciones
podemos crear los certicados que nos hacen falta para trabajar de forma segura con nuestro wi.
Aqu nos encontramos con un problema, para generar los certicados necesitamos unos scripts que
vienen con el codigo fuente defreeradius, para obtenerlo:
#apt-get source freeradius, nos descargara los fuentes en el directorio actual.
En el directorioscriptsencontraremos una serie de archivos entre los que se encuentran los siguientes:
CA.certs,certs.shyxpextensions. A estos tendremos que a~nadir otro archivo de OpenSSL:CA.pl, un script
Perl para crearAutoridades de Certicaciony cuyopathno suele estar en el $PATH del sistema.
Para buscarlo podemos ejecutar:#find / | grep 'CA.pl', y lo copiamos donde los otros archivos.
Es preciso vericar las rutas de las ordenes de los scripts ya que puede ser que sino no funcionen bien.
En mi caso he tenido que modicar elcert.sh. En el archivoCA.certs, siguiendo el ejemplo que all aparece,
colocaremos nuestros datos en las variables del inicio del chero.
Para generar los certicados lo unico que deberemos de hacer es:
#apt-get install ./certs.sh
Lo que se muestra por pantalla sera algo parecido a esto:
# ./certs.sh
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
........................................................................................
.................................................+.+.........................+..........
+.........................+......................................+......................
........+.................+......+.............+........................................
...............+......+...................................+....+........................
......+......................+..++*++*++*++*++*++*
See the 'certs' directory for the certificates.
The 'certs' directory should be copied to .../etc/raddb/
All passwords have been set to 'whatever'
Ahora tendremos un nuevo directorio llamado./certsy donde se encuentran todos los certicados que
nos haran falta para el cliente y el servidor.
Es recomendable colocar estos certicados en/etc/freeradius/certs, ya que los archivos de conguracion
de freeradius apuntan a ese directorio y tendremos menos cosas que modicar.
Jose Antonio Escartn Vigo, Junio 2005.

270 Servidor Linux para conexiones seguras de una LAN a Internet
14.5.3. Comprobar el funcionamiento de FreeRadius
Hay que repasar los archivos:radiusd.conf,eap.conf,clients.confyusers.conf, los ajustaremos para
que cojan los certicados que hemos generado.
radiusd.conf: Hay que revisar las rutas de los certicados, para que apunten a los directorios donde
los hemos colocado.
eap.conf: Hay que asegurarse de colocar la contrase~na elegida enprivatekeypassword, si no lo
hicieramos nos pedira la clave al arrancar al demonio y no podra arrancarlo iniciar el sistema.
Ahora para ejecutar el servidor:
#freeradius -X, y para lanzar el demonio:/etc/init.d/freeradius start
Antes de pasar a congurar los usuarios es necesario congurar el AP, que sera el cliente de nuestro
servicio de Radius. La conguracion es realmente muy sencilla, yo lo tengo congurado como un router
entre dos redes la de usuarios (192.168.1.0/24) e Internet (en el graco la 172.16.1.253).
Revisamos elclient.confy asignamos a esa IP permisos para hacer peticiones al servidor Radius.
Aqu aparece otra contrase~na que utilizan el AP y el FreeRadius para cifrar sus comunicaciones. En el AP
deberemos colocar la misma clave (lo podemos observar en la gura 14.6).
14.5.4. Congurar AP (Router 3Com)
El router 3Com que utilizo me permite introducir seguridad basada en WPA con soporte para un
servidor Radius, como se puede observar en la gura 14.6.
Hay que introducir la direccion IP de la maquina y el puerto de escucha del servicio Radius.
Radius Keyes la clavesecreta que hemos elegido en/etc/freeradius/client.conf
Figura 14.6: Router 3Com con WPA y servidor radius
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 271
14.5.5. Clientes Linux: WPA-Supplicant
Debemos asegurarnos que nuestra tarjeta wireless se puede utilizar en WPA con EAP-TLS, si en la
documentacion no lo encontramos probablemente no sera compatible.
Si lo soporta, necesitamos saber es como se llama la tarjeta en el sistema (en mi caso eth1):
#iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 IEEE 802.11g ESSID:"example"
Mode:Managed Frequency:2.442 GHz Access Point: 00:12:17:B8:2E:12
Bit Rate:54 Mb/s Tx-Power:25 dBm
RTS thr:2347 B Fragment thr:2346 B
Encryption key:41ED-EE53-EE7C-84BF-005D-A8F7-C10F-0CE0-9E7D-A17F-A5FD-2ECD-7FF3-6A4C-4E73-BDC5
Power Management:off
Link Quality:95/100 Signal level:-54 dBm Noise level:-256 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1609 Invalid misc:6740 Missed beacon:0
Para tener acceso mediante los clientes Linux hay que instalar el siguiente programa:
#apt-get install wpasupplicant
Y crear el archivo de conguracion (/etc/wpasupplicant.conf) para pasar el certicado al servidor
Radius:
network={ ssid="example"
proto=WPA
key_mgmt=WPA-EAP
pairwise=TKIP
group=TKIP
eap=TLS
identity="[email protected]"
ca_cert="/etc/cert/cert-srv.pem"
client_cert="/etc/cert/root.pem"
private_key="/etc/cert/root.der"
private_key_passwd="password"}
Si utilizamos clave WPA sin servidor Radius se nos ofrece la posibilidad de encriptar la clave que se
pasara por la red, esto se consigue mediante el comando:
#/usr/sbin/wpa_passphrase <ssid> <passphrase>
Despues solo queda lanzar el cliente:
#wpa_supplicant -B -i <ifname> -c <config_file> -D <driver>
En mi caso,ifnamees eth1, elconglelo cree en /etc/wpasupplicant.conf y eldriveripw, esto
variara dependiendo de nuestra conguracion de hardware.
Si ejecutamos:#wpa_supplicant -h, veremos que soporte y para que driver ha sido compilado.
Y para comprobar si funciona correctamente la negociacion de los certicados ejecutamos:
#wpa_supplicant -dd -i eth1 -c /etc/wpa_supplicant.conf -D ipw
Jose Antonio Escartn Vigo, Junio 2005.

272 Servidor Linux para conexiones seguras de una LAN a Internet
14.5.6. Clientes Windows: WindowsXP + SP2
Como con los clientes Linux, debemos asegurarnos que nuestra tarjeta wireless se puede utilizar en
WPA con EAP-TLS.
Para instalar los certicados generados por OpenSSL (root.der y root.p12) es suciente con hacer doble
click sobre ellos.
Instalamos el certicado de la entidad emisora:root.der
Instalamos el certicado de cliente:root.p12, nos pedira la contrase~na del certicado
Para comprobar que realmente ha sido instalado, ejecutamos el siguiente comando en la consola:mmc
A traves delMicrosoft Manegement Console(mmc) podemos comprobar el certicado, :
Elegimos la opcion \agregar", \certicados". Pulsando sobre el debera de aparecer:
En certicados personales, el certicado de cliente
En entidades emisoras, el certicado del servidor
Ahora falta asociarlos a una conexion, vamos a ver las \conexiones de red inalambricas disponibles".
Pulsamos sobre \cambiar el orden de las redes preferidas"
Seleccionamos nuestra red en el listado, podremos observar que tiene el WPA activado
Apretamos al boton \propiedades"
En esta ventana, establecemos como autenticacion de red \WPA" y como cifrado de datos \TKIP"
Despues cambiamos a la pesta~na de autenticacion y establecemos como EAP arjeta inteligente u
otro certicado" y activamos la opcion \Autenticar como equipo cuando la informacion del equipo
este disponible"
Solo queda pulsar sobre \propiedades" de EAP
Solo queda seleccionar las siguientes opciones y aceptar: \usar un certicado en este equipo", \utilizar
seleccion simple de certicado", \validar un certicado de servidor" y elegir el certicado cliente que
hemos instalado.
Ahora, si volvemos a la pantalla principal de seleccion de redes detectadas y si pulsamos sobre nuestra
red podremos observar que aparece al lado del reloj del sistema un icono que nos informa sobre el uso
del certicado. Si presionamos sobre este icono aparecera una ventana emergente que nos avisa de que se
esta validando el servidor y que presionemos \aceptar" si el certicado es correcto, una vez presionemos
ya no sera necesario volver a repetir el proceso y si todo va bien podremos conectarnos de forma segura a
nuestra red.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 273
14.6. Herramientas de seguridad
Las redes wi son inseguras por denicion, el hecho de comunicarse por un medio de libre acceso como
es el aire implica que la transmision sera vulnerable.
Si en nuestra red no permitimos estas conexiones o si queremos estar alerta sobre que hacen nuestros
clientes wi (sean clientes autorizados o no), podremos utilizarKismet Wirelessherramienta que detallo
a continuacion. Tambien comento la herramienta de auditoraAirSnortque trata de descubrir la clave
WEP, si la utilizamos para el cifrado de datos.
14.6.1. Descubrir redes ilegales e intrusos: Kismet Wireless
Kismet Wireless es uno de los sniers inalambricos principales para Linux, pero existen otros programas
como AeroSni o Prism2Dump. He elegido Kismet debido a su creciente oferta de modulos de soporte.
Es una herramienta cliente-servidor como Nessus (Vease apartado 17.1), que proporciona incluso mas
exibilidad.
Funciona con otros programas y puede dise~narse para recopilar claves de cifrado para los intentos
de descifrado por otros programas externos. Podemos incluso ejecutar Kismet en modo IDS para buscar
intentos de intrusion que provengan de nuestra red inalambrica.
Instalar Kismet
Se puede obtener la version mas actualizada del programa en la direccion:
http://www.kismetwireless.net
Los pasos a seguir son los siguientes:
Instalar el programa:#apt-get install kismet
Editar y congurar el archivo:/etc/kismet/kismet.conf, aqu se ha de congurar el inicio de sesion
y las preferencias de la interfaz wi (el cuadro 14.2 recoge los parametros que se pueden congurar)
Editar y congurar el archivo:/etc/kismet/kismetui.conf, aqu se han de establecer las preferencias
de la interfaz graca de kismet (el cuadro 14.3 recoge los parametros que se pueden congurar)
Ya esta listo para auditar la red inalambrica
Kismet trabajando como snier de red
Iniciamos Kismet desde la lnea de comandos. Se abre la interfaz principal y inmediatamente informa
sobre cualquier red inalambrica en el area.
La interfaz se divide en tres secciones principales:
La seccionNetwork List(lista de redes) que se encuentra a la izquierda muestra todas las redes
inalambricas activas que puede ver Kismet y alguna informacion basica sobre ellas: el SSID de la red
(si esta disponible), el tipo (punto de acceso frente a nodo), si esta cifrada o no utilizando WEP, el
canal en el que se esta transmitiendo, el numero de paquetes interceptados hasta el momento, cual-
quier indicador sobre los datos y la cantidad de datos que estan por la red. La pantalla esta codicada
con colores, apareciendo en color rojo las redes activas y en negro las que no estan activas.
El cuadroInfo(informacion) que se encuentra a la derecha de la pantalla muestra las estadsticas
globales para esta sesion de captura (incluyendo el numero total de redes detectadas, el numero total
de paquetes, el numero de paquetes cifrados, las redes debiles percibidas, los paquetes con un alto
nivel de ruido, los paquetes descartados y la media de paquetes por segundo.
Jose Antonio Escartn Vigo, Junio 2005.

274 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 14.2: Archivo de conguracion de Kismet
Parametro Descripcion
Capture source
(Origen de captura)
Dene las interfaces que va a escuchar Kismet. Normalmente la inter-
faz inalambrica principal (wlan0, eth1, etc.) ya debera estar congurada
aqu. Si desea a~nadir interfaces adicionales puede hacerlo en el formato:
source=type, interface, name
Fuzzy encryption
(Cifrado confuso)
Muestra cualquier paquete que hayamos identicado como \sin descifrar"
para las estaciones que estan utilizando metodos de cifrado sin denir o
propietarios. Generalmente se deja desconectado a no ser que su tarjeta
este informando sobre redes cifradas como \sin descifrar".
Filtering packet logs
(Filtrar registros de pa-
quete)
Limita el paquete que se registra. Utilice la opcionnoiselogpara quitar
cualquier paquete que parezca que se va a desglosar o fragmentar por el
ruido. En una zona muy ocupada con mucha interferencia o cuando se uti-
liza una tarjeta que tiene una antena externa, puede mantener el tama~no
de su registro reducido. La opcionbeaconlogquita todos los paquetes de
se~nales luminosas, excepto el primero, de un punto de acceso determina-
do. La conguracionphylogquita cualquier paquete de la capa fsica que
a veces se recogen. Tambien puede utilizar cualquier combinacion de estas
conguraciones.
Decrypt WEP keys
(Descifrar claves WEP)
Descifra los paquetes de datos interceptados al momento. Sin embargo, pri-
mero tiene que tener la clave que a veces, se obtiene utilizando AirSnort.
Cada punto de acceso necesita una declaracion independiente en el formato
bssid:key, siendobssidla direccion MAC del punto de acceso ykeyla
clave para dicho punto de acceso
Using an external IDS
(Utilizar un IDS externo)
Enva paquetes a un IDS externo para un analisis posterior
Cuadro 14.3: Conguracion de la la interfaz UI de Kismet
Conguracion Descripcion
Columns(Columnas) Cambia lo que aparece en las columnas de la interfaz Kismet y su orden. Cam-
biamos el valor decolumnsoclientcolumnsincluyendo lo que desea ver. Un
listado completo de columnas se encuentra disponible en las paginas del manual
de Kismet
Colors(Colores) Cambia los colores de cualquiera de los elementos que se muestran. Cambiamos
la conguracion concolor xxxal codigo de color que deseemos. Tendremos
que jugar con esta conguracion un poco hasta obtener los colores correctos.
El cuadroStatus(Estado) en la parte inferior de la pantalla contiene una vista de desplazamiento
con los eventos producidos. Los mensajes se abren cuando aparecen nuevas redes o se producen otros
eventos.
Como Kismet es una herramienta de lnea de comandos, aunque con una GUI, utiliza comandos de
teclas para controlar sus funciones. El cuadro 14.4 incluye una lista de las teclas disponibles desde la
pantalla principal.
Soporte GPS de Kismet
Kismet tiene la capacidad de grabar datos GPS si tiene un receptor GPS conectado a la maquina.
Necesitamos el software demonio de GPSgpsdpara que Kismet pueda leerlo.
Lo podemos instalar con el comando:#apt-get install gpsd
Para utilizarlo es parecido habilitar el uso de GPS en el archivo de conguracion de Kismet. Despues
Kismet escoge automaticamente las coordenadas de las redes detectadas y las registra.
Podemos ir un paso mas alla y crear un mapa con estas coordenadas. Kismet incluye un programa
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 275
Cuadro 14.4: Comandos de tecla Kismet
Tecla Descripcion
a Muestra estadsticas sobre cuentas de paquetes y asignaciones de canal
c Abre una ventana emergente para mostrar los clientes en la red seleccionada
d Le indica al servidor que inicie la extraccion de cadenas imprimibles desde el ujo de paquetes
y que las muestre
e Abre una ventana emergenete en servidores Kismet, lo que permite supervisar simultaneamente
dos o mas servidores Kismet en distintos antriones (hay que recordar que se trata de una
arquitectura cliente-servidor)
f Sigue el centro estimado de una red y muestra un compas
g Agrupa las redes codicadas actualmente
h Obtiene una lista de todos los comandos posibles
i Muestra informacion detallada sobre la red o el grupo actual
l Muestra los niveles de se~nal/capacidad/ruido si la tarjeta informa sobre ellos
m Silencia el sonido y la voz, si estan activados (o los activa si estan silenciados)
n Renombra la red o el grupo seleccionado
p Muestra los tipos de paquetes tal y como se han recibido
r Muestra un graco de barra del porcentaje de los paquetes
s Ordena la lista de redes de forma diferente
t Codica (o descodica) la red actual
u Desagrupa la red actual
w Muestra todas las alertas y avisos previos
z Ampla el nivel de zoom del panel de presentacion de la red a pantalla completa (o vuelve a su
tama~no normal si ya estaba en pantalla completa)
denominadoGPSMPAque traza automaticamente los datos recopilados en mapas en formato.gpsEl
inconveniente es que tiene que proporcionar su propio mapa GPS calibrado.
Existe un programa de trazado de mapas de libre distribucion para Linux denominadoGPSDrive, lo
podemos instalar con:#apt-get install gpsdrive.
IDS de Kismet
Tambien podemos congurar Kismet como un IDS inalambrico. Kismet interceptara todas las se~nales
entrates y detectara el traco inalambrico que se sabe esta asociado con los ataques a redes wi o activi-
dades inalambricas sospechosas.
Detecta unos 10 tipos diferentes de traco, incluyendo sondeos del programa NetStumbler (herramienta
para Windows), la actividad de Airjack y otras herramientas de piratera inalambrica. Y, como es de
libre distribucion, siempre podemos ampliarlo mediante la escritura de nuestras propias alertas. Tambien
podemos canalizar los datos de Kismet a traves de un IDS tradicional comoSnort(Vease seccion 13.5)
para obtener un analisis mas detallado.
La opcion IDS se congura en/etc/kismet/kismet.confy de forma predeterminada esta deshabilitada.
Tambien puede congurar Kismet para recopilar claves debiles conocidas criptogracamente para un
programa como AirSnort, que analiza paquetes inalambricos e intenta descifrar el cifrado WEP. Pasemos
a describir el funcionamiento de este programa.
14.6.2. Desencriptar claves inalambricas WEP: Airsnort
Si utilizamos criptografa por clave WEP, cosa que no recomiendo, podemos probar si nuestra clave se
puede deducir facilmente con esta herramienta. Actualmente la encriptacion WPA es mas segura y es una
mejor solucion para servidores.
AirSnort se desarrollo como una aplicacion practica para demostrar la debilidad de WEP, el protocolo
basico de cifrado inalambrico. Una nota sobre las debilidades en el algoritmo de programacion de claves de
Jose Antonio Escartn Vigo, Junio 2005.

276 Servidor Linux para conexiones seguras de una LAN a Internet
RC4, escrita por los expertos criptogracos Fluhrer, Martin y Shamir, inclua detalles sobre una teorica
debilidad en el algoritmo WEP, describiendo la debilidad de algunos vectores de inicializacion. Los paquetes
cifrados con estos vectores debiles se podan coleccionar y al nal habra sucientes datos para extrapolar la
clave secreta compartida, lo que permitira descifrar facilmente los paquetes. Poco despues, se lanzaron dos
herramientas, AirSnort y WEPCrack, que empleaban las debilidades descritas para recuperar claves WEP,
descifrandolas con efectividad. Ambas son buenas herramientas, pero AirSnort tiene una funcionalidad
adicional como snier inalambrico.
AirSnort es ahora un proyecto de libre distribucion que se encuentra en SourceForge.net y que se ha
extendido y mejorado considerablemente desde su lanzamiento.
Usos de AirSnort
>Por que utilizar AirSnort en una red inalambrica? Alguien podra decir que no existe un uso legtimo
para el programa y su unico proposito es el de ser una herramienta para el asalto de redes. Creo que la
unica forma de saber lo expuesta que esta nuestra red inalambrica es hacer lo que hara un intruso para
comprobar si nuestro cifrado se puede descifrar y la cantidad de tiempo que tardara en hacerlo. AirSnort
lleva a cabo precisamente esta tarea.
Al intentar descifrar el cifrado inalambrico, podemos ver si se puede hacer. Si se esta utilizando un
WEP estandar, entonces es simplemente cuestion de tiempo. Es una realidad matematica que se puede
descifrar en algun punto utilizando esta herramienta. La cuestion es cuanto tardaremos en hacerlo. Si
tardamos mucho tiempo, podemos suponer razonablemente que estamos bastante seguros. Si el nivel de
traco de nuestra LAN es peque~no, puede ser cuestion de das o incluso de semanas, lo que situa a nuestra
red fuera del reino de lo practico para la mayora de los piratas informaticos casuales. Sin embargo, si es
una red ocupada, alguien podra recoger los paquetes sucientes para descifra nuestro cifrado en cuestion
de horas o en un da. Saber todo esto nos ayuda a proteger mejor nuestra red. Puede justicar incluir
mas protecciones, como mejores controles fsicos o limitar el traco en la red. Tambien puede justicar la
actualizacion de nuestro equipamiento inalambrico, como por ejemplo a un sistema WPA con un servidor
Radius, como el que se propone en este proyecto. Una red inalambrica que utiliza este protocolo puede
ser, actualmente (solo actualmente) indescifrable. Podemos descubrir que el nivel de traco no hace que
sea practico descifrar el cifrado. De cualquier forma, dormiremos mucho mejor por la noche, si lo sabemos.
Ejecutar AirSnort
Para instalarlo solo hay que ejecutar la siguiente instruccion:
#apt-get install airsnort
Tiene tres archivos ejecutables principales:
airsnort: Recopila los paquetes desde algun origen, normalmente la tarjeta de red inalambrica
gencases: Ordena los datos capturados en busca de claves debiles
decrypt: Realiza los intentos en desconexion de descifrado para los archivos cargados desde otro
origen
AirSnort acepta archivos de otros sniers inalambricos siempre que se guarden en formato PCAP. Con
el tiempo, Kismet separara especcamente los paquetes interesantes para AirSnort, ahorrandonos este
paso.
No es necesario tener toda la coleccion de datos a la vez. AirSnort puede guardar una sesion y retomarla
posteriormente para realizar adiciones, lo que convierte a AirSnort en una herramienta particularmente
peligrosa para redes inalambricas ya que nadie tiene que perder una sesion interrumpida cerca de nuestras
instalaciones para recopilar los paquetes sucientes como para entrar en nuestra red. Puede dividir sus
actividades de recopilacion en incrementos de tiempo mas peque~nos y menos perceptibles, suponiendo que
la red controlada no cambie sus claves con frecuencia.
Una vez instalado AirSnort, podemos empezar escribiendoairsnorten la lnea de comandos. Como
puede verse en la gura 14.7, la interfaz es muy simple: es una sola pantalla que muestra los paquetes
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 14. Redes inalambricas 277
interesantes y el numero total de paquetes cifrados y sin cifrar. La seccion superior muestra nuestras
conguraciones, como el tipo de tarjeta NIC, etc. A la derecha podemos cambiar algunas conguraciones
comobreadth(numero e intentos que tiene que realizar AirSnort por cada byte de clave) para intentos de
descifrado de 40 bits o 128 bits. El valor predeterminado es 3 para cifrados de 40 bits y 2 para cifrados de
128 bits. Si no tenemos muchos datos o tenemos mucha capacidad de procesamiento adicional, podemos
intentar aumentar este valor ligeramente, pero no mas de 4 o 5.
Figura 14.7: Imagen de AirSnort
A continuacion, es el momento de sentarnos a recopilar paquetes. No hay que esperar descifrar claves
WEP en un momento. Para que AirSnot funcione correctamente, necesita aproximadamente entre 1.500 y
4.500 paquetes con claves debiles, es decir, aproximadamente entre 100MB y 500MB de datos. En una red
moderadamente ocupada, podemos tardar uno o mas das en recopilar esta cantidad de datos. En redes
mas lentas, podemos tardar mas y en redes ocupadas mucho menos. Hay que esperar, al menos, tardar un
par de horas, aunque seguramente sea mas. Evidentemente, todo se basa en tener un poco de suerte, por
lo que los resultados pueden variar entre una hora y nunca.
Cuando un desciframiento de la clave WEP tiene exito, aparece tanto en texto normal como en hexa-
decimal en la parte izquierda de la pantalla y los extremos de la sesion de captura.
>Que pasara si encontrasemos las claves WEP? Bueno, hay que tranquilizarse, que no nos entre el
panico ya que la mayora de los intrusos casuales no se molestaran lo mas mnimo. Sin embargo deberamos
pensar en tomar medidas para aumentar la seguridad de nuestra red inalambrica para que sea mas difcil
recopilar estos datos. Hay que seguir muchos pasos que varan desde reemplazar el equipamiento hasta
volver a congurar y cambiar el AP (punto de acceso). Tendremos que tomar decisiones basandonos en la
condencialidad de los datos que tratamos en nuestra red.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 15
Servicio de administracion por Web:
WebMin
Para acceder a la conguracion deWebmin, si no hemos cambiado los puertos por defecto:
http://127.0.0.1:10000, ohttp://localhost:10000, https si usamos SSL
Webmin esta dividido en diversos modulos. Cada uno de estos se encarga de la administracion de una
parte concreta del sistema operativo y de los diferentes servicios que tengamos instalados.
Crea una conguracion para cada uno de los modulos basandose en la estructura de cheros y con-
guracion predeterminada para la version y distribucion de Linux seleccionadas.
Los modulos incluidos por defecto en Debian nos permiten administrar entre otros servicios Apache,
Squid, Bind, Exim, Fetchmail, Samba, MySql, etc.
Nota:Un problema que puede producirse en determinadas circunstancias es que una vez nalizada la
instalacion algunos de los modulos que componen Webmin no funcionen correctamente. Esto suele ser
debido a que alguna parte del software se ha instalado en directorios que no son estandar en Linux.
15.1. Usuarios de Webmin
El usuario por defecto es el root, una vez que entramos en Webmin podemos crearnos uno o varios
usuarios de administracion Webmin.
En el caso de que se nos olvide la contrase~na de acceso y tengamos acceso como root al ordenador, se
puede crear una nueva utilizando el comando:
/usr/share/webmin/.changepass.pl /etc/webmin usuario nuevo_password
En el modulousuarios de Webminse encuentran las diferentes opciones disponibles para denir y
congurar los usuarios que tendran acceso a Webmin. Permite al administrador del sistema crear diferentes
usuarios para determinadas tareas. Por ejemplo, si el ordenador se utiliza como servidor de correo, podemos
crear un usuario que tan solo tenga acceso al modulo de administracion de Exim, o si se emplea como
servidor de impresion crearamos un usuario que pudiera administrar las colas de impresion.
De esta forma es posible crear diferentes usuarios en funcion de los modulos a los que tendran acceso,
delegando facilmente la administracion de determinados servicios del ordenador a diferentes usuarios y
siendo posible incluso determinar que aspectos de un determinado servicio podra administrar.
15.2. Secciones Webmin
La seccion Webmin nos da acceso a las diferentes opciones de conguracion de Webmin, as como a
los logs de actuaciones, el ndice de servidores Webmin y los usuarios Webmin.

280 Servidor Linux para conexiones seguras de una LAN a Internet
Desde el modulo de conguracion de Webmin podemos cambiar los aspectos mas importantes del
propio Webmin como instalar nuevos modulos, actualizar Webmin, cambiar el idioma, a~nadir, eliminar o
modicar usuarios de Webmin, cambiar el puerto utilizado, etc.
Figura 15.1: Webmin pantalla de conguracion
Control de acceso a IP
Ya que Webmin tienen su propio servidor web (miniserv.pl) desde esta opcion podemos seleccionar
que direcciones de red (como 192.168.100.0), direcciones de host (como 192.168.100.7) o nombres de hosts
(linux.upc.es) es posible acceder a Webmin.
Es aconsejable limitar el acceso a Webmin al mnimo de ordenadores que sea posible para evitar de
esta forma intentos de acceso no autorizados.
Puerto y direcciones
En esta opcion estableceremos el puerto utilizado para acceder a Webmin, por defecto 10000. En el caso
de que nuestro ordenador tenga asignada mas de una direccion IP tambien podremos establecer que di-
reccion IP debera atender el servidor web de Webmin, ya que por defecto el servidor aceptara peticiones
realizadas a cualquiera de las direcciones IP asignadas al sistema.
Diario
Desde aqu conguraremos la forma en que Webmin guardara un registro de las acciones realizadas.
De esta forma podremos monitorizar facilmente las actuaciones realizadas por los diferentes usuarios a los
que proporcionemos acceso a Webmin.
Webmin nos permite guardar en el historial las acciones realizadas en funcion del modulo utilizado o
del usuario. Se permite programar cuando se limpiara el historial para evitar que el tama~no del mismo
crezca en exceso.
Servidores Proxy
Webmin dispone de diferentes herramientas que necesitan disponer de acceso a Internet para funcionar
correctamente, como es el caso de la herramienta de actualizacion de Webmin. Desde esta opcion con-
guraremos el acceso a Internet de Webmin en el caso de que estemos utilizando un servidor proxy o un
cortafuegos para acceder a Internet
Interfaz de usuario
El interfaz de usuario de Webmin puede ser modicado de diferentes formas para ajustarse a las
preferencias de cada uno de los usuarios.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 15. Servicio de administracion por Web: WebMin 281
Desde esta opcion se modican los colores y tipos de letras utilizados para visualizar las paginas de
Webmin.
Modulos de Webmin
Webmin esta formado por diversos modulos. cada uno de estos modulos se encargan de realizar una
tarea determinada interrelacionada con el servidor web de Webmin (miniserv.pl).
Desde esta opcion, a~nadiresmo, actualizaremos o eliminaremos los modulos utilizados por Webmin.
Esta se encuentra dividida en tres secciones:
Instalar modulo
Clonar modulo
Borrar modulos
Instalar moduloLa seccionInstalar modulopermite instalar un nuevo modulo de Webmin, ya sea
desde un archivo que se encuentre en el ordenador o desde un archivo que tenga que descargarse de
Internet.
Estos modulos Webmin son archivos de extension.wbm
Clonar un moduloEsta opcion permite al administrador del sistema duplicar un modulo para permi-
tir a determinados usuarios administrar ciertos servicios. As, por ejemplo, si tenemos dos conguraciones
diferentes de Apache ejecutandose en el ordenador, con esta opcion duplicaremos el modulo de administra-
cion de Apache para permitir a diferentes usuarios acceder de forma independiente a la version de Apache
que sea necesario.
Eliminar modulosDesde esta ultima seccion, seleccionaremos y borraremos aquellos modulos que no
nos sean de interes o no se vayan a utilizar. As, por ejemplo, si no tenemos instalado en nuestro ordenador
PostgreSQL podemos eliminar el modulo utilizando para su administracion.
Sistema operativo
Desde esta opcion podremos especicar cual es nuestro sistema operativo. Este proceso debera realizarse
si, por ejemplo, hemos actualizado el sistema operativo instalando una version nueva, la cual modica la
estructura de directorios en los que se guardaba la conguracion de los diferentes servicios del sistema.
Lenguaje
Se emplea para seleccionar el idioma utilizado para visualizar los textos en los modulos.
Opciones de pagina ndice
En esta opcion seleccionaremos el formato de la pagina inicial de Webmin y de las diferentes paginas
ndice de cada una de las categoras existentes, indicando el numero de iconos a visualizar en cada la.
Tambien podemos indicar si queremos agrupar los modulos en funcion de la categora a la cual perte-
necen.
Mejorar Webmin
Desde esta pagina es posible actualizar Webmin a la ultima version disponible de forma automatica o
desde un archivo que hayamos descargado de Internet.
Utiliza un gestor de paquetes para realizar la tarea, en nuestro caso apt.
Jose Antonio Escartn Vigo, Junio 2005.

282 Servidor Linux para conexiones seguras de una LAN a Internet
Autenticacion
Webmin proporciona algunas caractersticas orientadas a prevenir ataques como puede ser el intentar
averiguar la contrase~na de administracion a base de probar diferentes contrase~nas de forma automatica
hasta encontrar la correcta.
En el caso de que nuestro ordenador y Webmin sean accesibles desde Internet es recomendable utilizar
las caractersticas de autenticacion proporcionadas por Webmin para proteger nuestro sistema de posibles
ataques.
La primera opcion que encontramos en la cha esTiempo maximo de clave de acceso. Si activamos
esta opcion, se bloqueara el acceso al ordenador si se producen una serie de fallos en unos segundos
determinados, esto indicara que alguien esta ejecutando una aplicacion automatica para descubrir
nuestra contrase~na.
LaAutenticacion de sesionnos proporciona un metodo para desconectar un usuario de Webmin si
transcurre un determinado tiempo sin que este realice alguna operacion.
Tambien podemos especicar si permitimos el acceso a Webmin empleando las cuentas de usuario
del sistema en lugar de emplear las cuentas de usuario denidas desde Webmin. Hay que tener
mucho cuidado con esta opcion, cualquier usuario que tenga acceso al sistema, sea administrador o
no, podra trabajar con Webmin.
Reasignando modulos
Como ya se ha comentado Webmin agrupa los modulos instalados en diferentes categoras. Estas
categoras estan denidas en funcion de la tarea que realiza el modulo. Desde estas opcion Webmin nos
permite asignar un modulo a una nueva categora en el caso de que no estemos de acuerdo con la categora
asignada por defecto.
Algunos modulos desarrollados antes de que se crearan las categoras en Webmin se asignan por defecto
a la categoraOtros.
Editar categoras
Utilizaremos esta opcion para crear nuevas categoras o editar las existentes.
Temas de Webmin
En estas seccion se puede modicar el aspecto y los colores de Webmin, utilizando temas.
Los temas de Webmin son muy exibles, permitiendo al desarrollador modicar practicamente cualquier
aspecto de la apariencia y distribucion de los elementos de Webmin.
Referenciadores de conanza
Al estar basado en archivos web y accederse a el desde un navegador web, uno de los peligros con los
que podemos encontrarnos es el hecho de que la informacion de autenticacion se guarda en el navegador
y puede ser reenviada de forma automatica desde el. Esto puede causar que otro usuario que emplee el
mismo navegador tenga acceso a nuestro sistema sin conocer tan si quiera la contrase~na o nombre de
usuario de Webmin.
En esta seccion podremos indicar que hosts tienen acceso a Webmin, limitando de esta forma desde
que ordenadores se podra utilizar.
Acceso anonimo a modulo
Esta seccion permite garantizar acceso a modulos selectos de Webmin y a trayectorias sin necesidad
de que los clientes hagan login.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 15. Servicio de administracion por Web: WebMin 283
Bloqueo de archivo
Permite bloquear un archivo para que no sea modicado por varios usuarios al mismo tiempo y esto
pueda producir incoherencias en el sistema.
Encriptacion SSL
Si tenemos instaladas en nuestro ordenador las librerasOpenSSLy el modulo de PerlNet::SSLeay
podremos emplear conexiones encriptadas con SSL para acceder a Webmin. Para acceder a Webmin
utilizaremos una conexion segura, de la forma:
https://127.0.0.1:10000, ohttps://localhost:10000
As incrementaremos la seguridad de Webmin, ya que la informacion, como por ejemplo el nombre de
usuario y contrase~na, se enviara de forma encriptada.
Aunque se instala OpenSSL por defecto en la mayora de distribuciones de Linux actuales, es posible
que no tenga instaladoNet::SSLeay.
Para instalarOpenSSLyNet::SSLeaydeberemos instalar los siguientes paquetes:
#apt-get install openssl
#apt-get install libnet-ssleay-perl
Autoridad de certicado
Esta opcion se emplea para congurar un certicado SSL para el sistema. De esta forma es posible
congurar Webmin para que no sea necesario proporcionar un usuario y contrase~na para utilizarlo. Los
usuarios pueden solicitar un certicado personal en el modulo de usuarios de Webmin y agregarlo al
navegador, de esta forma el navegador podra autenticarse de forma automatica y segura.
El problema que puede surgir al utilizar este metodo de autenticacion es que cualquier usuario con
acceso a un navegador que contenga un certicado valido para acceder a Webmin podra utilizar las
herramientas de administracion. Este metodo tambien invalida polticas de seguridad como la desconexion
del usuario despues de un determinado periodo de inactividad, ya que simplemente volviendo a abrir el
navegador podramos acceder.
15.3. Modulos de Webmin
Existen diversos modulos, que podemos instalar con apt y que permiten congurar de forma rapida
y graca muchas partes del sistema. En la tabla 15.1 podemos observar algunos, solo he colocado los
modulos mas utiles. La mayora de ellos han sido utilizados durante la elaboracion del proyecto.
Podemos buscar mas modulos Webmin dentro del sistema Debian conapt-cache:
#apt-cache search webmin
Otra fuente de modulos para Webmin la encontraremos en la pagina:
http://webadminmodules.sourceforge.net/
Aqu hallaremos una gran cantidad de modulos agrupados por categoras.
Para instalar los modulos, simplemente realizaremos un apt:
#apt-get install <m\'odulo>
Jose Antonio Escartn Vigo, Junio 2005.

284 Servidor Linux para conexiones seguras de una LAN a Internet
En la siguiente tabla se muestran la mayoria de los modulos disponibles en nuestro sistema Debian:
Cuadro 15.1: Modulos Debian para Webmin
Tipo de operacionModulo Funcion
Gestion del servidorwebmin-virtual-server Administracion remota
webmin-lilo Gestor de arranque Lilo
webmin-grub Gestor de arranque Grub
webmin-status Estado del servidor
webmin-fsdump Copias de seguridad
webmin-inetd Superservidor
webmin-lemanager Archivos
Gestion de paqueteswebmin-software Paquetes instalados
webmin-pserver Versiones concurrentes
webmin-core Modulos core
Gestion de la redwebmin-adsl Cliente PPPoE
webmin-bandwidth Monitor de red
webmin-dhcp DHCP
webmin-bind BIND DNS
webmin-nis NIS
webmin-exports NFS
webmin-samba Samba
Servicios de red webmin-proftpd ProFTPD
webmin-updown FTP
webmin-telnet Telnet
webmin-ldap-user-simple LDAP usuario
webmin-ldap-netgroups LDAP redes
webmin-mysql MySql
Gestion de usuarioswebmin-usermin Usuarios
webmin-quota Cuotas de disco
webmin-lpadmin Cuotas de impresion
Servicios de usuariowebmin-apache Apache
webmin-webalizer Estadsticas web
webmin-exim Correo corporativo Exim
webmin-fechmail Correo externo Fechmail
webmin-procmail Procesador de correo Procmail
webmin-spamassassin Filtro SpamAssassin
webmin-jabber Mensajera Jabber
Gestion de seguridadwebmin-sshd SSH
webmin-rewall IPTables
webmin-squid Squid
webmin-snort IDS Snort
webmin-portsentry IDS puertos
webmin-logrotate IDS logs
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 15. Servicio de administracion por Web: WebMin 285
Una vez instalados todos los modulos necesarios para el proyecto pasemos a ver gracamente las sec-
ciones de nuestro servidor.
Figura 15.2: Pantallas de la interfaz Webmin (I)
Jose Antonio Escartn Vigo, Junio 2005.

286 Servidor Linux para conexiones seguras de una LAN a Internet
Figura 15.3: Pantallas de la interfaz Webmin (II)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 16
Servicios de monitorizacion del
sistema
Para tener bajo control el sistema, es muy importante tener informacion esencial de su rendimiento:
procesos en ejecucion, cantidad de memoria disponible, n.
o
de particiones, etc.
16.1. Monitor del sistema: Top
Proporciona una vision continuada de la actividad del procesador en tiempo real, muestra las tareas
que mas uso hacen de la CPU, y tiene una interfaz interactiva para manipular procesos.
Las cinco primeras lneas muestran informacion general del sistema:
Las estadsticas del comandouptime
Estadsticas sobre los procesos del sistema (numero de procesos, procesos durmiendo, procesos eje-
cutandose, procesos zombies y procesos parados).
El estado actual de la CPU (porcentaje en uso por usuarios, por el sistema, por procesos con valornice
positivo, por procesos esperando E/S, tratando interrupciones hardware y software o desocupada).
La memoria (memoria total disponible, usada, libre, compartida, usada como buer de E/S y en
cache, cantidad total de buer o memoria cache de pagina, en kilobytes, que esta en uso activo,
cantidad total de buer paginas de la cache que podran quedar libres, cantidad total de buer o
paginas de la cache que estan libres y disponibles.)
El espacio de swap (swap total disponible, usada y libre).
El resto es similar al delps, con los procesos ordenados decrecientemente por el uso de la CPU.
La lista es actualizada de forma interactiva, y ademas se permite realizar una serie de tareas sobre los
procesos, como por ejemplo:
Cambiar la prioridad de alguno utilizando el comando ".
Matar o enviar una se~nal con el comando \k".
Ordenarlos segun diferentes criterios (por PID con \N", uso de CPU con \P", tiempo con \A", etc.).
Con " se cambia el numero de procesos que se muestran.
Para salir se utiliza la letra \q".

288 Servidor Linux para conexiones seguras de una LAN a Internet
Resulta muy recomendable siempre tenertopfuncionando en uno de los terminales, para poder ver de
forma rapida si hay cargas excesivas en el sistema.
En el siguiente ejemplo podemos observar lo que se vera habitualmente:
$top
top - 15:52:23 up 3:39, 4 users, load average: 0.46, 0.22, 0.29
Tasks: 96 total, 1 running, 95 sleeping, 0 stopped, 0 zombie
Cpu(s): 13.9% us, 2.6% sy, 0.0% ni, 83.5% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 511948k total, 491884k used, 20064k free, 63432k buffers
Swap: 979924k total, 0k used, 979924k free, 250764k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4359 root 6 -10 107m 39m 5672 S 9.9 7.9 11:00.41 XFree86
4479 josan 15 0 22700 13m 9656 S 1.3 2.7 0:06.16 gnome-panel
4501 josan 15 0 18992 9.9m 7920 S 1.3 2.0 0:08.43 wnck-applet
4918 josan 15 0 30828 12m 8624 S 1.3 2.6 0:20.18 gnome-terminal
10072 josan 16 0 2132 1064 832 R 1.0 0.2 0:00.16 top
4642 josan 15 0 56140 33m 19m S 0.7 6.6 8:53.77 kile
4475 josan 16 0 12556 7396 6176 S 0.3 1.4 0:08.92 metacity
4503 josan 15 0 17160 8376 6884 S 0.3 1.6 0:10.62 multiload-apple
4512 josan 15 0 18568 8576 7012 S 0.3 1.7 0:33.27 clock-applet
1 root 16 0 1584 512 452 S 0.0 0.1 0:01.07 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.85 events/0
4 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
18 root 10 -5 0 0 0 S 0.0 0.0 0:01.90 kacpid
111 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 kblockd/0
125 root 16 0 0 0 0 S 0.0 0.0 0:00.24 khubd
246 root 15 0 0 0 0 S 0.0 0.0 0:00.55 pdflush
247 root 15 0 0 0 0 S 0.0 0.0 0:02.41 pdflush
249 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0
248 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
256 root 15 0 0 0 0 S 0.0 0.0 0:00.00 cifsoplockd
257 root 25 0 0 0 0 S 0.0 0.0 0:00.00 jfsIO
258 root 25 0 0 0 0 S 0.0 0.0 0:00.00 jfsCommit
259 root 25 0 0 0 0 S 0.0 0.0 0:00.00 jfsSync
260 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 xfslogd/0
261 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 xfsdatad/0
262 root 15 0 0 0 0 S 0.0 0.0 0:00.00 xfsbufd
881 root 17 0 0 0 0 S 0.0 0.0 0:00.00 kseriod
1104 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khpsbpkt
1114 root 15 0 0 0 0 S 0.0 0.0 0:00.00 knodemgrd_0
1117 root 15 0 0 0 0 S 0.0 0.0 0:00.00 pccardd
...
16.2. Rendimiento del sistema
Al determinar el rendimiento del sistema se debe:
1. Denir el problema con todo el detalle que sea posible.
2. Determinar la causa o causas del problema.
3. Formular explcitamente los objetivos para mejorar el rendimiento del sistema.
4. Dise~nar e implementar las modicaciones al sistema y/o programas de aplicacion dise~nados para
llevar a cabo esos.
5. Monitorizar el sistema para determinar si los cambios realizados han sido efectivos.
6. Ir de nuevo al primer paso y volver a empezar, habra un nuevo problema a resolver.
16.2.1. CPU, dispositivos y particiones de E/S: iostat
Para instalarlo hay que ejecutar el siguiente comando:
# apt-get install sysstat
Presenta estadsticas sobre la CPU y los dispositivos y particiones de E/S. Para ejecutarlo:
$iostat
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 16. Servicios de monitorizacion del sistema 289
Y un ejemplo del comando sera:
# iostat
Linux 2.6.11 (debian) 26/05/05
cpu-med: %user %nice %sys %iowait %idle
12,55 0,10 1,85 1,82 83,68
Device: tps Blq_leid/s Blq_escr/s Blq_leid Blq_escr
hda 2,12 35,58 14,16 581224 231256
hdc 0,01 0,08 0,00 1384 0
Donde el signicado de las columnas es el siguiente:
tps: n.
o
de transferencias por segundo
Blqleid/s: n.
o
de bloques ledos por segundo
Blqescr/s: n.
o
de bloques escritos por segundo
Blqleid: n.
o
total de bloques ledos
Blqescr: n.
o
total de bloques escritos
16.2.2. Memoria: free
Se utiliza para obtener informacion sobre el estado de la memoria, (el signicado de los campos es
mismo que entop).
Este podra ser un ejemplo de su uso:
# free
total used free shared buffers cached
Mem: 511948 472644 39304 0 63548 230704
-/+ buffers/cache: 178392 333556
Swap: 979924 0 979924
16.2.3. Memoria virtual: vmstat
Si queremos obtener informacion sobre la memoria virtual utilizaremos este comando.
Esto podra ser una salida tpica:
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 38528 63620 230752 0 0 17 7 1063 255 12 2 84 2
En la siguiente tabla muestro el signicado de las columnas:
r: numero de procesos esperando su tiempo de ejecucion.
b: numero de procesos en espera
w: numero de procesos en espacio de intercambio
us: tiempo de usuario como porcentaje del tiempo total
Jose Antonio Escartn Vigo, Junio 2005.

290 Servidor Linux para conexiones seguras de una LAN a Internet
sy: tiempo de sistema como porcentaje del tiempo total
id: tiempo de inactividad como porcentaje de tiempo total
Si ejecutamos con la opcion:$vmstat 2, refresca cada segundo.
16.2.4. Disco: df, du
Para poder observar estadsticas del disco utilizaremos estos comandos:
df: por cada sistema de cheros informa de su capacidad, del espacio libre, del espacio usado y del
punto de montaje
du: cantidad de espacio utilizado por un directorio, y todos los subdirectorios que hayan en el.
Esto es la salida de mi sistema para el comando df:
# df
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
/dev/hda4 1921188 127236 1696360 7% /
tmpfs 255972 8 255964 1% /dev/shm
/dev/hda5 1921156 22344 1801220 2% /boot
/dev/hda7 1921156 324 1823240 1% /tmp
/dev/hda8 964500 505948 409556 56% /var
/dev/hda9 3842376 3656336 0 100% /usr
/dev/hda10 2284880 150528 2018284 7% /home
/dev/hda11 31246392 29145696 2100696 94% /mnt/ntfs
none 5120 3216 1904 63% /dev
Se puede ver que el disco tiene un grave problema en/usr, ya que esta en uso al 100 %. Hay que liberar
espacio para que el sistema funcione correctamente.
Con el comando#du -sh, se muestra el espacio usado por los archivos y directorios del directorio
actual.
16.2.5. Usuarios y sus procesos: w
Sirve para determinar que usuarios estan conectados y que estan haciendo.
El siguiente ejemplo ilustra el comando:
# w
17:07:08 up 4:54, 2 users, load average: 0,31, 0,22, 0,26
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
josan :0 - 12:18 ?xdm? 36:34 1.54s x-session-manag
josan pts/4 :0.0 15:53 1.00s 0.11s 25.63s gnome-terminal
Las columnas que aparecen signican lo siguiente:
JCPU: tiempo usado por todos los procesos asociados a ese terminal (incluye los procesos en segundo
plano actuales, pero no los pasados)
PCPU: tiempo de CPU usado por el proceso actual
16.3. Gestionar procesos
Para poder observar y modicar el funcionamiento de nuestros procesos disponemos de las siguientes
herramientas:
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 16. Servicios de monitorizacion del sistema 291
16.3.1. Visualizar procesos: ps
El comando ps, abreviatura de proceso, nos ense~na todos los procesos que se estan ejecutando en un
sistema, algo que puede ser muy util para determinar si existe algun proceso ejecutandose en segundo
plano que no debera estar ejecutandose.
En la tabla 16.1 podemos observar una lista de las opciones del comando:
Cuadro 16.1: Opciones del comando ps
Opcion Descripcion
A Muestra los procesos de todos los usuarios
a Muestra los procesos de los usuarios para todos los procesos con tty (terminal)
u Muestra el nombre del usuario del proceso
x Muestra los procesos con control de tty
-u<user>Muestra los procesos del usuario
A continuacion muestro las opciones mas comunes:
$ps
$ps aux
$ps al
$ps -u<user>
La informacion se encuentra subdividida en las siguientes columnas:
USER: usuario que lanzo el programa
PID: Identicador del proceso
PPID: Identicador del proceso padre
%CPU: Porcentaje entre el tiempo usado realmente y el tiempo que lleva en ejecucion.
%MEM: Fraccion de memoria consumida (es un porcentaje estimado)
SIZE: Tama~no virtual del proceso: codigo + datos + pila
RSS: Memoria real usada
STAT: Estado del proceso
R: en ejecucion
S: durmiendo
I: esperando
T: parado
D: esperando una E/S
W: no tiene paginas residentes
N: prioridad>
<: prioridad<0
Si se observa algun servicio misterioso ejecutandose, hay que investigar un poco mas.
Jose Antonio Escartn Vigo, Junio 2005.

292 Servidor Linux para conexiones seguras de una LAN a Internet
Un ejemplo de esto sera:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1584 472 ? S 11:50 0:01 init [2]
root 2 0.0 0.0 0 0 ? SN 11:50 0:00 [ksoftirqd/0]
root 3 0.0 0.0 0 0 ? S< 11:50 0:01 [events/0]
root 4 0.0 0.0 0 0 ? S< 11:50 0:00 [khelper]
root 9 0.0 0.0 0 0 ? S< 11:50 0:00 [kthread]
root 18 0.0 0.0 0 0 ? S< 11:50 0:06 [kacpid]
root 111 0.0 0.0 0 0 ? S< 11:50 0:00 [kblockd/0]
root 125 0.0 0.0 0 0 ? S 11:50 0:00 [khubd]
root 277 0.0 0.0 0 0 ? S< 11:50 0:00 [aio/0]
root 276 0.0 0.0 0 0 ? S 11:50 0:02 [kswapd0]
root 284 0.0 0.0 0 0 ? S 11:50 0:00 [cifsoplockd]
root 285 0.0 0.0 0 0 ? S 11:50 0:00 [jfsIO]
root 286 0.0 0.0 0 0 ? S 11:50 0:00 [jfsCommit]
root 287 0.0 0.0 0 0 ? S 11:50 0:00 [jfsSync]
root 288 0.0 0.0 0 0 ? S< 11:50 0:00 [xfslogd/0]
root 289 0.0 0.0 0 0 ? S< 11:50 0:00 [xfsdatad/0]
root 290 0.0 0.0 0 0 ? S 11:50 0:00 [xfsbufd]
root 352 0.0 0.0 0 0 ? S 11:50 0:00 [shpchpd_event]
root 951 0.0 0.0 0 0 ? S 11:50 0:00 [kseriod]
root 1175 0.0 0.0 0 0 ? S 11:50 0:00 [khpsbpkt]
root 1185 0.0 0.0 0 0 ? S 11:50 0:00 [knodemgrd_0]
root 1188 0.0 0.0 0 0 ? S 11:50 0:00 [pccardd]
root 1241 0.0 0.0 0 0 ? S< 11:50 0:00 [exec-osm/0]
root 1259 0.0 0.0 0 0 ? S 11:50 0:00 [pktgen/0]
root 1343 0.0 0.0 1572 392 ? S<s 11:50 0:00 udevd
root 2990 0.0 0.0 0 0 ? S 11:51 0:03 [kjournald]
root 2991 0.0 0.0 0 0 ? S 11:51 0:00 [kjournald]
root 2992 0.0 0.0 0 0 ? S 11:51 0:02 [kjournald]
root 3924 0.0 0.1 2876 520 ? Ss 11:51 0:00 dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/run/dhdaemon
root 4189 0.0 0.1 2328 656 ? Ss 11:51 0:00 /sbin/syslogd
root 4192 0.0 0.0 3128 488 ? Ss 11:51 0:00 /sbin/klogd
root 4221 0.0 0.1 1580 612 ? Ss 11:51 0:00 /usr/sbin/acpid -c /etc/acpi/events -s /var/run/acpid.soroot
message 4250 0.0 0.1 2160 880 ? Ss 11:51 0:00 /usr/bin/dbus-daemon-1 --system
hal 4255 0.1 0.6 8136 3236 ? Ss 11:51 0:34 /usr/sbin/hald --drop-privileges
root 4265 0.0 0.0 2316 508 ? Ss 11:51 0:00 /usr/sbin/inetd
root 4386 0.0 0.0 1600 484 ? Ss 11:51 0:00 /sbin/cardmgr
root 4390 0.0 0.0 1572 456 ? SNs 11:51 0:02 /usr/sbin/powernowd -q
root 4399 0.0 0.1 3544 660 ? Ss 11:51 0:00 /usr/sbin/sshd
root 4423 0.0 0.2 4820 1148 ? Ss 11:51 0:00 /usr/bin/X11/xfs -daemon
root 4532 0.0 0.2 2816 1028 ? S 11:51 0:00 /bin/bash /etc/rc2.d/S20xprint start
root 4533 0.0 0.2 2816 1028 ? S 11:51 0:00 /bin/bash /etc/rc2.d/S20xprint start
root 4534 0.0 0.1 11788 536 ? S 11:51 0:00 /usr/bin/Xprt -ac -pn -nolisten tcp -audit 4 -fp /usr/X1root
josan 4553 0.0 0.3 3440 1908 ? Ss 11:51 0:30 /usr/sbin/famd -T 0
root 4567 0.0 0.1 2448 608 ? Ss 11:51 0:00 /sbin/rpc.statd
root 4677 0.0 0.3 9184 1684 ? Ss 11:51 0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/daemon
root 4694 0.0 0.1 1820 744 ? Ss 11:51 0:00 /usr/sbin/cron
root 4699 0.0 0.3 9476 1772 ? Ss 11:51 0:00 /usr/bin/gdm
root 4701 0.0 0.4 10032 2164 ? S 11:51 0:00 /usr/bin/gdm
root 4749 0.0 0.0 1580 416 tty1 Ss+ 11:51 0:00 /sbin/getty 38400 tty1
root 4750 0.0 0.0 1580 416 tty2 Ss+ 11:51 0:00 /sbin/getty 38400 tty2
root 4751 0.0 0.0 1580 416 tty3 Ss+ 11:51 0:00 /sbin/getty 38400 tty3
root 4752 0.0 0.0 1580 416 tty4 Ss+ 11:51 0:00 /sbin/getty 38400 tty4
root 4753 0.0 0.0 1580 416 tty5 Ss+ 11:51 0:00 /sbin/getty 38400 tty5
root 4754 0.0 0.0 1580 416 tty6 Ss+ 11:51 0:00 /sbin/getty 38400 tty6
root 4819 7.5 43.4 238624 222152 ? S< 11:51 41:44 /usr/X11R6/bin/X :0 -audit 0 -auth /var/lib/gdm/:0.Xauthjosan
josan 5133 0.0 0.0 3072 428 ? Ss 12:01 0:00 /usr/bin/ssh-agent x-session-manager
josan 5135 0.0 1.1 10068 5812 ? S 12:01 0:01 /usr/lib/gconf2/gconfd-2 5
josan 5140 0.0 0.1 2328 772 ? S 12:01 0:00 /usr/bin/gnome-keyring-daemon
josan 5142 0.0 0.4 5620 2240 ? Ss 12:01 0:00 /usr/lib/bonobo-activation/bonobo-activation-server --acjosan
josan 5169 0.0 0.4 9060 2196 ? Ss 12:01 0:04 gnome-smproxy --sm-config-prefix /.gnome-smproxy-ghqj5S/josan
josan 5182 0.0 1.1 16628 6052 ? Ss 12:01 0:01 gnome-volume-manager --sm-config-prefix /gnome-volume-majosan
josan 5206 0.0 1.9 18972 9720 ? S 12:01 0:16 /usr/lib/gnome-panel/wnck-applet --oaf-activate-iid=OAFIjosan
root 8911 0.0 0.0 0 0 ? S 14:20 0:03 [pdflush]
josan 10637 0.0 1.8 22600 9304 ? Ss 15:07 0:00 kdeinit Running...
josan 10640 0.0 1.7 22296 8796 ? S 15:07 0:00 dcopserver [kdeinit] dcopserver --nosid --suicide
josan 10642 0.0 1.9 24068 9896 ? S 15:07 0:00 klauncher [kdeinit] klauncher
josan 10644 0.0 2.5 26808 13056 ? S 15:07 0:01 kded [kdeinit] kded
josan 10738 0.0 2.9 31816 14972 ? S 15:07 0:08 knotify [kdeinit] knotify
josan 13198 0.0 2.6 26084 13540 ? S 16:43 0:02 kio_uiserver [kdeinit] kio_uiserver
josan 14623 1.9 13.4 83728 68852 ? S 17:33 4:05 /usr/bin/kile
josan 14624 0.0 0.3 3280 1640 pts/0 Ss+ 17:33 0:00 /bin/bash
josan 17531 0.0 1.9 24276 10036 ? S 19:23 0:00 kio_file [kdeinit] kio_file file /tmp/ksocket-josanGrQ9Wjosan
josan 20028 0.0 0.1 2276 664 ? S 21:03 0:00 gnome-pty-helper
josan 20029 0.0 0.3 3284 1644 pts/1 Ss 21:03 0:00 bash
josan 20042 0.0 0.1 2564 844 pts/1 R+ 21:04 0:00 ps aux
16.3.2. Enviar signals a procesos: kill
En ocasiones es necesario enviar se~nales a los procesos: pararlos (SIGSTOP -19), eliminarlos, que con-
tinuen (SIGCONT -18), etc.
kill [-signal] pids:
#kill [-signal] pid, . . . enva una se~nal al proceso identicado por pid.
#kill pid, . . . se el dice al proceso que termine, de forma controlada, el estado en que termino puede
ser capturado. Esta instruccion le enva un SIGTERM (signal 15).
La se~nal SIGKILL (signal 9), no puede ser capturada y fuerza al proceso a nalizar.
#kill [-signal] orden, . . . enva la se~nal a todos los procesos \orden" (ejemplo:#killall -9 bash).
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 16. Servicios de monitorizacion del sistema 293
Hay procesos que no mueren a pesar de recibir la se~nal KILL:
Procesos zombies
Procesos que esperan un recurso va NFS que no esta disponible
Procesos que esperan una peticion de E/S realizada a un dispositivo
16.3.3. Modicar prioridades: nice
El numeronicemarca la prioridad del proceso.
Linux realiza una planicacion por prioridades dinamicas
Al lanzar un proceso se le asigna un valor de prioridad (numeronice), por defecto la hereda del
proceso padre.
La prioridad dinamica del proceso se calcula en funcion del numero nice, junto con el consumo de
CPU realizado
Valores bajos (negativos), implica mas prioridad
Valores altos (positivos), menos prioridad
Rango de prioridad: -20(maxima) a 20 (mnima)
Valor especial: -19, solo se le da la CPU cuando nadie mas la quiere
Asignar un valor negativo o que disminuya (mejore) la prioridad del proceso solo puede hacerlo el
root, aumentar (disminuir prioridad) tambien lo puede hacer el usuario que lo ejecuto
nice -incremento ordenaejecutar
renice nuevaprioridad pid
16.4. Terminal de root con prioridad maxima
Para establecer un programa de maxima prioridad solamente es necesario subir la prioridad a uno de
nuestros terminales. Para no confundirnos es recomendable utilizar siempre el mismo terminal. El ejemplo
se muestra con el terminal 5.
Hacemos unps:#ps -uroot
Identicamos el numero de proceso (PID) que tiene eltty5
Aumentamos la prioridad de ese terminal:#renice -20 [pid_tty5]
Si el sistema se ralentiza pasamos al terminal 5, CTRL+ALT+F5 y desde ah podemos comprobar
que esta pasando y solucionar el problema.
16.5. Programacion de tareas
Una posibilidad deseable en cualquier sistema operativo es la de poder ejecutar algunos procesos de
forma periodica o en un momento determinado del da, la semana o el mes. En Linux hay multiples y
variadas formas tanto para los usuarios como para el sistema de crear tareas a ejecutarse en el futuro o de
forma periodica. Las tareas o trabajos no son mas que uno o varios comandos que se ejecutan utilizando
un shell como interprete.
Jose Antonio Escartn Vigo, Junio 2005.

294 Servidor Linux para conexiones seguras de una LAN a Internet
16.5.1. At
Para un usuario denir una tarea o trabajo a ejecutarse en un momento determinado puede utilizar el
comandoat. Este ofrece numerosas posibilidades.
Los comandos que componen el trabajo por defecto se toman de la entrada estandar una vez invocado
el comando, o de un chero utilizando la opcion -f, el camino a este chero debe estar especicado a partir
del directorio home del usuario. Se pueden utilizar varias colas para colocar las tareas. Estas se nombran
con todas las letras del alfabeto y tienen prioridad mayor los trabajos en las colas con \letras mayores".
Para ver todas las tareas de tipoatse utiliza el comandoatqy para cancelar alguna,atrm.
La salida estandar y de errores de estas tareas se enva a traves del correo local al usuario correspon-
diente a menos que este las redireccione utilizando los operadores correspondientes. El administrador del
sistema puede especicar cuales usuarios pueden o no utilizar at en los cheros/etc/at.allow y /etc/at.deny.
A continuacion vemos unos ejemplos del uso deat:
$ at 4:45pm # crea una tarea para ejecutarse a las 4:45 PM que imprime
at> echo "hora de irse" # mensaje en la salida estndar, se enviar por correo
Ctrl-d #sale del modo insertar tareas
$at -f save_all.sh 5:00PM tomorrow # ejecutara save_all.sh, 5:00PM
$at -q Z -f script.sh 3:00am + 5 days # trabajo en la cola Z y ejecutado 3AM en 5 dias
$at -f bin/my_job -m midnight Sep 24 # lanza medianoche, 24 de sep, manda correo
#atq
1 2000-11-24 10:35 b pepe
2 2000-11-23 00:00 c pepe
5 2000-11-26 01:00 Z root
#at -c 2 # muestra el contenido de tarea 2
Tambien existe el comandobatchque es similar aatsolo que los trabajosbatchse ejecutan cuando
la carga del procesador lo permita, o sea tenga un valor inferior a0.8por defecto. Este valor puede
modicarse cuando se levanta el servicioatdque es el que se encarga de manipular estas tareas.
16.5.2. Cron
Existe otro tipo de tareas que se pueden ejecutar periodicamente conocidas como crons. Para denirlas
se emplea un chero por usuario cuyo formato se explica a continuacion.
Basicamente para cada tarea periodica se escribe una lnea donde se especican los momentos en que
se ejecutara y el comando correspondiente. Tambien se pueden realizar asignaciones a variables de entorno
que seran vlidas solo para los procesos indicados en lo sucesivo mientras no aparezcan nuevas asignaciones.
Las fechas se especican utilizando cinco indicadores separados por espacios:
1. Minutos: Oscila entre 0 y 59
2. Horas: Oscila entre 0 y 23
3. Das del mes: Oscila entre 1 y 31
4. Meses: Oscila entre 1 y 12 (se pueden poner tambien las tres primeras letras del nombre del mes en
ingles)
5. Das de la semana: Oscila entre 0 y 7 (0 y 7 corresponden al domingo, tambien se pueden usar las
tres primeras letras del nombre del da en ingles)
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 16. Servicios de monitorizacion del sistema 295
Si no se coloca alguno de los cinco indicadores se pone el caracter \*" en su lugar. Para separar indi-
cadores de un mismo tipo se utiliza la coma; para indicar rangos, el signo \-"; y para variar el incremento
del rango anse puede colocar/ndespues del rango.
A continuacion muestro ejemplos de este sistema:
PATH = /bin:/usr/bin:/sbin/:/usr/sbin:~/programas/bin
10 4 * * 0 backup every_thing
0 5 1,5,10,15,20,25,30 * * backup part_one
FILE = ~/docs/partners.txt
INFORM = ~/docs/inform.ps
0 7 * 1-6,9-12 mon sendmails
TARGET = ~/especial/target.img
0 8 31 12 * sendmother
MAILTO = josan
0 8-16/2 4,19 * * echo "cobraste josan?"
Los cheros de tareas periodicas o crons de los usuarios se guardan en el directorio del sistema
/var/spool/cron/ cada uno con el login del usuario correspondiente como nombre.
Para evitar algunos errores en la sintaxis de estos cheros no se editan directamente por los usuarios,
sino que se utiliza el comandocrontab. Este permite editar, listar y borrar los crons.
Opciones del crontab:
-e: permite editar el chero de crons. La variable de entorno EDITOR indicara el editor con que se
modicara el chero de crons
-l: lista todos los crons del usuario
-r: borra todos los crons
A continuacion, podemos observar algunos ejemplos del uso decrontab:
$ export EDITOR=vim; crontab -e # editor por defecto vim
$ export VISUAL=kwrite; crontab -e # editor visual kwrite
$ crontab -l
$ crontab -r
El siguiente codigo presenta el contenido del archivo/etc/crontabde mi servidor:
# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
El demonio que se encarga de que se ejecuten las instrucciones escrond.
Jose Antonio Escartn Vigo, Junio 2005.

296 Servidor Linux para conexiones seguras de una LAN a Internet
16.5.3. Tareas periodicas
Un sistema Linux trae algunas tareas periodicas denidas por defecto y es posible a su vez crear otras.
En este caso se emplea un chero con formato similar al de los usuarios, que se almacena en/etc/crontab,
con la diferencia de que este s se edita directamente ademas de que se puede especicar el usuario con
cuyos privilegios se ejecuta el proceso.
Las tareas del sistema se organizan en cuatro grupos: tareas que se ejecutan cada una hora, tareas
diarias, tareas semanales y tareas mensuales.
A cada uno de estos grupos le corresponde un directorio:
/etc/cron.hourly/,/etc/cron.daily/,/etc/cron.weekly/y/etc/cron.monthly/respectivamente.
En cada directorio se colocan los programas o comandos a ejecutarse periodicamente de acuerdo al
perodo correspondiente.
Algunas de las tareas que se hacen de forma periodica por el sistema, son la actualizacion de las bases
de datos sobre las que trabajan los comandos locate y whatis, as como la rotacion de las trazas del sistema.
Esto puede utilizarse, por ejemplo, para descargar las bases de datos de los antivirus para Windows y que
nuestros clientes las obtengan de un directorio local.
Al igual que para las tareas que se crean con at, tanto la salida de errores como la estandar de todas
las tareas periodicas, se trasmiten al usuario correspondiente utilizando la mensajera local del sistema.
Para el caso de las tareas del sistema, se envan al usuario root a menos que se dena lo contrario.
16.5.4. Anacron
Una tarea tipo cron es muy util pero su ejecucion depende de que la maquina se encuentre encendida
en el momento exacto para el que se programo. Es por ello que existe otro tipo de tareas periodicas:
las anacrons. Estas se ejecutan cada cierto tiempo especicado en das. En caso de que la maquina se
apague durante un tiempo mayor que el especicado, entonces una vez encendida y activado el servicio
que manipula los trabajos anacron todos aquellos que se encuentren atrasados se ejecutaran tan pronto
transcurra la espera especicada. O sea, para cada trabajo anacron se indica un tiempo en das y una
espera (delay).
Los trabajos anacron se almacenan en el chero del sistema/etc/anacrontab. Ademas de indicar el
intervalo de das, el delay y el comando se especica un nombre para el trabajo. Este se emplea para las
trazas y para nombrar un chero que emplea el servicio de anacron para saber cuando fue la ultima vez
que ejecuto este trabajo (timestamp le). Este chero se almacena en /var/spool/anacron/ y slo contiene
una fecha.
Si no se encuentra instalado, es necesario hacer un apt:
#apt-get install anacron
El chero /etc/anacrontab tiene la forma:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 5 cron.daily run-parts /etc/cron.daily
7 10 cron.weekly run-parts /etc/cron.weekly
30 15 cron.monthly run-parts /etc/cron.monthly
Podra pensarse que puede ocurrir que un mismo programa se ejecute por la va cron y por la anacron,
pero esto no sucede pues existe una tarea cron para cada perodo que actualiza los cheros en los cuales se
basa el servicio anacron para saber que es lo que debe ejecutar; o sea, cuando el servicio cron logra ejecutar
las tareas correspondientes a un perodo, actualiza el chero de ese perodo, y cuando llega anacron (que
se demora mas) ya no tiene que ejecutar las tareas.
Jose Antonio Escartn Vigo, Junio 2005.

Parte IV
Valoracion nal

Captulo 17
Pruebas del sistema
17.1. Nessus: Escaner de vulnerabilidades
Nessus es un potente escaner de redes de Software Libre. Consta de dos partes (cliente/servidor) que
pueden estar instaladas en las misma maquina por simplicidad.
Si el ataque se hace hacialocalhostlo que se consigue es auditar nuestra propia maquina.
Cuando naliza el escaneo se generan unos informes que si se sabe aprovechar e interpretar explican
que tipo de vulnerabilidades han sido encontradas, como \explotarlas" y como \evitarlas".
La distribucion de Nessus consta de cuatro cheros basicos: las libreras del programa, las libreras
NASL (Nessus Attack Scripting Language), el nucleo de la aplicacion y sus plugins.
Para instalar el programa hay que realizar el apt siguiente:
#apt-get install nessus nessusd
Y despues descargamos de la pagina de Nessus (http://www.nessus.org/) los plugins que creamos ne-
cesarios, instalandolos en la carpeta/nessus/plugins.
Durante el proceso de instalacion se nos realizan una serie de preguntas para generar un certicado
SSL para Nessus:
-------------------------------------------------------------------------------
Creation of the Nessus SSL Certificate
-------------------------------------------------------------------------------
Congratulations. Your server certificate was properly created.
/etc/nessus/nessusd.conf updated
The following files were created :
. Certification authority :
Certificate = /var/lib/nessus/CA/cacert.pem
Private key = /var/lib/nessus/private/CA/cakey.pem
. Nessus Server :
Certificate = /var/lib/nessus/CA/servercert.pem
Private key = /var/lib/nessus/private/CA/serverkey.pem
Donde podemos observar que se ha creado un certicado autormado para el servidor Nessus.
17.1.1. Congurar el programa
Vamos a seguir una serie de pasos para congurar el servidor Nessus:
El archivo de conguracion es:/etc/nessus/nessusd.conf
La conguracion por defecto es completa y valida, entre otras cosas escanea desde el puerto 0 al
15000. Ah podemos modicar todas las opciones que nos parezcan oportunas.

300 Servidor Linux para conexiones seguras de una LAN a Internet
Creamos un usuario para lanzar el programa, para ello seguiremos las instrucciones de pantalla, una
vez ejecutado el siguiente comando:
#nessus-adduser
Entre las opciones que se presentan, para validar el usuario se puede elegir entre el sistema de
login/password o certicados digitales, es mucho mas seguro el sistema de certicados. Tambien
podemos especicar unas reglas (rules) concretas para ese usuario.
Se puede elegir que el usuario acceda desde una red concreta, o permitir que acceda desde todas las
redes. Para esta ultima conguracion es neceario editar el archivo de reglas/etc/nessus/nessusd.rules
e introducir la siguiente lnea en la parteaddress/netmask:default accept
Podemos observar como queda el archivo as:
#
# Nessus rules
#
# Syntax : accept|reject address/netmask
# Accept to test anything :
default accept
Registrar la version de Nessus, para ello hay que entrar en:http://www.nessus.org/register/poner
un correo electronico donde se nos reportara la clave. Una vez recibido el correo basta con insertarlo
en la lnea de comandos:
#nessus-fetch --register <CLAVE>
Una vez tengamos el servidor registrado, lo arrancamos en background:
#nessusd -Do#nessusd --background
Si ejecutamos:# ps aux | grep 'nessus',. . . podremos observar si se ha cargado bien:
root 10938 0.0 0.9 7332 4712 ? Ss 13:22 0:00 nessusd: waiting
root 10960 1.0 0.1 2316 772 pts/3 S+ 13:23 0:00 grep nessus
17.1.2. Ejecucion de Nessus
Para lanzar el cliente en modo graco, ejecutaremos el siguiente comando:#nessus
Tambien se puede iniciar en modo comando, para el modo comando consultaremos el manual de ayuda:
$man nessus
Es necesario recordar que si tenemos activo el IDSSnorto cualquier otro NIDS, se va a volver loco al
ejecutarNessus. Es necesario desactivarlo o hacer que el NIDS ignore la IP de Nessus.
Para ejecutarlo podemos seleccionar las siguientes opciones:
EnNessusd Host, indicaremos los datos a~nadidos en la creacion del usuario (login/password, etc).
En la pesta~na deplugins(los tipos de ataques), seleccionaremos todos si queremos un escaneo
completo. Hay que tener cuidado conDenial of service(DoS) por razones obvias.
Encredentials, colocaremos la cuenta, contrase~na y dominio Samba, si es que lo queremos escanear.
EnScan Options, especicaremos los puertos a escanear y la herramienta a utilizar.
Entarget, indicaremos la o las direcciones IP de las maquinas a escanear.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 17. Pruebas del sistema 301
En las siguientes pantallas podemos observar cada una de estas secciones:
Figura 17.1: Conguracion de la aplicacion Nessus
Jose Antonio Escartn Vigo, Junio 2005.

302 Servidor Linux para conexiones seguras de una LAN a Internet
Una vez realizada la comprobacion del servidor podemos observar las siguientes vulnerabilidades en-
contradas:
Figura 17.2: Vulnerabilidades encontradas en el sistema
Basicamente podemos decir que la seguridad del servidor esta controlada. A esto unicamente habra
que a~nadir alguna actualizacion de versiones para parchear posiblesexploitsdescubiertos recientemente.
17.1.3. Otros interfaces de conguracion
Tambien podemos ejecutar otras interfaces gracas para Nessus:
NPI: Interfaz PHP. Se puede descargar en:http://enterprise.bidmc.harvard.edu/pub/nessus-php/
NCC: Nessus Command Center. Se puede descargar en:http://www.netsecuritysvcs.com/ncc/
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 17. Pruebas del sistema 303
17.2. Nmap: Escaner de red y puertos
La herramienta de exploracion de red y escaner de seguridad, Nmap es posiblemente el mejor escaner
de puertos existente, permitiendo determinar, de una forma rapida y sencilla, que servidores estan activos
y que servicios ofrecen, es decir sus puertos abiertos.
Es una de esas herramientas de seguridad imprescindible para cualquier administrador de sistemas,
siendo utilizada diariamente en todo el mundo, tanto por piratas informaticos como por administradores
de sistemas. Su software se ha utilizado en otros muchos programas y ha sido portado a casi todos los
sistemas operativos importantes.
Es un requisito previo, realizar un escaneo de vulnerabilidades con Nessus. Existen tambien disponibles
varios complementos, incluyendo analizadores de salidas del programa, como por ejemplo Nlog.
17.2.1. Caractersticas basicas
Entre las caractersticas del Nmap podemos encontrar:
Flexible: Soporta tecnicas avanzadas para el mapeado de sistemas y redes que esten detras de ltros
IP, rewalls, routers y otros obstaculos. Estas incluyen mecanismos de escaneado de puertos (tanto
TCP, como UDP), deteccion del sistema operativo, escaneos invisibles, conexiones semiabiertas, . . .
Potente: Se puede utilizar para escanear redes de ordenadores con cientos de maquinas.
Portable: Existen versiones para la gran mayora de los sistemas operativos modernos, entre ellos:
Linux, Open/Free/Net BSD, Solaris, IRIX, Mac OS X, HP-UX, Sun OS, Windows (fase beta), . . .
Facil: Aunque existen una gran cantidad de opciones disponibles, se puede realizar un sencillo
escaneado de puertos con:#nmap -O -sS <maquina>
Libre: El objetivo del proyecto Nmap es proveer a losadministradores, auditores e intrusosde una
potente herramienta de seguridad con la que explorar las redes. Nmap se distribuye con licencia
GPL por lo que su codigo fuente esta disponible para su descarga.
Buena Documentacion: Se ha realizado un gran esfuerzo en mantener actualizados y traducidos
tanto las paginas man, como los tutoriales y el resto de documentacion relacionada con Nmap.
Soportado: Aunque Nmap viene sin garanta explicita de ningun tipo, se puede escribir al autor o
utilizar las diferentes listas de distribucion sobre Nmap. Existen varias empresas que incluyen soporte
para Nmap entre sus servicios.
Premiado: Nmap ha recibido multitud de premios y reconocimientos concedidos por revistas del
sector.
Popular: Diariamente cientos de personas descargan Nmap, ademas esta incluido de serie en muchos
sistemas operativos, como Debian. Esta gran popularidad es la mejor garanta de su calidad, soporte
y desarrollo.
Tal y como hemos comentado, el uso del Nmap es muy sencillo, por ejemplo, para averiguar los servicios
o puertos, accesibles de una determinada maquina, bastara con ejecutar:#nmap <host> -O
La salida que obtenermos del servidor que se ha congurado durante el proyecto se puede observar en
la siguiente pagina.
Jose Antonio Escartn Vigo, Junio 2005.

304 Servidor Linux para conexiones seguras de una LAN a Internet
#nmap 192.168.0.10 -O
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-06-11 19:27 CEST
Interesting ports on 192.168.0.10:
(The 1652 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
9/tcp open discard
13/tcp open daytime
22/tcp open ssh
37/tcp open time
80/tcp open http
111/tcp open rpcbind
113/tcp open auth
515/tcp open printer
631/tcp open ipp
721/tcp open unknown
10000/tcp open snet-sensor-mgmt
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7), Linux 2.6.3 - 2.6.8
Uptime 0.274 days (since Sat Jun 11 12:52:40 2005)
Nmap finished: 1 IP address (1 host up) scanned in 2.372 seconds
Depues de descubrir los servicios que ofrece la maquina, con un simple telnet hemos obtenido el sistema
operativo instalado en la maquina y la version dessh, si se conoce alguna vulnerabilidad de esa version
podra ser atacada:telnet <host> <puerto>
# telnet 192.168.0.10 22
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4
Protocol mismatch.
Connection closed by foreign host.
Existen muchas mas opciones y alternativas, por lo que es mas que recomendable acceder a la docu-
mentacion incluida con Nmap, as como a la pagina man del mismo.
#nmap --help
#man nmap
#lynx nmap\manpage-es.html
Estos escaneos de maquinas y redes, suelen dejar huellas de su ejecucion en los registros logs de las
maquinas escaneadas (por ejemplo, en/var/log/messages), por lo que es interesante el utilizar alguno de
los modos de escaneos invisibles que se pueden ejecutar con Nmap, tales como-sF,-sX,-sN Stealth FIN,
Xmas, or Null scan, . . .de forma que se evitar nalizar la negociacion TCP, evitando al mismo tiempo
el comentado registro en los cheros logs.
Fyodor, el desarrollador de esta herramienta, tiene un gran sentido de humor, tal y como lo demuestra
al implementar la opcion -oS, que muestra la salida del Nmap en un formato que les encantara a los
Script-kiddies, la podemos observar en el siguiente ejemplo:
#nmap -oS - 192.168.0.10+
$taRt|ng nmap V. 2.54B3T431 ( www.1n$ecur3.ORg/nmap/ )
|nt3r3sting pOrtz 0n debian.example.org (192.168.0.10):
(The 1545 Portz scannEd but nOT sh0wn bel0w ar3 In $tatE: cLOS3D)
POrt Stat3 S3rv1Ce
22/tcp OpeN $$H
25/Tcp 0pEn smtp
80/tcp 0p3n htTp
139/tcP op3n N3Tb1Oz-Ssn
143/tCP 0pen imap2
515/tcp f!lt3red prinT3r
3128/tcp Op3n squ|d-HtTP
3306/tCp Op3n my$ql
6000/tcp 0p3n x11
Nmap rUn c0mpl3ted -- 1 !P aDdr3Sz (1 hOst uP) scANnEd !n 3 $econdS
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 17. Pruebas del sistema 305
17.2.2. Tipos de escaneado
Existen muchos tipos de escaneado que se pueden ejecutar con Nmap. El cuadro 17.1 incluye una lista
de los que probablemente usaremos con mas frecuencia.
Cuadro 17.1: Tipos de escaneo en Nmap
Tipo de escaneo Descripcion
SYN:-sS Escaneado predeterminado, no completa la comunicacion TCP.
TCP Connect:-sT Parecido a SYN, completando la comunicacion TCP. Es un metodo ruidoso
y carga en exceso las maquinas examinadas.
Ping Sweep:-sP Un simple ping a todas las direcciones, comprueba las direcciones IP activas.
Escaneado UDP:-sU Comprueba los puertos UDP para localizar los que escuchan.
Escaneado FIN:-sF Escaneado sigiloso, como SYN pero enviando en su lugar un paquete TCP
FIN. La mayora de los hosts devolveran un RST.
Escaneado NULL:-sN Escaneado sigiloso, establece los indicadores de encabezados a nulos. No es
un paquete valido y algunos hosts no sabran que hacer con el.
Escaneado XMAS:-sXSimilar a NULL pero todos los indicadores del encabezado TCP se activan.
Los Windows, por su estructura, no responderan.
Escaneado Bounce: Usa un agujero en el protocolo FTP, para rebotar paquetes fuera de un
-n FTP_HOST servidor FTP y hacia una red interna que normalmente no sera accesible.
Escaneado RPC:-sR Busca maquinas que respondan a los servicios RPC.
Escaneado Windows: Se basa en una anomala en las respuestas a los paquetes ACK en algun
-sW sistema operativo para mostrar los puertos que se suponen van a ltrarse.
Escaneado Idle: Escaneado sigiloso por el que los paquetes rebotan hacia un host externo.
-SI zombie_host_probe_port
17.2.3. Opciones de descubrimiento
Tambien podemos ajustar la forma en que Nmap descubre la red y determina que hosts estan activos.
El cuadro 17.2 incluye diversas opciones:
Cuadro 17.2: Opciones de descubrimiento en Nmap
Opcion Descripcion
TCP + ICMP:-PBUtiliza paquetes ICMP y TCP para determinar el estado de un antrion. Es la
forma mas able y precisa, ya que usa los dos metodos.
TCP Ping:-PT Usa solo el metodo TCP. Si estamos intentando ser sigilosos esta es la mejor
opcion.
ICMP Ping:-PE No es una buena opcion si el objetivo se encuentra detras de un cortafuegos, la
mayora de los paquetes seran eliminados.
Dont's Ping:-P0 Nmap no intentara conocer primero que hosts se encuentran activos en la red,
en su lugar enviara sus paquetes a todas las IP en el rango especicado, incluso
aunque no haya una maquina detras. Puede ser la unica forma de examinar una
red bien protegida y que no responde a ICMP.
17.2.4. Opciones de ajuste de frecuencia de Nmap
Nmap nos ofrece la opcion de agilizar o ralentizar la frecuencia con la que enva sus paquetes de escaner.
Si estamos preocupado por la cantidad de traco de red (o estamos intentando ser sigilosos), podemos
ralentizar el nivel. Solo hay que tener en cuenta que cuanto mas lejos los enviamos, mas tiempo tardara el
escaneado, algo que puede aumentar exponencialmente el tiempo de escaneado en redes grandes. Por otro
lado, si tenemos prisa y no nos preocupa el traco de red adicional, podemos aumentar el nivel. Podemos
ver los distintos niveles de frecuencia en el cuadro 17.3.
Jose Antonio Escartn Vigo, Junio 2005.

306 Servidor Linux para conexiones seguras de una LAN a Internet
Cuadro 17.3: Conguraciones de frecuencia en Nmap
Frecuencia Parametro Frecuencia de paquete Comentarios
Paranoid -F 0 Una vez cada 5 minutos No utilizar esta opcion en escaneados
de varios hosts, ya que el escaneado
nunca terminara.
Sneaky -F 1 Una vez cada 15 segundos
Polite -F 2 Una vez cada 4 segundos
Normal -F 3 Tan rapida como permita el SO Conguracion predeterminada.
Agressive -F 4 Igual que Normal pero la fre-
cuencia del paquete se recorta a
5 minutos por host y 1,25 segun-
dos por paquete de sondeo
Insane -F 5 0,75 segundos por host y 0,3 se-
gunos por paquete de sondeo
Este metodo no funciona bien a no ser
que estemos en una red muy rapida
y usemos un computador realmente
rapido, e incluso as podramos perder
datos.
17.2.5. Otras opciones de Nmap
El cuadro 17.4 recoge una lista de otras opciones para Nmap que controlan cosas como la resolucion
DNS, la identicacion de SO y otras opciones. Existen mas opciones para ajustar nuestros escaneados
disponibles utilizando la interfaz de lnea de comandos. Si queremos mas detalles podemos recurrir al
manual de Nmap.
Cuadro 17.4: Opciones deversas de Nmap
Opcion descripcion
Don't Resolve:-n Agiliza el escaneado, pero podemos perder hosts, sobre todo en redes
con DHCP.
Fast Scan:-F Escanea los puertos especicados, generalmente los puertos conocidos
por debajo de 1024.
Port Range:-p port_range De forma predeterminada Nmap examina los 65.536 puertos disponi-
bles, con esta opcion solo examina ese rango.
Use Decoy:-D Se introducen IPs se~nuelo en el traco mandado a la maquina que se
decoy_address1, esta examinando, as le resulta mas dicil saber que maquina le esta
decoy_address2, ... escaneando.
Fragmentation:-f Opcion sigilosa, que fragmenta los paquetes de escaneado a mediada
que sale. Los paquetes son montados en la maquina atacada y algunas
veces pueden burlar los cortafuegos e IDS.
Get Indentd Info:-I El servicioIdentdque se ejecuta en algunas maquinas puede propor-
cionar informacion adicional sobre el host consultado.
Resolve All:-R Esta opcion intenta resolver las direcciones en el rango, incluso aunque
no esten respondiendo.
SO Identication-o Analiza la \huella digital" de las respuestas para determinar el SO
Send on Device: Obliga a los paquetes de escaneado a salir de una interfaz especca.
-e interface_name
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 17. Pruebas del sistema 307
17.2.6. Salida de Nmap
Nmap produce un informe que muestra cada direccion IP encontrada, los puertos descubiertos escu-
chando dicha IP y el nombre conocido del servicio (si lo tiene). Tambien muestra si el puerto se ha abierto,
ltrado o cerrado. Sin embargo, solo porque Nmap obtenga una respuesta sobre el puerto 80 e imprima
\http", no signica que un servidor Web se esta ejecutando en el host, aunque es algo bastante probable.
Siempre se puede vericar cualquier puerto sospechoso abierto consultando con dicha direccion IP sobre el
numero de puerto especicado y observando la respuesta obtenida. Si existe un servidor Web ejecutandose
ah, normalmente podremos obtener una respuesta mediante la introduccion del comandoGET/HTTP.
As se devolvera la pagina inicial de ndice como HTML (no como una bonita pagina Web), pero podremos
vericar si un servidor se esta ejecutando. Con otros servicios como FTP o SMTP podemos llevar a cabo
tareas similares. Nmap tambien codica con colores los puertos encontrados, segun la siguiente tabla:
Cuadro 17.5: Codicacion de color de la salida de Nmap
Color Descripcion
Rojo Este numero de puerto esta asignado a un servicio que ofrece alguna forma directa de inicio
de sesion en la maquina, como Telnet o FTP. Estos son los mas atractivos para los intrusos.
Azul Este numero de puerto representa un servicio de correo como SMTP o POP.
Negrita Estos son servicios que pueden proporcionar alguna informacion sobre la maquina o el sistema
operativo.
Negro Cualquier otro servicio o puerto identicado.
Como podemos comprobar en el cuadro 17.5, la salida nos permite examinar un informe y determinar
rapidamente si hay mas servicios o puertos con los que tenemos que tener cuidado, lo que no signica
que deberamos ignorar cualquier numero inusual que no este resaltado o en negrita. Los troyanos y el
software de conversacion se muestran normalmente como servicios desconocidos, pero podemos buscar un
puerto misterioso en una lista de puertos malignos conocidos para determinar rapidamente si el puerto
abierto es algo de lo que tenemos que preocuparnos. Si no lo podemos encontrar en dicha lista, tendremos
que cuestionarnos cual sera ese servicio extra~no que se esta ejecutando en la maquina y que no utiliza un
numero de puerto conocido.
Podemos guardar los registros Nmap como numeros de formato, incluyendo el texto simple o legible
por la maquina, e importarlos en otro programa. Sin embargo, si dichas opciones no fuesen sucientes,
Nlog (sin licencia GPL) o alguna herramienta parecida puede ayudarnos a interpretar la salida Nmap. Su
ejecucion sobre redes muy grandes puede servirnos de salvavidas ya que el examen cuidadoso de cientos
de paginas de salidas Nmap nos puede volver locos rapidamente.
17.2.7. Conguracion graca de Nmap, interfaz Nmapfe
Incluido con Nmap se encuentranmapfeque es un interfaz graca, que permite ejecutar Nmap usando
el raton. Tambien indicar que existen otras interfaces gracas para facilitar aun mas el uso de esta potente
aplicacion (KNmap, KNmapFE, QNMap, Kmap, Web-NMap, vnmap, . . . )
Para instalarla realizaremos un apt:
#apt-get install nmapfe
Y para ejecutarla:#nmapfeoxnmap
Nmap es una herramienta ideal para Vericar/auditar el Firewall, tal como dice uno de los banner de
su pagina ocial, \Audite la seguridad de sus Redes antes que los chicos malos lo hagan" (Audit your
network security before the bad guys do).
La pagina ocial de Nmap es:http://www.insecure.org/nmap/
Jose Antonio Escartn Vigo, Junio 2005.

308 Servidor Linux para conexiones seguras de una LAN a Internet
17.3. Pruebas de carga
Aunque en un principio pense en realizar una serie de pruebas de carga con diferentes clientes, para
determinar el grado de sostenibilidad del sistema, no va a hacer falta. Carece de sentido probar algo que
no va a aportar ningun dato nuevo, sino la conrmacion de algo que temia desde un principio. Tales eran
mis dudas que lo llege a comentar con el director del proyecto.
Durante la elaboracion del proyecto, en todas y cada una de las secciones, en la informacion que he
consultado, se adverta de que el uso de servicios de gran consumo de recursos en la misma maquina
provocaran la ralentizacion del sistema hasta niveles inaceptables. Un ejemplo de esto sera el IDS Snort,
trabajando junto a la base de datos MySQL o el el servidor Syslog.
Puesto que el servidor que utilizo es un ordenador portatil con procesador Intel Centrino a 1,6 Ghz.
con 512 Mb de RAM, en vez de un supercomputador con con varios procesadores, no es necesario rea-
lizar estas pruebas para conrmar lo evidente. Considero que mi capacidad de optimizacion del sistema,
probablemente, sea menor que la de muchas de esas personas que describen como \suicidio", respecto a
rendimiento y seguridad, centralizar los servicios de una corporacion en una unica maquina.
Las razones que me llevan a esta decision son varias:
He asumido desde un principio, que el sistema no es capaz de ejecutar y soportar el uso simultaneo de
los demonios de los servicios implementados. Esto se puede observar, por ejemplo, cuando arranco
el servidor y Tripwire deja el sistema colapsado, al actualizar las sus bases de datos de archivos
(Incluso con una prioridad nice baja (+10).
Por el tama~no de la empresa que vaya a implementar el proyecto:
Para empresas peque~nas carece de sentido tener todos los tipos de servidores disponibles, ya
que la mayora no se utilizaran.
Para empresas grandes que necesiten todos los tipos de servidores, se disponen de presupuestos
adecuados para distribuir los servicios entre varias maquinas. La limitacion no esta en el coste
de las maquinas sino en el personal que necesitan para congurarlas y administrarlas, ademas
del coste que supone, el espacio fsico que ocupan (en cuartos climatizados), medidas de fsicas
de seguridad, etc.
Por motivos de eciencia no se debe centralizar los servicios:
La maquina funcionara al 100 % de su capacidad, obteniendose de ella un 10 % del rendimiento
teorico.
Si se produjera una caida fortuita de la maquina, como un fallo electrico o mecanico, todos los
servicios de la red caeran con ella.
Por motivos de seguridad no se debe centralizar los servicios:
Si un servicio tiene unexploity un intruso obtiene el control de la maquina, obtiene a la misma
vez el control de todos los servicios de esa maquina.
Los ataques dirigidos sobre una sola maquina son mas ecientes que sobre varias.
Por todo ello, no creo necesario realizar pruebas de carga para determinar que no es una buena eleccion
situar todos los servicios en una unica maquina. Y que se debera de buscar una solucion para descentralizar
el sistema.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 18
Estudio Economico
Mediante los siguientes esquemas se determinara el coste del proyecto de haber sido encargado por
una empresa.
18.1. Recursos
En el siguiente cuadro se detallan los recursos que fueron necesarios para la elaboracion del proyecto
con una baremacion aproximada de sus costes.
Cuadro 18.1: Recursos asignados al proyecto
Nombre Nombre corto Grupo Tipo Coste
Jose Antonio Escartn Vigo Jefe de proyecto Personal Obra 40e/h
Jose Antonio Escartn Vigo Analista Personal Obra 30e/h
Jose Antonio Escartn Vigo Administrador de sistemasPersonal Obra 25e/h
Jose Antonio Escartn Vigo Documentalista Personal Obra 15e/h
Servidor Portatil InfraestructuraMaterial1150e
Cliente Duron Linux/Windows InfraestructuraMaterial600e
Cliente de alquiler 1 Windows1 InfraestructuraMaterial100e
Cliente de alquiler 2 Windows2 InfraestructuraMaterial100e
Portatil de alquiler ClienteWi InfraestructuraMaterial150e
Impresora HP Deskjet 815 HP815 InfraestructuraMaterial240e
Router, Swich y cables Redes InfraestructuraMaterial300e
Material de ocina Ocina InfraestructuraMaterial300e
Local, luz e internet Mantenimiento Gastos Material1500e
Desplazamientos Desplanzamientos Gastos Material100e
Manual de administracion LinuxLinux1 Libros Material48e
Linux a fondo Linux2 Libros Material30e
Todo Linux Linux3 Libros Material68e
Sw libre: Herramientas de seguridadSeguridad Libros Material42e
El libro de L
ATEX L
ATEX Libros Material38e
Resto de libros e informacion prove-
niente de bibliotecas e Internet
Informacion Libros Material|e

310 Servidor Linux para conexiones seguras de una LAN a Internet
18.2. Costes
En la siguiente tabla, se puede encontrar una valoracion aproximada de los costes totales del proyecto,
basada en los sueldos/hora asignados a cada cargo del personal.
Cuadro 18.2: Costes del proyecto
Nombre Nombre corto Tareas asignadas N.
o
de horas Coste
Jose Antonio
Escartn Vigo
Jefe de proyectoEstablecer la planicacion y jar
objetivos
20 h. 800e
Jose Antonio
Escartn Vigo
Analista Seleccionar herramientas y anali-
zar el grado de cumplimiento de
los objetivos
50 h.1.500e
Jose Antonio
Escartn Vigo
Administrador
de sistemas
Instalar sistema, congurar ser-
vicios y realizar las pruebas
220 h.5.500e
Jose Antonio
Escartn Vigo
DocumentalistaGenerar informes y documentar
el proyecto
160 h.2.400e
Material Varios | | 4.766e
TOTAL: 14.966e
18.3. Resumen economico
El coste del proyecto esta muy por encima de lo esperado, con un valor aproximado de 15.000e. Parece
claro, que el factor que inuye de una forma determinante es la mano de obra necesaria, estableciendo el
valor del material en solamente un tercio del total, por dos tercios la mano de obra.
Manejando estas cantidades, un proyecto de este estilo solo esta al alcance de empresas donde se vaya
a utilizar este documento de manera intensiva, haciendo inviable un estudio de este tipo enpymes.
18.4. Modicaciones a los costes economicos
Debido a la falta de experiencia en sistemas Linux y en la creacion de manuales, esta planicacion
economica se debera ver incrementada de la siguiente forma:
Hasta las 350 horas en Administracion de sistemas: Para la asimilacion de los entornos, la congu-
racion de los servicios y las pruebas necesarias.
Hasta las 400 horas en Documentacion: Debido al cambio de orientacion del proyecto, hacia la
elaboracion de un \Manual de instalacion de servidores en Linux".
Esto supodra un aumento, de valor respecto al proyecto original, de unos 7.000e, subiendo el precio
total aproximado a los 22.000e.
Este aumento en el numero de horas en ningun caso a derivado en un retraso en los plazos de entrega,
ya que estos han sido respetados con riguridad. Y atienden a un mejor aprovechamiento y usabilidad de
los contenidos del proyecto. Se podra decir que respecto a los objetivos iniciales, de \instalar un servidor",
elaborando un \Manual de instalacion para servidores Linux" se ha conseguido que el uso del proyecto
pueda llegar a mas ambitos y convertirlo en util para muchas personas.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 19
Conclusiones
La conclusion principal es que los objetivos marcados inicialmente fueron erroneos:
No es viable un servidor centralizado:
El poco coste del material, para una empresa, no compensa las desventajas.
La descentralizacion se apoya en: Modularidad, seguridad y redimiento.
No es viable un servidor portatil corporativo e itinerante:
Solo puede ser utilizado para servicios concretos.
Las redes inalambricas producen graves problemas de seguridad intrinsecos e inevitables.
Las conexiones itinerantes a Internet, ofrecidas por los ISP, todava estan en pa~nales.
La conexion es un problema, desde los siguientes puntos de vista:
1. Se necesita un punto de acceso (AP) que acompa~ne al servidor, como podra ser un router.
2. La conexion EAP-TLS a traves de certicados digitales no es muy exible a la incorpora-
cion de nuevos usuarios, que por ejemplo podran ser los empleados de otra ocina, en otra
ciudad. Este problema lo podramos solventar agregando a nuestro sistema un programa
de validacion de conexion en nuestro sistema por web, comoNoCat, donde los usuarios wi
acceden al servidor mediante usuario y contrase~na.
El aumento de las horas dedicadas, que no los plazos de entrega, fue debida a que el proyecto evoluciono
hacia la elaboracion de un:\Manual de instalacion para servidores Linux", que abarca desde la eleccion
de la distribucion, pasando por la instalacion del sistema y nalmente la conguracion de la gran mayora
de servicios disponibles para entornos corporativos.
Este cambio de orientacion, fue decidio a la mitad del proyecto, de nada serva documentar la ins-
talacion de un servidor Linux, si el proceso no poda ser reproduccido, a menos que se dispusiera de la
misma maquina y la misma infraestructura. El proyecto se ha adaptado a un entorno mas general, basado
en la distribucion Debian Sarge, para que los conociemientos adquiridos, puedan ser aprovechados por un
numero mayor de usuarios de escritorio y administradores de sistemas.
A modo de resumen me quedare con la siguiente frase que lei mientras me documentaba y que esta
en concordancia con el espritu de este proyecto:\En Internet solo el paranoico sobrevive. Puede ser un
lugar muy sucio, lleno de virus, gusanos, troyanos, spammers y abogados de litigios de patentes; lo ultimo
que alguien querra es ponerse en lnea sin proteccion alguna."

312 Servidor Linux para conexiones seguras de una LAN a Internet
Es decir, el uso de:
Conexiones seguras como: SSH (telnet), SSL (web), PGP (cifrado de datos), EAP-TSL (wi), . . .
Firewalls, es decir sistemas de barrera contra ataques exteriores y fugas de informacion.
IDS, sistemas de deteccion de intrusos: NIDS como Snort, IDS como Tripwire para garantizar la in-
tegridad en archivos, Honeypots como Honeyd para entretener los ataques de los intrusos, detectores
de escaners de puertos, de sniers y de rootkits, . . .
Monitorizacion del sistema: Top, Kismet Wireless, AirSonrt, . . .
Chequeos del sistema: Escaneo de vulnerabilidades con Nessus, escaneo de puertos y servicios en red
con Nmap, escaneo de logs con Logcheck, . . .
. . .
No garantiza la seguridad. Si un intruso quiere entrar, y tiene los conocimientos y/o herramientas
sucientes, entrara. Las herramientas aqu propuestas son de caracter preventivo, disuasorio y forense. De
esta forma es mucho mas facil que el intruso se desespere y se vaya a hacer lo que quiere hacer, a otro sitio.
Los sistemas de este estilo, no son la panacea, exigen la dedicacion de mucho tiempo y una adminis-
tracion rigurosa. Es decir, exigen de mucho tiempo y mucho dinero para que resulten efectivos.
No todas las empresas se podran permitir este tipo de gastos. Hay que analizar hasta donde conviene
proteger y aplicar una solucion, que no sera estandar, sino adaptada al perl de nuestra organizacion o
empresa.
A nivel personal a sido un proyecto muy graticante y muy desesperante al mismo tiempo, esto a sido
debido a varios motivos:
El primero y principal, el proyecto lo plantee demasiado ambicioso. Parta con mucha voluntad,
ganas e interes; pero con una gran falta de conocimientos de base, esto muy pronto se hizo patente.
La planicacion fue bastante imprecisa: Debido a mi falta de experiencia y conocimientos, los plazos
se han aumentado muchisimo, llegando suplir esta falta de prevision con unas 300 horas extras
respecto a la planicacion inicial.
A pocos das de la entrega nal, se lanzo la version estable del proyecto Debian Sarge. Esto derivo
en dos consecuencias importantes:
1. La primera positiva: La eleccion de Debian Sarge fue muy acertada, si hubiera elegido Debian
Woody, habra terminado un proyecto que desde el principio sera obsoleto. Por contra, ahora
esta totalmente actualizado y sera valido por un largo periodo de tiempo.
2. En contra: La mayor parte del documento esta escrito pensado que la version estable se lanzara
en un futuro inmediato. Este futuro se ha adelantado un mes, la solucion a pasado por agregar
un anexo (vease anexo G) donde se explica que ha pasado y que implicaciones tiene esto en el
documento.
El proyecto lo podra clasicar de interes personal, ya que mi pasion de siempre, han sido los
sistemas operativos. Por razones diversas no me haba adentrado en el mundo de Linux, mas que a
un nivel muy supercial. Este proyecto me ha permitido profundizar e investigar sobre el mundo de
la seguridad informatica, sobre todo en entornos Linux y es muy probable que en el futuro, mi perl
profesional se ubique en este sector.
Con el proyecto nalizo la Ingeniera tecnica en Informatica de Sistemas, y me servido para aan-
zarme en la idea de terminar mis estudios en la Ingeniera superior. Gracias a los conocimientos
adquiridos, el proyecto de la superior me resultara mucho mas facil de afrontar y probablemente
tambien este enfocado hacia alguna parte concreta de la seguridad informatica, sector que actual-
metne esta teniendo un gran auge.
Jose Antonio Escartn Vigo, Junio 2005.

Captulo 19. Conclusiones 313
Los conocimientos adquiridos en el entorno de composicion de textos L
ATEX me permitiran, a partir
de ahora, realizar documentacion mucho mas profesional.
El descubrimiento del mundo del software libre, me ha abierto el horizonte, las licencias GPL per-
miten observar que hay futuro mas haya de las empresas y los entornos propietarios. Cada uno tiene
su sector de mercado y deben cooperar en vez de enfrentarse, asumiendo el papel que han elegido.
Despues de la elaboracion de este proyecto, yo me he situado claramente en el sector GPL.
Por todo ello, lo considero una experiencia muy positiva y seguramente orientara mi futuro profesional
al sector de la seguridad informatica.
Una objetivo que me gustara conseguir, si es posible (es decir, si la universidad y mi director de
proyecto estan de acuerdo), es poner a disposicion de la comunidad de usuarios Linux este documento.
De esta forma mi trabajo podra ser aprovechado por un mayor numero de personas, ya que este no es el
tpico proyecto con una utilidad muy limitada, sino que tiene un uso mucho mas amplio y puede llegar a
ser util a mucha gente.
Jose Antonio Escartn Vigo, Junio 2005.

Parte V
Apendices

Apendice A
Comandos basicos
Para mas informacion sobre los comandos podemos ejecutar:$man <comando>
Comandos de sistema
Comando Descripcion
man Paginas del manual
ls Listar (multiples opciones)
rm Borrar
cp Copiar
mv Mover o renombrar
ln -s <fichero> <enlace> Enlace debil a chero
pwd Directorio actual
cd <directorio> Entra en directorio
cd .. Sale del directorio actual
chown, chgrp y chmod Sobre atributos de cheros
touch <fichero> Crear cheros vacos
find y locate Buscar cheros
grep Buscar texto en cheros (muy potente)
find / | grep 'cadena' Busca un chero que contenga esa cadena por el sistema
df Ver espacio libre en disco
du -sh Ver espacio usado en el directorio actual
cat, more y less Lista cheros
<comando>|morey<comando>|lessSalida de comando ltrada por paginas
vimyemacs Editores de texto, modo texto
nedit,keditykwrite Editores de texto, modo graco
split Partir cheros
which Devuelve el Path de un ejecutable, que se encuentre en la
variable $PATH
Entorno graco X-Windows
Comando Descripcion
startx Iniciar sesion X
startx -- :2, :3, etc.Abrir nuevas sesiones
xf86config Congurar X, modo texto
xf86cfg Congurar X, modo graco
CTRL+ALT+BACKSPACE Salir de las X

318 Servidor Linux para conexiones seguras de una LAN a Internet
Comandos para comunicaciones y redes
Comando Descripcion
who Lista los usuarios conectados
finger Informacion sobre los usuarios
mail Sencillo programa de correo
write Manda un mensaje a la pantalla de un usuario
wall Manda un mensaje a todos los usuarios
mesg Activa/Desactiva la recepcion de mensajeswriteywall
talk Establece una conversacion con otro usuario
baner Saca un letrero en pantalla con el texto que se le pase al comando
cal Saca un calendario en pantalla
clear Limpia la pantalla
date Saca fecha y hora actuales
passwd Cambia contrase~na de un usuario
Comprimir y descomprimir
Comando Descripcion
tar zxvf Descomprimir un.tar.gz
tar jxvf Descomprimir un.tar.bz2
tar cxvf <archivo>.tar.gz <archivo> Comprimir un archivo o directorio
gzip -d Descomprimir un.gz
tar Empaquetar sin comprimir (multiples opciones)
gzip Comprimir cheros (despues de empaquetar)
Montaje de unidades
Comando Descripcion
mount -t msdos /dev/floppy /mnt Montar diskette
mount -t iso9660 /dev/cdrom /mnt Montar cdrom
mount -t <tipo> /dev/<dispositivo> <punto_de_montaje> Montar un dispositivo
umount <punto_de_montaje> Desmontar unidad
Uso del sistema
Comando Descripcion
ps Procesos en ejecucion del teminal
ps -u<usuario> Procesos en ejecucion del usuario
lspci Dispositivos PCI del sistema
lsmod Modulos cargados en el kernel
modconf Cargar modulos en el kernel
uname -a Informacion del sistema
ldconfig -p Libreras instaladas
ldd <ruta>/<programa> Libreras que usa el programa
shutdown -r 0 Reinizializa el sistema (#reboot)
shutdown -h 0 Apaga el sistema (#halt)
shutdown <opcion> <n_segundos>Realiza opcion despues densegundossegundos
logout Cierra la sesion del usuario
su <usuario> Cambia sesion a otro usuario (switch user)
fdisk /mbr Borra el gestor de arranque del disco (arranques del siste-
ma)
Jose Antonio Escartn Vigo, Junio 2005.

Apendice B
Debian en castellano
Para tener las aplicaciones en nuestro idioma lo primero que necesitamos es instalar los siguientes
paquetes:
#apt-get install user-euro-es language-env euro-support
Una vez hayamos realizado el apt-get, para ver \los locales" (idiomas locales) que tiene el usuario que
se encuentra actualmente conectado, hay que ejecutar el siguiente comando:
$locale
Si ademas queremos saber que traducciones locales tenemos disponibles en el sistema, ejecutaremos la
siguiente instruccion:
$locale -a
Si el idioma castellano, no se encuentra disponible entre las locales del sistema las podemos incluir
en el archivo de conguracion de locales,/etc/locale.gen. Para ello a~nadiremos al nal de ese archivo las
siguientes lneas:
es_ES@euro ISO-8859-15
es_ES ISO-8859-1
Una vez a~nadidas al archivo necesitamos que las ejecute y recongure nuestro sistema, mediante el
comando:
#/usr/sbin/locale-gen
Ademas en unos de los cheros que carga las variables de usuario a~nadiremos las siguientes variables
de entorno. Por ejemplo en el archivo~/.bashprole:
export LANG=es_ES.ISO-8859-15
export LC_ALL=es_ES@euro
La proxima vez que hagamoslogincon el usuario cargara el nuevo perl. Podemos comprobamos que
\los locales" son los correctos, con el mismo comando que antes:$locale

320 Servidor Linux para conexiones seguras de una LAN a Internet
Una vez tengamos disponible el idioma castellano, podemos habilitar tambien el soporte para el euro
en la consola. Pasa eso tenemos que a~nadir las siguientes lneas al chero/etc/console-tools/cong, chero
de conguracion de la consola:
SCREEN_FONT=lat0-sun16
APP_CHARSET_MAP=iso15
APP_CHARSET_MAP_vc2=iso15
APP_CHARSET_MAP_vc3=iso15
Si ademas tambien queremos colocar las paginas de manuales en castellano hay que instalar los si-
guientes paquetes:
#apt-get install user-es manpages-es manpages-es-extra
Solo queda castellanizar las aplicaciones del sistema, si es que tienen los archivos del idioma. Hay que
ejecutar el siguiente comando, seleccionando las opciones que nos interesen:
#dpkg-reconfigure locales,
Este documento esta basado en la documentacion disponible en Debian, se puede consultar mediante:
$man castellanizar
Jose Antonio Escartn Vigo, Junio 2005.

Apendice C
Archivos de conguracion
Archivo Descripcion
/etc/lilo Conguracion del gestor de arranque Lilo
/etc/inetd.conf Superservidor de Internet y envoltorio de demonios TCP/IP
/etc/xinetd.conf Conguracion del superservidor, mediante entorno graco
/etc/init.d/* Scrips de inicio del sistema que ejecutara initd
/etc/rc#.d Scripts runlevelsque ejecutainital arrancar el equipo
/etc/passwd Usuarios del sistema
/etc/group Contrase~nas encriptadas de los usuarios del sistema
/etc/skel/* El contenido de este directorio se copiara al home de cada
usuario nuevo del sistema
/etc/fstab Montaje de particiones en el sistema
/etc/X11/XF86Cong-4 Conguracion de las X-Windows
~/.xinitrc Archivo de arranque de usuario para las X-Windows
~/.vimrc Archivo de conguracion del Vim
/etc/prole Preferencias de todos los usuarios del sistema
~/.prole Preferencias del usuario
~/.bashprole Preferencias del shell bash
~/.bashlogin Conguracion de inicio del shell bash
~/.bashlogout Conguracion de nalizacion del shell bash
~/.bashrc Si se ejecuta un shell interactivo bash sin entrada por consola
/etc/ssh/sshcong Conguracion del cliente para las conexiones seguras SSH
/etc/ssh/sshdcong Conguracion del servidor de conexiones seguras SSH
~/.gnupg/ Directorio que contiene los archivos de usuario de GnuPG
/etc/at.allow Usuarios a los que les esta permitido programar tareas at
/etc/at.deny Usuarios a los que les esta denegado programar tareas at
/etc/crontab Tareas programadas del sistema
/var/spool/cron/crontabs/<usuario>Tareas programadas por cada usuario
/etc/anacrontab Tareas programadas que se pueden ejecutar con retraso
/etc/locale.gen Archivo de locales
/etc/console-tools/cong Archivo de conguracion de la consola
/etc/webmin/miniserv.conf Archivo de conguracion de Webmin
/etc/squid/squid.conf Conguracion del proxy Squid
/etc/squid/* Archivos de conguracion del Proxy Squid

322 Servidor Linux para conexiones seguras de una LAN a Internet
Archivo Descripcion
/etc/kismet/kismetui.conf Conguracion de la interfaz del snier wi Kismet
/etc/kismet/kismet.conf Conguracion del snier wi Kismet
/etc/freeradius/radiusd.conf Opciones de FreeRadius
/etc/freeradius/eap.conf Opciones para EAP en FreeRadius
/etc/freeradius/clients.conf IPs clientes de FreeRadius
/etc/freeradius/users.conf Usuarios clientes de FreeRadius
/etc/modules.conf Modulos que se cargaran al inicio
/etc/modules Conguracion de los modulos
/etc/network/interfaces Conguracion de interfaces de red
/etc/network/options Conguracion de las opciones de red
/etc/host.conf Dice al sistema como resolver los nombres de los hosts
/etc/hostname Nombre.dominio del host local
/etc/hosts Nombre y direccion IP de hosts del sistema
/etc/hosts.allow Hosts a los que se le permite el acceso al sistema
/etc/hosts.deny Hosts a los que se le deniega el acceso al sistema
/etc/hotplug/* Scrips de conguracion de dispositivos hotplug (inst. dinamica)
/etc/hotplug.d/* Archivos de agentes de dispositivos
/etc/cvs-cron.conf Sistema de versiones concurrentes (cvs)
/etc/cvs-pserver.conf Opciones del servidor de versiones (cvs)
/etc/dhcpd.conf Archivo de conguracion estandar DHCPD
/etc/default/dhcpd Opciones del DHCPD
/var/lib/dhcp/dhcpd.leases Base de datosleasepara el servidor DHCPD
/var/lib/dhcp/dhclient.leases Base de datosleasepara el cliente DHCP
/etc/default/dhcp3-relay Archivo de conguracion DHCP-relay
/etc/dhpc3/dhclient.conf DHCP del cliente dhcp3
/etc/dhcp3/dhcpd.conf DHCP del servidor dhcp3
/etc/snort/snort.conf Archivo de conguracion de Snort
/etc/snort/rules/*.rules Archivos de reglas para Snort
/etc/tripwire/twpol.txt Archivo de polticas
/etc/acidlab/acidconf.php Archivo de conguracion de ACID
/etc/portsentry/portsentry.conf Archivo de conguracion de PortSentry
/var/log/* Registro de logs del sistema
/etc/nessus/nessusd.conf Archivo de conguracion de Nessus
/etc/proftpd.conf Conguracion del servidor ProFTPD
/etc/ftpusers Usuarios del sistema que tienen permitido el acceso FTP
/etc/ypserv.conf Conguracion del servidor NIS
/etc/ypserv.securenets Congura las IP que tienen permiso para usar el servidor NIS
/var/yp/Makele Conguracion opciones servidor NIS y archivos a exportar
/var/yp/yp-servers Listado de los servidores NIS secundarios de nuestro sistema
/etc/yp.conf Conguracion del cliente NIS
/etc/nsswitch Archivos a importar del servidor NIS
/etc/resolv.conf Contiene el nombre y la direccion IP de los servidores DNS
/etc/bind/db.lan A~nadir para los equipos de una LAN
/etc/bind/db.192.168.0 A~nadir para el DNS inverso de una LAN
/etc/bind/named.conf Conguracion del servidor DNS BIND
/etc/bind/named.conf.local Dene zonas locales en el servidor DNS BIND
/etc/bind/named.conf.options Dene las opciones del servidor DNS BIND
/etc/samba/smb.conf Conguracion del servidor Samba
/etc/smbpasswd Contiene los passwords de los usuarios Samba
/etc/smbusers Contiene una lista de los usuarios del sistema y su corresponden-
cia con su usuario Samba
/etc/lmhosts Interfaz entre los nombres de maquinas NetBIOS y las direcciones
IP numericas
Jose Antonio Escartn Vigo, Junio 2005.

Apendice C. Archivos de conguracion 323
Archivo Descripcion
/etc/printcap Impresoras del sistema
/var/spool/samba Cola de impresion, por defecto, en Samba
/var/spool/mail Correo de los usuarios
/etc/dumpdates Informacion de las copias de seguridad realizadas
/<particion>/quota.group Archivos de conguracion de quotas de grupo
/<particion>/quota.user Archivos de conguracion de quotas de usuario
/etc/exports Archivo de conguracion de NFS
/etc/jabber/jabber.xml Archivo de conguracion del servidor Jabber
/etc/printcap Archivo de conguracion de impresoras LPD
/etc/cups/cupsd.conf Conguracion del servidor Cups
/var/run/cups/printcap Archivo de conguracion de impresoras Cups
/var/spool/cups Directorio donde se almacenan los archivos que se van a imprimir
/etc/apache/httpd.conf Archivos de conguracion de Apache
/etc/apache/modules.conf
/etc/apache/access.conf
/etc/apache/srm.conf
/etc/apache/mime.types
/etc/apache/conf.d/ Directorio de conguracion de los modulos Apache
/etc/apache-ssl/* Los mismos archivos de conguracion, para Apache-SSL
/var/log/apache/* Directorio donde se almacenan los logs, generados por Apache
/etc/webalizer.conf Archivo de conguracion de Webalizer
/var/www/webalizer Reportes de estadisticas web
/etc/exim4/exim4.conf.template Archivo de conguracion de Exim4
/var/mail/<usuario> Archivo de correo de los usuarios del sistema
/etc/mailname Direcciones de correo locales
/etc/aliases Alias de nombres de usuario
/etc/email-addresses Direccion de correo del servidor
/etc/fetchmailrc Archivo de conguracion del servidor Fetchmail
~/.fetchmailrc Archivo de conguracion de usuario Fetchmail
/etc/courier/imapd Archivo de conguracion de courier-imap
/etc/courier/imapd.cnf Opciones de courier-imap
/etc/courier/imapd-ssl Opciones de courier-imap-ssl
~/.maillter Conguracion de usuario Maildrop
/etc/procmailrc Archivo de conguracion del servidor Procmail
~/.procmailrc Archivo de conguracion de usuario Procmail
/etc/clamav/clamd.conf Archivo de conguracion de ClamAV
/etc/default/spamassassin Conguracion del SpamAssassin
/etc/default/spampd Conguracion del demonio de SpamAssassin
Jose Antonio Escartn Vigo, Junio 2005.

Apendice D
>Por que Debian no tienerc.local?
A diferencia de otras distribuciones Linux, parece que Debian no usarc.local(el archivo de conguracion
local) para el proceso de inicializacion. Entonces, >que facilidades suministra Debian para esta tarea?
Runlevels
Tradicionalmente en los sistemas UNIX/LINUX, cuando se inicia la maquina, el proceso \init" (que
es ejecutado por el kernel cuando termina su arranque) ejecuta una serie de scripts de inicio, los cuales
suelen encargarse de \setear" valores de conguracion y ejecutar diversos programas.
Dicho proceso de arranque se separa enrunlevels, que son simplemente numeros que identican cada
etapa, y en general van del 0 al 6, los numeros del 7 al 9 tambien estan denidos pero no se suelen usar.
Hay una excepcion, elrunlevels, que es el \single user mode", y se suele usar para tareas especiales
de rescate y/o mantenimiento inesperado.
Hoy en da, las distribuciones manejan cada una sus scripts de arranque de forma particular, y muchas
veces se manejan de forma alternativa sin tenerrunlevelsclaramente denidos como hasta hace unos a~nos.
En algunas, se pueden encontrar los directorios/etc/rc#.d/, donde # representa al numero derunlevel;
en otras estan todos los scripts contenidos en/etc/rc.do en/etc/init.d. Lo mas aconsejable en cada caso
es consultar la documentacion de cada distribucion.
Podemos cogurar gracamente los scrips de RunLevel con la herramienta:#ksysv
Insertar un script en el arranque
Supongamos que un sistema necesita ejecutar el scriptexempleal inicializar, o al entrar en unrunlevel
en particular. Entonces el administrador del sistema debera:
Colocar el scriptexempleen el directorio/etc/init.d/
Ejecutar la ordenupdate-rc.dcon los argumentos apropiados para preparar enlaces entre los directo-
riosrc?.d(especicados desde la lnea de comandos) y/etc/init.d/exemple. Aqu, `?' es un numero
que corresponde a unrunlevelestilo System V
La ordenupdate-rc.d
1
creara enlaces entre cheros en los directoriosrc?.dy el script en/etc/init.d/.
Cada enlace comenzara con una `S' o una `K', seguida de un numero, seguido por el nombre del script. Los
scripts que comiencen con `S' en/etc/rcN.d/seran ejecutados al entrar alrunlevel N. Los que lo hagan
con con una `K' seran ejecutados al dejar elrunlevel N.
1
Para tener disponible el comandoupdate-rc.dhay que realizar un apt: #apt-get install rcconf

326 Servidor Linux para conexiones seguras de una LAN a Internet
Uno podra, por ejemplo, obligar al scriptexemplea ejecutarse en el arranque, poniendolo en/etc/init.d/
e instalando los enlaces con#update-rc.d exemple defaults 19. El argumento `defaults' se reere a los
runlevelspredeterminados, que son los que van del 2 al 5. El argumento `19' se asegura de queexemple
sea llamado antes que cualquier otro script que contenga el numero 20 o un numero mayor.
Si necesitamos administra este tipo de archivos de runlevel podemos instalar con apt, el siguiente pa-
quete:#apt-get install rcconf
Para ejecutarlo intruduciremos el comando:#rcconf
Mostrara un menu graco desde donde podremos habilitar o deshabilitar servicios en la carga inicial
del sistema.
Insertar un script, mediante el asistente graco
Se pueden agregar scrips de forma graca, mediante nuestra herramienta de conguracion web: Web-
mail. En la gura D.1 podemos observar el metodo para agregar un scrip nuevo.
Figura D.1: Interfaz graca Webmin para agregar Runlevels
Jose Antonio Escartn Vigo, Junio 2005.

Apendice E
Puertos por defecto
El n.
o
de puertos a los que podemos acceder en cada hosts es de 65.536 (2
16
). Estos puertos estan
divididos en tres secciones:
Los puertos IANA: Son los 1024 primeros puertos del PC. La organizacion IANA (Internet As-
signed Numbers Authority) adjudico a cada uno de estos puertos una utilidad, protocolo,. . . para
estandarizar la comunicacion.
Los puertos Registrados: Son aquellos comprendidos entre el 1.024 y el 49.151 asignados a protocolos,
programas, . . . Pero no se encuentran estandarizados.
Los puertos privados: Son los que van del 49.152 y el 65.535. Sobre ellos no recae ningun uso par-
ticular y son utilizados para uso privado de los hosts y programas locales.
Si necesitamos mas informacion, sobre la asignacion de puertos la podemos consultar en la RFC1700
que data de Octubre de 1994, disponible en la direccion:http://www.ietf.org/rfc/rfc1700.txt.
Tambien existe otro \malicioso" grupo de puertos, son los puertos por defecto de los troyanos. Se
utilizan para establecer la comunicacion servidor-cliente entre los ordenadores implicados en la misma. Al
existir troyanos que permiten utilizar utilizar otros puertos , la identicacion de los mismos puede no ser
infalible, si bien la mayora de los usuarios de troyanos no se molestan en cambiar los puertos y utilizan
los puertos por defecto. Si necesitamos mas informacion, en la siguiente pagina web podemos encontrar la
mayora de puertos de troyanos:http://webs.ono.com/usr026/Agika2/2troyanos/puertostroya.htm
Y para terminar con esta seccion, podemos observar los puertos que hemos utilizado en este proyecto:
Servicio Puerto Servicio Puerto
FTP 21 SAMBA 901
SSH 22 NESSUS 1241
TELNET 23 RADIUS SERVER 1812
DNS 53 (UDP) HORDE 2095
DHCP SERVIDOR 67 (UDP) HORDE (SSL) 2096
DHCP CLIENTE 68 (UDP) SQUID 3128
TFTP 69 JABBER CLIENTE 5222
WEB (HTTPS) 80 JABBER SERVIDOR 5269
HTTPS 443 WEBMIN 10000
CUPS 631

Apendice F
Manual del editor Vim (Vi mejorado)
Personalmente utilizo el editor Vim frente al editor Emacs, este ultimo es mas completo y tiene mas
opciones, pero no me son utiles. Preero un editor potente y a la vez simple (Vim es muy simple, una vez
conocidos los comandos basicos).
Tiene dos modos de trabajo, el modo comando y el modo insercion. Me voy a centrar, principalmente
en el modo comando debido al gran numero de opciones disponibles.
Edicion de cheros
Para editar un chero simplemente hay que hacer:
$vi <archivo>, . . . en caso de que no exista se creara.
Modo insercion
Al editar un chero entramos en el modo comando por defecto, si lo que queremos es entrar en el modo
insercion, tenemos varias opciones:
a: A~nadir a partir del siguiente caracter
i: Insertar a partir del caracter actual
o: Insertar una lnea debajo de la actual y comenzar all la insercion
El modo insercion no tiene muchos secretos, se puede escribir lo que se quiera y luego volver al modo
comando, pulsando la teclaEsc.
Modo comando
El modo comando del vim tiene multitud de opciones, pasemos a detallar las mas utilizadas:
u: Deshacer la ultima accion. Cabe destacar que en Vim, a diferencia de otros editores se pueden
deshacer innitos cambios, ya que esta opcion no tiene lmite
CTRL+r: Rehace la ultima accion deshecha con \u"
w: Guardar
w!: Fuerza a guardar (es recomendable usar esta opcion)

330 Servidor Linux para conexiones seguras de una LAN a Internet
q: Salir, si no se ha guardado bloquea la salida
q!: Fuerza a salir sin guardar
x: Guardar y salir
x!: Guardar y salir, forzando la escritura.
e chero: Abre el chero
dd: Elimina la lnea sobre la que esta el cursor
x: Suprime el caracter siguiente a donde esta el cursor
<numero>yy: Copia una cantidad de lneas igual a numero
p: Pegar lneas
/cadena: Busca `cadena' en el texto sobre el que trabajamos
n: nueva busqueda sobre la ultima cadena especicada
:<numero>: Va a la lnea identicada por el numero
%s/cadena/nuevacadena: Se usa para sustituir `cadena' por `nuevacadena' en el texto, esta opcion
es especialmente util
r chero: Vuelca el contenido de chero sobre la posicion actual del cursor
!comando: Inserta la salida de un comando ejecutado. Por ejemplo si hacemos!lsinserta la salida
delsen nuestro chero.
. (punto): Repite el ultimo comando
Personalizacion del Vim
Se puede personalizar Vim mediante un archivo de conguracion, el~/.vimrc. En dicho chero tenemos
una serie de opciones que podemos activar o desactivar segun lo que preramos, las principales son:
syntax on: Activa el coloreado de sintaxis, muy util para programadores
set nobackup: Evita que se creen copias de seguridad cada vez que editemos un chero
set showmode: Muestra siempre en que modo estamos trabajando (comando o insercion)
set ruler: Muestra una regla con informacion en la parte inferior de la consola
set vb: Desactiva el molesto \pitido" y lo sustituye por un parpadeo de pantalla
set ignorecase: No diferencia entre mayusculas y minusculas
set showmatch: Es util para realizar busquedas, resaltara los resultados coincidentes con el patron.
au BufReadPost * if line ("""")lexecute(normal'"")jendif: Posiciona el cursor en donde se
encontraba la ultima vez que editamos el chero
Basado en un manual publicado en Todo-Linux, puede ser consultado en la siguiente direccion:
http://www.todo-linux.com/modules.php?name=News&le=article&sid=2162
Jose Antonio Escartn Vigo, Junio 2005.

Apendice G
Gua rapida de IPTables
IPTables es una herramienta para ltrar paquetes del kernel (2.4x o posterior).
Comandos basicos
IPTables es la evolucion deipchainsyipfwadmy basicamente permite o rechaza los paquetes que
llegan al host desde una red.
Cadenas (chains) predenidas:
INPUT: Los paquetes que llegan a nuestra maquina
OUTPUT: Los paquetes que salen de nuestra maquina
FORWARD: Los paquetes que atraviesan nuestra maquina
Las opciones basicas:
-s: Especica una direccion de origen
-d: Especica una direccion de destino
--sport: Puerto de origen
--dport: Puerto de destino
--tcp-ags mascara activos: Flags permitidos (mascara) y ags activos
-m: Modulo de opciones (Vease$man iptables)
-f: Paquetes fragmentados
-t: Especica la tabla (lter, nat o mangle)
-p: Especica un protocolo
-i: Especica un interface de entrada
-o: Especica un interface de salida
-j: Especica la accion a ejecutar sobre el paquete
Acciones:
DROP: Elimina el paquete
LOG: Registra el paquete
REJECT: Rechaza el paquete
ACCEPT: Acepta el paquete

332 Servidor Linux para conexiones seguras de una LAN a Internet
Comandos fundamentales:
iptables -L, . . . ver las reglas introducidas
iptables -F, . . . borrar todas las reglas
Con#man iptablestenemos todas las opciones.
Ejemplos
Eliminamos todas los paquetes de entrada y salida:
iptables -A INPUT -j DROP
iptables -A OUPUT -j DROP
Aceptamos que se conecten a nuestro servidor Web(80) y FTP(21):
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 21 -j ACCEPT
Permitimos la comunicacion con el servidor DNS:
iptables -A INPUT -p udp --dport 53 -j ACCEPT
Script muy basico de IPTables para dar acceso al 80 y al 22:
#!/bin/bash
# Permitimos que se conecten a nuestro servidor web y al ssh
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
# Permitimos la comunicacion con el servidor dns
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# Reglas basicas. Denegamos todas las entradas permitimos todas las salidas
iptables -A INPUT -j DROP
iptables -A OUTPUT -j ACCEPT
Si queremos poner la maquina como rewall con dos interfaces de red, eth0 y eth1:
Activamos el ipforward:
echo 1 > /proc/sys/net/ipv4/ip_forward
Hacemos el NAT de las direcciones de fuera y permitimos la salida:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT
Solo permitimos que la red interna acceda a los puertos 25 y 80 de la red externa:
iptables -A FORWARD -s 192.168.0.0/24 -p TCP -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -p TCP --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP --dport 80 -j ACCEPT
Si queremos hacer un proxy transparente para la salida de la red interna, es decir abrir un puerto
de salida en el router:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport [puerto_externo]
-j DNAT --to [IP_maquina]:[puerto_maquina]
Si queremos denegar un rango concreto de IPs:
iptables -A INPUT -s 195.76.238.0/24 -j DROP
iptables -A INPUT -s 217.116.8.112/29 -j DROP
iptables -A INPUT -s 217.116.0.144 -j DROP
iptables -A INPUT -s 195.76.172.0/24 -j DROP
iptables -A INPUT -s 155.201.0.0/16 -j DROP
Jose Antonio Escartn Vigo, Junio 2005.

Debian Sarge, nueva version estable
En el proyecto Debian, Sarge ha sido congelada y en breve sera la nueva version `stable' de Debian. La
version testing pasara a llamarse Etch y sera una version real \en pruebas" ya que Sarge llevaba mucho
tiempo entre los usuarios y ya esta muy probada.
Para tener nuestro servidor es necesario tener una version estable y no en pruebas, hemos de modicar
nuestro/etc/apt/sources.listpara que no nos cambie de version automaticamente.
En estos momentos mi archivo /etc/apt/sources.list contiene las siguientes entradas:
deb http://ftp.rediris.es/debian testing main contrib non-free
deb-src http://ftp.rediris.es/debian/ testing main non-free contrib
deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free
deb-src http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
Para que mi sistema siga siendo Sarge, aunque dentro de unos das lo hara en la nueva etapa como
estable, deberemos cambiarlo por este otro:
deb http://ftp.rediris.es/debian sarge main contrib non-free
deb-src http://ftp.rediris.es/debian/ sarge main non-free contrib
deb http://ftp.rediris.es/debian-non-US sarge/non-US main contrib non-free
deb-src http://ftp.rediris.es/debian-non-US sarge/non-US main contrib non-free
deb http://security.debian.org/ sarge/updates main contrib non-free
Y realizar un:#apt-get update
Si dejamos el archivo/etc/apt/sources.listcomo esting", nuestro sistema dejara de ser Sarge, y pa-
sara a ser Etch.
Tambien quera recordar que existe una tercera version de Debian:Debian Sido \unstable", que es la
versin inestable. Esta version siempre se llamara as: \Sid" y no es adecuada para el uso de servidores, ya
que esta destinada a desarrollar el software que luego pasara al resto de versiones.

334 Servidor Linux para conexiones seguras de una LAN a Internet
Desde la pagina ocial de Debian podemos obtener los siguientes datos:
Desde el 3 de mayo de 2005, las actualizaciones de seguridad de la distribucion \en pruebas" las
gestiona el equipo de seguridad. Por tanto, esta distribucion dispone de oportunas actualizaciones
de seguridad. Esta situacion es temporal, ya que la distribucion en pruebas esta congelada.
La fecha de publicacion, inicialmente prevista para el 30 Mayo, se ha pospuesto una semana, y pasa
a ser el 6 de junio de 2005.
Como es usual, las metas de la versin y la fecha en la que se hara publica no se determinan con
antelacion. En otras palabras, \Debian publica la nueva version cuando es el momento de hacerlo".
Los mayores cambios para Sarge incluyen reemplazar el antiguo sistema de instalacion con discos
exibles, por el nuevo instalador de Debian, y usar GCC 3.3 como el nuevo compilador predeter-
minado en arquitecturas que hasta ahora usaban la version 2.95. Tambien se ha llevando a cabo la
introduccion de nuevas versiones de programas como son Perl 5.8 y XFree86 4.3.
Como despedida solo cabe decir, que acerte de pleno en la planicacion y la eleccion de Debian
Sarge fue primordial para que este documento sirva como ayuda durante un largo tiempo a los nuevos
\administradores junior", sitio en el cual humildemente me ubico.
Jose Antonio Escartn Vigo, Junio 2005.

Licencia Creative Commons:
Reconocimiento-CompartirIgual
Gracias a la Universidad de Barcelona y en particular a Ignasi Labastida i Juan y a la colaboracion de
un grupo de abogados de reconocido prestigio disponemos hoy por hoy de las licencias creative commons,
no meramente traducidas al castellano y al catalan, sino tambien y sobre todo, adaptadas a la legislacion
espa~nola.
Con demasiada frecuencia, la vision sobre la proteccion de de obras creativas tiende a los extremos.
Por una lado tenemos la concepcion en la cual cualquier posible uso de una obra debe estar regulado al
milmetro; cuyo maximo exponente en nuestro pas quiza sea la cada vez menos querida SGAE
Por otro lado tenemos la anarqua total. Una vision en la que los creadores tienen total libertad para
hacer lo que les de la gana, pero en la que no tienen absolutamente ninguna proteccion.
Creative commons surge como una solucion de compromiso entre ambas posturas. De esta forma, los
creadores pueden elegir que derechos quieren reservarse y que usos de su obra quieren permitir. As se cons-
truye una capa de proteccion que ofrece una alternativa razonable y exible a la cada vez mas restrictiva
normativa en cuestion de propiedad intelectual.
En diciembre de 2002, Creative Commons lanza el primer conjunto de licencias, que cualquier a puede
utilizar de forma completamente gratuita para proteger sus creaciones.
Las licencias de Creative Commons se inspiran en la licencia a GPL de la Fundacion para el Software
Libre; pero, al contrario esta, las licencias Creative Commons no estan pensadas para software, sino para
otros tipos de trabajos creativos: paginas web, tesis doctorales, musica, pelculas, fotografas, literatura,
cursos . . .
Como escoger una licencia
Para que la seleccion de licencias resulte facil para todo el que quiera proteger sus obras sin necesidad
de saber nada de Derecho, han creado una herramienta online, diponible en Castellano y Catalan que te
permite ir eligiendo el tipo de proteccion que quieres para tu trabajo y en funcion de las opciones que
escojas, te ofrece la licencia mas adecuada.
http://creativecommons.org/license/?lang=es, . . . herramienta en castellano.
http://creativecommons.org/license/?lang=ca, . . . herramienta en catalan.
0
Estos datos han sido obtenidos de la web http://www.elcuaderno.info, acogida a la licencia http://creativecommons.org/
/licenses/by-sa/2.0/, \Reconocimiento-CompartirIgual" la misma bajo la que se encuentra este proyecto, el autor no se cita
al no gurar en el articulo.

336 Servidor Linux para conexiones seguras de una LAN a Internet
Creative commons no supone renunciar a proteger tu trabajo, sino que implica que puedes escoger
que derechos preeres reservarte y que derechos quieres ceder a los demas.
Tu decides en que condiciones estas dispuesto a permitir la utilizacion de tu trabajo, combinando las
distintas condiciones que puedes imponer, hay hasta once tipos de licencias distintas de las que escoger
(adaptadas a nuestra legislacion, en este momento hay 6).
Estas son las condiciones que se pueden escoger:
Attribution/Reconocimiento: Permites que otras personas puedan copiar, distribuir y comunicar
pulicamente la obra as como hacer obras derivadas, incluyendo el hacer un uso comercial de tu obra.
Siempre que:
Te citen y te reconozcan como el autor original de la obra.
Al reutilizar o distribuir la obra, tienen que dejar bien claro los terminos de la licencia la obra
Noncommercial/No comercial : Permites que otras personas puedan copiar, distribuir y comu-
nicar pulicamente la obra as como hacer obras derivadas. Siempre que:
Te citen y te reconozcan como el autor original de la obra.
Al reutilizar o distribuir la obra, tienen que dejar bien claro los terminos de la licencia la obra
No utilicen tu obra con nes comerciales
No Derivative Works/Sin obra derivada: Permites que otras personas puedan copiar, distribuir
y comunicar pulicamente la obra, incluidos los posibles usos comerciales de la obra. Siempre que:
Te citen y te reconozcan como el autor original de la obra.
Al reutilizar o distribuir la obra, tienen que dejar bien claro los terminos de la licencia la obra
No se alterare, transforme o genere una obra derivada a partir de tu obra.
Share Alike/Compartir igual: Permites copiar, distribuir y comunicar pulicamente la obra, hacer
obras derivadas y hacer un uso comercial de esta obra. La distribucion de las obras derivadas se
permite unica y exclusivamente cuando la obra derivada utilice una licencia identica que la que tiene
el trabajo original.
No se pueden combinar las condiciones \compartir igual" y \sin obra derivada", puesto que la con-
dicion \compartir igual" solo es aplicable a las obras derivadas.
Una vez que has escogido las condiciones que quieres, accedes a la licencia apropiada de tres maneras:
Resumen simple: Un resumen en un lenguaje simple que todo el mundo puede entender, junto con
los iconos representativos de la licencia.
Codigo legal: el texto completo de la licencia dirigido fundamentalmente a abogados.
Codigo digital: Una version de la licencia legible por maquinas que ayudara a las herramientas de
busqueda y otras aplicaciones a identicar tu trabajo en funcion de sus condiciones de uso.
Jose Antonio Escartn Vigo, Junio 2005.

Apendice G. Gua rapida de IPTables 337
Como se utiliza la licencia
Una vez elegida la licencia, obtendremos un codigo HTML, que una vez pegado en la pagina web
generara un boton.
El boton \some rights reserved", indica que los contenidos del sitio web estan protegidos por una
licencia Creative commons. El boton enlaza con el resumen de la licencia que utilizas para proteger tus
contenidos. De esta forma, comunicando publicamente los terminos de tu licencia si alguien infringe los
mismos, estas protegido jurdicamente y puedes interponer una demanda en defensa de tus derechos de
propiedad intelectual.
Creative commons no es un bufete de abogados ni proporciona asesoramiento jurdico en caso de in-
fringimiento de los terminos de una licencia. Si se da el caso, tendras que acudir a un abogado, los que
yo conozco? Supongo que los mismos que todo el mundo: Javier Mestre y Carlos Sanchez Almeida del
bufete Almeida (http://www.bufetalmeida.com). En la lista de correo sobre licencias creative commons en
espa~nol, participan varios abogados, quiza all puedes preguntar que bufete hay cerca de donde vives que
este especializado en estos temas.
Las seis posibles combinaciones adaptadas a la legislacion espa~nola son:
1. Reconocimiento
2. Reconocimiento-SinObraDerivada
3. Reconocimiento-NoComercial-SinObraDerivada
4. Reconocimiento-NoComercial
5. Reconocimiento-NoComercial-CompartirIgual
6. Reconocimiento-CompartirIgual
Licencia escogida
Por el caracter abierto y libre de este proyecto, para elegir la licencia se voy a seguir el espritu de
GNU y sus licencias: GPL para software y GFDL (GNU Free Document) para documentacion.
Por eso cedo el derecho de realizar una explotacion economica de la obra, a condicion de que, esa obra
modicada o derivada este bajo la misma licencia que la primera y en ella se me cite como autor original.
Es decir, para el PFC: \Servidor Linux para conexiones seguras de una LAN a Internet", he escogido
la licencia CC - \Reconocimiento-CompartirIgual".
La asignacion de este tipo de licencia \Creative Common" respecto a GFDL, esta justicada debido a
que, en mi opinion, GFDL tiene un gran fallo, no permite realizar modicaciones de la obra y publicarlas
bajo el mismo nombre y en mi caso, esta obra se debera actualizar con el tiempo, ya sea por m o por
alguna otra persona que continue el proyecto. No quiero que el PFC nazca y muera igual, preero donarlo
a la comunidad y permitir que se pueda modicar y actualizar con el tiempo.
Creative Commons, me ha facilitado el siguiente parrafo para cualquier persona que necesite mas
informacion sobre la licencia:
\Esta obra esta bajo la licencia de Atribucion de Creative Commons:Reconocimiento-CompartirIgual
2.1 Espa~na. Para ver una copia de esta licencia, visitehttp://creativecommons.org/licenses/by-sa/2.1/es/
o envie una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA."
Jose Antonio Escartn Vigo, Junio 2005.

338 Servidor Linux para conexiones seguras de una LAN a Internet
Resumen simple de la licencia del PFC
Figura G.1: Licencia Reconocimiento-CompartirIgual
Esto es un resumen legible del texto legal, la licencia completa se encuentra disponible en la direccion:
http://creativecommons.org/licenses/by-sa/2.1/es/legalcode.es
Jose Antonio Escartn Vigo, Junio 2005.

Paginas Web consultadas
http://acidlab.sourceforge.net/ - Consola de analisis de Bases de datos de intrusiones (ACID)
http://airsnort.shmoo.com/ - Web ocial de AirSnort
http://apostols.org/projectz/neped/ - Web ocial de NePED, detector de sniers
http://barrapunto.com - Web de noticias sobre informatica
http://bogolter.sourceforge.net/ - Pagina web de Bogolter
http://bulma.es - Comunidad de usuarios Linux, multitud de artculos
http://bulma.net/body.phtml?nIdNoticia=1334 - Manual de conguracion DNS BIND 9.2.1
http://cauchy.bdat.net/dns/bind-9/DNS-HOWTO-9-es/ - DNS Como
http://certisign.com.br/servidores - Entidad de certicacion
http://deim.etse.urv.es/ajuda/manuals/vi/ - Manual del vi
http://docs.kde.org/es/HEAD/kdegraphics/ksnapshot/ - Manual de KSnapshot
http://download.jabber.org/ - Pluggins para jabber
http://eia.udg.es/~atm/tcp-ip/index.html - Documentacion sobre TCP/IP
http://enterprise.bidmc.harvard.edu/pub/nessus-php/ - Interfaz PHP para Nessus
http://es.tldp.org - Proyecto Lucas, documentacion Linux en espa~nol
http://es.tldp.org/Tutoriales/NOVATO/novato-a-novato/novato-a-novato.html - Manual del novato
http://es.wikipedia.org - Wikipedia, la enciclopedia libre
http://gimp.hispalinux.es - Grupo de usuarios Espa~noles de GIMP
http://gsyc.escet.urjc.es/robotica/apuntes/capturavideoCOMO.pdf - COMO capturar video
http://his.sourceforge.net/trad/honeynet/ - Proyecto HoneyNet en castellano
http://hostap.epitest./wpasupplicant/ - HowTo wpasupplicant
http://httpd.apache.org/ - Apache HTTPD Server Project
http://kile.sourceforge.net/ - Web ocial Kile
http://latex2rtf.sourceforge.net/ - Convertidor de Latex a Rtf
http://laura.celdran.name/ - HowTos Laura Celdran
http://losinvisibles.net/como/como.html - Mini Como's de Simon
http://oriol.joor.net/articletxers/1574/WXP-WAP-EAPTLS.pdf - Conectar WinXP a Radius
http://packages.debian.org/testing/ - Gua completa de paquetes Debian Sarge
http://patux.glo.org.mx/imp-mini-como.html - HowTo sobre IMAP
http://prosper.sourceforge.net/ - Web ocial de Prosper
http://sourceforge.net/projects/airsnort - Proyecto SourceForge AirSnort
http://spamassassin.apache.org/ - Pagina web de SpamAssassin
http://tira.escomposlinux.org/ - Tira comica Linux
http://tldp.org/HOWTO/htmlsingle/8021X-HOWTO/ - HowTo 802.1x
http://us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/ - HowTo ocial de Samba
http://webadminmodules.sourceforge.net/ - Modulos para Webmin
http://webs.ono.com/usr026/Agika2/2troyanos/puertostroya.htm - Puertos de Troyanos
http://www.apache.org/ - Pagina Web del Proyecto Apache
http://www.apache-ssl.org/ - Pagina Web del Proyecto Apache-SSL
http://www.bastille-linux.org - Web de Bastille Linux
http://www.bufetalmeida.com - Bufete Almeida, especializado en ciberderechos
http://www.canariaswardrive.org/ - 1.
er
campeonato de Wardriving en Espa~na
http://www.catb.org/ esr/fetchmail/ - Pagina web de Fetchmail

340 Servidor Linux para conexiones seguras de una LAN a Internet
http://www.catcert.net/ - Agencia catalana de certicacion
http://www.cert.org/ - Agencia seguridad en Internet CERT (Computer Emergency Response Team)
http://www.cervantex.org - Comunidad de usuarios espa~noles de TEX
http://www.chkrootkit.org/ - Web de chkrootkit
http://www.clamv.net - Web ocial del antivirus de correo ClamV
http://www.compuamersa.com/linux.htm - Sobre las distribuciones
http://www.courier-mta.org/ - Pagina web de Courier
http://www.cypherspace.org/openpgp/ - Implementaciones de OpenPGP
http://www.debian.org - Web ocial de Debian
http://www.debian.org/distrib/ - Metodos de la distribucion Debian
http://www.debian.org/doc/ - Documentacion rapida para Debian
http://www.debian.org/doc/manuals/apt-howto/index.es.html - APT HowTo, en espa~nol
http://www.debian.org/doc/manuals/securing-debian-howto/index.es.html - Manual de seguridad
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html - Recompilacion Kernel HowTo
http://www.distrowatch.com/index.php?language=ES - Todo sobre distribuciones
http://www.dslreports.com/forum/remark,9286052 mode=at - Conectar WinXP a Radius (Ingles)
http://www.elcuaderno.info/ - Web de noticias
http://www.entrust.net - Entidad de certicacion
http://www.escomposlinux.org/ - Grupos de noticias de Linux
http://www.exim.org/ - Pagina web de Exim
http://www.faqs.org/docs/iptables/index.html - Tutorial IPTables (Ingles)
http://www.freeradius.org/ - FreeRadius
http://www.gimp.org - Web ocial de The Gimp
http://www.gnome.org/ - Web de GNOME
http://www.gnupg.org - Web ocial de GnuPG
http://www.gwolf.org/seguridad/portsentry/ - Manual de uso PortSentry
http://www.gwolf.org/seguridad/logcheck/ - Manual de uso Logcheck
http://www.honeyd.org - Web ocial de Honeyd
http://www.horde.org/ - Pagina web de Horde
http://www.icewalkers.com/Linux/Howto/ - HowTos en espa~nol
http://www.ietf.org/rfc/rfc1700.txt - Puertos estandarizados por la IANA
http://www.iks-jena.de/produkte/ca - Entidad de certicacion
http://www.imendio.com/projects/planner/ - Web ocial Planner
http://www.insecure.org/nmap/ - Escaner de puertos
http://www.isc.org/index.pl?/sw/bind/ - Pagina ocial de Bind
http://www.jabber.org/ - Pagina web ocial de Jabber
http://www.jabberes.org/ - Pagina de usuarios de Jabber espa~noles
http://www.kde.org/ - Web de KDE
http://www.kernel.org - Fuentes ociales
http://www.kismetwireless.net - Web ocial Kismet Wireless
http://www.latex-project.org/ - Web ocial de L
ATEX
http://www.lids.org/ - Linux Intrusion Detection System
http://www.linux.cu/manual/basico-html/node120.html - Denicion de tareas periodicas
http://www.linuxdocs.org - HowTos
http://www.linuxdocs.org/HOWTOs/Kernel-HOWTO.html - Kernel HowTo
http://www.linuxguruz.com/iptables/ - Manuales sobre IPTables
http://www.linuxlots.com/~barreiro/spain/cuota.html#toc1 - Cuotas de usuario
http://www.linuxzamora.org - Web de usuarios de Linux
http://www.llibreriaha.com/cas/index.asp - Librera tecnica online de Barcelona
http://www.missl.cs.umd.edu/wireless/eaptls/ - HowTo EAP-TLS en WPA
http://www.nessus.org/ - Herramienta de busqueda de vulnerabilidades
http://www.netlter.org - Web ocial de IPTables
http://www.netsecuritysvcs.com/ncc/ - Herramienta graca para Nessus
http://www.nodedb.com/europe/es - Web de nodos wireless
Jose Antonio Escartn Vigo, Junio 2005.

Apendice G. Gua rapida de IPTables 341
http://www.openssh.org - Web de OpenSSH
http://www.packetfactory.net/Projects/sentinel/ - Web ocial de Sentinet, detector de sniers
http://www.planetplanner.org/ - Comunidad de usuarios de Planner
http://www.procmail.org/ - Pagina web de Procmail
http://www.proftpd.org/ - Web ocial del proyecto ProFTPD
http://www.samba.org/samba/docs/ - Documentacion sobre samba
http://www.snort.org - Web ocial de Snort
http://www.thawte.com - Entidad de certicacion
http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html - HowTo bootprompt en Debian Sarge
http://www.todo-linux.com/ - Manuales sobre linux
http://www.tripwire.org - Web ocial de Tripwire
http://www.verisign.com/site - Entidad de certicacion VeriSign
http://www.webmin.com/ - Web de Webmin
http://www.wimaps.com/ - Mapas de nodos wireless
http://www.xfree86.org/ - Web de XFree86
http://www.xombra.com - Articulos sobre Linux
http://www.zonagratuita.com/servicios/seguridad/snort.html - Snort + Acid en Windows
http://xvidcap.sourceforge.net - Proyecto Xvidcap
Jose Antonio Escartn Vigo, Junio 2005.

Bibliografa
[Ano00] Anonimo. Linux maxima seguridad. Pearson Prentice Hall, 2000.
[Aok05] Osamu Aoki. Gua de referencia Debian. http://qref.sourceforge.net, Febrero 2005.
[BB00] Albert Bernaus and Jaime Blanco. Linux a fondo. InforBook's, 2000.
[BN00] Daniel Bandel and Robert Napier. Linux. Pearson Prentice Hall, sexta edition, 2000.
[CO03] Francisco Charte Ojeda. Programacion GNU/Linux. Anaya Multimedia, 2003.
[CSLSMR
+
00] Bernardo Cascales Salinas, Pascual Lucas Saorn, Jose Manuel Mira Ros, Antonio Jose Pa-
llares Ruiz, and Salvador Sanchez-Pedreo Guillen.L
ATEX: una imprenta en sus manos. Aula
Documental de Investigacion, 2000.
[CSLSMR
+
03] Bernardo Cascales Salinas, Pascual Lucas Saorn, Jose Manuel Mira Ros, Antonio Jose Pa-
llares Ruiz, and Salvador Sanchez-Pedreo Guillen.El libro de L
ATEX. Pearson Prentice
Hall, 2003.
[eidD04] El equipo instalador de Debian.Gua de instalacion Debian GNU/Linux 3.1 para Intel x86.
http://www.debian.org, 2004. http://d-i.alioth.debian.org/manual/es.i386/index.html.
[How05] Tony Howlett. Software libre: Herramientas de seguridad. Anaya Multimedia, 2005.
[PRG
+
02] Bruce Perens, Sven Rudolph, Igor Grobman, James Treacy, and Adam Di Carlo.Insta-
lacion Debian GNU/Linux 3.0 para Intel x86. http://www.debian.org, Diciembre 2002.
http://www.debian.org/releases/woody/installmanual.
[Sha01] Steve Shash. Manual de administracion de Linux. Osborne McGraw-Hill, 2001.
[VF97] Gabriel Valiente Feruglio. Composicion de textos cientcos con L
ATEX. Ediciones UPC,
1997.
[vH02] William von Hagen. Sistemas de cheros Linux. Pearson Prentice Hall, 2002.
Tags