-
Notifications
You must be signed in to change notification settings - Fork 13
/
Apache.txt
executable file
·332 lines (238 loc) · 11.7 KB
/
Apache.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
====================
Guía de Apache by dM
====================
==================
Apache HTTP Server
==================
Servidor HTTP Apache es un servidor web HTTP de código abierto, para plataformas
Unix (BSD, GNU/Linux, etc.), Microsoft Guindows, Macintosh y otras, que
implementa el protocolo HTTP/1.1
===========
Instalación
===========
# apt-get install apache2
Para comprobar la correcta instalación de apache abriremos el navegador web de
la máquina y escribiremos localhost, 127.0.0.1 o la IP de la máquina si está
conectado a una red local. Cualquiera de las tres opciones nos sirve, y
tecleamos enter, si está bien instalado nos aparecerá una página que indica que
apache está funcionando, a su vez, esa instalación creara la siguiente ruta en
la máquina:
/var/www/
ó
/var/www/html
Dependiendo de la versión de Apache que se haya instalado será uno u otro.
En este directorio es donde podemos guardar nuestros proyectos, ficheros, etc.
Que queremos que sean servidos por Apache en la web.
http://192.xxx.xx.xxx/ // La direccion ip sirve para acceder al directorio del
servidor.
127.0.0.1:80 // Apache cuando está en ejecucion siempre está escuchando por el
puerto 80 por lo que si visitamos 127.0.0.1:80 accederemos al servicio.
Sus archivos e configuracion están en etc/apache2
Estructura del directorio /etc/apache2:
├── apache2.conf
├── conf-available
│ ├── charset.conf
│ ├── localized-error-pages.conf
│ ├── other-vhosts-access-log.conf
│ ├── security.conf
│ └── serve-cgi-bin.conf
├── conf-enabled
│ ├── charset.conf -> ../conf-available/charset.conf
│ ├── localized-error-pages.conf -> ../conf-available/localized-error-pages.conf
│ ├── other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf
│ ├── security.conf -> ../conf-available/security.conf
│ └── serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf
├── envvars
├── magic
├── mods-available
├── mods-enabled
├── ports.conf
├── sites-available
│ ├── 000-default.conf
│ └── default-ssl.conf
└── sites-enabled
└── 000-default.conf -> ../sites-available/000-default.conf
Breve repaso por algunos de sus ficheros:
apache2.conf
Este es el archivo de configuración principal del servidor. Desde aquí se pueden
configurar la mayoría de las opciones con las que cuenta apache para el
servicio. Lee y ordena el resto de los archivos de configuración cuando arranca
el servidor. El propio archivo "apache2.conf" contiene instrucciones y
explicación de cada archivo y directorio del servidor.
ports.conf
Este archivo especifica los puertos de escucha de los hosts virtuales. Se agrega
al archivo de configuración "apache2.conf". Se agregan tantos "Listen numpuerto"
como puertos queramos que escuche nuestro servidor.
mods-enabled
Contiene configuraciones de módulos opcionales del servidor (seguridad, speedy,
ssl, multiproceso) y los módulos en sí mismos.
conf-enabled
Fragmentos de configuración global. Almacena archivos ".conf" que contienen
parte de la configuración de apache. Contiene enlaces simbólicos a los ficheros
de conf-available.
sites-availables
Es donde definiremos los host virtuales del servidor Apache, es donde
configuramos los accesos, puertos, y otras cosas relativas nuestros proyectos,
que queremos que sean servidos en la web por apache.
sites-enabled
En el hay enlaces simbólicos a los ficheros de configuracion que están en
sites-availables.
==============================
Comandos para gestionar apache
==============================
$ chmod -R 777 /var/www/html // Cambiar los permisos de /var/www puesto que solo
tiene permisos root, -R para que los permisos se hagan de forma recursiva, esto
se hace porque al pegar ficheros o carpetas estas no tiene los permisos de
lectura/escritura necesarios.
Restart apache para guardar los cambios.
$ sudo service apache2 restart
ó
$ sudo /etc/init.d/apache2 restart
Detener el servicio de apache.
$ sudo service apache2 stop
Ver el estado del servicio.
$ sudo service apache2 status
Para recargar la configuración del servicio de Apache.
$ sudo service apache2 reload
Forzar la recargar de configuración del servicio.
$ sudo service apache2 force-reload
==============
log de accesos
==============
Para ver el log de acceso via Web al servidor Web Apache.
$ sudo tail -f /var/log/apache2/access.log
Ejemplo de una petición, vista en el log:
ip visitante || fecha y hora || Método de acceso || url visitada || codigo http
|| codigo de estado || ip + url visitada || navegador usando, SO usado,
arquitectura usada en la petición
192.168.200.201 - - [31/Aug/2017:14:59:44 -0400] "GET /files/2017/ HTTP/1.1" 200
1287 "http://192.168.200.201/files/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
:55.0) Gecko/20100101 Firefox/55.0"
==============
Log de errores
==============
Para depurar posibles errores del servidor.
$ sudo tail -f /var/log/apache2/error.log
=============
Borrar apache
=============
# apt-get --purge remove apache2*
# rm -fr /etc/apache2
=================================================
Ejemplo de configuración para un sitio de pruebas
=================================================
Creamos un fichero prueba.conf en /etc/apache2/sites/availables con el siguiente
contenido:
# touch prueba.conf
<VirtualHost *:80>
ServerAdmin admin@mail.com
ServerName myserver.com
DocumentRoot /var/www/html/prueba/
DirectoryIndex index.html
</VirtualHost>
---
Es una opción obligatoria e indica una dirección de correo electrónico
del responsable del sitio.
ServerAdmin
Aquí anotamos el FQDN vinculado al sitio, es decir, el nombre de dominio que
luego configuraremos en el servidor BIND9.
ServerName
Apunta al directorio donde tenemos nuestro proyecto.
DocumentRoot
Indica el archivo de inicio definido por defecto.
DirectoryIndex
Ahora crearemos un enlace simbólico de esta configuración a sites-enabled
# ln -s /etc/apache2/sites-available/prueba.conf /etc/apache2/sites-enabled/
Reiniciamos apache:
# service apache2 reload
Una vez echo esto deberíamos poder visualizar nuestro proyecto en:
127.0.0.1/prueba
====================
El archivo .htaccess
====================
¿Qué es el archivo .htaccess?
El archivo .htaccess (hypertext access) es un archivo de configuración muy
popular en servidores web basados en Apache que permite a los administradores
aplicar distintas políticas de acceso a directorios o archivos con la idea de
mejorar la seguridad de su página web y, por tanto, evitar acceso a terceros.
Cuando visitamos una página web cualquiera y pulsamos sobre un enlace o queremos
descargarnos un archivo, en el proceso de trámite de la petición, el servidor
web consulta el archivo .htaccess con la idea de aplicar las directivas y
restricciones definidas antes de cursar la petición y, lógicamente, cancelar
peticiones que se encuentren prohibidas dentro de este archivo (cuyo ámbito de
actuación es el directorio en el que se encuentra y todos los subdirectorios que
se encuentran por debajo de éste).
¿Y qué podremos controlar con este archivo? Gracias a este archivo podremos
configurar nuestro servidor web para hacerlo algo más seguro pero, además,
también podremos realizar redirecciones, crear mensajes de error personalizados,
restringir el acceso a carpetas, evitar el listado de directorios de nuestro
servidor o permitir el uso de nuestro dominio sin usar las famosas "www".
En wordpress el archivo .htaccess viene creado por defecto en el directorio raíz
de wordpress.
================================================
Evitar el listado del contenido de un directorio
================================================
Uno de los primeros indicadores que nos pueden alertar de una configuración
insegura de un servidor web es poner en la barra de direcciones del navegador
una url que apunte a un directorio del servidor (http://www.dominio.es/images) y
que el navegador nos muestre un listado de las carpetas y archivos que ahí se
alojan. Salvo que lo tengamos pensado así de manera expresa, deberíamos evitar
que este tipo de cosas sucedan puesto que estamos abriendo el contenido completo
de nuestra web a terceros y, precisamente, para controlar este tipo de
situaciones podemos usar las directivas DirectoryIndex u -Indexes para definir
índices que eviten listar el contenido de una carpeta.
========================================
Proteger archivos y carpetas importantes
========================================
Si bien es importante evitar el acceso a los directorios, también lo es proteger
archivos considerados críticos, como por ejemplo los archivos de configuración.
Si bien usar un gestor de contenidos web nos facilita mucho las cosas, éstos
responden a esquemas fijos que se repiten en cada instalación y, por tanto, los
archivos de configuración se encuentran en ubicaciones muy concretas y
conocidas.
Si pensamos un momento en WordPress, el archivo wp-config.php (que se encuentra
en el raíz) almacena la dirección de nuestra base de datos, la base de datos que
usamos así como el usuario y la contraseña, una información de gran valor para
un atacante externo. Para evitar el acceso a este tipo de archivos "singulares"”
podremos valernos de reglas como la siguiente para evitar que alguien acceda
pueda acceder a nuestro archivo:
<files wp-config.php>
order allow,deny
deny from all
</files>
Otro detalle a tener en cuenta es la protección de carpetas críticas a las que
nadie, salvo un administrador, debería poder entrar. ¿Y de qué tipo de carpetas
estamos hablando? Si retomamos el ejemplo de WordPress, nadie debería poder
entrar en la carpeta de los plugins o en la carpeta uploads y así evitar que
alguien recopile más información de la cuenta. ¿Y qué podemos hacer en estos
casos? Una buena forma, y elegante, de evitar el acceso es forzar una
redirección hacia nuestra página principal siguiendo esquemas como:
Redirect 301 /wp-content/index.php http://www.tudominio.com/
Redirect 301 /wp-content/themes/index.html http://www.tudominio.com/
=================
Evitar el hotlink
=================
Dependiendo del tipo de licencia que utilicemos a la hora de publicar nuestros
contenidos o si, por ejemplo, queremos evitar que las fotos que colgamos acaben
siendo utilizadas en otras páginas, quizás nos interese aplicar algún tipo de
regla que evite que alguien pueda insertar una imagen que nosotros estamos
hospedando (forzando así a que, al menos, se la tengan que descargar y subir a
su servidor).
===================================================
Restringir el acceso por IP y luchar contra el spam
===================================================
Si nuestro blog es víctima de algún tipo de ataque y tenemos localizado el
origen (una dirección IP o un rango de direcciones), podemos aplicar medidas
estrictas de seguridad en el archivo .htaccess para restringir el acceso y
bloquear cualquier tipo de petición que provenga de las direcciones IP que
agreguemos a esta lista negra.
Además, si somos algo habilidosos y no tenemos ninguna protección contra el spam
(Askimet es una buena opción en WordPress), también podríamos definir reglas que
eviten a ciertos usuarios (identificados por su dirección IP o por un rango de
éstas) a comentar en nuestro blog (bloqueándoles el acceso a la opción de
publicar comentarios).
¿Cómo pasamos de la teoría a la práctica?
Un buen archivo .htaccess combinado con unos permisos adecuados en nuestros
archivos son una buena barrera de defensa contra ataques y accesos no
autorizados, si bien la seguridad total no se puede garantizar, al menos se lo
pondremos algo más difícil a aquéllos que no tienen muy buenas intenciones.