Aide memoire

Linux

Fil des billets

IPTABLES

17mars

Iptables es una herramienta que nos permite definir políticas de filtrado de tráfico de red. Desde la perspectiva de un servidor, iptables nos permite controlar el tráfico desde y hacia los servicios instalados en este.

En un ambiente de desarrollo generalmente no nos preocupamos de los servicios y puertos disponibles, ya que usualmente quienes accesan a este ambiente son miembros de nuestro equipo de trabajo, es decir gente de confianza. En un ambiente de producción no podemos permitir este comportamiento y es necesario definir cuales de estos servicios son necesarios para todo el público y restringir el acceso a aquellos otros no son de uso público. Esto aplica tanto para tráfico entrante y saliente.

Netfilter incorpora el concepto de tablas de filtros de las cuales existen tres:

  • FILTER ó tabla de filtros. Tabla responsable del filtrado de paquetes, es decir de bloquear o permitir que un paquete continúe su camino.
  • NAT ó tabla de traducción de direcciones de red. Esta tabla es la responsable de configurar las reglas de reescritura de direcciones o de puertos de los paquetes. Se refiere a la traducción de las direcciones de origen o destino y puertos de los paquetes.
  • MANGLE ó tabla de destrucción. Esta tabla es la responsable de ajustar las opciones de los paquetes, como por ejemplo la calidad de servicio (QOS) o tipo de servicio (TOS). Usualmente utilizada para priorizar servicios en el tráfico de red.

En esta ocasión vamos a estudiar la tabla FILTER, en la cual existen tres cadenas predefinidas que son:

  • INPUT. Todo aquel tráfico que viene desde fuera hacia nuestro servidor.
  • OUTPUT. Todo tráfico originado desde nuestro servidor hacia fuera.
  • FORWARD. Todo trafico que viaja en nuestro servidor y posteriormente es redireccionado, similar al concepto de un router.

Sintaxis

Para definir las reglas nos auxiliamos del comando iptables. Un ejemplo de una regla puede ser:

iptables -I INPUT 1 -i eth0 -p tcp --dport 22 -j ACCEPT

Ahora vamos a descomponer esta regla con sus diferentes opciones o parámetros

  • -I INPUT 1. Hace referencia de la cadena a la cual vamos a añadir la regla. El número 1 define la posición donde debe incorporarse la regla. Las cadenas pueden ser: INPUT, OUTPUT y FORWARD dependiendo del origen y destino de la solicitud.
  • -i eth0. Define la interfaz de red que se desea filtrar. Al no definirla, la regla aplica para todo el tráfico en general.
  • -p tcp. Es el protocolo del paquete. Este puede tambien ser udp ó icmp (ping).
  • --dport 22. Puerto destino, en este caso es el puerto 22 cuyo servicio es SSH.
  • -j ACCEPT. Aquí configuramos la acción que se va a ejecutar. Las más utilizadas son: ACCEPT ó aceptar, REJECT ó denegar, DROP ó borrar e ignorar y LOG ó registrar en los logs del sistema mediante syslogd. La diferencia entre REJECT y DROP es que en el REJECT hay una respuesta como por ejemplo: "CONNECTION REFUSED", en cambio con el DROP simplemente se corta la conexión sin respuesta alguna (bueno para evitar ataques DoS).

Existen otras opciones que también son importantes de conocer:

  • -s u origen (source). Define la dirección IP de origen.
  • -d ó destino (destination). Dirección IP de destino.
  • --sport ó puerto de origen. Puerto del cual se origina el paquete.
  • -m ó extensión (match). Sirve para definir un comportamiento específico en base a una extensión o librería de netfilter. Entre los más conocidos tenemos: state, icmp (solamente si se utiliza el protocolo icmp --p icmp), addrtype (tipo de dirección IP), limit (límite de conexiones en un lapso de tiempo), time (por rangos de tiempo especícifos) entre otras.
  • -F ó Limpiar (flush). Limpia las reglas.
  • -L ó Lista. Lista las reglas definidas en el sistema.

Las últimas dos opciones no necesitan un parámetro extra y no se usan en combinación con otra opción.

Sintaxis

Creando un script básico de Iptables

Para crear nuestro script vamos a utilizar el editor de textos nano, si no conoces de este editor o quieres aprender más de el, te recomiendo el siguiente nanotutorial: Tutorial del Editor de Texto Nano.

nano iptables-up.sh

Ahora vamos a agregar los siguientes puntos a nuestro nuevo script.

Limpiando todas las reglas

# Delete existing rules
iptables -F

Mantener las conexiones ya establecidas

# Allow connections that are already connected to your server
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Habilitando tráfico hacia servicios ó puertos específicos

# Allow connections to SSH
iptables -I INPUT 1 -p tcp --dport 22 -m state --state NEW -j ACCEPT
# Allowing connections to HTTP/HTTPS
iptables -I INPUT 1 -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 443 -m state --state NEW -j ACCEPT

Permitir tráfico ICMP

# Allow icmp input but limit it to 10/sec
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

Permitir tráfico desde la interfáz lo ó localhost

# Allow all incoming traffic from local
iptables -A INPUT -i lo -j ACCEPT

Ignorar todo tráfico no definido

# Changing the default policy for INPUT chain
iptables -P INPUT DROP

Al finalizar debemos guardar el archivo. El contenido del script debe lucir así:

Creando un script básico de Iptables

Ejecutar nuestro script de Iptables

Para ejecutar nuestro script, necesitamos cambiarnos al usuario root.

sudo su

Luego cambiar los permisos del script, para que este pueda ser ejecutado.

chmod +x iptables-script.sh

Para ejecutarlo escribiremos el siguiente comando:

sh iptables-script.sh

Guardar nuestra configuración con el comando iptables-save

Una vez hemos ejecutado el script, podemos exportar la configuración del firewall hacia un formato que iptables reconoce. Para esto utilizamos el siguiente comando:

iptables-save > /etc/iptables.rules

El formato del contenido del archivo es el siguiente:

# Generated by iptables-save v1.4.14 on Sun May 18 18:57:04 2014
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [36:3696]
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT
# Completed on Sun May 18 18:57:04 2014

Guardar nuestra configuración con el comando iptables-save

Restaurar la configuración de iptables desde un archivo generado con iptables-save

Para restaurar una configuración utilizamos el comando iptables-restore.

iptables-restore < /etc/iptables.rules

#!/bin/sh
## SCRIPT de IPTABLES – ejemplo del manual de iptables
echo -n Aplicando Reglas de Firewall…

## FLUSH de reglas
# Vider les tables actuelles
iptables -t filter -F

# Vider les règles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# SSH In
iptables -t filter -A INPUT -p tcp --dport 9888 -j ACCEPT

# SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 9888 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.162.69.71 -j ACCEPT
iptables -A OUTPUT -d 192.162.69.71 -j ACCEPT

# WEB 80
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

# WEB SSL 443
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# Mail SMTP:25
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Mail SMTP:587
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

# Mail POP3:110
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# Mail IMAP:143
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

# Mail IMAPS:143
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT

# Mail POP3S:995
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT

Control de caractere

24janvier

ASCII



Hex

Símbolo

Tipo

Descripción

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
TAB
LF
VT
FF
CR
SO
SI


CC
CC
CC
CC
CC
CC

FE
FE
FE
FE
FE
FE



Null - nulo
Start of Heading - inicio de cabecera
Start of Text - inicio de texto
End of Text - fin de texto
End of Transmission - fin de transmissión
Enquiry - solicitud de información
Acknowledge - confirmación
Bell - señal audible / tono de atención
Backspace - retroceso
Horizontal Tabulation - tabulado horizontal
Line Feed - avance de linea
Vertical Tabulation - tabulado vertical
Form Feed - avance de página
Carriage Return - Retorno de carro, iniciar nueva linea
Shift Out - terminar modo mayúsculas
Shift In - iniciar modo mayúsculas



ASCII

Hex

Símbolo

Tipo

Descripción

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F

DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US

CC




CC
CC
CC




IS
IS
IS
IS

Data Link Escape - escape del enlace de datos
Device Control 1 - control de dispositivo 1
Device Control 2 - control de dispositivo 2
Device Control 3 - control de dispositivo 3
Device Control 4 - control de dispositivo 4
Negative Acknowledge - confirmación negativa
Synchronous Idle - sincronización de la comunicación
End of Transmission Block - fin de bloque de transmissión
Cancel - cancelar
End of Medium - fin del medio (cinta/disco/papel)
Substitute - reemplazar
Escape
File Separator - separador de archivos
Group Separator - separador de grupo
Record Separator - separador de registro
Unit Separator - separador de unidad


 

 

 

Tipo

Descripción













CC
FE
IS

Communication Control - control de comunicación
Format Effector - manipulador de formato
Information Separator - separador de información


 



Convercion binaire

20janvier


Dec

Hex

Oct

Bin

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

000
001
002
003
004
005
006
007
010
011
012
013
014
015
016
017

00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111


Dec

Hex

Oct

Bin

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F

020
021
022
023
024
025
026
027
030
031
032
033
034
035
036
037

00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111


Dec

Hex

Oct

Bin

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F

040
041
042
043
044
045
046
047
050
051
052
053
054
055
056
057

00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111


Dec

Hex

Oct

Bin

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F

060
061
062
063
064
065
066
067
070
071
072
073
074
075
076
077

00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111


Dec

Hex

Oct

Bin

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F

100
101
102
103
104
105
106
107
110
111
112
113
114
115
116
117

01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111


Dec

Hex

Oct

Bin

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F

120
121
122
123
124
125
126
127
130
131
132
133
134
135
136
137

01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111


Dec

Hex

Oct

Bin

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F

140
141
142
143
144
145
146
147
150
151
152
153
154
155
156
157

01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111


Dec

Hex

Oct

Bin

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F

160
161
162
163
164
165
166
167
170
171
172
173
174
175
176
177

01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111


Dec

Hex

Oct

Bin

128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F

200
201
202
203
204
205
206
207
210
211
212
213
214
215
216
217

10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111


Dec

Hex

Oct

Bin

144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F

220
221
222
223
224
225
226
227
230
231
232
233
234
235
236
237

10010000
10010001
10010010
10010011
10010100
10010101
10010110
10010111
10011000
10011001
10011010
10011011
10011100
10011101
10011110
10011111


Dec

Hex

Oct

Bin

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF

240
241
242
243
244
245
246
247
250
251
252
253
254
255
256
257

10100000
10100001
10100010
10100011
10100100
10100101
10100110
10100111
10101000
10101001
10101010
10101011
10101100
10101101
10101110
10101111


Dec

Hex

Oct

Bin

176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF

260
261
262
263
264
265
266
267
270
271
272
273
274
275
276
277

10110000
10110001
10110010
10110011
10110100
10110101
10110110
10110111
10111000
10111001
10111010
10111011
10111100
10111101
10111110
10111111


Dec

Hex

Oct

Bin

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF

300
301
302
303
304
305
306
307
310
311
312
313
314
315
316
317

11000000
11000001
11000010
11000011
11000100
11000101
11000110
11000111
11001000
11001001
11001010
11001011
11001100
11001101
11001110
11001111


Dec

Hex

Oct

Bin

208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223

D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF

320
321
322
323
324
325
326
327
330
331
332
333
334
335
336
337

11010000
11010001
11010010
11010011
11010100
11010101
11010110
11010111
11011000
11011001
11011010
11011011
11011100
11011101
11011110
11011111


Dec

Hex

Oct

Bin

224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239

E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF

340
341
342
343
344
345
346
347
350
351
352
353
354
355
356
357

11100000
11100001
11100010
11100011
11100100
11100101
11100110
11100111
11101000
11101001
11101010
11101011
11101100
11101101
11101110
11101111


Dec

Hex

Oct

Bin

240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF

360
361
362
363
364
365
366
367
370
371
372
373
374
375
376
377

11110000
11110001
11110010
11110011
11110100
11110101
11110110
11110111
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111

 

Code Hexadecimal Ascii Symbol en Html

20janvier

Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1 Latin alphabet No. 1
 Browser support: All browsers



ASCII   HTML HTML  
Dec Hex Symbol Number Name

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F

!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
&#32;
&#33;
&#34;
&#35;
&#36;
&#37;
&#38;
&#39;
&#40;
&#41;
&#42;
&#43;
&#44;
&#45;
&#46;
&#47;


&quot;



&amp;









space
exclamation point
double quotes
number sign
dollar sign
percent sign
ampersand
single quote
opening parenthesis
closing parenthesis
asterisk
plus sign
comma
minus sign - hyphen
period
slash


ASCII   HTML HTML  
Dec Hex Symbol Number Name

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
&#48;
&#49;
&#50;
&#51;
&#52;
&#53;
&#54;
&#55;
&#56;
&#57;
&#58;
&#59;
&#60;
&#61;
&#62;
&#63;












&lt;

&gt;

zero
one
two
three
four
five
six
seven
eight
nine
colon
semicolon
less than sign
equal sign
greater than sign
question mark


ASCII   HTML HTML  
Dec Hex Symbol Number Name

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
&#64;
&#65;
&#66;
&#67;
&#68;
&#69;
&#70;
&#71;
&#72;
&#73;
&#74;
&#75;
&#76;
&#77;
&#78;
&#79;
















