Curso Linux: Administración de Sistema y Servicios (parte 3)
IRONTEC - http://www.irontec.com
CURSO LINUX: Administración de
Sistema y Servicios
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Servidor web Apache2
●
Servidor web de código abierto.
●
Plataformas Unix, Linux, BSD, Windows y otras.
●
Versión 2 de Apache:
➔
Threads de UNIX.
➔Soporte para Ipv6.
●
Modular:
➔
Módulos para lenguajes de programación:
php, perl, python, ruby, mono (.Net)...
➔
Módulos para autenticación:
ldap, mysql...
➔
Otros módulos:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Instalación en Debian
#> aptget install apache2
➔
Se instalan los módulos “core” como dependencia
(apache2-common)
●
Soporte para PHP:
#> aptget install libapache2modphp4
●
Soporte MySQL para PHP:
#> aptget install php4mysql
➔
Habilitar el módulo en /etc/php4/apache2/php.ini:
extension=mysql.so
●
Reiniciar Apache2 tras cambios de configuración:
#> /etc/init.d/apache2 restart
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Módulos
●
Módulos disponibles en /etc/apache2/mods-available.
●
Módulos habilitados en /etc/apache2/mods-enabled.
➔
¡ Son enlaces simbólicos a los módulos disponibles !
●
Habilitar un módulo:
#> a2enmod nombre_módulo (crea el link) ●Deshabilitar un módulo:
#> a2dismod nombre_módulo (borra el link)Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Dominios virtuales
●
Disponibles en /etc/apache2/sites-available.
●
Habilitados en /etc/apache2/sites-enabled.
●
Habilitar un dominio virtual:
#> a2ensite nombre_sitio
●
Deshabilitar un dominio virtual:
#> a2dissite nombre_sitio
●
Nota:
Algunas aplicaciones web guardan su configuración
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Dominios virtuales (II)
●
Si se accede con la IP o con un dominio no asociado a
ningún dominio virtual:
➔
Se ofrece el primer sitio por orden alfabético en
/etc/apache2/sites-enabled.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Dominios virtuales (III)
●
Ejemplo de dominio virtual:
/etc/apache2/sitesavailable/mi_dominio <VirtualHost *:80> ServerName dominio.org ServerAlias www.dominio.org DocumentRoot /var/wwwdominio.org/ <Directory /var/wwwdominio.org/> #Permitimos .htaccess: AllowOverride All #Denegamos a todos menos a la red local: Order allow,deny Allow from 10.10.0.0/255.255.0.0 Deny from all </Directory> # Logs: TransferLog /var/log/apache2/dominio.org/access.log
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
SSL
●
Comunicación segura vía protocolo https.
●
Configuración:
➔
Creación del certificado:
#> apache2sslcertificate
➔
Habilitamos el puerto 443 en /etc/apache2/ports.conf:
Listen 80 Listen 443
➔
Cargamos el módulo:
#> a2enmod ssl
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
SSL (II)
➔
Creamos un sitio “default-ssl” en /etc/apache2/sites-available:
NameVirtualHost *:443 <VirtualHost *:443> ... < copiamos el contenido #SSL: SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost>
➔
Redirigimos los accesos http a https en el fichero “default”:
NameVirtualHost *:80 <VirtualHost *:80> RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R,NC] </VirtualHost>
➔
Habilitamos el módulo “rewrite”:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Autenticación
●
Restringir contenidos a usuarios que se autentiquen.
●
Diversos tipos de autenticación:
➔
Fichero local
➔LDAP
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Autenticación por fichero local
●
Usuarios/password en fichero de texto:
➔
Usaremos el fichero /usr/local/www-users.
•
¡Debe tener permiso de lectura para www-data!
●
Añadir usuario:
#> htpasswd /usr/local/wwwusers nuevo_usuario
●
Modificar contraseña de un usuario:
#> htpasswd /usr/local/wwwusers usuario
●
Eliminar un usuario:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Autenticación por fichero local (II)
●
Modificación en nuestro dominio virtual:
<Directory /var/www/> ... # Autenticación: AuthName "Acceso privado" AuthType Basic AuthUserFile /usr/local/wwwusers require validuser </Directory> ●
Más info:
http://httpd.apache.org/docs/2.0/mod/mod_auth.html
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Autenticación por LDAP
●
Autenticamos los usuarios contra nuestro servidor LDAP en
la rama “ou=people,dc=dominio,dc=org”.
●
Modificación en nuestro dominio virtual:
<Directory /var/www/> ... # Autenticación: AuthName "Acceso privado" AuthType Basic AuthLDAPAuthoritative on AuthLDAPEnabled on AuthLDAPUrl ldap://ldap.dominio.org:389/ou=people,dc=dominio,dc=org?uid?sub require validuser </Directory>
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Autenticación por LDAP (II)
●
Cargar el módulo de Apache2:
#> a2enmod auth_ldap
●
Más info:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Ficheros .htaccess
●
Configuración de directorio (recursivo) en un fichero
.htaccess en el propio directorio.
●
Necesario permitir “AllowOverride All” en la configuración
del sitio.
●
Ejemplo de fichero .htaccess en /var/www:
# Autenticación:
AuthUserFile /usr/local/wwwusers require validuser
➔
En el fichero del sitio:
<Directory />
AllowOverride All ...
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Algunas directivas
●
Alias
➔
Directiva que hacer corresponder una URL con un
determinado directorio/fichero.
Alias /wiki /usr/share/dokuwiki/ <Directory /usr/share/dokuwiki> AllowOverride All ... </Directory> ●RedirectMacth
➔
Redirección a otra localización.
# Redirigimos todo a otra página/servidor: RedirectMatch ^/$ http://otrodominio.net
# Redirigimos a una carpeta con la portada: RedirectMatch ^/$ /frontpage/
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
WebDAV
●
Protocolo paralelo a http.
●
Permite acceso de escritura a los ficheros ofrecidos por el
servidor web.
●
Configuración:
➔
Cargamos los módulos:
#> a2enmod dav #> a2enmod dav_fs ➔
Sitio/dominio virtual:
DAVLockDB /tmp/DAVLock DAVMinTimeout 600 #Acceso por webdav://dominio.org/webdav <Location /webdav/> DAV On </Location>Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
WebDAV (II)
➔
Los ficheros a los que queremos permitir acceso de escritura
deben ser de “www-data”.
➔
Se puede aplicar autenticación para permitir escritura a sólo
determinados usuarios y lectura a otros/el resto.
●
Más info sobre WebDAV y clientes que lo soportan:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Apache2
Más información sobre Apache2:
●
http://httpd.apache.org/docs/2.0/es/
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Base de datos MySQL
●
Empresa desarrolladora:
http://www.mysql.com
●
Licencia dual:
➔Licencia GPL
➔Licencia privada
●Plataformas soportadas:
AIX, BSD, FreeBSD, HPUX, GNU/Linux, Mac OS X, NetBSD, Novell Netware, OpenBSD, OS/2 Warp, QNX, SGI IRIX, Solaris, SunOS, Windows...Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Características:
●Motores de almacenamiento:
MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole, Example (versión 5.X) ●Triggers
●Vistas
actualizables
●Cursors
●Procedimientos almacenados
●
Integridad referencial
(versión 5.X)
●Transacciones
(versión 5.X)
●
SSL
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Instalación en Debian
●En Sarge la versión 4.1:
mysqlserver4.1 mysqlserver (meta package depending on the latest version)●
Se puede instalar la 5.0 con los repositorios “backports”:
deb http://www.backports.org/debian sargebackports main contrib nonfree
•
¡Algunas aplicaciones necesitan MySQL 5.0!
●
Iniciar/parar/reiniciar la base de datos:
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Usuario root de MySQL
●
¡ Ojo ! el usuario root de MySQL no tiene password por
defecto.
●
Lo primero que hay que hacer tras instalar:
#> mysql u root USE mysql;
UPDATE user SET Password=PASSWORD('*****') WHERE User='root';
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Backups, dos formas:
➔
Copiar /var/lib/mysql
➔
Comando mysqldump:
•
Backup de la base de datos “mi_bd”:
#> mysqldump uUSER pPASSWD mi_bd > backup.sql
•
Backup de toda la base de datos:
#> mysqldump –alldatabases > backup.sql
•
Restaurar una copia de seguridad:
#> mysql –user=usuario –password=**** < backup.sql
•
¡ Ojo con las versiones ! Al hacer un “mysqldump” para restaurarlo en
un MySQL de distinta versión hay que habilitar algunas opciones de
compatibilidad:
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Logs de MySQL
●
Habilitar log de consultas en formato texto:
➔
Descomentar en /etc/mysql/my.cnf:
log = /var/log/mysql.log
➔
Ahora podemos monitorizar las consultas SQL:
Curso Linux: Administración de Sistema y Servicios (parte 3)
MySQL
Configuración
●
Fichero:
/etc/mysql/my.cnf
➔
Existe también otro fichero “debian.cnf” para mantenimiento
del sistema.
●Algunos parámetros:
socket = /var/run/mysqld/mysqld.sock port = 3306 datadir = /var/lib/mysql Importante: IP's que escuchan. bindaddress = 127.0.0.1 #Por defecto sólo local. #bindaddress = 0.0.0.0 #Todas las direcciones.Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Cortafuegos Netfilter/Iptables
●
Remplaza a Ipchains desde el Kernel 2.3.
●
iptables: herramienta del espacio de usuario que permite:
➔
Reglas para filtrado de paquetes.
➔NAT.
●
Firewall stateful (controla estados de conexiones).
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Tabla mangle
●
Para modificar paquetes:
➔
TOS (Type of Service)
➔TTL (Time To Live)
➔
MARK (marcar un paquete) -> iproute2, QoS
●
¡ No usar esta tabla para para DNAT, SNAT o
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Tabla nat
●
Sólo para hacer NAT (Network Address Translation).
●
DNAT:
➔
Cambiar la IP destino.
➔
Ej: Redirigir entrantes a una DMZ con IP's locales.
●
SNAT:
➔
Cambiar la IP origen a una definida (estática)
➔Para dar salida a equipos LAN con IP's locales.
●
Masquerade:
➔
Igual que SNAT con más carga de procesador.
➔
Cada vez chequea la IP saliente que debe asignarle.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Tabla filter
●
Filtrado de paquetes.
●
¡ Se puede hacer filtrado en otras tablas, pero no es
recomendable !
●
Acciones como:
➔
Aceptar un paquete (ACCEPT).
➔Desecharlo (DROP).
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Estado de los paquetes
●
NEW: paquete nuevo.
●
ESTABLISHED: comunicación ya establecida.
●
RELATED: relaionada a otra comunicación
ESTABLISHED
.
➔
Para protocolos como FTP que incluyen puerto de
transmisión de datos dentro de datos de aplicación.
•
Hace falta un módulo para Netfiler: ip_conntrack_ftp.
●
--state
➔
Para comparar el estado de un paquete.
●
El estado de conexiones se aplica sobre:
➔
TCP, UDP o ICMP.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Estado de los paquetes (II)
●
Ejemplo:
➔
Nuestra máquina envía un paquete a otra máquina:
•
Estado de la comunicación: NEW.
•
Cadena OUTPUT.
➔
La máquina destino nos responde con otro paquete.
•
Estado de la comunicación: ESTABLISHED.
•
Cadena PREROUTING.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Listar reglas actuales
●
iptables -L -v
●
iptables-save
➔
Lista las reglas en un formato válido para
iptablesrestore
.
•
iptables-save > fichero-reglas (salva las reglas a fichero)
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comando iptables
●
Sintaxis para añadir una regla:
iptables [t tabla] comando [comparación] [objetivo/salto]
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Tablas
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comandos
A : Añade la regla al final de la cadena. iptables A INPUT (añade una regla al final de la cadena INPUT) D : Borrar una regla (hay que ponerla entera). R : Reemplaza una regla. I : Inserta una regla en la posición indicada. L : Lista todas las reglas (de la cadena especificada). F : (Flush) Elimina todas las reglas (de la cadena especificada).Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones
●Comparaciones genéricas:
p, protocol : Para comprobar si es TCP, UDP o ICMP. iptables A INPUT p tcp s, src : Comparación de IP origen. iptables A INPUT s 192.168.1.10 iptables A INPUT s 192.168.1.0/24 iptables A INPUT s ! 192.168.1.0/24 (invertir) d, dst : Comparación de IP destino. iptables A INPUT d 192.168.0.1 iptables A INPUT d 192.168.0.0/16 i, ininterface : Interfaz origen. ●Sólo válida en INPUT, FORWARD y PREROUTING.
iptables A INPUT i eth0 iptables A INPUT i eth+ (por cualquier eth) o, outinterface : Interfaz de salida. ●Sólo válida en OUTPUT, FORWARD y POSTROUTING.
iptables A FORWARD o eth0Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones implícitas
●
Comparaciones que se cargan implícitamente:
➔
TCP
➔UDP
➔ICMP
●
Estas comparaciones se cargan con la opción -p:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones implícitas TCP
●-p tcp
sport : Puerto origen. iptables A INPUT p tcp sport 1003 iptables A INPUT p tcp sport 100:200 (rango) iptables A INPUT p tcp sport ! 22 (invertir) dport : Puerto destino (ídem) tcpflags : Flags TCP: ●SYN, FIN, ACK, ACK SYN
iptables A INPUT p tcp tcpflags SYN iptables A INPUT p tcp tcpflags SYN,FIN,ACK SYNCurso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones implícitas UDP
●
-p upd
sport : Igual que en TCP. dport : Igual que en TCP.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones implícitas ICMP
●
-p icmp
icmptype : Tipo de ICMP.
iptables A INPUT p icmp icmptype 8
●
Se puede ver un listado con:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Comparaciones explícitas
●
Se deben cargan explícitamente con opción -m (--match).
state ESTADO : Verifica el estado de la conexión. ●
NEW, INVALID, ESTABLISHED, RELATED
iptables A INPUT m state RELATED,ESTABLISHED limit VALOR : Limitar el nº de paquetes por tiempo. iptables A INPUT m limit limit 3/hour macsource : MAC origen. iptables A INPUT m mac macsource 00:00:00:00:11:22 mark : Comprobar paquetes marcados anteriormente. iptables t mangle A INPUT m mark mark 1 ➔Más comparaciones:
•
TOS, TTL, multiport...
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Objetivos/Saltos
●
Acción que se ejecuta sobre el paquete.
j ACCIÓN
➔
Salto: Mandar el paquete a otra cadena:
j cadena
•
Podemos crear cadenas propias:
iptables N cadena_tcp
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Objetivos
ACCEPT : Aceptamos el paquete. ●¡ El paquete deja de compararse en la cadena
actual y en las cadenas de la tabla actual !
●¡ El paquete podría ser filtrado en otra tabla !
DROP : Deseacha un paquete. REJECT : Rechaza un paquete (envía un ICMP informativo al origen). LOG : Loguea el paquete en ssylog. DNAT : Cambiamos la IP destino. ●Sólo en cadenas PREROUTING y OUTPUT de la tabla
nat.
iptables t nat A PREROUTING p tcp d 85.80.23.54 dport 80 j DNAT todestination 192.168.168.10:80Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Objetivos (II)
SNAT : Cambiamos la IP origen. ●Sólo en la cadena POSTROUTING de la tabla nat.
iptables t nat A POSTROUTING p tcp o eth0 j SNAT tosource 90.90.90.90:10243200 MASQUERADE : Cambiamos la IP origen (detecta la IP) ●Sólo en la cadena POSTROUTING de la tabla nat.
iptables t nat A POSTROUTING p tcp o eth0 j MASQUERADE –toports 10243200 REDIRECT : Redirigir paquetes hacia la máquina. ●Sólo en cadenas PREROUTING y POSTROUTING de tabla
nat.
iptables t nat A PREROUTING p tcp dport 80 j REDIRECT –toports 8080 ●Util para proxy transparente.
➔Otros objetivos:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Política por defecto
●
Dos filosofías:
➔
1ª: “Permitido todo excepto lo explícitamente negado”
➔2ª: “Denegado todo excepto lo explícitamente permitido”
➔¡ Mucho más segura la 2ª !
●
Política por defecto en cada cadena (sólo se cumple si el
paquete no coincide con ninguna regla):
iptables P cadena política
•
Denegamos acceso a la máquina y otras máquinas:
iptables P INPUT DROP iptables P FORWARD DROP
•
Permitimos acceso total al exterior desde nuestra propia máquina:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Política por defecto (II)
●
¡ OJO con el interfaz “lo” !
➔
“lo” es el interfaz de localhost.
➔Si ponemos:
iptables P INPUT DROP
¡ Estamos bloqueando los accesos por red en localhost !
➔
Solución: Añadir:
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Módulos (II)
●
Es necesario cargar módulos para Iptables según las
necesidades:
➔
insmod : carga el módulo.
insmod ipt_MASQUERADE
➔
rmmod : descarga el módulo.
➔
modprobe : carga el módulo y sus módulos dependientes.
modprobe ip_nat
➔
modprobe -r : descarga el módulo.
➔
modconf (sólo Debian) : muestra la pantalla anterior con
módulos cargados [+] y no cargados [-].
•
¡ Al cargar con “modconf” el módulo se añade a /etc/modules y se
carga en el arranque !
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
sysctl
●
Para habilitar el rutado:
#> echo “1” > /proc/sys/net/ipv4/ip_forward
➔
Más elegante:
#> sysctl w net.ipv4.ip_forward=1
➔
Para dejarlo definitivo (activo en el arranque):
Fichero /etc/sysctl.conf: net/ipv4/ip_forward=1
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Notas a recordad
●
¡ No bloquear todos los ICMP ! ¿¿por qué??
➔
Supone cargarse la mitad del protocolo de internet.
●
No olvidarse del interfaz “lo”.
●
Cargar módulos necesarios para nuestras reglas.
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Ejemplo
●
Aspectos comunes de los scripts:
➔
Borrado de las reglas aplicadas actualmente (flush)
➔
Aplicación de políticas por defecto para INPUT, OUPUT,
FORWARD
Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Ejemplo (II)
#!/bin/sh ## SCRIPT de IPTABLES ## Red local: eth0 192.168.0.0/24 ## Internet: eth1 – IP dinámica # Borrar reglas: iptables −F iptables −t nat −F # Política por defecto: iptables −P INPUT DROP iptables −P OUTPUT ACCEPT iptables −P FORWARD DROP iptables −t nat −P PREROUTING ACCEPT iptables −t nat −P POSTROUTING ACCEPT # Permito acceso local: iptables A INPUT p ALL i lo j ACCEPTCurso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Ejemplo (III)
# Masquerading para red local con IP pública dinámica: iptables −t nat −A POSTROUTING −s 192.168.0.0/24 o eth1 −j MASQUERADE # Dejo pasar los paquetes ICMP: iptables −A INPUT −p ICMP −j ACCEPT # Acepto paquetes de conexiones ya establecidas: iptables −A INPUT −p TCP −m state −−state RELATED,ESTABLISHED −j ACCEPT # Permitir SSH a la máquina: iptables −A INPUT −p TCP −−dport 22 −m state −−state NEW −j ACCEPT # Redirigir HTTP a una máquina local: iptables −t nat −A PREROUTING −i eth1 −p tcp −−dport 80 −j DNAT −−to 192.168.0.2:80Curso Linux: Administración de Sistema y Servicios (parte 3)
Iptables
Más info:
●