====== Apache httpd ======
apache apache2 httpd web http
===== Iniciar automaticamente en tiempo de arranque =====
1. Editar /etc/default/apache2, y como indica el propio fichero, dejar la linea tal que así:
'NO_START=0'
2. Reiniciar la máquina
3. Verificar que el servidor web se arrancó él solito
===== Seguridad =====
==== Por usuario y contraseña ====
Modificamos el virtualhost de:
/etc/apache2/sites-enabled/
Para crear el fichero con usuarios al fichero contrasenyas:
# htpasswd -c /etc/apache2/contrasenyas usuario_acceso
Una vez creado el fichero, MUY IMPORTANTE no poner la opcion -c, para añadir los siguientes usuarios:
# htpasswd /etc/apache2/contrasenyas usuario_segundo
==== Acceso por IP ====
Añadir la directiva:
Order deny,allow
Deny from all
Allow from dev.example.com
Allow from 10.0.0.0/8
==== Mezclar las dos directivas ====
Con la opción Satisfy se mezclan las dos opciones.
All: se tiene que cumplir usuario e ip
Any: se tiene que cumplir una de las dos
# -x509 identifies that a certificate is required, rather than just a certificate request (see below).
# -days 365 sets the certificate to expire in a year. You may want to extend this period. Make a note of the expiry date so that you can renew it when necessary!
# -sha1 specifies that SHA1 encryption should be used.
# rsa:1024 sets the key as 1024 bit RSA.
# -nodes specifies no passphrase.
# -keyout and -out specify where to store the certificate and key. The key should be root-readable only; the certificate can be world-readable, and must be readable by the user that Apache runs as.
Rellenamos los datos
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Mataro
Organization Name (eg, company) [Internet Widgits Pty Ltd]:prueba
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
sudo chmod 600 /etc/apache2/apache.pem
SSLRequireSSL
SSLVerifyClient require
SSLVerifyDepth 10
Podemos poner mas restricciones, por ejemplo por IP o por OU
SSLVerifyClient optional
SSLVerifyDepth 4
SSLOptions +ExportCertData +StdEnvVars +StrictRequire
SSLRequire ****condiciones de validación*****
Una de las condiciones de validación puede ser:
Por OU
SSLRequire %{SSL_CLIENT_S_DN_OU} in {"LEGIDO"}
Por IP:
SSLRequire %{REMOTE_ADDR} =~ m/^2\.139\.211\.[0-9]+$/
==== Sacar información de un certificado: ====
# openssl x509 -in cacert.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=ES, ST=ES, O=ES, OU=ES, CN=ES
Validity
Not Before: Dec 23 17:10:23 2010 GMT
Not After : Dec 22 17:10:23 2013 GMT
Subject: C=ES, ST=ES, O=ES, OU=ES, CN=ES
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:e2:d2:9d:1f:30:d2:bf:85:ba:ac:5b:c1:20:18:
20:18:ef:8a:bd:11:fc:3b:24:e0:d1:b2:3f:cb:23:
3b:95:20:7f:07:3b:92:95:55:e1:90:7c:61:7d:47:
43:75:d3:a7:cd:19:fa:32:31:eb:d6:80:38:84:ed:
70:21:39:3b:c7:d3:f5:cc:4c:75:85:81:9c:43:91:
47:b1:12:3a:76:22:e0:33:6f:ee:10:a1:37:5d:b6:
d8:15:7e:d6:23:27:f5:a2:f6:b2:fe:ec:d6:7e:6d:
b8:d8:0b:cb:9f:4a:4f:a4:e7:cd:da:69:10:02:fe:
31:0f:1b:9f:75:2c:cf:f8:89
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
E5:29:4E:27:24:7C:9A:5E:AA:9A:5D:E3:2B:62:F4:D6:59:AB:3D:59
X509v3 Authority Key Identifier:
keyid:E5:29:4E:27:24:7C:9A:5E:AA:9A:5D:E3:2B:62:F4:D6:59:AB:3D:59
DirName:/C=ES/ST=ES/O=ES/OU=ES/CN=ES
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
3f:27:f3:4f:8b:2e:57:68:8c:59:53:2f:54:c6:f9:e6:5d:59:
fd:42:4f:c6:1d:8e:d7:15:f4:92:45:23:fb:ee:c9:38:c3:b1:
7d:74:94:da:70:ee:3b:56:12:db:8a:35:70:d3:f8:8f:4e:ea:
db:d1:17:35:b0:2e:15:d0:32:97:82:0e:ae:9c:17:0e:82:49:
06:84:55:a9:be:e2:7b:09:ca:13:82:f3:2e:a8:dc:6f:fb:de:
55:40:9f:70:bd:61:f0:f4:3c:2f:ad:91:d4:ff:e9:cf:12:a4:
76:8f:7c:4d:f8:e0:12:d2:8e:5f:b7:d6:7c:f5:88:b6:db:c4:
c1:44
################################ Revisar ##############################
aptitude update && aptitude install ssl-cert
make-ssl-cert generate-default-snakeoil --force-overwrite
/etc/cups/ssl/server.crt
/etc/ssl/certs/ca-certificates.crt
/etc/ssl/certs/ssl-cert-snakeoil.pem
/etc/ssl/private/ssl-cert-snakeoil.key
a2enmod ssl
apache2ctl restart
netstat -tpan | grep 443
tcp6 0 0 :::443 :::* LISTEN 1625/apache2
==== Extraer certificados de firefox ====
Miramos cual es nuestro kesytore en firefox:
# ls -1d $HOME/.mozilla/firefox/*default
/home/jose/.mozilla/firefox/az0qqip1.default
Ahora sacamos los nombres de los certificados:
# certutil -L -h 'Builtin Object Token' -d /home/jose/.mozilla/firefox/az0qqip1.default
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Builtin Object Token:GTE CyberTrust Root CA ,,
Builtin Object Token:GTE CyberTrust Global Root C,C,C
Builtin Object Token:Thawte Personal Freemail CA ,C,
Builtin Object Token:Thawte Server CA C,,C
Builtin Object Token:Thawte Premium Server CA C,,C
Y ahora sacamos un certificado. Cuidadin con los espacios:
eval certutil -d /home/jose/.mozilla/firefox/az0qqip1.default -L -n "Builtin\ Object\ Token:GTE\ CyberTrust\ Root\ CA" -a
[opensc-pkcs11] ctx.c:367:load_dynamic_driver: dynamic library '/usr/lib64/libopensc-dnie.so': invalid module version
[opensc-pkcs11] ctx.c:467:load_card_drivers: Unable to load 'dnie'.
[opensc-pkcs11] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
[opensc-pkcs11] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
-----BEGIN CERTIFICATE-----
MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD
VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv
b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU
cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv
RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M
ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5
1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz
dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl
IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy
bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
-----END CERTIFICATE-----
==== Comprobar una web por https ====
Lo podemos hacer con openssl client simply. Nos podemos encontrar dos tipos de errores:
==== Certificado autofirmado ====
Error por wget:
# wget https://aca-web.gencat.cat/eines/gestio
--2011-02-02 17:02:26-- https://aca-web.gencat.cat/eines/gestio
Resolving aca-web.gencat.cat... 83.247.130.118
Connecting to aca-web.gencat.cat|83.247.130.118|:443... connected.
ERROR: cannot verify aca-web.gencat.cat's certificate, issued by "/C=ES/O=Agencia Catalana de Certificacio (NIF Q-0801176-I)/L=Passatge de la Concepcio 11 08008 Barcelona/OU=Serveis Publics de Certificacio ECV-2/OU=Vegeu https://www.catcert.net/verCIC-2 (c)03/OU=Secretaria d'Administracio i Funcio Publica/CN=EC-SAFP":
Self-signed certificate encountered.
To connect to aca-web.gencat.cat insecurely, use '--no-check-certificate'.
Error por openssl:
# openssl s_client -connect aca-web.gencat.cat:443 -debug
Verify return code: 19 (self signed certificate in certificate chain)
==== Solución: ====
Exportamos la cadena de certificados desde firefox por ejemplo y lo grabamos como aca-web.gencat.cat_cadena.pem \\
Ahora hacemos:
# wget --ca-certificate=aca-web.gencat.cat_cadena.pem https://aca-web.gencat.cat/eines/gestio
# openssl s_client -connect aca-web.gencat.cat:443 -debug -CAfile aca-web.gencat.cat_cadena.pem
==== Certificado emitido a otro nombre ====
# wget https://www.indymedia.org
--2011-02-03 10:19:35-- https://www.indymedia.org/
Resolviendo www.indymedia.org... 72.232.204.178
Conectando a www.indymedia.org|72.232.204.178|:443... conectado.
ERROR: certificate common name «chavez.indymedia.org» doesn't match requested host name «www.indymedia.org».
Para conectar con www.indymedia.org de forma no segura, use «--no-check-certificate».
===== WebDAV =====
1. Enlaces simbólicos:
cd /etc/apache2/mods-enabled
ln -s ../mods-available/dav_fs.conf dav_fs.conf
ln -s ../mods-available/dav_fs.load dav_fs.load
ln -s ../mods-available/dav.load dav.load
ln -s ../mods-available/dav_lock.load dav_lock.load
2. Ruta a la bd. Añadir a apache2.conf esto:
DavLockDB /var/log/apache2/dav_lock_db
3. Crear esa ruta.
cd /var/log
touch dav_lock_db
4. Habilitar soporte dav. Añadir al directorio x en apache2.conf:
Dav on
5. Reiniciar apache
apachectl restart
6. Descargar el cliente unix con soporte dav cadaver:
http://packages.debian.org/unstable/web/cadaver
6. Instalarlo:
dpkg -i cadaver_xxx
7. Intentar la conexión:
cadaver --proxy=proxyvip:8080 http://87.223.245.32
De momento no sale
===== Virtualhosts =====
Antecedentes:
-Tenemos un servidor apache 2.x corriendo
-Tenemos ip dinámica, que en este caso resuelve dyndns.com
-Queremos tener más de un dominio a la vez (p.ej):
.dominio_1.mine.nu
.dominio_2.mine.nu
Cada uno de estos dominios apunta a un directorio distinto del servidor donde corre apache
1. cd /etc/apache2/sites-available
2. touch dominio_1
3. vim dominio_1
4. Pegar lo siguiente:
NameVirtualHost *
ServerName dominio_1.mine.nu
ServerAdmin webmaster@localhost
DocumentRoot /ruta/dominio_1/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
6. wq (grabar el fichero y salir)
7. touch dominio_2
8. vim dominio_2
9. Pegar lo siguiente:
NameVirtualHost *
ServerName dominio_2.mine.nu
ServerAdmin webmaster@localhost
DocumentRoot /ruta/dominio_2/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
10. wq (grabar el fichero y salir)
11. Habilitamos dominio_1
ln -s dominio_1 ../sites-enabled/dominio_1
12. Habilitamos dominio_2
ln -s dominio_2 ../sites-enabled/dominio_2
13. Creo que con eso ya está, pero por si acaso recargamos apache2
apache2ctl restart
===== Modulos =====
* Listar modulos:
sudo apachectl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
Syntax OK
* Obtener el nombre del modulo necesario para los comandos 'a2dismod' o 'a2enmod':
sudo a2enmod
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation php5 proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy_scgi reqtimeout rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias
Which module(s) do you want to enable (wildcards ok)?
* Deshabilitar modulo:
sudo a2dismod status
Module status disabled.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Y recargamos configuracion:
sudo apachectl graceful
===== Habilitar campos "last modified" etc. en listado de directorios =====
En la imagen de docker por defecto NO aparecen esos atributos. Cambios:
/usr/local/apache2/conf/httpd.conf
Descomentar esta linea:
Include conf/extra/httpd-autoindex.conf
===== Redirecciones =====
* El dominio raiz (y solo el dominio raiz) se redirecciona a otra URL y se para de procesar mas reglas
* Se pasan todas las peticiones a un backend Tomcat
RewriteEngine on
RewriteRule ^/$ http://example.com/my-tomcat-app1/ [R=301,L]
ProxyRequests off
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
==== Herramientas online útiles ====
* Para generar:
https://websiteadvantage.com.au/HtAccess-301-Redirect-Generator#heading-ToolResult
* Para detectar qué regla se aplica en función de la url que se pone:
http://htaccess.mwl.be/be