at symbol

















ASCII   HTML HTML  
Dec Hex Symbol Number Name

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
&#80;
&#81;
&#82;
&#83;
&#84;
&#85;
&#86;
&#87;
&#88;
&#89;
&#90;
&#91;
&#92;
&#93;
&#94;
&#95;



























opening bracket
backslash
closing bracket
caret - circumflex
underscore


ASCII   HTML HTML  
Dec Hex Symbol Number Name

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
&#96;
&#97;
&#98;
&#99;
&#100;
&#101;
&#102;
&#103;
&#104;
&#105;
&#106;
&#107;
&#108;
&#109;
&#110;
&#111;
















grave accent

















ASCII   HTML HTML  
Dec Hex Symbol Number Name

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~

&#112;
&#113;
&#114;
&#115;
&#116;
&#117;
&#118;
&#119;
&#120;
&#121;
&#122;
&#123;
&#124;
&#125;
&#126;




























opening brace
vertical bar
closing brace
equivalency sign - tilde
(not defined in HTML 4 standard)


ASCII   HTML HTML  
Dec Hex Symbol Number Name

128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
















































(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)


ASCII   HTML HTML  
Dec Hex Symbol Number Name

144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
















































(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)
(not defined in HTML 4 standard)


ASCII   HTML HTML  
Dec Hex Symbol Number Name

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
 
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
­
®
¯
&#160;
&#161;
&#162;
&#163;
&#164;
&#165;
&#166;
&#167;
&#168;
&#169;
&#170;
&#171;
&#172;
&#173;
&#174;
&#175;
&nbsp;
&iexcl;
&cent;
&pound;
&curren;
&yen;
&brvbar;
&sect;
&uml;
&copy;
&ordf;
&laquo;
&not;
&shy;
&reg;
&macr;
non-breaking space
inverted exclamation mark
cent sign
pound sign
currency sign
yen sign
broken vertical bar
section sign
spacing diaeresis - umlaut
copyright sign
feminine ordinal indicator
left double angle quotes
not sign
soft hyphen
registered trade mark sign
spacing macron - overline


ASCII   HTML HTML  
Dec Hex Symbol Number Name

176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
°
±
²
³
´
µ

·
¸
¹
º
»
¼
½
¾
¿
&#176;
&#177;
&#178;
&#179;
&#180;
&#181;
&#182;
&#183;
&#184;
&#185;
&#186;
&#187;
&#188;
&#189;
&#190;
&#191;
&deg;
&plusmn;
&sup2;
&sup3;
&acute;
&micro;
&para;
&middot;
&cedil;
&sup1;
&ordm;
&raquo;
&frac14;
&frac12;
&frac34;
&iquest;
degree sign
plus-or-minus sign
superscript two - squared
superscript three - cubed
acute accent - spacing acute
micro sign
pilcrow sign - paragraph sign
middle dot - Georgian comma
spacing cedilla
superscript one
masculine ordinal indicator
right double angle quotes
fraction one quarter
fraction one half
fraction three quarters
inverted question mark


ASCII   HTML HTML  
Dec Hex Symbol Number Name

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
&#192;
&#193;
&#194;
&#195;
&#196;
&#197;
&#198;
&#199;
&#200;
&#201;
&#202;
&#203;
&#204;
&#205;
&#206;
&#207;
&Agrave;
&Aacute;
&Acirc;
&Atilde;
&Auml;
&Aring;
&AElig;
&Ccedil;
&Egrave;
&Eacute;
&Ecirc;
&Euml;
&Igrave;
&Iacute;
&Icirc;
&Iuml;
latin capital letter A with grave
latin capital letter A with acute
latin capital letter A with circumflex
latin capital letter A with tilde
latin capital letter A with diaeresis
latin capital letter A with ring above
latin capital letter AE
latin capital letter C with cedilla
latin capital letter E with grave
latin capital letter E with acute
latin capital letter E with circumflex
latin capital letter E with diaeresis
latin capital letter I with grave
latin capital letter I with acute
latin capital letter I with circumflex
latin capital letter I with diaeresis


ASCII   HTML HTML  
Dec Hex Symbol Number Name

208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
&#208;
&#209;
&#210;
&#211;
&#212;
&#213;
&#214;
&#215;
&#216;
&#217;
&#218;
&#219;
&#220;
&#221;
&#222;
&#223;
&ETH;
&Ntilde;
&Ograve;
&Oacute;
&Ocirc;
&Otilde;
&Ouml;
&times;
&Oslash;
&Ugrave;
&Uacute;
&Ucirc;
&Uuml;
&Yacute;
&THORN;
&szlig;
latin capital letter ETH
latin capital letter N with tilde
latin capital letter O with grave
latin capital letter O with acute
latin capital letter O with circumflex
latin capital letter O with tilde
latin capital letter O with diaeresis
multiplication sign
latin capital letter O with slash
latin capital letter U with grave
latin capital letter U with acute
latin capital letter U with circumflex
latin capital letter U with diaeresis
latin capital letter Y with acute
latin capital letter THORN
latin small letter sharp s - ess-zed


ASCII   HTML HTML  
Dec Hex Symbol Number Name

224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
&#224;
&#225;
&#226;
&#227;
&#228;
&#229;
&#230;
&#231;
&#232;
&#233;
&#234;
&#235;
&#236;
&#237;
&#238;
&#239;
&agrave;
&aacute;
&acirc;
&atilde;
&auml;
&aring;
&aelig;
&ccedil;
&egrave;
&eacute;
&ecirc;
&euml;
&igrave;
&iacute;
&icirc;
&iuml;
latin small letter a with grave
latin small letter a with acute
latin small letter a with circumflex
latin small letter a with tilde
latin small letter a with diaeresis
latin small letter a with ring above
latin small letter ae
latin small letter c with cedilla
latin small letter e with grave
latin small letter e with acute
latin small letter e with circumflex
latin small letter e with diaeresis
latin small letter i with grave
latin small letter i with acute
latin small letter i with circumflex
latin small letter i with diaeresis


ASCII   HTML HTML  
Dec Hex Symbol Number Name

240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ
&#240;
&#241;
&#242;
&#243;
&#244;
&#245;
&#246;
&#247;
&#248;
&#249;
&#250;
&#251;
&#252;
&#253;
&#254;
&#255;
&eth;
&ntilde;
&ograve;
&oacute;
&ocirc;
&otilde;
&ouml;
&divide;
&oslash;
&ugrave;
&uacute;
&ucirc;
&uuml;
&yacute;
&thorn;
&yuml;
latin small letter eth
latin small letter n with tilde
latin small letter o with grave
latin small letter o with acute
latin small letter o with circumflex
latin small letter o with tilde
latin small letter o with diaeresis
division sign
latin small letter o with slash
latin small letter u with grave
latin small letter u with acute
latin small letter u with circumflex
latin small letter u with diaeresis
latin small letter y with acute
latin small letter thorn
latin small letter y with diaeresis


 HTML 4.01, ISO 10646, ISO 8879, Latin extended A and B,
 Browser support: Internet Explorer > 4, Netscape > 4


    HTML HTML  
Dec Hex Symbol Number Name

338
339
352
353
376
402
152
153
160
161
178
192
Œ
œ
Š
š
Ÿ
ƒ
&#338;
&#339;
&#352;
&#353;
&#376;
&#402;






latin capital letter OE
latin small letter oe
latin capital letter S with caron
latin small letter s with caron
latin capital letter Y with diaeresis
latin small f with hook - function


    HTML HTML  
Dec Hex Symbol Number Name

8211
8212
8216
8217
8218
8220
8221
8222
8224
8225
8226
8230
8240
8364
8482
2013
2014
2018
2019
201A
201C
201D
201E
2020
2021
2022
2026
2030
20AC
2122















&#8211;
&#8212;
&#8216;
&#8217;
&#8218;
&#8220;
&#8221;
&#8222;
&#8224;
&#8225;
&#8226;
&#8230;
&#8240;
&#8364;
&#8482;













&euro;

en dash
em dash
left single quotation mark
right single quotation mark
single low-9 quotation mark
left double quotation mark
right double quotation mark
double low-9 quotation mark
dagger
double dagger
bullet
horizontal ellipsis
per thousand sign
euro sign
trade mark sign

Instalation de mon serveur mail

20janvier

Je vais installer en premier lieu un serveur DNS


Je travaille sur une Debian vu que pour moi c'est le mieux y ma Debian n'a pas de Deskop
  • Premier on installe les paquettes
  • apt-get install dnsutils bind9 manpages
  • On commence par configurer le domaine principal
  • Que on va appeler

    fdirp.xyz

  • donc je creer le fichier fdirp.xyz
  • root@vps109185:/etc/bind# cat fdirp.xyz $TTL 604800 @ IN SOA vps109185.fdirp.xyz. root.fdirp.xyz. (\n 3\n 604800 86400 2419200 604800 ) ; @ IN NS vps109185.fdirp.xyz. www.fdirp.xyz. IN A 144.217.94.178 fdirp.xyz. IN A 144.217.94.178 imap.fdirp.xyz. IN A 144.217.94.178 imaps.fdirp.xyz. IN A 144.217.94.178 smtp.fdirp.xyz. IN A 144.217.94.178 ftp.fdirp.xyz. IN A 144.217.94.178 mail.fdirp.xyz. IN A 144.217.94.178 vps109185.fdirp.xyz. IN A 144.217.94.178 fdirp.xyz. IN MX 10 mail.fdirp.xyz. fdirp.xyz. IN A 144.217.94.178 emanuele.fdirp.xyz. IN A 144.217.94.178 manu.fdirp.xyz. IN A 144.217.94.178 photo.fdirp.xyz. IN A 144.217.94.178

Postfix, Courier, SSL/TLS, SpamAssassin, ClamAV, Amavis

19janvier

Creating a Mail Server on Ubuntu (Postfix, Courier, SSL/TLS, SpamAssassin, ClamAV, Amavis)

  • mail.example.com
    The hostname for your mail server. This can be anything you like, however, it should match the public hostname as specified by your DNS records if you want to expose the server over the Internet.
  • rootpassword
    The password for the MySQL root user. You should pick something unique and secure; but something you can remember.
  • mailpassword
    The password for the MySQL mail user. You should pick something unique and secure; you don’t even have to remember it beyond this tutorial.
  • adminpassword
    The password for the administrator e-mail account that you’ll create later in the guide.

Installation

Enter rootpassword.

Enter rootpassword.

Choose Ok.

Choose No.

Choose Ok.

Choose Internet Site.

Choose Ok.

Enter mail.example.com.

Choose Ok.

Virtual User

Note: All e-mail messages will be received by a single ‘virtual’ user. That is, only one system account needs to be created and we’ll manage mailboxes using the virtual user features of Postfix.

Note that we are forcing the user ID to 5000 as this value is referenced by configuration files later. If you need to use a different UID make sure you update the affected configuration files, too.

Postfix

Copy/paste:
Replace mail.example.com

Copy/paste:

Virtual Maps

Copy/paste:
Replace mailpassword

Copy/paste:
Replace mailpassword

Copy/paste:
Replace mailpassword

SASL Authentication (SSL/TLS)

Copy/paste:
Replace mailpassword

Copy/paste:

Copy/paste:
Replace mailpassword

Courier

Copy/paste:

Copy/paste:
Replace mailpassword

Copy/paste:

Copy/paste:
Replace mail.example.com

Copy/paste:

Copy/paste:
Replace mail.example.com

Note: In the next step you will be prompted to input some information about the certificate you create. You can enter any information you want here except Common Name (CN) which must match mail.example.com.

Amavis

Copy/paste:

SpamAssassin

Copy/paste:

ClamAV

Choose Ok.

Choose daemon.

Choose Ok.

Choose a mirror closest to your server.

Specify a proxy, if required.

Enter 24.

Choose No.

MySQL Database

Enter rootpassword.

Copy/paste:
Replace mailpassword

Create default data. This will:

  • Permit messages sent to the localhost domain
  • Permit messages sent to the localhost.localdomain domain
  • Permit messages sent to the example.com domain
  • Create a mailbox for admin@example.com with the password adminpassword
  • Forward messages to the localhost.localdomain domain to the localhost domain
  • Forward messages to the localhost domain to admin@example.com

Copy/paste:
Replace example.com and adminpassword

Finishing Up

Reboot Services

Create Your Mail Directory

You will not be able to login to your mailbox(es) until you create the required folder structure. There are two ways to do this:

  1. Send an e-mail to your new e-mail address from an existing e-mail account. Postfix will create the required directories for you.
  2. Create the directories yourself:

Problema connexion SSH

18janvier

root@con:/var/# scp -r phpBB root@141.211.82.118:/var/www
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!    @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
9f:3f:c8:5d:96:34:88:23:0b:d2:38:d1:b2:78:ab:6b.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:3
ECDSA host key for 144.217.81.128 has changed and you have requested strict checking.
Host key verification failed.
lost connection
root@consultantunix:/var/www# ssh-keygen -R "141.211.82.118"
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

piostfix

16janvier

Se inicia Postfix, saslauthd, y Dovecot:

Se procederá a apagar el servicio de sendmail ya que no es compatible con Postfix:

# chkconfig --levels 235 sendmail off

El servicio ha sido bajado en los niveles de ejecución (run levels) 2,3 y 5.

Requiere levantar el servicio de Postfix en los niveles de ejecución 2,3 y 5:

# chkconfig --levels 235 postfix on

Igual para saslauthd:

# chkconfig --levels 235 saslauthd on

Igual para Dovecot:

# chkconfig --levels 235 dovecot on


Se inicia Postfix, saslauthd, y Dovecot: Se procederá a apagar el servicio de sendmail ya que no es compatible con Postfix: # chkconfig --levels 235 sendmail off El servicio ha sido bajado en los niveles de ejecución (run levels) 2,3 y 5. Requiere levantar el servicio de Postfix en los niveles de ejecución 2,3 y 5: # chkconfig --levels 235 postfix on Igual para saslauthd: # chkconfig --levels 235 saslauthd on Igual para Dovecot: # chkconfig --levels 235 dovecot on

aptitude install bzip2 gcc libpcre3-dev libpcre++-dev g++ libtool libmysqlclient-dev make libssl-dev libmysqld-dev libdb-dev automake autoconf bzip2 lbzip2 libbz2-1.0 libbz2-dev curl libcurl3 libcurl4-openssl-dev libexpat1 libexpat1-dev

servidor web con su dns y su servidor de correo con un Debian Jessie

16janvier
Vamos configurar un servidor web con su dns y su servidor de correo con un Debian Jessie 64

El nombre de dominio central es consultantunix.com y vamos a configurar bind con el

On installe ensuite les outils pour la compilation, ils seront nécessaires tout au long de l’installation


root@vps103135:/etc/bind# apt-get install dnsutils bind9 manpages
root@vps103135:/etc/bind# cat consultantunix.com
$TTL 604800
@ IN SOA vps103135.consultantunix.com. root.consultantunix.com. (
3
604800
86400
2419200
604800 )
;
@ IN NS vps103135.consultantunix.com.
www.consultantunix.com. IN A 144.217.81.128
consultantunix.com. IN A 144.217.81.128
imap.consultantunix.com. IN A 144.217.81.128
imaps.consultantunix.com. IN A 144.217.81.128
smtp.consultantunix.com. IN A 144.217.81.128
ftp.consultantunix.com. IN A 144.217.81.128
mail.consultantunix.com. IN A 144.217.81.128
vps103135.consultantunix.com. IN A 144.217.81.128
consultantunix.com. IN MX 10 mail.consultantunix.com.
consultantunix.com. IN A 144.217.81.128
emanuele.consultantunix.com. IN A 144.217.81.128
manu.consultantunix.com. IN A 144.217.81.128
photo.consultantunix.com. IN A 144.217.81.128

Aquí solo vemos la configuration de un nombre de dominio


root@vps# cd /etc/bind

vi /named.conf.options 

options {
 directory "/var/cache/bind";

 // If there is a firewall between you and nameservers you want
 // to talk to, you may need to fix the firewall to allow multiple
 // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

 // If your ISP provided one or more IP addresses for stable
 // nameservers, you probably want to use them as forwarders. 
 // Uncomment the following block, and insert the addresses replacing
 // the all-0's placeholder.

forwarders {
           192.162.69.71;
            80.58.61.250;
            80.58.61.254;
 };

 auth-nxdomain no;    # conform to RFC1035
 listen-on-v6 { any; };
};

vemos este otro fichero

root@vps# vim.tiny /etc/bind/named.conf.default-zones

zone "consultantunix.com" {
type master;
notify yes;
file "/etc/bind/consultantunix.com";
forwarders{};
};


Vamos a instalar el servidor web que se llama Lamp


apt-get install apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libpcre3 ssl-cert
apt-get install heirloom-mailx libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 mysql-client mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5

ahora crearemo usuario y groupe

root@vps103135:/etc/postfix# useradd -g vmail -u 20001 vmail -d /home/virtual -m
root@vps103135:/etc/postfix# useradd postfix -g vmail
root@vps103135:/etc/postfix# chown -R vmail: /home/virtual
root@vps103135:/etc/postfix# chmod 770 /home/virtual

Postfix et Mysql

On lance l’installation de postfix :

aptitude install postfix-mysql postfix-pcre

on installe ensuite les autres paquets nécessaires :

aptitude install mysql-client mysql-server libsasl2-2 libsasl2-modules sasl2-bin openssl ntp

mysqladmin -u root password '*****'
mysqladmin -u root --password='*****' create postfix

Création de l’user postfix :

On crée les tables suivantes dans la base Postfix :


Evidemment on modifie la commande sed pour inclure son domaine.

Explications :
Seules 3 tables sont nécessaires à Postfix.
Le reste est pour l’interface Postfixadmin que l’on installera plus tard.

Le password (MD5) est "secret"

Le premier INSERT permet à Postfix de savoir que ce domaine est virtuel et qu’il doit donc le gérer.

Le 3ème INSERT est un alias virtuel pointant vers un user de la table mailbox. Cet alias vers lui même sera utilisé par Postfixadmin.

le 4ème INSERT est un simple alias virtuel.

Le 7ème INSERT est un compte (boite email) virtuel, qui utilise un mot de passe encrypté en MD5.

Les deux derniers INSERT permettent de créer le superadministrateur que l’on utilisera plus tard dans Postfixadmin.

On sécurise :

cd /etc/postfix
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_alias_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_domains_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_mailbox_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_relay_domains_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_relay_recipients_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_alias_domain_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_alias_domain_catchall_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_virtual_alias_domain_mailbox_maps.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_transport.cf
svn export http://smtp04.spamguard.fr/svn/Procmail/postfix/mysql_transport2.cf
sed -i 's/\*\*\*\*/toto/g' mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf mysql_relay_domains_maps.cf mysql_relay_recipients_maps.cf mysql_virtual_alias_domain_maps.cf mysql_virtual_alias_domain_catchall_maps.cf mysql_virtual_alias_domain_mailbox_maps.cf mysql_transport.cf mysql_transport2.cf

VIM

15janvier

Se servir de vim

Pour éditer un fichier texte existant ou créer un nouveau fichier texte, il suffit de taper :

# vim nom_du_fichier

Figure 16.1. Vim

Vim

Tout d’abord, il faut comprendre qu’il existe plusieurs modes de fonctionnement :

  • Le mode Commande, dans lequel vous vous trouvez quand vous ouvrez Vim. Dans ce mode, vous tapez des commandes… que nous verrons plus loin ! Si vous êtes dans un autre mode et que vous voulez revenir au mode commande, tapez Echap.
  • Le mode Insertion auquel on accède par la touche Inser. L’indicateur -- INSERTION -- apparaît alors en bas de l’écran. Dans ce mode, vous insérez du texte classiquement.
  • Le mode Remplacement auquel on accède en appuyant une deuxième fois sur Inser. L’indicateur -- REMPLACEMENT -- apparaît alors en bas de l’écran. Dans ce mode, le texte entré remplace le texte présent sous le curseur.
  • Le mode Visuel auquel on accède par la touche v depuis le mode Commande. L’indicateur -- VISUEL -- apparaît alors en bas de l’écran. Ce mode permet de sélectionner du texte pour y appliquer globalement des commandes.

Figure 16.2. Comment passer d’un mode à un autre ?

Comment passer d'un mode à un autre ?

Voici une liste des commandes les plus utilisées. Il faut bien entendu être en mode Commande pour les taper :

  • :h pour accéder à l’aide ;
  • :w pour enregistrer ;
  • :w nom_du_fichier pour faire enregistrer-sous nom_du_fichier ;
  • :q pour quitter ;
  • :wq ou
  • :q! pour quitter sans enregistrer les modifications ;
  • :r pour inclure le contenu d’un autre fichier ;
  • /mot_clef pour rechercher un mot vers le bas du texte (n pour passer à l’occurrence suivante, N pour passer à la précédente) ;
  • ?mot_clef pour rechercher un mot vers le haut du texte (n pour passer à l’occurrence suivante, N pour passer à la précédente (donc vers le bas)) ;
  • :numéro_de_ligne pour aller directement à cette ligne ;
  • nombre_de_lignes yy (sans espace) pour copier ce nombre de lignes à partir du curseur (yy pour copier une ligne et y pour copier un groupe de mots en mode visuel) ;
  • nombre_de_lignes dd (sans espace) pour couper ce nombre de lignes à partir du curseur (dd pour couper une ligne en mode commande et d pour couper un groupe de mots en mode visuel) ;
  • p pour coller après le curseur, P pour coller avant le curseur ;
  • u pour annuler la dernière modification. Vous pouvez appuyer plusieurs fois sur u pour annuler les dernières modifications ;
  • Ctrl+r ou :redo pour annuler la dernière annulation. Vous pouvez renouveler la combinaison de touches pour annuler les annulations antérieures ;
  • :%s/toto/tata/g pour remplacer toutes les occurrences de la chaîne de caractères toto par la chaîne de caractère tata.

DNS LINUX

15janvier

Le DNS est un protocole indispensable au fonctionnement d'Internet. Non pas d'un point de vue technique, mais d'un point de vue de son utilisation. Il est inconcevable aujourd'hui d'utiliser des adresses IP en lieu et place des noms des sites web pour naviguer sur Internet. Se souvenir de 58.250.12.36 est déjà compliqué, mais quand vous surfez sur 40 sites différents par jour, cela fait quelques adresses à retenir. Et ça, on ne sait pas faire...

Un arbre avec des branches

Une arborescence ordonnée

Le système DNS, vous l'utilisez tous les jours quand vous naviguez sur Internet. Lorsque vous voulez accéder au Site du Zéro, le système DNS se charge de convertir (on parle de résolution) le nom du site web demandé en adresse IP.

Un nom de domaine se décompose en plusieurs parties. Prenons l'exemple suivant :

www.google.fr
Chaque partie est séparée par un point.
On trouve l'extension en premier (en premier, mais en partant de la droite) ; on parle de Top Level Domain (TLD). Il existe des TLD nationaux (fr, it, de, es, etc.) et les TLD génériques (com, org, net, biz, etc.).
Ici, on a le découpage suivant :

www.google.fr
Il existe une infinité de possibilités pour la deuxième partie. Cela correspond à tous les sites qui existent : google.fr, siteduzero.com, ovh.net, twitter.com, etc.
Comme vous le voyez, google.fr est un sous-domaine de fr. Le domaine fr englobe tous les sous-domaines finissant par fr.
La troisième partie est exactement comme la seconde. On y retrouve généralement le fameux "www", ce qui nous donne des noms de domaine comme www.google.fr. www peut soit être un sous-domaine de google.fr, mais dans ce cas il pourrait y avoir encore des machines ou des sous-domaines à ce domaine, soit être directement le nom d'une machine.
Ici, www est le nom d'une machine dans le domaine google.fr.

On peut bien entendu ajouter autant de troisièmes parties que nécessaire, ce qui peut vous conduire à avoir un nom de domaine comme : www.fr.1.new.super.google.fr. :D

Voici une toute petite partie de l'arborescence des noms Internet :

Image utilisateur

Chaque "partie" est appelée label et l'ensemble des labels constitue un FQDN : Fully Qualified Domain Name. Ce FQDN est unique. Par convention, un FQDN se finit par un point, car au-dessus des TLD il y a la racine du DNS, tout en haut de l'arbre. Ce point disparaît lorsque vous utilisez les noms de domaine avec votre navigateur, mais vous verrez qu'il deviendra très important lorsque nous configurerons notre propre serveur DNS.

Trucs et astuces !

Si jamais vous administrez un réseau, et que vous possédez le domaine mondomaine.com, vous pouvez vous amuser à ajouter dans votre serveur DNS une machine qui s'appellera www.siteduzero.fr.mondomaine.com.
Ainsi, dès qu'une personne qui utilise votre serveur DNS demande www.siteduzero.fr en oubliant de mettre le . à la fin, elle sera envoyée vers votre la machine www.siteduzero.fr.mondomaine.com. !
Hacking power ! :p

Mais revenons aux principes du DNS pour étudier un dernier point important dans l'arborescence.
Dans l'architecture du service DNS, chaque label est responsable du niveau directement en dessous et uniquement de celui-ci. La racine est responsable du domaine .com, le .com de google.com et google.com de www.google.com, etc. Bien entendu, Google veut gérer lui-même le domaine google.com. L'organisme qui gère le domaine .com délègue donc la gestion de ce nom de domaine à Google.

Ainsi, chaque personne qui veut posséder un domaine sur Internet peut l'acheter, mais devra ensuite gérer un serveur DNS pour publier ses adresses.
Cependant, la plupart des entreprises qui vendent des noms de domaine (qu'on appelle registrar) proposent de gérer elles-mêmes vos enregistrements DNS, mais c'est moins fun. ;)

Nous savons donc que le DNS est organisé sous forme d'une grosse arborescence, et que chaque partie de l'arborescence peut être gérée par la personne qui la possède.

Mais comment fait-on pour savoir qui possède telle où telle partie et où sont stockées les informations que l'on recherche ?

La résolution, comment ça marche ?

Vous êtes connectés à votre réseau, votre serveur DHCP vous a donné une adresse IP, un masque de sous-réseau et probablement une passerelle par défaut, ainsi qu'un serveur DNS.

Imaginez que vous entrez www.siteduzero.com dans votre navigateur. Lorsque vous entrez ce nom, votre machine doit commencer par le résoudre en une adresse IP.
Vous allez donc demander une résolution au serveur DNS que vous avez reçu par le DHCP. Celui-ci a deux moyens pour vous fournir la réponse :

  • il connaît lui-même la réponse ;

  • il doit la demander à un autre serveur, car il ne la connaît pas.

La plupart du temps, votre serveur DNS est bien peu savant et demande à un autre serveur de lui donner la réponse. En effet, chaque serveur DNS étant responsable d'un domaine ou d'un petit nombre de domaines, la résolution consiste à aller chercher la bonne information sur le bon serveur.

Nous voulons donc joindre le site www.siteduzero.com et voilà ce que va faire mon serveur DNS.
Tout d'abord, il est évident que cette information ne se trouve pas sur notre serveur, car ce n'est pas lui qui est en charge du Site du Zéro.
Pour obtenir cette résolution, notre serveur va procéder de façon rigoureuse et commencer par là où il a le plus de chance d'obtenir l'information, c'est-à-dire au point de départ de notre arborescence.

  • Il va demander aux serveurs racine l'adresse IP de www.siteduzero.com. Mais comme les serveurs racine ne sont pas responsables de ce domaine, ils vont le rediriger vers un autre serveur qui peut lui donner une information et qui dépend de la racine, le serveur DNS de com.

  • Il demande ensuite au serveur DNS de com l'adresse IP de www.siteduzero.com. Mais comme auparavant, le serveur com renvoie l'adresse IP du serveur DNS qui dépend de lui, le serveur DNS de siteduzero.com.

  • Enfin, il demande au serveur DNS de siteduzero.com l'adresse IP de www.siteduzero.com et là, ça marche : le serveur de siteduzero.com connaît l'adresse IP correspondante et peut la renvoyer.

Maintenant, vous avez l'adresse IP de www.siteduzero.com !

Existe-t-il aussi un protocole pour convertir une adresse IP en nom de domaine ?

Non, c'est inutile. Le DNS sait faire cela, on parle alors de reverse DNS et de résolution inverse.

La gestion internationale des noms de domaine

Même si le système DNS n'est pas indispensable au fonctionnement d'Internet, il en est un élément incontournable.
Le système de noms de domaine est géré par un organisme américain appelé l'ICANN. Celui-ci dépend directement du Département du Commerce des États-Unis. L'ICANN est responsable de la gestion des 13 serveurs DNS qui gèrent la racine du DNS. Ces 13 serveurs connaissent les adresses IP des serveurs DNS gérant les TLD (les .fr, .com; org, etc.)

Il n'y a vraiment que 13 serveurs racine ?

Oui et non.
En fait, après plusieurs attaques sur les serveurs racine, on s'est rendu compte de la faiblesse de n'avoir que 13 serveurs et de la menace que cela pouvait représenter pour le fonctionnement d'Internet.
On a donc mis en place un système qui duplique les 13 serveurs en différents endroits d'Internet. Il y a donc réellement aujourd'hui plusieurs centaines de serveurs racine qui dupliquent les informations des 13 serveurs d'origine.

C'est l'ICANN qui autorise la création d'une nouvelle extension, comme le .xxx il y a plusieurs mois ou l'utilisation de caractères non-latins (arabes, chinois, japonais, etc.), il y a quelques années.
L'ICANN délègue ensuite les domaines de premier niveau à divers organismes. Pour l'Europe, c'est le RIPE qui délègue lui-même à L'AFNIC qui est responsable du domaine .fr (ainsi que des extensions correspondantes à la France d'outre-mer) ; pour le domaine .com, c'est VeriSign qui s'en occupe. Les labels inférieurs correspondent généralement à des sites ou à des entreprises, et la gestion du nom de domaine leur revient.

Configuration de Bind

Maintenant que nous nous sommes familiarisés avec les noms de domaine et le fonctionnement des DNS, nous allons configurer notre premier nom de domaine. Nous utiliserons le serveur de noms de domaine le plus vieux et le plus utilisé au monde : BIND.

La configuration de notre nom de domaine se fera sous Debian. Vous pouvez donc réutiliser votre Debian préférée.

Préparation

Présentons d'abord ce que nous allons configurer ici.

Première chose, quand vous possédez un domaine, vous devez avoir deux serveurs DNS, un serveur primaire et un serveur secondaire. Ceci est nécessaire pour pouvoir garantir que si l'un tombe en panne, le second permettra toujours d'accéder à vos serveurs.

Le domaine que nous allons configurer sera : reseau.fr.

  • Ce nom de domaine sera géré par deux serveurs dns :

    • ns1.reseau.fr - 192.168.0.1 sera notre serveur maître ;

    • ns2.reseau.fr - 192.168.0.2 sera notre serveur esclave.

  • Les adresses email de ce nom de domaine seront gérées par deux serveurs de messagerie :

    • mx1.reseau.fr - 192.168.0.3 ;

    • mx2.reseau.fr - 192.168.0.4.

  • Ce nom de domaine possédera deux machines :

  • Il existera aussi une autre machine, blog.reseau.fr, qui sera un alias de www.reseau.fr.

Installation de Bind9

# apt-get install bind9

Les fichiers de configuration de Bind se trouvent, comme on peut s'y attendre, dans /etc/bind.
La configuration se fait en deux temps. Nous devons tout d'abord déclarer à notre serveur quels seront les noms de domaine qu'il va devoir gérer, on appelle ça des zones. Ensuite, nous devrons configurer ces zones, grâce à un fichier de configuration par zones.

Configuration du serveur master

Déclaration des zones

Une zone se déclare de cette façon :

zone "reseau.fr" {
                type master;
                file "/etc/bind/db.reseau.fr";
                allow-transfer { 192.168.0.2; };
        };

Le type indique si vous êtes master ou slave sur la zone, c'est-à-dire si c'est vous qui effectuez les mises à jour (master) ou si vous les recevez d'un autre serveur (slave).
File indique le fichier dans lequel sera configurée votre zone.
Allow-transfer indique le serveur qui pourra recevoir vos mises à jour. Bien entendu, cette directive n'existe que dans le cas d'un serveur master.

Passons maintenant à la configuration de notre zone.

Configuration de la zone du serveur master

On édite donc le fichier /etc/bind/db.reseau.fr. Afin d'avoir une configuration "basique", vous pouvez faire une copie de /etc/bind/db.local.

cp /etc/bind/db.local /etc/bind/db.reseau.fr
vim /etc/bind/db.reseau.fr

Dans ce fichier de zone, nous allons indiquer des enregistrements. Il en existe de plusieurs types :

  • A : c'est le type le plus courant, il fait correspondre un nom d'hôte à une adresse IPv4 ;

  • AAAA : fait correspondre un nom d'hôte à une adresse IPv6 ;

  • CNAME : permet de créer un alias pointant sur un autre nom d'hôte ;

  • NS : définit le ou les serveurs DNS du domaine ;

  • MX : définit le ou les serveurs de mail du domaine ;

  • PTR : fait correspond une IP à un nom d'hôte. Il n'est utilisé que dans le cas d'une zone inverse, que nous verrons plus loin ;

  • SOA : donne les infos de la zone, comme le serveur DNS principal, l'adresse mail de l'administrateur de la zone, le numéro de série de la zone et des durées que nous détaillerons.

Il en existe d'autres mais pas forcément utiles ou intéressants pour ce cours.

Voici ce que donnera notre fichier de zone complet :

$TTL 604800     ; 1 semaine
$ORIGIN reseau.fr.
@       IN SOA  ns1.reseau.fr. admin.reseau.fr. (
                                2013020905 ;serial
                                3600       ; refresh (1 hour)
                                3000       ; retry (50 minutes)
                                4619200    ; expire (7 weeks 4 days 11 hours 6 minutes 40 seconds)
                                604800     ; minimum (1 week)
                                )

@               IN      NS      ns1.reseau.fr.
@               IN      NS      ns2
@               IN      MX      10 mx1
@               IN      MX      20 mx2
ns1             IN      A       192.168.0.1
ns2             IN      A       192.168.0.2
mx1             IN      A       192.168.0.3
mx2             IN      A       192.168.0.4
tuto            IN      A       192.168.0.5
www             IN      A       192.168.0.6
blog            IN      CNAME   www

Examinons chacune de ces informations.
La première info est un TTL (Time to Live). Quand quelqu'un va interroger votre serveur DNS pour obtenir des informations, ces informations vont être stockées en cache chez cette personne (dans la mémoire de son serveur DNS, pour éviter qu'il vienne nous réinterroger de nombreuses fois s'il a de nouveau besoin d'une information). Ce TTL est la durée pendant laquelle les informations sont conservées en cache. Ce délai passé, une nouvelle demande devra être faite au serveur. Le TTL est défini ici sur 1 semaine. En fonction de la fréquence de vos mises à jour, vous pouvez décider de baisser cette valeur pour que vos clients aient leurs informations à jour.

La deuxième info est la variable ORIGIN. Celle-ci est optionnelle. Vous voyez les petits @ plus loin ? Ces @ prennent la valeur de la variable ORIGIN. En l'absence de variable ils prendront la valeur du nom de votre zone défini dans le fichier named.conf (reseau.fr ici).

Vient ensuite notre premier enregistrement, c'est un enregistrement de type SOA (Start Of Authority). Le type SOA est suivi de deux informations. La première est le nom du serveur de domaine principal (master) et la seconde est l'adresse mail de l'administrateur du domaine (en remplaçant l'arrobase par un point). Suivent entre parenthèses différentes valeurs.

  • Le serial peut être comparé à un numéro de version de votre zone. Il doit être incrémenté à chaque modification. Cela indique à votre serveur que votre zone a été mise à jour et qu'il faut envoyer la notification à vos serveurs esclaves. Les best practices recommandent une syntaxe particulière pour le serial de la forme AAAAMMJJXX (où XX est la version du jour en question). Cela vous permet entre autres de savoir la date de la dernière mise à jour de votre zone.

  • Refresh est le temps au bout duquel les enregistrements sont stockés sur le serveur slave. Passer ce délai, le serveur slave demandera une nouvelle mise à jour au serveur master.

  • Retry est le temps qu'attendra le serveur slave dans le cas où le serveur master contacté n'est pas joignable pour faire un nouvel essai.

  • Expire est le temps pendant lequel le serveur slave continuera à essayer de contacter le serveur master.

  • Minimum est la durée minimale du cache ; elle est en général égale à Refresh.

Nous trouvons ensuite les enregistrements, du moins ceux qui nous intéressent !

Les enregistrements se découpent en 4 parties sur une ligne (parfois 5 pour des enregistrements spécifiques).
La première information, c'est l'hôte de votre domaine. Nous avons parlé du @ tout à l'heure qui est remplacé par la valeur de $ORIGIN (le cas échéant par le nom de votre zone). Notez qu'on peut ne rien mettre du tout si on veut parler du domaine entier. Rien, @, ou un nom de machine ou de sous-domaine au choix.
Le second, représente la classe. Ici, elle spécifie qu'il s'agit d'un enregistrement concernant Internet. Il existe d'autres valeurs mais elles ne sont pas utilisées, donc on met toujours IN.
Le troisième spécifie le type d'enregistrement dont on a détaillé les différents types précédemment.
Enfin, le dernier spécifie la valeur de l'enregistrement dépendant du type. Un type A attendra une adresse IP, un type PTR attendra un nom d'hôte, etc.
On trouve parfois, juste avant cette dernière valeur, un nombre qui indique le "poids" d'un enregistrement. On verra plus loin dans quel cas c'est utile.

On commence généralement par les enregistrements des serveurs gérant notre domaine et les services associés (le mail en l'occurrence). Dans notre cas il s'agit des types NS et MX. On utilise l'@ parce que ces enregistrements ne déterminent pas un hôte en particulier, mais bien le domaine entier.

@               IN      NS      ns1.reseau.fr.

Cette ligne se traduit donc par : "ns1.reseau.fr est un serveur de nom de domaine de reseau.fr"

Ceci étant, réécrire à chaque fois le FQDN c'est un peu contraignant. Et comme on sait que, ne pas finir sa ligne par un "." rajoute au FQDN de votre zone, on peut se permettre de n'écrire que "ns1". Ainsi, votre serveur rajoutera "reseau.fr." et on aura le FQDN que l'on cherchait à obtenir.
Voyez la deuxième ligne qui utilise cette syntaxe raccourcie.

Les enregistrements MX utilisent la même syntaxe que pour les NS et indiquent l'adresse IP d'un serveur de messagerie, à cela près que nous avons rajouté un chiffre devant "mx1". Nous avons dit tout à l'heure que ce chiffre déterminait le "poids" d'un enregistrement, on parle aussi de priorité. Nous avons deux serveurs MX : mx1 et mx2 ; cette valeur va permettre de déterminer lequel des deux doit être utilisé en priorité. Plus elle est basse, plus le serveur est prioritaire.

Mais nous avons aussi deux serveurs NS ! Comment se passe cette priorité, étant donné qu'il n'y a pas de valeur pour les départager ?

Dans ce cas, c'est chacun son tour. Sur une machine Linux, essayez plusieurs fois de suite cette commande :

host -t NS google.fr

Vous verrez que les réponses que vous recevez ne sont jamais dans le même ordre. Cela s'appelle du Round-Robin, c'est une méthode qui permet d'équilibrer la charge entre les deux serveurs pour ne pas les surcharger, car un serveur sera autant consulté que les autres serveurs du même type.

Très bien, maintenant on sait que les serveurs mail de notre domaine sont mx1.reseau.fr et mx2.reseau.fr. Cependant, on ne sait toujours pas leurs adresses IP alors que c'est quand même le but d'un serveur DNS, non ?

D'ailleurs, vous voyez qu'ensuite nous définissons l'adresse IP de mx1 (sans . à la fin, donc mx1.reseau.fr ! ) avec un enregistrement de type A.
C'est ce qu'on appelle un Glue Record. On définit une première fois le nom d'hôte du serveur NS, puis on définit l'adresse IP de cet hôte. On doit faire cela, car un enregistrement NS associe un nom de serveur au nom du domaine. Il faut donc ajouter un enregistrement A pour le nom de ce serveur.

On retrouve ensuite les enregistrements les plus courants, ceux de type A (et AAAA quand on a de l'IPv6). En effet, le rôle principal du DNS est de faire correspondre un nom d'hôte avec son adresse IP, et c'est ce que fait le type A.
La syntaxe est relativement simple comme vous pouvez le voir :

tuto               IN      A      192.168.0.5

Comme pour les autres enregistrements, "tuto" ou "tuto.reseau.fr." revient au même. N'oubliez pas le point si vous optez pour le FQDN.

Le type CNAME est aussi simple à comprendre. On fait correspondre un nom d'hôte à un autre nom d'hôte. Bien sûr, si "blog" pointe sur "www", l'enregistrement www doit exister.
Je le répète encore une fois : si vous choisissez le FQDN, n'oubliez pas le point, c'est une des premières causes d'erreurs dans les configurations DNS.

Voilà, notre zone est maintenant configurée sur notre serveur master. Vous devez redémarrer BIND pour que les changements soient pris en compte :

# /etc/init.d/bind9 restart

Configuration du serveur slave

Nous avons prévu deux serveurs dans notre architecture . Celui que nous venons de configurer est le master ; celui que nous allons faire sera le slave. Les modifications se font sur le master, et celui-ci enverra des notifications aux slaves (il peut y en avoir plusieurs) pour que leurs zones soient mises à jour.

La configuration du serveur slave est donc relativement simple, tout se passe dans le named.conf. Il n'y a pas de fichier de zone à configurer étant donné que celui-ci sera reçu du master.

On commence par installer Bind comme pour le master et on édite /etc/bind/named.conf.

zone "reseau.fr" {
                type slave;
                file "/var/cache/bind/db.reseau.fr";
                masters { 192.168.0.1;};
        };

Et c'est tout ! :D
La directive masters indique l'adresse IP du serveur master duquel nous allons recevoir les mises à jour de notre zone.

Résolution inverse

Pour l'instant, nous avons vu le protocole DNS comme un moyen de résoudre un nom d'hôte en une adresse IP. Nous avons parlé des enregistrements de type PTR et vous savez donc que DNS permet aussi de faire le travail inverse. C'est une résolution inverse.
Votre serveur DNS se doit de pouvoir résoudre une adresse IP en un nom d'hôte. C'est ce que nous allons faire ici.

Retournons dans notre fichier named.conf afin d'ajouter cette zone inverse. Nous allons déclarer la zone inverse de notre adressage IP, ici c'est 192.168.0.0/24.
Alors qu'une zone "normale" se déclare de façon plutôt logique, une zone inverse doit respecter une certaine forme concernant le nom de la zone :

zone "0.168.192.in-addr.arpa." {
        type master;
        file "/etc/bind/db.192.168.0";
};

Voilà pour la déclaration. Il faut juste faire attention au nommage de la zone, la partie réseau de l'adresse IP à l'envers, puis ".in-addr.arpa".

On crée ensuite le fichier de zone.

$TTL 604800     ; 1 semaine
$ORIGIN 0.168.192.in-addr.arpa.
@       IN SOA  ns1.reseau.fr. admin.reseau.fr. (
                                2013020905 ;serial
                                3600       ; refresh (1 hour)
                                3000       ; retry (50 minutes)
                                4619200    ; expire (7 weeks 4 days 11 hours 6 minutes 40 seconds)
                                604800     ; minimum (1 week)
                                )

@               IN      NS        ns1.reseau.fr.
@               IN      NS        ns2.reseau.fr.
1               IN      PTR       ns1.reseau.fr.
2               IN      PTR       ns2.reseau.fr.
3               IN      PTR       mx1.reseau.fr.
4               IN      PTR       mx1.reseau.fr.
5               IN      PTR       tuto.reseau.fr.
6               IN      PTR       www.reseau.fr.

Ce n'est pas très compliqué. C'est l'inverse d'une zone "normale". Ça, je pense que vous l'avez compris maintenant. ^^
Les points auxquels il faut faire attention :

  • une zone inverse ne contient que des enregistrements de type NS ou PTR ;

  • dans notre zone "normale", blog redirigeait vers www, mais là une adresse IP ne peut pointer que vers un seul hôte ;

  • la variable ORIGIN a changé ! Il faut donc penser à utiliser le FQDN de nos hôtes à chaque fois.

Vérification

On va quand même vérifier le fonctionnement de notre zone maintenant.
Commencez déjà par redémarrer votre serveur de nom pour prendre en compte les changements de configuration : # /etc/init.d/bind9 restart
Il existe plusieurs commandes pour faire des interrogations DNS. La commande la plus utilisée est host mais dig fournit plus d'informations et permet un diagnostic plus précis en cas de problème. Vérifiez d'abord le serveur DNS utilisé par votre machine. Comme cette machine est elle-même un serveur DNS, elle va devoir s'interroger elle-même.

Le programme qui fait toutes les résolutions DNS pour votre machine s'appelle le resolver. Ainsi, chaque programme qui a besoin de faire une résolution DNS s'adresse au resolver.
Son fichier de configuration se trouve dans /etc/resolv.conf qui doit au moins contenir l'adresse d'un serveur DNS à interroger :

nameserver 127.0.0.1

Oui, votre serveur va s'interroger lui-même. Vous pouvez spécifier d'autres serveurs, un par nameserver. Ce fichier peut aussi contenir des informations sur votre domaine ou le domaine de recherche.

On peut maintenant commencer nos tests :

Nous allons donc utiliser la commande host qui permet de faire une interrogation DNS.
Sa syntaxe est la suivante:
# host -t type nom_a_chercher IPserveur

On peut ainsi indiquer le type de la requête (NS, A, MX, CNAME, etc.), le nom à interroger, ainsi que l'adresse IP du serveur que l'on peut préciser.

Par exemple, si l'on cherche l'adresse des serveurs DNS du domaine reseau.fr :

# host -t ns reseau.fr
reseau.fr name server ns1.reseau.fr.
reseau.fr name server ns2.reseau.fr.

Et pour avoir leurs adresses IP:

# host -t a ns1.reseau.fr
ns1.reseau.fr has address 192.168.0.1
# host -t a ns2.reseau.fr
ns2.reseau.fr has address 192.168.0.2

Si tout se passe bien, c'est parfait. Dans le cas contraire, penser à vérifier que les syntaxes de vos fichiers de zones sont bonnes, avec "named-checkzone", et que vous avez bien pensé à relancer votre serveur Bind, etc.

Nous venons de voir que grâce à la commande host (ou dig), il est possible de demander toute information contenue dans vos zones DNS, ou même sur des serveurs situés sur Internet !

Exercice

Sachant que 8.8.8.8 est un serveur DNS public proposé par Google,

  • Trouvez les noms et adresses IP des 13 serveurs racine ;

  • trouvez la ou les adresses IP de www.siteduzero.fr ;

  • trouvez la ou les adresses IP de www.siteduzero.com ;

  • trouvez les adresses IP des serveurs DNS de lalitte.com.

Voici les requêtes à faire pour obtenir les réponses :

  • # host -t ns . 8.8.8.8

  • Faire ensuite une requête A pour chacun des serveurs racine :

  • # host -t a www.siteduzero.fr 8.8.8.8

  • # host -t a www.siteduzero.com 8.8.8.8

  • # host -t ns lalitte.com 8.8.8.8

Voilà, vous savez maintenant faire des interrogations DNS pour vérifier le fonctionnement de vos serveurs, ou de n'importe quel domaine sur Internet.

  • Vous avez vu comment mettre en place votre propre serveur DNS ainsi qu'un second serveur slave.

  • Vous savez gérer vous-mêmes votre propre nom de domaine.

  • Vous êtes familiarisés avec les concepts de zone, de résolution et de résolution inverse.

Quelques Scripts

12janvier

Ce billet est consacré au script Linux. J'ai écrit divers script pour "automatiser" certaines commandes, même si je dois exécuter ces scripts manuellement. Je pourrais, quand bien même, appeler ces scripts dans un cron si je le souhaitais.

Vous trouverez, donc, dans la suite, différents scripts, différentes idées, à améliorer, à récupérer.

Liste des paquets

Ce script permet de lister les paquets installés sur un système GNU\Debian. Cela me permet de récupérer une liste de paquet dans un fichier, liste que je peux réutiliser dans un logiciel comme synaptic pour installer les mêmes paquets sur une autre distribution.Couplé à une sauvegarde du dossier home et du dossier etc, le script permet de pouvoir réinstaller un système à l'identique (à condition que l'on ne se trouve pas sur unstable et moyennant le dossier /var.

liste=`dpkg -l | tail +6 | cut -d\  -f3`
for i in $liste ; do
echo "$i        install"
done

La commande dpkg --get-selections peut très bien remplacer le script ci-dessus. Merci à mx pour sa remarque.

Purge des paquets

Permet de purger les paquets supprimés d'une distribution GNU\Debian. Cela permet de supprimer les quelques fichiers inutiles lors de la suppression de paquet GNU\Debian. Néanmoins, parfois on ne veut pas faire les purges.

for i in `dpkg -l | grep -e '^rc.*' | cut -f3 -d\ ` ; do dpkg -P $i ; done

Sécurisation des données

Permet de monter une partition démontée et démonter une partition montée. Ce script est basé sur KDialog pour demander les informations, il nécessite donc KDE (mais je pense qu'il est possible de le réécrire pour Gnome).On lui passe en paramètre le nom d'un périphérique. Il suppose que la partition démontée est un volume logique (sous LVM) dont le groupe est GNU\Debian et dont le nom est $DISK-close. Il crée à la suite le device-mapper (en supposant qu'il a été créé à l'aide de LUKS) du nom de $DISK-open.S'il trouve ce "device-mapper", il le démonte et le supprime.

#!/bin/sh

DISK=$1
DISKOPEN="$DISK-open"
DISKCLOSE="$DISK-close"

if [ -e /dev/mapper/$DISKOPEN ] ; then
        umount /dev/mapper/$DISKOPEN 2> /dev/null
        if [ $? != 0 ] ; then
                kdialog --title KSecure --error "Impossible de démonter le péripherique $DISK"
        fi
                if [ -e /dev/mapper/$DISKOPEN ] ; then
                /sbin/cryptsetup luksClose $DISKOPEN
                                kdialog --title KSecure --msgbox "Suppression du péripherique $DISK accomplie"
                fi
else
        password=`kdialog --title KSecure --password "Cle de déchiffrement de $DISK"`
        if [ -z $password ] ; then
                password="nopassword"
        fi
        echo "$password" | \
                /sbin/cryptsetup luksOpen /dev/debian/$DISKCLOSE $DISKOPEN 2> /dev/null
        mount /dev/mapper/$DISKOPEN 2> /dev/null
                if [ $? -ne  0 ] ; then
                                kdialog --title KSecure --error "Clé incorrecte"
                fi
fi

Apprentissage du spam

Permet d'appeler bogofliter et spamassassin sur une liste de message Indésirable au format mbox. Il permet aussi de faire l'apprentissage des messages désirables.

#!/bin/bash

sa-learn -L --no-sync --spam --mbox /home/phoenix/Mail/Indésirable\ \(Spam\)
sa-learn -L --no-sync --ham --mbox /home/phoenix/Mail/Désirable\ \(Non\ spam\)

bogofilter -N -s < /home/phoenix/Mail/Indésirable\ \(Spam\)
bogofilter -S -n < /home/phoenix/Mail/Désirable\ \(Non\ spam\)

Création de lien

Permet à partir d'une liste de fichier identique générée par fdupes de créer des liens physiques entre les fichiers pour économiser de la place. Attention : si un des fichiers physiques est modifié, l'autre le sera aussi.

#!/bin/sh

echo -n "|"
read -r line
while [ $? -eq 0 ] ; do
        line=`echo $line | sed -e "s/\\\\\\ /@/g"`
        index=0
        principal=""
        for chemin in $line ; do
                if [ $index -eq 0 ] ; then
                        principal=$chemin
                else
                        a=`echo $principal | sed -e "s/@/\\ /g"`
                        b=`echo $chemin | sed -e "s/@/\\ /g"`
                        ln -f "$a" "$b"
                fi

                index=`expr $index + 1`
        done

        echo -n "="

        read -r line
done
echo -n "|"

Renumérotation

Permet de renuméroté une liste d'image d'un dossier, du style 1 10 11 12 13 2 3 4... en une suite précédé d'un 0 : 01 02 03 04 05 06 ...

#!/bin/sh

for DIR in `ls` ; do

echo -n "Change directory $DIR "

cd $DIR

CMD=`ls | sed -e 's/\(.*\)_\([1-9]\)\.jpg/mv \1_\2.jpg \1_0\2.jpg ;/g' | grep "mv "`
eval $CMD

cd ..

echo "Ok"

done

Génération de playlist

Permet de générer une playlist sur un dossier pour utilisation avec le logiciel kpf (par exemple) de KDE. Il parcourt l'ensemble des dossiers et crée un fichier m3u à chaque fois qu'il trouve un fichier multimédia. Il remplace le début du dossier par un lien http.

#!/bin/sh

OLD=`pwd`

cd "$1"
if [ $? -ne 0 ] ; then
    exit
fi

THIS=`pwd`
BASE=`basename "$THIS"`

echo "Ouverture de $BASE"

for path in * ; do
    if [ -d "$THIS/$path" ] ; then
        $0 "$THIS/$path"
    fi
done

echo "Traitement de $BASE"
rm $BASE.m3u 2> /dev/null

for path in *.mp3 *.ogg *.wma *.avi ; do
    echo $path | grep \* > /dev/null
    if [ $? -eq 1 ] ; then
        echo $THIS/$path | sed -e "s/\/media\/music/http\:\/\/192\.168\.101\.7\:8001/g" >> $BASE.m3u
    fi
done

echo "Sortie de $BASE"

Script pour gérer les documents latex

Ce script date de quelques temps quand je devais générer des documents différents à partir d'un même document LaTeX.Il utilise différentes commandes pour cela, et permet aussi de nettoyer le dossier. Une sorte de Makefile à la mode bash.

#!/bin/sh

if [ $# != 2 ] ; then
    echo "Il faut le nom du fichier et de la sortie"
    exit 1;
fi

NAME=$1
DEST=$2

case $DEST in
    cleanPDF)
        rm -f $NAME.pdf ;;
    cleanTXT)
        rm -f $NAME.txt ;;
    cleanPS)
        rm -f $NAME.ps  ;;
    cleanDVI)
        rm -f $NAME.dvi ;;
    cleanHTML)
        rm -f $NAME.html ;;
    cleanTEX)
        rm -f *.log *.toc *.htoc *.aux *.haux *~ ;;
    clean)
        glatex.sh $NAME cleanTEX
        glatex.sh $NAME cleanDVI
        glatex.sh $NAME cleanPS
        glatex.sh $NAME cleanTXT
        glatex.sh $NAME cleanPDF
        glatex.sh $NAME cleanHTML ;;
    mrproper)
        glatex.sh $NAME clean ;;
    _dvi)
        pslatex $NAME.tex
        pslatex $NAME.tex ;;
    xdvi)
        glatex.sh $NAME _dvi
        xdvi $NAME.dvi ;;
    dvi)
        glatex.sh $NAME _dvi
        glatex.sh $NAME cleanTEX ;;
    _html)
        hevea -francais -fix -noiso $NAME.tex ;;
    html)
        glatex.sh $NAME _html
        glatex.sh $NAME cleanTEX ;;
    _txt)
        hevea -francais -fix -text $NAME.tex ;;
    txt)
        glatex.sh $NAME _txt
        glatex.sh $NAME cleanTEX ;;
    _ps)
        glatex.sh $NAME _dvi
        dvips -Ppdf $NAME.dvi ;;
    ps)
        glatex.sh $NAME _ps
        glatex.sh $NAME cleanDVI
        glatex.sh $NAME cleanTEX ;;
    _pdf)
        pdflatex $NAME.tex
        pdflatex $NAME.tex ;;
    pdf)
        glatex.sh $NAME _pdf
        glatex.sh $NAME cleanTEX ;;
esac

Billets similaires

Email2Trac est un logiciel permettant de créer un ticket sous Trac en envoyant un mail au système de suivi de ticket.

8janvier

L'intérêt d'envoyer un mail au système de suivi plutôt que de se connecter sur le site Internet pour faire ses rapports d'anomalie, est de faciliter l'accès à de nouvelles personnes.En effet, il est parfois plus facile d'envoyer un mail avec son client mail préféré (en considérant que le logiciel est quasiment toujours ouvert, ce qui doit être le cas en entreprise) que d'ouvrir le navigateur pour envoyer une anomalie de temps en temps (ouvrir le site, se logger, remplir tous les champs, ...).

Ceci peut également être utilisé par un outil de rapport de bug, envoyant un mail automatique (avec confirmation de l'utilisateur) au crash dudit logiciel.

Comme dit précédemment, EMail2Trac1 permet

  • d'ajouter un ticket en envoyant un mail, avec des fichiers attachés
  • mettre à jour un ticket (en répondant au mail du ticket par exemple)

Installation

Pour installer Email2Trac, il faut télécharger le source et le décompresser dans un dossier temporaire (ou utilisateur).

Sans gestionnaire de paquet

Ensuite la compilation se fait à l'aide des habituelles autotools

configure --prefix=/usr/local --with-mta_user=nobody --with-trac_user=www-data
make
make install

Sous Debian

Après avoir installé les paquets cdbs et autotools-dev, vous pouvez exécuter les commandes suivante en root (ou la première à l'aide de fakeroot) :

debian/rules binary
dpkg -i ../email2trac_<version>.deb

Pour le gestionnaire de paquets RPM vous pouvez visiter la page https://subtrac.sara.nl/oss/email2trac/wiki/Email2tracInstallation

Configuration de l'application

La deuxième étape est l'édition du fichier /etc/email2trac.conf. Dans ce fichier les informations à renseigner concerne la gestion du projet Trac2 par Email2Trac.

[DEFAULT]
project: /www/site/trac/projet1
spam_level: 5
drop_spam: 1
ticket_update: 1
strip_signature: 1

[projet2]
project: /www/site/trac/projet2
spam_level: 5
drop_spam: 1
ticket_update: 1
strip_signature: 1

Les différentes options dépendent de ce que vous souhaitez avoir. Les différentes possibilités sont à l'adresse suivante.

Spam

La gestion du SPAM se fait à l'aide des 3 lignes :

spam_level: 5
drop_spam: 1
spam_header: X-Spam-Level

La ligne spam_header étant à configurer suivant votre politique de gestion des spams (utilisation de SpamAssassin ou d'un autre utilitaire).

Configuration de Postfix

Il faut maintenant configurer notre système de messagerie pour intégrer Email2Trac. Nous allons détailler ici la mise en place de Email2Trac sous Postfix. Pour les autres serveurs mails vous pouvez visiter la page : http://subtrac.sara.nl/oss/email2trac/wiki/Email2tracMta

Aliases

La première méthode concerne la modification du fichier des alias pour une configuration standard de postfix. Nous allons commencer par modifier le fichier /etc/aliases en ajoutant la ligne suivante (pour le projet 1) :

projet1: |"/usr/bin/run_email2trac"

Il est également possible de préciser le projet sur lequel il faut travailler (projet définit dans /etc/email2trac.conf) :

projet2: |"/usr/bin/run_email2trac --project=projet2 --ticket_prefix=devel"

Dans le fichier /etc/postfix/main.cf, il faut avoir défini l'emplacement des alias de la manière suivante :

alias_maps = hash:/etc/aliases

Les commandes suivantes permettent de mettre à jour le fichier des alias et demander à Postfix de recharger la configuration :

postaliases /etc/aliases
postfix reload

Une fois ceci terminé, les mails envoyé à projet1@domain.org et projet2@domaine.org seront automatiquement redirigés vers email2trac qui s'occupera de créer le ticket dans votre système de suivi.

Transport

Cette configuration concerne les personnes qui ont une configuration plus complexe de postfix par exemple en gérant des domaines virtuels. Il est alors possible de définir une redirection des tickets pour un sous domaine.

Nous avons donc créé le sous-domaine tickets.domaine.org et voulons que les mails envoyés à projet1@tickets.domaine.org est projet2@tickets.domaine.org soient redirigés vers email2trac.

Pour cela nous allons créer un fichier /etc/postfix/transport avec les lignes ci-dessous :

projet1@tickets.domaine.org  projet1:
projet2@tickets.domaine.org  projet2:

Puis dans le fichier /etc/postfix/main.cf nous allons définir que pour le sous domaine tickets.domaine.org, il faut lire et utiliser le fichier des transports. (Attention il ne faut pas ajouter ce sous-domaine dans mydestination.

relay_domains = tickets.domaine.org
transport_maps = hash:/etc/postfix/transport

Ensuite, il nous faut définir dans le fichier /etc/postfix/master.cf notre nouveau mode de transport. Il n'est pas obligé d'utiliser run_email2trac qui fait un changement d'utilisateur, car dans le fichier master.cf on peut directement définir l'utilisateur de destination.

projet1      unix  -       n       n       -       -       pipe
    flags=FR user=www-data argv=/usr/bin/email2trac
    ${nexthop} ${user}
projet2      unix  -       n       n       -       -       pipe
    flags=FR user=www-data argv=/usr/bin/email2trac
    ${nexthop} ${user}\r

Enfin il faut redémarrer postfix :

postmap /etc/postfix/transport
postfix reload

Et voilà vous pouvez envoyer vos mails à projet1@tickets.shadoware.org.

Tester

Pour tester il est possible d'envoyer un mail, comme ceci :

mail projet1@tickets.shadoware.org < ticket.txt

En cas de problème, vous pouvez vérifier que email2trac est bien configuré avec la commande :

email2trac --project=projet1 < ticket.txt

usb

17juin

Debian etch - Clé USB

Il peut être parfois utile de se déplacer ici et là avec une distribution Linux clé en main sans se trimbaler toujours avec un ordinateur portable ou un CD.

La clé USB devient alors très utile atteignant aujourd'hui des tailles de l'ordre de 2G pour pas trop cher1. De petite taille, elle peut être utilisée dans des endroits ayant des ordinateurs avec un système d'exploitation propriétaire (ou un autre système libre, ou même pas sans système) mais permettant de démarrer sur un périphérique externe (une clé USB par exemple).

L'utilité peut-être variable :

  • Surfer avec une plus grande tranquillité
  • Utiliser ses logiciels favoris ( Amarok, KMyMoney, KDevelop, ... )
  • Utiliser une interface graphique, bien sûr, meilleure.
  • Utiliser dans un système embarqué.
  • Tester les ordinateurs portables dans les magasins

J'ai trouvé différents sites, tel que Ubuntu en mode persistant permettant d'installer une distribution Ubuntu sur une clé USB ou un disque dur USB.L'inconvénient de cette méthode est qu'il n'est pas possible d'installer uniquement ce que l'on souhaite partant obligatoirement d'une base LiveCD.

Ensuite j'ai trouvé d'autres sites, tels que Howto Install a Debian GNU/Linux system onto a USB flash thumb drive et Installing Debian onto USB flash media with everything encrypted. dont je me suis inspiré pour écrire ce tutoriel.

Préparation de la clé

Modules

Afin de pouvoir accéder à la clé USB, il faut bien évidemment avoir chargé sur sa machine Gnu/Linux les modules adéquates :

# modprobe ehci_hcd
# modprobe ohci_hcd
# modprobe usbhid
# modprobe usb_storage

Logiciels

Nous allons considérer que nous sommes sur un système à base de Gnu/Debian (Ubuntu devrait pouvoir faire l'affaire). Si vous avez un autre système, il vous faut trouver un moyen d'installer le programme debootstrap

Sur un système Gnu/Debian, il vous suffit de taper la commande, si le programme n'est pas déjà installé :

# aptitude install debootstrap

Installation du système de base

Partitionnement de la clé USB

En premier lieu il faut effectuer le partitionnement de la clé USB. Selon sa taille et aussi de la quantité de logiciel que vous voulez installer il faudra prévoir plus ou moins de place.

Pour le partitionnement vous pouvez utiliser votre utilitaire favori (parted, qtparted, fdisk, cfdisk, ...). Le partitionnement que j'ai effectué pour ma propre clé est le suivant :

  1. 50Mo pour la partition /boot
  2. 1,5Go pour la partition /
  3. le reste pour la partition /home

La partition /home a été séparée afin de pouvoir mettre la partie / de la clé USB en lecture seule (étape que je n'ai pas encore effectuée).

Disk /dev/usb/k2g: 2024 MB, 2024275968 bytes
63 heads, 62 sectors/track, 1012 cylinders
Units = cylinders of 3906 * 512 = 1999872 bytes

       Device Boot      Start         End      Blocks   Id  System
/dev/sda1                   1          26       50747   83  Linux
/dev/sda2                  27         827     1564353   83  Linux
/dev/sda3                 828        1012      361305   83  Linux

Une fois les partitions créées vous pouvez les formater pour les utiliser.

# mke2fs /dev/sda1 -L live-boot
# mke2fs /dev/sda2 -L live-root
# mke2fs /dev/sda3 -L live-home
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mkdir /mnt/home
# mount /dev/sda1 /mnt/boot
# mount /dev/sda3 /mnt/home

Installation à l'aide de debootstrap

Une fois les partitions montées on peut installer le système Gnu/Debian sur la clé USB en utilisant l'utilitaire debootstrap :

# debootstrap --arch i386 etch /mnt/ ftp://ftp2.fr.debian.org/debian/
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I:  Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: libdb4.2 libgnutls12 libreadline5
   libsigc++-2.0-0c2a openbsd-inetd readline-common
I: Checking component main on http://ftp.debian.org/debian...
I: Retrieving adduser
...
I: Configuring gnupg...
I: Configuring sysklogd...
I: Configuring klogd...
I: Configuring netbase...
I: Configuring openbsd-inetd...
I: Base system installed successfully.

Dans un Chroot

Les opérations suivantes sont à faire sur l'environnement de destination, il faut donc utiliser la commande chroot pour s'y placer.

# chroot /mnt '/bin/bash -i'

Noyaux

Une fois le système de base installé, il faut le configurer et y ajouter de quoi démarrer la clé USB.

Ajustement et systèmes de fichiers : /etc/fstab

Cela dépend de votre configuration, et du partitionnement que vous avez fait. Si vous avez fait le même partitionnement que moi vous devriez avoir un fstab ressemblant à celui là :

#/etc/fstab: static file system informations.
#
LABEL=live-root    /           ext2    defaults,errors=remount-ro,noatime  0   1
LABEL=live-boot    /boot           ext2    defaults,noatime,ro         0   2
LABEL=live-home    /home           ext2    defaults,noatime            0   2
proc       /proc           proc    defaults                0   0
#tmpfs     /etc/network/run    tmpfs   defaults,noatime            0   0
tmpfs      /tmp            tmpfs   defaults,noatime            0   0
tmpfs      /var/lock       tmpfs   defaults,noatime            0   0
tmpfs      /var/log        tmpfs   defaults,noatime            0   0
tmpfs      /var/run        tmpfs   defaults,noatime            0   0
tmpfs      /var/tmp        tmpfs   defaults,noatime            0   0

J'utilise le label de la partition au lieu d'utiliser le block device. L'utilisation du block device peut gêner si la clé USB n'est pas toujours détectée dans le même ordre2.Les dossiers temporaires sont tous reportés dans un système de fichier virtuel (en mémoire) à l'aide de tmpfs.

Une fois le fichier /etc/fstab configuré, il ne reste plus qu'à monter les partitions. Pour monter les partitions un simple mount -a le fait. Il est aussi possible de monter les partitions une à une.

Il est possible que la commande suivante faite hors du chroot puisse résoudre certain problème si l'application utilise udev, ... :

mount --bind /dev/ /mnt/dev/
Le réseau : /etc/hostname /etc/hosts

Le fichier /etc/hosts doit contenir une ligne indiquant l'adresse du loopback et le nom de la machine. Ceci afin que KDE par exemple puisse démarrer :

127.0.0.1       localhost.localdomain   localhost  liveding

Dans le fichier /etc/hostname il faut également mettre le nom de la machine.

Apt : /etc/apt/sources.list

Le fichier sources.list contient les lignes par défaut suivantes :

# etch
deb ftp://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb-src ftp://ftp2.fr.debian.org/debian/ etch main contrib
deb http://security.debian.org/ etch/updates main
deb-src http://security.debian.org/ etch/updates main

# etch unofficial
deb http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

Ces lignes permettent de télécharger les paquets par défaut de Gnu/Debian ainsi que les paquets de sécurité, et les paquets non officiels permettant d'activer certaine fonctionnalité.

Initrd : /etc/kernel-img.conf

Dans le fichier /etc/kernel-img.conf on enregistre les informations suivantes (afin que Gnu/Debian crée un fichier initrd lors de l'installation du noyau) :

# Kernel Image management overrides
# See kernel-img.conf(5) for details
do_symlinks = Yes
do_initrd = yes

Le fichier initrd permet de charger les modules nécessaires3 au démarrage de Gnu/Linux sur une clé USB.

Installation de paquet
# aptitude install initrd-tools linux-image-2.6.16-1-686
# aptitude install grub
# aptitude install localepurge
# aptitude clean# localepurge

On installe une image du noyau, ainsi que les outils pour générer l'image initrd. On installe également grub qui servira à démarrer sur la clé USB. Le paquet localepurge permet quant à lui de nettoyer les locales qui prennent un peu trop de place sur la clé USB. Généralement je ne conserve que les locales françaises et anglaises.

Il est aussi possible d'installer quelques paquets comme un serveur graphique, même voir KDE, ou encore des outils d'administration. On peut aussi installer des outils qui pourront permettre de réparer une machine.

Quelques ajustements.

Afin de ne pas écrire trop souvent sur la clé USB, on remplace quelques fichiers.

rm -f /etc/blkid.tab*
ln -s /dev/null /etc/blkid.tab
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab

Configuration de grub

Afin que la machine puisse démarrer il faut installer grub sur le secteur de démarrage de la clé USB.Pour cela, on peut quitter le chroot. Pour installer grub on peut utiliser grub-install :

# grub-install recheck root-directory=/mnt/ /dev/sda

Normalement cela devrait fonctionner ;) mais il est possible, si cela ne marche pas d'essayer de l'installer à l'aide de la commande grub directement (attention le hd1 est à adapter selon votre configuration) :

# grub
grub> root (hd1,0)
grub> setup (hd1)

Il faut également renseigner le fichier /mnt/boot/grub/menu.lst

# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default        0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout        5

# Pretty colours
color cyan/blue white/blue

## password '--md5' passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title        Windows 95/98/NT/2000
# root     (hd0,0)
# makeactive
# chainloader  +1
#
# title        Linux
# root     (hd0,1)
# kernel   /vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=LABEL=live-root rootdelay=5 ro quiet

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=true

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=vga=791

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(single-user) single
# altoptions=(single-user mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title      Debian GNU/Linux, kernel 2.6.18-4-686
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet vga=791
initrd     /initrd.img-2.6.18-4-686
savedefault

title      Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet single
initrd     /initrd.img-2.6.18-4-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

Ajout d'un utilisateur

Enfin il ne faut pas oublier d'installer un compte utilisateur4, ainsi que changer le mot de passe root à l'aide des commandes :

# chroot /mnt
# passwd
# adduser toto

Redémarrage et test

Il ne reste plus qu'à démonter toutes les partitions et redémarrer la machine.

# umount -a
# exit
# reboot

  1. J'ai par ailleurs acheté récemment une clé USB de 2Go à cet effet pour à peine 15 euros 

  2. Ce qui peut arriver quand on change de machine par exemple. 

  3. i.e les modules USB, ... 

  4. Il ne faudrait pas travailler en administrateur, hein ! 

Usar find para buscar archivos o directorios en GNU/Linux

6janvier

Ver el perfil de emanuele mastrogiovanni en LinkedIn

 

tutoriales_gnu_linux.pdf

 

Lire la suite...

Websphere

30décembre

was_v6.1_system_management_and_configuration_sg247304.pdf

Disque

30décembre

La syntaxe du fichier

Les règles de syntaxe du fichier sont les suivantes : une ligne par système de fichier, chaque ligne devant contenir dans l’ordre les informations suivantes séparées par au moins un espace :

  1. l’emplacement physique du système de fichiers : /dev/partition pour une partition physique,
  2. le point de montage (le répertoire doit déjà exister, sinon il faut le créer au préalable avec la commande mkdir),
  3. le (ou les) type de système de fichiers (par exemple swap, ext3, vfat, ntfs, nfs, iso9660 et udf pour les cd et dvd), auto pour autodétecter le type ;
  4. les options de montage, séparées par des virgules :
    • ro pour monter le système de fichiers en lecture seule,
    • rw pour monter le système de fichiers en lecture-écriture,
    • noauto pour que le système de fichiers ne soit pas monté au démarrage (option contraire : auto),
    • user pour qu’un simple utilisateur puisse monter et démonter le système de fichiers et pas seulement le root (option contraire : nouser),
    • exec pour permettre l’exécution de binaires (option contraire : noexec),
    • uid, gid et umask pour définir des permissions pour l’ensemble du système de fichiers (pour les systèmes déficients comme fat ou ntfs),
    • defaults pour les options par défaut (notamment rw, exec, auto et nouser),
    • et enfin sw pour les systèmes de swap.
  5. la valeur 1 si le système de fichier doit être sauvegardé ou la valeur 0 sinon (mettez 0 si vous n’avez pas de système de sauvegarde),
  6. la priorité pour la vérification des systèmes de fichiers par fsck au démarrage quand cela est nécessaire : la partition racine doit avoir la plus grande priorité (valeur 1), les autres doivent avoir une priorité inférieure (valeur 2). Les systèmes de fichiers qui ne doivent pas être vérifiés auront la valeur 0.

Donc pour un système classique, le fichier contient par exemple :

/dev/hda1  /              ext3        defaults          0     1   # partition de DD
/dev/hda2  none           swap        sw                0     0   # partition de DD
/dev/hda5  /home          ext3        defaults          0     2   # partition de DD
proc       /proc          proc        defaults          0     0   # SF virtuel
/dev/fd0   /media/floppy0 auto        user,noauto       0     0   # disquette
/dev/sda1  /media/clef0   vfat        user,noauto       0     0   # clef USB
/dev/hdc   /media/cdrom0  udf,iso9660 ro,user,noauto    0     0   # CD ou DVD

Monter et démonter une partition citée dans fstab

Un des avantages d’utiliser le fichier /etc/fstab est que le montage et le démontage des systèmes de fichiers cités dans ce fichier de configuration sont très simples. Il suffit d’utiliser la commande mount pour monter et umount pour démonter, suivie du périphérique ou du répertoire de montage.

Ainsi, les deux commandes suivantes sont équivalentes, et permettent de monter le cd présent dans le lecteur :

# mount /media/cdrom0
# mount /dev/hdc

Comme nous avons précisé l’option user pour le lecteur de cd dans fstab, les deux commandes précédentes peuvent être exécutées en tant que simple utilisateur. Dans ce cas, seul l’utilisateur en question et le root pourront démonter le système de fichiers avec l’une des deux commandes suivantes :

# umount /media/cdrom0
# umount /dev/hdc
[Important]Important
Pour démonter un système de fichier, il faut qu’il ne soit plus utilisé ni parcouru par aucun utilisateur ni aucun processus. Sinon, la commande umount renverra le message d’erreur suivant :

 

                    
umount : /media/cdrom0 : périphérique occupé

Pour voir qui est responsable de cette occupation, utilisez la commande fuser qui liste les fichiers ouverts ainsi que les noms des processus, et les utilisateurs qui les ont lancés :

# aptitude install psmisc
% fuser -vm /media/cdrom0

2. Monter ses partitions Windows

Préparer le montage d’une partition fat

Le système de fichiers de type fat (fat 16 ou fat 32) est utilisé par Windows 95/98/ME et parfois par Windows 2000/XP. Le pilote Linux pour ce type de système de fichiers permet d’y avoir accès en lecture et en écriture.

Supposons que votre partition Windows de type fat soit /dev/hda1 (première partition primaire sur le disque dur ide maître de la première nappe). Nous allons la monter dans le répertoire /media/win1 qu’il faut créer au préalable :

# mkdir /media/win1

Ensuite, éditez en root le fichier /etc/fstab et rajoutez la ligne suivante :

/dev/hda1     /media/win1       vfat       defaults,user      0     0

Préparer le montage d’une partition ntfs

Le système de fichiers de type ntfs est souvent utilisé par Windows 2000, XP et Vista. Pour pouvoir lire et écrire sur ces systèmes, il faut d’abord installer un pilote particulier, ntfs-3g.

[Note]Note
Le noyau Linux comporte déjà un pilote pour le système de fichiers ntfs, mais celui-ci ne permet pas de créer de nouveaux fichiers. ntfs-3g, qui est un pilote en espace utilisateur, c’est-à-dire exécuté en dehors du noyau, permet un accès complet en lecture et en écriture.
# aptitude install ntfs-3g

Supposons que votre partition Windows de type ntfs soit /dev/sda5 (premier lecteur logique sur le premier disque dur sata). Nous allons la monter dans le répertoire /media/win2 qu’il faut créer au préalable :

# mkdir /media/win2

Ensuite, éditez en root le fichier /etc/fstab et rajoutez la ligne suivante :

/dev/sda5     /media/win2       ntfs-3g    defaults,user      0     0

Monter les partitions

Vous avez rajouté les entrées nécessaires dans le fichier /etc/fstab : vos partitions Windows seront donc dorénavant montées automatiquement dès le démarrage. Mais pour éviter de redémarrer, vous allez simplement demander au système de monter les partitions citées dans fstab et non déjà montées avec la commande suivante :

# mount -a

Si aucun message d’erreur n’apparaît, vous devez maintenant pouvoir voir le contenu de votre ou vos partition(s) Windows dans l’arborescence de votre système.

Modifier les droits sur les partitions Windows

Par défaut, les partitions Windows montées appartiennent à root, et dans le cas des systèmes de fichiers ntfs, elles ne sont pas lisibles par les autres utilisateurs. Pour modifier les droits d’accès appliquées aux partitions Windows, vous pouvez rajouter des options dans la ligne qui leur correspond dans le fichier /etc/fstab.

Par exemple, si vous voulez que sur la partition Windows /dev/hda1 formatée en fat, les fichiers et les répertoires :

  • appartiennent à root, dont l’ID est 0,
  • appartiennent à un groupe win, que vous avez créé avec la commande addgroup, et dont l’ID est 1003,
  • aient des droits rw-rw-r– pour les fichiers réguliers, et rwxrwxr-x pour les répertoires,

alors la ligne correspondant à la partition dans fstab devient la suivante :

/dev/hda1    /media/win1    vfat    defaults,user,uid=root,gid=win,umask=113,dmask=002    0    0

Pour que les changements soient pris en compte, la commande mount -a ne suffit pas. Il faut démonter et remonter la partition :

% umount /media/win1
% mount /media/win1

3. Monter sa clé usb

Si vous avez une clé usb (ou n’importe quel périphérique compatible avec la norme de stockage de masse usb), commencez par créer le répertoire dans lequel vous monterez la clé :

# mkdir /media/clef0

Identifiez le nom de périphérique correspondant à votre clef usb : afichez la liste des partitions disponibles avec la commande cat /proc/partitions, puis introduisez votre clef, et, après quelques secondes, affichez à nouveau le contenu de /proc/partitions, dans lequel votre clef à dû apparaître (chez moi, elle s’appelle /dev/sda1, mais si vous avez des disques sata, ce nom peut être décalé de quelques lettres).

Enfin, si votre clé usb est formatée en fat et que vous voulez que les fichiers une fois montés appartiennent à root et au groupe win (cf. plus haut), rajoutez la ligne suivante à la fin du fichier /etc/fstab :

/dev/sda1    /media/clef0    vfat    defaults,user,uid=win,gid=win,umask=113,dmask=002    0    0

Vous pouvez alors monter votre clé usb :

% mount /media/clef0
[Attention]Attention
N’oubliez pas de démonter votre clé usb avant de la débrancher, sous peine de corrompre les données qui y sont stockées :

 

% umount /media/clef0

NAT

30décembre

Figure 38.1. Schéma d’un NAT avec 2 machines

Schéma d'un NAT avec 2 machines

 

Figure 38.2. Schéma d’un NAT avec plusieurs machines

Schéma d'un NAT avec plusieurs machines

 

Avec cette configuration, seul le routeur NAT est directement joignable depuis Internet ; les ordinateurs du réseau local ne sont a priori pas joignables directement depuis Internet… sauf si on fait du transfert de port. Par exemple, pour que le serveur Web qui tourne sur le port 80 de la machine dont l’adresse IP est 192.168.0.3 soit joignable de l’extérieur, il faut transférer les requêtes TCP arrivant sur le port 80 du routeur NAT vers la machine dont l’adresse est 192.168.0.3, et la réponse à la requête sera alors correctement transférée vers Internet au client qui a initié la requête.

[Note]Note
Pour améliorer les temps de réponses des requêtes DNS, il pourra être intéressant de mettre en place un serveur DNS de type indépendant sur le routeur NAT, comme expliqué dans le wiki, et d’indiquer dans la configuration réseau des ordinateurs du réseau local l’adresse 192.168.0.1 comme premier serveur DNS.

2. Etablir des règles de filtrage et de partage de connexion

2.1. Apprendre la syntaxe iptables

La syntaxe d’iptables est très complète… et je n’ai malheureusement pas l’intention de l’expliquer dans cette annexe. Je l’ai personnellement apprise dans le Hors Série Linux Magazine n°12 dédié aux pare-feux. Si vous maîtrisez l’anglais, vous pouvez vous attaquer au tutoriel iptables.

2.2. Configurer iptables

Le paquet iptables, qui contient le programme du même nom qui permet de configurer les fonctions de filtrage IP des noyaux Linux 2.4 et 2.6, est normalement installé par défaut.

Nous allons mettre en place deux scripts à l’aide de mes fichiers d’exemple :

  • le script /etc/iptables.up.rules qui définit les règles de filtrage IPv4 :
    # cp ~/fichiers-config/iptables.up.rules /etc/

Iptables

30décembre

1 – Borrar todas las reglas en Iptables

root@nexolinux ~ # iptables -F

o también:

root@nexolinux ~ # iptables --flush

2- Configurar políticas por defecto.

Iptables por defecto tiene una configuración que permite todo, para un mayor control lo recomendable sería bloquear todo y permitir lo que queremos. Para ello hay dos formas, poner una regla en cada cadena (INPUT, OUTPUT, FORWARD ) que bloquee todo al final, pues recordad que lee de arriba a abajo en orden estricto, o lo mejor es poner la política por defecto DROP con lo que se negará todo salvo lo que configuremos, y no corremos el riesgo de tocar la última línea en una configuración y dejar el firewall abierto.

root@nexolinux ~ # iptables -P INPUT DROP
root@nexolinux ~ # iptables -P OUTPUT DROP
root@nexolinux ~ # iptables -P FORWARD DROP
root@nexolinux ~ # iptables --list
Chain INPUT (policy DROP)

Chain FORWARD (policy DROP)

Chain OUTPUT (policy DROP)

3- Bloquear a una IP específica.

Para algunas direcciones IP que nos dan un tráfico sospechoso:

root@nexolinux ~ # iptables -A INPUT -s 192.168.1.22 -j DROP 

4- Permitir todo el tráfico entrante de SSH

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

5- Permitir tráfico de SSH sólo de un segmento de red.

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

6- Permitir tráfico HTTP y HTTPS

#HTTP

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# HTTPS

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACC

7- Combinar múltiples reglas con multipuerto.

Este ejemplo permite todo el tráfico entrante SSH, HTTP y HTTPS:

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8- Permitir SSH saliente

root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

9- Permitir SSH sólo a una red en particular.

Esta regla sólo permitirá el tráfico saliente ssh a una red en particular. En concreto la del rango 192.168.100.0/24

root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10- Permitir HTTPS saliente.

Esta regla es buena para permitir el internet a los usuarios.

root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

11- Balanceo de tráfico entrante.

Se puede hacer balanceo en iptables, usando la extensión nth, así podemos balancear el tráfico a tres direcciones IP distintas. Cada tercer paquete lo balancea al servidor adecuado.

root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12- Permitir PING de fuera hacia dentro.

root@nexolinux ~ # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13- Permitir PING de dentro a fuera.

root@nexolinux ~ # iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14- Permitir tráfico de la red interna al exterior.

En un Firewall perimetral en donde las redes están separadas completamente.

# Si eth1 está conectada a una red externa (internet)

# Si eth0 Está conectada a una red interna (192.168.1.x)

root@nexolinux ~ # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

15- Permitir tráfico DNS saliente.

root@nexolinux ~ # iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
root@nexolinux ~ # iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

16- Permitir Rsync de una red en particular.

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

17- Permitir POP3 y POP3S

root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

18- Prevenir ataques DoS

-Limit 25/minute : Limita a sólo 25 conexiones por minuto.

-Limit-burst 100: Indica que el valor de limit/minute será forzado sólo después del número de conexiones en este nivel

root@nexolinux ~ # iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

19- Permitir redirección de puertos.

Ejemplo puerto 422 redirigimos al 22, con lo que podemos tener conexiones al puerto 22 y al puerto 422 por ssh.

root@nexolinux ~ # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

20- Sacar en el log los paquetes caídos.

Primero creamos una cadena llamada LOGGING:

root@nexolinux ~ # iptables -N LOGGING

Luego todas las conexiones entrantes vayan por la cadena LOGGING

root@nexolinux ~ # iptables -A INPUT -j LOGGING

Logueamos paquetes con un log-prefix

root@nexolinux ~ # iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

Y los bloqueamos:

root@nexolinux ~ # iptables -A LOGGING -j DROP

Wget

29décembre

Simple Usage

Say you want to download a URL. Just type:

 

wget http://fly.srk.fer.hr/

But what will happen if the connection is slow, and the file is lengthy? The connection will probably fail before the whole file is retrieved, more than once. In this case, Wget will try getting the file until it either gets the whole of it, or exceeds the default number of retries (this being 20). It is easy to change the number of tries to 45, to insure that the whole file will arrive safely:

 

wget --tries=45 http://fly.srk.fer.hr/jpg/flyweb.jpg

Now let’s leave Wget to work in the background, and write its progress to log file log. It is tiring to type --tries, so we shall use -t.

 

wget -t 45 -o log http://fly.srk.fer.hr/jpg/flyweb.jpg &

 

The ampersand at the end of the line makes sure that Wget works in the background. To unlimit the number of retries, use -t inf.

 

The usage of FTP is as simple. Wget will take care of login and password.

 

wget ftp://gnjilux.srk.fer.hr/welcome.msg

 

If you specify a directory, Wget will retrieve the directory listing, parse it and convert it to HTML. Try:

 

wget ftp://ftp.gnu.org/pub/gnu/ links index.html

 

Advanced Usage

 

You have a file that contains the URLs you want to download? Use the -i switch:

 

wget -i <file>

 

If you specify - as file name, the URLs will be read from standard input.

 

Create a five levels deep mirror image of the GNU web site, with the same directory structure the original has, with only one try per document, saving the log of the activities to gnulog:

 

wget -r http://www.gnu.org/ -o gnulog

 

The same as the above, but convert the links in the HTML files to point to local files, so you can view the documents off-line:

 

wget --convert-links -r http://www.gnu.org/ -o gnulog

Retrieve only one HTML page, but make sure that all the elements needed for the page to be displayed, such as inline images and external style sheets, are also downloaded. Also make sure the downloaded page references the downloaded links.

 

wget -p --convert-links http://www.server.com/dir/page.html

 

The HTML page will be saved to www.server.com/dir/page.html, and the images, stylesheets, etc., somewhere under www.server.com/, depending on where they were on the remote server.

The same as the above, but without the www.server.com/ directory. In fact, I don’t want to have all those random server directories anyway---just save all those files under a download/ subdirectory of the current directory.

 

wget -p --convert-links -nH -nd -Pdownload \ http://www.server.com/dir/page.html

Retrieve the index.html of www.lycos.com, showing the original server headers:

 

wget -S http://www.lycos.com/

Save the server headers with the file, perhaps for post-processing.

 

wget --save-headers http://www.lycos.com/ more index.html

Retrieve the first two levels of wuarchive.wustl.edu, saving them to /tmp.

 

wget -r -l2 -P/tmp ftp://wuarchive.wustl.edu/

You want to download all the GIFs from a directory on an HTTP server. You tried wget http://www.server.com/dir/*.gif, but that didn’t work because HTTP retrieval does not support globbing. In that case, use:

 

wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

 

More verbose, but the effect is the same. -r -l1 means to retrieve recursively, with maximum depth of 1. --no-parent means that references to the parent directory are ignored, and -A.gif means to download only the GIF files. -A “*.gif” would have worked too.

Suppose you were in the middle of downloading, when Wget was interrupted. Now you do not want to clobber the files already present. It would be:

 

wget -nc -r http://www.gnu.org/

If you want to encode your own username and password to HTTP or FTP, use the appropriate URL syntax.

 

wget ftp://hniksic:mypassword@unix.server.com/.emacs

 

Note, however, that this usage is not advisable on multi-user systems because it reveals your password to anyone who looks at the output of “ps".

You would like the output documents to go to standard output instead of to files?

 

wget -O - http://jagor.srce.hr/ http://www.srce.hr/

 

You can also combine the two options and make pipelines to retrieve the documents from remote hotlists:

 

wget -O - http://cool.list.com/
wget --force-html -i 

Very Advanced Usage

 

If you wish Wget to keep a mirror of a page (or FTP subdirectories), use --mirror (-m), which is the shorthand for -r -l inf -N. You can put Wget in the crontab file asking it to recheck a site each Sunday:

 

crontab
0 0 * * 0 wget --mirror http://www.gnu.org/ -o /home/me/weeklog

In addition to the above, you want the links to be converted for local viewing. But, after having read this manual, you know that link conversion doesn’t play well with timestamping, so you also want Wget to back up the original HTML files before the conversion. Wget invocation would look like this:

 

wget --mirror --convert-links --backup-converted \ http://www.gnu.org/ -o /home/me/weeklog

 

But you’ve also noticed that local viewing doesn’t work all that well when HTML files are saved under extensions other than .html, perhaps because they were served as index.cgi. So you’d like Wget to rename all the files served with content-type text/html or application/xhtml+xml to name.html.

 

wget --mirror --convert-links --backup-converted \

--html-extension -o /home/me/weeklog
\ http://www.gnu.org/

 

Or, with less typing:

 

wget -m -k -K -E http://www.gnu.org/ -o /home/me/weeklog