selinux, firewall linux y windows server
Post on 05-Feb-2016
43 Views
Preview:
DESCRIPTION
TRANSCRIPT
UNIVERSIDAD PRIVADA DEL NORTE
Integrantes:
HUASASQUICHE QUEVEDO, PAULOODAR JAUREGUI, ARNOLDRAMOS GONZALES, RICHARDVEREAU AGUILERA, LUIS.
Docente:
PEREZ QUIROZ, ALEJANDRO HUGO
Materia:
SISTEMAS OPERATIVOS
Año:
2015
SELINUX
1. Introducción
Security-Enhanced Linux (SELinux) es un módulo de seguridad para el kernel Linux. Es un mecanismo de
control de acceso mandatorio (CMD), implementado en el kernel Linux. Fue introducido por primera vez
en CentOS 4 y desde entonces ha presentado mejoras significativas. Estas mejoras hacen que el
contenido varíe en la forma cómo SELinux utiliza los tiempos para resolver problemas.
1.1. Por Qué es Importante
Para entender mejor, por qué SELinux es importante y qué puede hacer por nosotros, veamos lo
siguiente. Si no tenemos SELinux activado, solo los métodos tradicionales de control de acceso
discrecional (DAC), como son los permisos de archivos o las listas de Control de Acceso (ACLs), se
utilizarán para controlar el acceso a archivos de los usuarios. A los Usuarios y programas, por igual, se
les permite conceder permisos de archivos inseguros a otros o, a la inversa, para obtener acceso a partes
del sistema que no deberían ser necesarios para un funcionamiento normal. Por ejemplo:
o Los administradores no tienen forma de controlar usuarios: Un usuario podría establecer permisos
globales legibles en archivos confidenciales, como claves ssh y en directorios que contengan estas
claves, generalmente: ~/.ssh/
o Los procesos pueden cambiar las propiedades de seguridad: Los archivos de correo de usuario
deben ser legibles solo por dicho usuario, pero el software cliente de correos tiene la habilidad de
cambiarlos para que sean legibles globalmente.
o Procesos heredan derechos de usuario: Firefox, si se ve comprometido por un troyano, podría lees
las claves ssh privadas de los usuarios, incluso si no tuviera razón para hacerlo.
Esencialmente, bajo el modelo DAC tradicional, hay 2 niveles de privilegios, root y usuario, y no hay
manera fácil de hacer cumplir un modelo de privilegios mínimos. Muchos procesos iniciados por root
luego ceden sus derechos para ejecutarse como usuario restringido y algunos procesos pueden
ejecutarse en una cárcel chroot (sección de archivos que va a utilizar un usuario en particular), excepto
aquellos que tengas métodos de seguridad discrecional.
1.2. La Solución
SELinux sigue el modelo de privilegios mínimos de forma estricta. Por defecto, bajo una configuración
enforcing estricta, todo es denegado y luego una serie de políticas de excepción son escritas para dar a
cada elemento del Sistema (un servicio, programa o usuario) solo el acceso requerido para su
funcionamiento. Si un servicio, programa o usuario, intenta acceder o modificar un archivo o recurso que
no sea necesario para su función, entonces el acceso es denegado y la acción es registrada.
Debido a que SELinux es implementado dentro del kernel, las aplicaciones no necesitan ser escritas
especialmente o modificadas para trabajar bajo SELinux aunque, por supuesto, si es escrita para
observar los códigos de error que SELinux retorne, podría funcionar mejor. Si SELinux bloquea una
acción, esta es reportada a la aplicación subyacente como un error de tipo “acceso denegado” a la
aplicación. Muchas aplicaciones, sin embargo, no prueban todos los códigos de retorno en las llamadas
de Sistema y podrían no retornar mensajes explicando el problema, o podrían retornarlo de forma
engañosa.
Tenga en cuenta, sin embargo, que los ejemplos hipotéticos planteados para proporcionar una mayor
seguridad posible de:
o restringir esos programas autorizados a un conjunto limitado de programas, con permisos de lectura
del directorio ~/.ssh/ de un usuario.
o Prevenir a un programa Agente de Entrega de Correo de la manipulación de la propiedad de un grupo
o la configuración de los permisos de lectura de un grupo o de un archivo.
o Un navegador web está limitado únicamente a leer el directorio home de un usuario.
2. SELinux Modes
SELinux posee 3 modos básicos de operación, de los cuales, el modo Enforcing se establece como
predeterminado al momento de la instalación. Existe, sin embargo, un calificador adicional específico o
mls que controla la profundidad de las reglas SELinux, que se están siendo direccionadas al nivel menos
estricto.
o Enforcing: El modo por defecto, que habilita y hace cumplir las politicas de seguridad SELinux en el
sistema, negando las acciones de acceso y registro.
o Permissive: En modo permisivo, SELinux se encuentra activo pero no forzará las políticas de
seguridad. En su lugar, solo mostrará advertencias y registrará acciones realizadas. Este modo es útil
para soluciones de problemas en el SELinux.
o Disabled: SELinux está desactivado.
El modo en que se encuentra SELinux se puede ver y modificar usando la herramienta de Interfaz Gráfica
SELinux Management, disponible en el Menú de Administración, o desde línea de comandos ejecutando
‘system-config-selinux’ (La interfaz gráfica SELinux Management no se encuentra instalada por defecto).
Los usuarios que prefieran usar la línea de comandos, pueden usar el comando ‘sestatus’ para visualizar
el estado actual de SELinux:
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
El comando 'setenforce' puede utilizarse para cambiar entre los
modos Enforcing and Permissive temporalmente, pues una vez reiniciado el sistema se retornará a los
valores por defecto.
Para que los cambios sean permanentes sin importar si el sistema se reinicie, se debe editar la línea
SELINUX en: /etc/selinux/config ya sea para ‘enforcing, ‘permissive’, o ‘disabled’. Por ejemplo:
'SELINUX=permissive'
3. SELinux Policy
Como se ha señalado, SELinux sigue el modelo de privilegios mínimos; de forma predeterminada todo se
negado y luego se escribe una política que le da a cada elemento del sistema, sólo el acceso necesario
para funcionar. Esta descripción describe mejor la estricta política. Sin embargo, es difícil escribir una
política que encaje en el amplio rango de circunstancias que un producto como Enterprise Linux es
probable que se utilicen. El resultado final es que, es probable que SELinux cause problemas a los
administradores de sistemas y usuarios finales; por lo que en lugar de resolver estos problemas, los
administradores del sistema pueden simplemente desactivar SELinux evitando así las protecciones
incorporadas.
Por diseño, SELinux permite que las diferentes políticas escritas sean intercambiables. La política por
defecto en CentOS es la política específica en la que que "objetivos" y confines seleccionan los procesos
del sistema. En CentOS 4 sólo existían 15 objetivos definidos (incluyendo httpd, dhcpd, mysqld). Más
tarde, en CentOS 5 este número había aumentado a más de 200 destinos.
Todos los otros procesos del sistema y todos los programas restantes del ámbito de usuarios, así como
las aplicaciones propias, es decir todo lo demás en el sistema, se ejecutan en un dominio no confinado y
no está cubierto por el modelo de protección de SELinux.
Uno de los objetivos podría ser para todos los procesos que se encuentran instalados y que, por defecto,
se ejecuten durante el arranque deban ejecutarse en un dominio confinado. Esta política dirigida está
diseñada para proteger el mayor número de procesos clave como sea posible sin afectar negativamente a
la experiencia del usuario final y la mayoría de los usuarios deben ser totalmente conscientes de que
SELinux está aún en funcionamiento.
4. SELinux Access Control
SELinux tiene 3 formas de control de acceso:
o Tipo de Aplicación (TE): Tipo de Aplicación es el principal mecanismo de control de acceso utilizado
en la política específica.
o Role-Based Access Control (RBAC): Basada en los usuarios de SELinux (no necesariamente el
mismo que el usuario de Linux), pero no se utilizada en la política específica por defecto.
o Multi-nivel de seguridad (MLS): No se utiliza comúnmente y, a menudo oculta en la política
específica.
Todos los procesos y archivos tienen un contexto de seguridad SELinux.
$ ls -Z
Además de los permisos de archivos estándar y propietarios, podemos ver los campos de contexto de
seguridad de SELinux: system_u: object_r: httpd_sys_content_t.
Esto se basa en el usuario:rol:tipo:mls. En nuestro ejemplo anterior, los campos usuario:rol:tipo: se
muestran y se oculta mls.
5. Solución de problemas SELinux
Tarde o temprano, nos podemos encontrar en situaciones en las que SELinux nos niegue el acceso a
algo y necesitemos solucionar este problema. Las razones por las que SELinux puede negarnos el
acceso a un archivo proceso o recurso son:
o Un archivo mal etiquetados.
o Un proceso que se ejecuta bajo un contexto de seguridad SELinux erróneo.
o Un error en la política. Una aplicación requiere acceso a un archivo que no se había previsto cuando
se redactó la política y genera un error.
o Un intento de intrusión.
Para solucionar cualquier problema, los archivos de registro son fundamentales y SELinux no es
diferente. Por defecto los mensajes de registro de SELinux se registran en /var/log/audit/audit.log través
del Sistema de Auditoría Linux auditd , que se inicia de forma predeterminada. Si el auditd daemon no
se está ejecutando, los mensajes se escriben en/ var / log / messages . Mensajes de registro de
SELinux están etiquetados con la palabra clave "AVC" para que puedan ser fácilmente filtrados de otros
mensajes, como con grep.
Comenzando con CentOS 5 la herramienta de solución de problemas de SELinux se puede utilizar para
ayudar a analizar los archivos de registro convirtiéndolos en un formato más legible. La herramienta
consiste en una herramienta de interfaz gráfica de usuario para la visualización de los mensajes en
formato y soluciones posibles legibles, una notificación en el escritorio el icono de alerta de nuevos temas
y un proceso de daemon, setroubleshootd , que comprueba nuevas alertas SELinux AVC y alimenta
el icono de notificación.Notificaciones de correo electrónico también se pueden configurar, como para los
que no se está ejecutando un servidor X. La herramienta de solución de problemas SELinux es
proporcionada por el setroubleshoot paquete. La herramienta puede ser lanzado desde el menú del
sistema gestor de ventanas X GUI o desde la línea de comandos:
sealert -b
sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
5.1. Reetiquetado de Archivos
El comando 'chcon' se puede usar para cambiar el contexto de seguridad de SELinux de un archivo o
archivos / directorios de una manera similar a la forma 'chown' o 'chmod' puede utilizarse para cambiar la
propiedad o de archivos estándar de permisos de un archivo.
Veamos algunos ejemplos.
Supongamos que creamos un directorio (o tal vez un punto de montaje) a / html / y creamos
un index.html archivo existe:
# Mkdir /html
# Touch /html/index.html
# ls -Z /html/index.html
-rw-r - r-- user_u raíz root: object_r: default_t /html/index.html
Vemos que tanto el directorio /html / y el archivo /html/index.html tienen el tipo de contexto de
seguridad: default_t. Si empezamos nuestro navegador web y tratamos de ver la página, SELinux negará
adecuadamente el acceso y registrar el error porque el directorio y el archivo (s) tienen el contexto de
seguridad incorrecto. Tenemos que establecer el tipo de contexto de seguridad correcta para Apache de:
httpd_sys_content_t.
# Chcon -v --type = httpd_sys_content_t /html
contexto de / html cambió a user_u: object_r: httpd_sys_content_t
# Chcon -v --type = httpd_sys_content_t /html/index.html
contexto de /html/index.html cambió a user_u: object_r: httpd_sys_content_t
# ls -Z /html/index.html
-rw-r - r-- user_u raíz root: object_r: httpd_sys_content_t /html/index.html
Igualmente podríamos haber establecido tanto de una sola vez con el interruptor recursiva -R:
# Chcon -Rv --type = httpd_sys_content_t /html
La modificación de contextos de seguridad de esta manera se mantendrán sobre el reinicio del sistema,
pero sólo hasta que la parte modificada del sistema de archivos es reetiquetado. Esta es una operación
bastante común y la solución adecuada, después de las pruebas, es escribir una regla personalizada
local (un Módulo de Políticas llamada) y fusionar en las reglas locales de base. Esta será una regla
adicional en la parte superior de las reglas 200+ mencionados anteriormente. Para hacer que el contexto
de seguridad cambia permanente, incluso a través de un reetiquetado del sistema de archivos completo,
podemos usar la herramienta de gestión de SELinux o el comando 'semanage' desde la línea de
comandos:
semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"
añadir un contexto de archivo de tipo httpd_sys_content_t para todo bajo / html.
El comando 'restorecon' se puede utilizar para restaurar el contexto de SELinux de un archivo (s).
/# Restorecon -v /var/www/html/index.html
o para restaurar de forma recursiva los contextos de seguridad predeterminada para todo el directorio:
# Restorecon -Rv /var/www/html
Además, si simplemente pretendemos profundizar en los contextos de seguridad del directorio / var / www
/ html para ver si todos los archivos necesarios a sus contextos de seguridad restaurados, podemos
utilizar restorecon con la opción -n para evitar cualquier reetiquetado que ocurre:
# Restorecon -Rv -n /var/www/html
5.3. Reetiquetar sistema de archivos completo
A veces es necesario volver a etiquetar el sistema de archivos completo aunque esto sólo debería ser
necesario al activar SELinux después de haber sido deshabilitado o cuando se cambia la política de
SELinux de predeterminado a estricta. Para volver a etiquetar automáticamente el sistema de archivos
completo después del reinicio, hacer:
# touch /.autorelabel
# reboot
A veces un reetiquetado del sistema de archivos completo fallará si el sistema se ha actualizado a
CentOS-5.2 con SELinux deshabilitado y SELinux está habilitado entonces. Si el procedimiento anterior
no funciona correctamente un reetiquetado del sistema de archivos completo, trate de emitir el comando ''
genhomedircon primero:
# genhomedircon
# touch /.autorelabel
# reboot
5.4. Permitir el acceso a un puerto
Podemos querer un servicio como Apache que se le permitiera unirse y escuchar las conexiones
entrantes en un puerto no estándar. Por defecto, la política de SELinux únicamente permitirá el acceso a
los servicios de puertos reconocidos asociados con esos servicios. Si quisiéramos permitir que Apache
escucha en el puerto TCP 81, podemos agregar una regla para permitir que con el comando 'semanage':
# semanage port -a -t tcp -p http_port_t 81
Una lista completa de los puertos que los servicios se permiten el acceso de SELinux se puede obtener
con:
# semanage -l puerto
6. Personalización de Políticas de SELinux
Se pueden realizar modificaciones de menor importancia a las políticas de SELinux sin modificar y
recompilar la fuente política estableciendo valores booleanos de características opcionales. Tales
características incluyen permitir a los usuarios compartir sus directorios bajo Samba o permitir que
Apache para servir archivos desde directorios usuarios domésticos que de otro modo se les niega por la
política de SELinux.
7. Creación de Políticas de Módulos personalizadas SELinux con
audit2allow
A veces, hay ocasiones en que ninguno de los métodos anteriores frente a una situación dada y tenemos
que extender la política de SELinux mediante la creación de un módulo de directiva personalizada para
permitir un cierto conjunto de condiciones. Por ejemplo, considere la postgrey servicio add-on para un
servidor de correo SMTP. Nuestro servidor SMTP necesita comunicarse con postgrey sobre un socket de
Unix y que es algo que la política de SELinux por defecto para nuestro servidor smtp no permite. En
consecuencia, el servicio está bloqueado por SELinux. Este es un tema que no puede ser fijado por el
cambio o la restauración de contextos de seguridad de tipo de archivo y no es algo que tiene un valor
booleano que podemos cambiar para permitir. Podríamos desactivar la protección de SELinux del
servidor SMTP a través de un booleano, que sería mejor que deshabilitar SELinux completamente, pero
que aún está lejos de ser ideal.
Si cambiamos de SELinux en modo permisivo y corremos nuestro servidor de correo por un período
determinado de tiempo, podemos registrar problemas de SELinux, mientras que todavía permite el
acceso. Comprobación de nuestros registros, vemos los siguientes mensajes de SELinux AVC:
type = AVC msg = audit (1218128130.653: 334): avc: {negado ConnectTo} para pid
= 9111 comm = ruta "smtpd" = "/ var / spool / postfix / postgrey / enchufe"
scontext = system_u: system_r: postfix_smtpd_t: s0 tcontext = system_u:
system_r: initrc_t: s0 tclass = unix_stream_socket
type = AVC msg = audit (1218128130.653: 334): avc: negado {} para escribir pid
= 9111 comm = "smtpd" name = "socket" dev = sda6 ino = 39977017
scontext = system_u: system_r: postfix_smtpd_t: s0 tcontext = system_u:
object_r: postfix_spool_t: s0 tclass = sock_file
Entonces podemos usar 'audit2allow' para generar un conjunto de reglas de política que permitan las
acciones requeridas. Podemos generar un archivo de política Ejecución Tipo postgrey local
(postgreylocal.te):
# Grep smtpd_t /var/log/audit/audit.log | audit2allow -m postgreylocal>
postgreylocal.te
# Cat postgreylocal.te
módulo postgreylocal 1,0;
require {
write postfix_smtpd_t;
write postfix_spool_t;
write initrc_t;
write class sock_file;
ConnectTo clase unix_stream_socket;
}
# ============= Postfix_smtpd_t ==============
permitir initrc_t postfix_smtpd_t: ConnectTo unix_stream_socket;
permitir postfix_spool_t postfix_smtpd_t: escritura sock_file;
Arriba vemos que podemos grep el archivo audit.log para las cuestiones relativas a nuestro servidor smtp
y el tubo de esas cuestiones que audit2allow que genera un conjunto de reglas que se cree que permitiría
las acciones actualmente negados por la política de SELinux. La revisión de estas reglas que vemos
nuestro servidor smtp quiere conectarse y escribir a un socket Unix que vemos en los registros de salida
es el socket de Unix que el servicio postgrey está escuchando. Como esto parece perfectamente
razonable, podemos seguir adelante y utilizar audit2allow para hacer un módulo de directiva
personalizada para permitir que estas acciones:
# Grep smtpd_t /var/log/audit/audit.log | audit2allow -M postgreylocal
Luego cargamos nuestro módulo política postgrey con el comando 'semodule' en la actual política de
SELinux:
postgreylocal.pp -i semodule
que se sumarán nuestro módulo política postgrey a
/etc/selinux/targeted/modules/active/modules/postgreylocal.pp. Podemos comprobar el módulo de política
cargado correctamente haciendo una lista de los módulos cargados con '-l semodule'.
Entonces podemos seguir vigilando nuestros archivos de registro de SELinux para comprobar que
nuestras obras módulo de política de encargo y una vez que estamos satisfechos podemos volver a
habilitar modo obediente SELinux y otra vez beneficiarse de la protección de SELinux de nuestro servidor
smtp ahora completamente funcional.
7.1. Manual de Personalización de Módulos
A menudo audit2allow creará automáticamente un módulo de directivas personalizado para resolver un
tema en particular, pero hay momentos en los que no lo entiende del todo bien y podemos querer editar y
compilar el módulo de políticas manualmente. Por ejemplo, considere el siguiente registro de auditoría
AVC:
Correr audit2allow en el error anterior, y la revisión del archivo de política postfixlocal.te resultante vemos:
# Grep postdrop /var/log/audit/audit.log | audit2allow -M postfixlocal
# Cat postfixlocal.te
module postfixlocal 1,0;
require {
write httpd_log_t;
write postfix_postdrop_t;
getattr clase dir;
write de clase {read getattr};
}
# ============= Postfix_postdrop_t ==============
let httpd_log_t postfix_postdrop_t: archivo getattr;
Esperemos que la primera cosa que nos golpea aquí es ¿por qué postdrop necesita acceso a / var / log /
httpd / error_log? Es de suponer que esto no es algo que esperaríamos así que tenemos que evaluar si
se trata de una acción que deseamos permitir o no. Tenemos un número de opciones. Podríamos
simplemente ignorar el error y permitir SELinux para continuar el bloqueo y el registro de los intentos de
acceso o podríamos permitir que la acción mediante la creación del módulo de directiva personalizada
como sugiere audit2allow.Como alternativa podemos editar el archivo de módulo .te política
personalizada para prevenir la auditoría de este error particular, mientras que todavía permite SELinux
para continuar impidiendo el acceso. Hacemos esto editando el permitir que la línea, cambiándolo
a dontaudit :
# ============= Postfix_postdrop_t ==============
dontaudit postfix_postdrop_t httpd_log_t: archivo getattr;
Ahora podemos compilar manualmente y cargar el módulo de directiva personalizada editado:
# Checkmodule -M -m -o postfixlocal.mod postfixlocal.te
# Semodule_package -o postfixlocal.pp -m postfixlocal.mod
# Semodule -i postfixlocal.pp
El acceso a / var / log / httpd / error_log por postdrop seguirá siendo impedido por SELinux pero no vamos
a recibir alertas constantes y mensajes de error que llenan nuestra archivos de registro cada momento el
acceso está bloqueado.
8. Resumen
Este artículo pretende dar una visión general del trabajo con SELinux para los nuevos usuarios de
SELinux. SELinux está instalado y habilitado por defecto, y para la mayoría de los usuarios que
funcionará sin problema proporcionando un mayor nivel de seguridad. SELinux es conveniente para todas
las clases de la instalación, incluyendo servidores, estaciones de trabajo, computadoras de escritorio y
portátiles.
Aunque SELinux puede parecer bastante desalentador y complejo para los usuarios que no están
familiarizados con ella, eso no es motivo para desactivarlo en la instalación. Si hace SELinux cuestiones
presentes, entonces es fácil de cambiar al modo permisivo en el que cuestiones puntuales solamente se
registran y no obstruidas. Cuando los problemas surgen las técnicas presentadas en este artículo se
puede utilizar para solucionar problemas y resolverlos.
Configuración de Firewall con IPTables
Un firewall es un dispositivo, ya sea software o hardware, que filtra
todo el tráfico de red. El sistema operativo Linux dispone de un
firewall llamado IPtables.
Iptables es un firewall incluido en el kernel de Linux desde la
versión 2.4 que está incluido en el sistema operativo. Es un firewall
basado en reglas, su funcionamiento se basa en aplicar reglas que
el mismo firewall ejecute.
Estas IPtables también se encuentran en los firmwares basados en Linux y por supuesto, los
dispositivos Android.
¿Qué es IpTables?
IPtables es un sistema de firewall vinculado al kernel de linux que se ha extendido enormemente
a partir del kernel 2.4 de este sistema operativo. Al igual que el anterior sistema ipchains, un
firewall de iptables no es como un servidor que lo iniciamos o detenemos o que se pueda caer
por un error de programación (esto es una pequeña mentira, ha tenido alguna vulnerabilidad que
permite DoS, pero nunca tendrá tanto peligro como las aplicaciones que escuchan en
determinado puerto TCP): iptables está integrado con el kernel, es parte del sistema operativo.
¿Cómo se pone en marcha? Realmente lo que se hace es aplicar reglas. Para ellos se ejecuta el
comando iptables, con el que añadimos, borramos, o creamos reglas. Por ello un firewall de
iptables no es sino un simple script de shell en el que se van ejecutando las reglas de firewall.
Para Iniciar/Parar/Reiniciar Iptables debemos ejecutar estos comandos:
sudo service iptables Start
sudo service iptables stop
sudo service iptables restart
Los principales comandos de IPtables son los siguientes (argumentos de una orden):
-A –append → agrega una regla a una cadena.
-D –delete → borra una regla de una cadena especificada.
-R –replace → reemplaza una regla.
-I –insert → inserta una regla en lugar de una cadena.
-L –list → muestra las reglas que le pasamos como argumento.
-F –flush → borra todas las reglas de una cadena.
-Z –zero → pone a cero todos los contadores de una cadena.
-N –new-chain → permite al usuario crear su propia cadena.
-X –delete-chain → borra la cadena especificada.
-P –policy → explica al kernel qué hacer con los paquetes que no coincidan con ninguna
regla.
-E –rename-chain → cambia el orden de una cadena.
Condiciones principales para Iptables:
-p –protocol → la regla se aplica a un protocolo.
-s –src –source → la regla se aplica a una IP de origen.
-d –dst –destination → la regla se aplica a una Ip de destino.
-i –in-interface → la regla de aplica a una interfaz de origen, como eth0.
-o –out-interface → la regla se aplica a una interfaz de destino.
Condiciones TCP/UDP
-sport –source-port → selecciona o excluye puertos de un determinado puerto de origen.
-dport –destination-port → selecciona o excluye puertos de un determinado puerto de
destino.
Existen muchas más condiciones para una configuración avanzada del firewall, pero las
elementales ya las tenemos listadas.
Configurar reglas por defecto
La configuración por defecto de un firewall debería ser, traducido al español, “bloquear todo
excepto [reglas]”. Para configurar el firewall para que bloquee todas las conexiones debemos
teclear:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Con esto nos quedaremos sin internet, por lo que a continuación debemos empezar a crear
reglas permisivas.
Para aplicar una regla que filtre un determinado puerto, debemos ejecutar:
iptables -A INPUT -p tcp –sport 22 22 → crea una regla para el puerto de origen tcp 2222
Para bloquear el tráfico procedente de una determinada IP, debemos ejecutar:
iptables -A INPUT -p tcp -m iprange –src-range 192.168.1.13-192.168.2.19 (ejemplo de IP)
También podríamos bloquear por MAC con la condición –mac-source.
iptables -A INPUT -m mac –mac-source 00:00:00:00:00:01
Una vez ejecutadas las reglas que queramos aplicar, debemos guardarlas tecleando sudo
service
iptables save
Ver el estado del firewall
iptables -L -n -v
El parámetro L muestra las líneas abiertas. V permite recibir más información sobre las
conexiones y N nos devuelve las direcciones IP y sus correspondientes puertos sin pasar por un
servidor DNS.
Eliminar las reglas existentes
Para borrar toda la configuración del firewall para volver a configurarlo de nuevo debemos
teclear:
iptables –F
Permitir conexiones entrantes
Teclearemos los siguientes parámetros:
iptables -A INPUT -i [interface] -p [protocolo] –dport [puerto] -m state –state
NEW,ESTABLISHED -j ACCEPT
-i: debemos configurar la interfaz, por ejemplo, eth0. Esto es útil en caso de tener varias
tarjetas de red, si tenemos sólo una, no tenemos por qué especificar este parámetro.
-p: protocolo. Debemos especificar si el protocolo será TCP o UDP.
–dport: el puerto que queremos permitir, por ejemplo, en caso de HTTP sería el 80.
Un ejemplo para permitir las conexiones entrantes desde páginas web:
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
Permitir las conexiones salientes
iptables -A OUTPUT -o [interfaz] -p [protocolo] –sport [puerto] -m state –state
ESTABLISHED -j ACCEPT
-o: debemos configurar la interfaz, por ejemplo, eth0, al igual que en el caso anterior.
-p: protocolo. Debemos especificar si el protocolo será TCP o UDP.
–sport: el puerto que queremos permitir, por ejemplo, en caso de HTTPS sería el 443.
Un ejemplo para permitir el tráfico saliente hacia páginas web:
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
Permitir los paquetes ICMP
Por defecto, el ping está deshabilitado. Debemos habilitarlo manualmente añadiendo las
correspondientes entradas en iptables. Para ello teclearemos:
Para poder hacer ping a otros servidores:
iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
Para permitir recibir solicitudes de ping de otros equipos:
iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT
Permitir que el tráfico interno salga a internet
En el caso de tener 2 tarjetas de red (eth0 en local y eth1 conectada a internet) podemos
configurar el firewall para que reenvíe el tráfico de la red local a través de internet. Para ello
escribiremos:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
Bloquear y prevenir ataques DDoS
iptables -A INPUT -p tcp –dport 80 -m limit –limit 25/minute –limit-burst 100 -j ACCEPT
Consultar los paquetes rechazados por iptables
Para saber los paquetes que iptables ha rechazado debemos teclear:
iptables -N LOGGING
Ejemplos prácticos:
Cómo bloquear las conexiones entrantes por el puerto 1234:
iptables -A INPUT -p tcp –dport 1234 -j DROP
iptables -A INPUT -i eth1 -p tcp –dport 80 -j DROP → bloquea en la interfaz eth1
Bloquear una dirección IP:
iptables -A INPUT -s 192.168.0.0/24 -j DROP
Bloquear una dirección IP de salida:
iptables -A OUTPUT -d 75.126.153.206 -j DROP
También podemos bloquear una url, por ejemplo, facebook:
iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
Bloquear el tráfico desde una direccion MAC:
iptables -A INPUT -m mac –mac-source 00:0F:EA:91:04:08 -j DROP
Bloquear peticiones ping:
iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
UFW (Uncomplicated Firewall) es una herramienta de configuración de firewall para Ubuntu
desde la consola, desarrollado para facilitar la configuración del firewall Iptables. Ufw
proporciona una manera fácil de crear un firewall basado en host IPv4 o IPv6.
Lo primero que debemos hacer es instalar ufw desde apt-get con:
sudo apt-get install ufw
Ahora ejecutamos el firewall tecleando sudo ufw enable. Para parar el firewall, teclearemos
sudo ufw disable, y para reiniciarlo, primero lo pararemos y a continuación lo volveremos a
arrancar con los comandos especificados.
Una vez tengamos el firewall funcionando, ya podemos comenzar a establecer reglas en su
funcionamiento. Para aplicar una regla que permita por defecto todo el tráfico, tecleamos:
sudo ufw default allow
Por el contrario, para bloquear todo el tráfico, teclearemos:
sudo ufw default deny
Para aplicar reglas a determinados puertos, lo haremos mediante el comando:
sudo ufw allow\deny [puerto]/[protocolo]
Ejemplo:
sudo ufw allow 1234/tcp (permite las conexiones del puerto 1234 en tcp)
sudo ufw deny 4321/udp (bloquea las conexiones del puerto 4321 en udp)
Existe un archivo que contiene más reglas predefinidas en la ruta /etc/ufw/before.rules donde,
por ejemplo, podemos permitir o bloquear el ping externo.
Para ello, pondremos una # delante de la linea -A ufw-before-input -p icmp –icmp-type echo-
request -j ACCEPT
Podemos consultar las reglas del firewall desde un terminal tecleando sudo ufw status
Como podemos ver, con UFW es bastante sencillo gestionar a nivel ipv4 e ipv6 nuestro firewall
iptables. Todo ello podemos gestionarlo desde un terminal sin necesidad de disponer de una
interfaz gráfica, pero aún podemos facilitarlo más con otra aplicación, llamada gufw, que es una
interfaz gráfica para ufw que simplifica aún más su uso.
Para instalar gufw debemos escribir en un terminal sudo apt-get install gufw
Una vez instalado, lo ejecutamos escribiendo gufw o buscándolo en el panel de aplicaciones.
La primera ventana que nos muestra el programa nos permite activar y desactivar el firewall,
establecer reglas por defecto para el tráfico entrante y saliente (permitir, rechazar y denegar), y,
en la parte inferior, crear reglas.
Si pulsamos en el botón + de la parte inferior, accedemos al menú de configuración de reglas.
Aqui podemos añadir reglas personalizadas en cuanto a puertos, aplicaciones, ips de origen,
etc.
Para añadir una regla por puerto igual que hemos especificado desde terminal, seleccionamos si
queremos permitir (allow) o bloquear (deny), si queremos que se filtre el tráfico entrante o
saliente, el protocolo, ya sea tcp o udp y el puerto a filtrar.
Las posibilidades de iptables son prácticamente infinitas, y la dificultad de configuración aumenta
exponencialmente según sean de complejas las configuraciones que queremos realizar. Desde
RedesZone esperamos que con este pequeño tutorial podáis configurar vuestro firewall iptables
a nivel básico de forma sencilla.
Configurar un Firewall en Windows Server 2012
1. ¿Qué es un firewall?
Un servidor de seguridad es una pieza de software o dispositivo de hardware que se utiliza para
proteger una red y los nodos conectados a esa red de externo (así como internas) amenazas.
Funciona inspeccionando los paquetes entrantes y comparándolos con un conjunto de reglas. Si las
reglas permiten el paquete, el firewall pasa el paquete al protocolo TCP/IP para su procesamiento
adicional. Si las reglas no permiten el paquete, el firewall descarta el paquete y, si está habilitado el
registro, crea una entrada en el archivo de registro del firewall.
La lista de tráfico permitido se rellena de una de las maneras siguientes:
Cuando el equipo que tiene el firewall habilitado inicia la comunicación, el firewall crea una
entrada en la lista para que se permita la respuesta. La respuesta de entrada se considera
tráfico solicitado y no es necesario configurarla.
Un administrador configura las excepciones para el firewall. Esto permite el acceso a
programas específicos que se ejecutan en el equipo o el acceso a los puertos de conexión
especificados en el equipo. En este caso, el equipo acepta el tráfico de entrada no solicitado
cuando actúa como un servidor, un agente de escucha o un equipo del mismo nivel. Éste es
el tipo de configuración que se debe completar para conectar a SQL Server.
Elegir una estrategia del firewall es más complejo que decidir simplemente si un puerto determinado
debe estar abierto o cerrado. Al diseñar una estrategia de firewall para la empresa, asegúrese
considerar todas las reglas y opciones de configuración disponibles.
2. ¿Cuál es el Firewall de Windows?
El Firewall de Windows es un firewall con estado basado en host que está integrada en el sistema
operativo Windows. La primera implementación del Firewall de Windows estaba en Windows XP
Service Pack 2 e incluye características tales como el registro de seguridad, programas y portuarias
excepciones, y las normas de transmisión de ICMP. Mientras que la función de conjunto inicial era
suficiente en el momento, el Firewall de Windows se ha convertido en una herramienta de seguridad
más robusta. Con nuevas iteraciones del Firewall de Windows no sólo ha mejorado en gran medida
Microsoft la granularidad de las normas de protección, sino que también han implementado nuevas
características tales como la configuración de protección de IPSec y la integración PowerShell
extendida.
3. Configuración Predeterminada del Firewall
El primer paso para planear la configuración del firewall es determinar el estado actual del firewall
para el sistema operativo. Si el sistema operativo se actualizó desde una versión anterior, se puede
haber conservado la configuración de firewall anterior. Además, otro administrador o una Directiva de
grupo podría haber cambiado la configuración del firewall en el dominio.
Nota:
La activación del firewall afectará a otros programas que tengan acceso a este equipo, tales
como el uso compartido de impresoras y archivos, y las conexiones remotas al escritorio. Los
administradores deben considerar todas las aplicaciones que se están ejecutando en el equipo antes
de ajustar la configuración de firewall.
4. Novedades para el Firewall de Windows en Windows Server 2012 y Windows Server 2012 R2
Windows Server 2012 y Windows Server 2012 R2, al tiempo que ofrece una experiencia de Firewall
de Windows muy similar a versiones anteriores, ha mejorado de las siguientes maneras:
1. Windows Store aislamiento de la red de aplicaciones - Anteriormente, se podía solamente
hacer cumplir las normas de seguridad basados en programas o puertos. Con Windows
Server 2012 y Windows Server 2012 R2, ahora se puede configurar reglas de seguridad para
aislar aplicaciones de Windows Store. Por ejemplo, si desea sólo para permitir que una
aplicación de Windows para acceder a la red local y se conecta a Internet, esto es ahora
posible.
2. Los cmdlets de PowerShell - Con nuevas, amplias cmdlets, ahora puede configurar por
completo su política de Firewall desde el entorno de Windows PowerShell. Gestión remota de
reglas de cortafuegos también es posible ahora con Windows Remote Management (WinRM)
que está habilitado en Windows Server 2012 de forma predeterminada.
3. Internet Key Exchange versión 2 (IKEv2) para el modo de transporte IPsec - apoyo IKEv2
se ha mejorado y ahora soporta características tales como conexiones en modo de transporte
de extremo a extremo de IPsec.
5. Programas para configurar el firewall
Hay tres maneras de configurar el Firewall de Windows.
Elemento Firewall de Windows del Panel de control.
El elemento Firewall de Windows se puede abrir desde el Panel de control.
Aviso: Los cambios realizados en el elemento Firewall de Windows del Panel de control solo
afectan al perfil actual. Los dispositivos móviles, por ejemplo un portátil, no deben utilizar el
elemento Firewall de Windows del Panel de control, dado que el perfil podría cambiar cuando
se conecte con una configuración diferente. Entonces, el perfil configurado previamente no
estará en vigor.
El elemento Firewall de Windows del Panel de control permite configurar opciones
básicas. Entre ellas, figuran:
Activar o desactivar el elemento Firewall de Windows en el Panel de control
o Habilitar y deshabilitar reglas
o Conceder excepciones para puertos y programas
o Establecer algunas restricciones de ámbito
El elemento Firewall de Windows del Panel de control es muy adecuado para los usuarios
que tengan experiencia en la configuración de firewall y que estén configurando opciones de
firewall básicas para equipos que no sean móviles. También puede abrir el elemento Firewall
de Windows del Panel de control con el comando run utilizando el procedimiento siguiente:
Para abrir el elemento Firewall de Windows
En el menú Inicio, haga clic en Ejecutar y, a continuación, escriba firewall.cpl.
Haga clic en Aceptar.
Microsoft Management Console (MMC)
El complemento MMC del Firewall de Windows con seguridad avanzada permite establecer opciones
de configuración de firewall más avanzadas. Este complemento presenta la mayoría de las opciones
de firewall de una manera fácil de usar y presenta todos los perfiles de firewall.
NETSH
Un administrador puede utilizar la herramienta netsh.exe para configurar y supervisar los equipos
basados en Windows en un símbolo del sistema o utilizando un archivo por lotes. Con la
herramienta netsh, puede dirigir los comandos de contexto que escriba a la aplicación auxiliar
adecuada y, a continuación, esta ejecutará el comando. Una aplicación auxiliar es un archivo de
biblioteca de vínculos dinámicos (.dll) que extiende la funcionalidad de la
herramienta netsh proporcionando funciones de configuración, supervisión y soporte técnico de uno o
más servicios, utilidades o protocolos. Todos los sistemas operativos que admiten SQL Server tienen
una aplicación auxiliar de firewall. Windows Server 2008 también tiene una aplicación auxiliar de
firewall avanzada denominada advfirewall. Los detalles del uso denetsh no se explican en este
tema. Sin embargo, muchas de las opciones de configuración descritas se pueden configurar
utilizando netsh. Por ejemplo, ejecute el script siguiente en un símbolo del sistema para abrir el
puerto TCP 1433:
netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope =
SUBNET profile = CURRENT
Un ejemplo similar que usa Firewall de Windows para la aplicación auxiliar Seguridad avanzada:
netsh advfirewall firewall add rule name = SQLPort dir = in protocol = tcp action = allow localport =
1433 remoteip = localsubnet profile = DOMAIN
6. Perfiles De Firewall
Los sistemas operativos identifican y recuerdan cada una de las redes a las que se conectan con
respecto a la conectividad, las conexiones y la categoría.
Hay tres tipos de ubicación de red en Firewall de Windows con seguridad avanzada:
Dominio. Windows puede autenticar el acceso al controlador de dominio para el dominio al
que está unido el equipo.
Públicas. Excepto las redes de dominio, todas las redes se categorizan inicialmente como
públicas. Las redes que representan conexiones directas a Internet o que están en
ubicaciones públicas, tales como aeropuertos o cafeterías, deben dejarse como públicas.
Privadas. Una red identificada por un usuario o una aplicación como privada. Solo las redes
confiables se deben identificar como redes privadas. Es probable que los usuarios deseen
identificar las redes domésticas o de pequeña empresa como privadas.
El administrador puede crear un perfil para cada tipo de ubicación de red, cada perfil conteniendo
diferentes directivas de firewall. En cada momento se aplica solamente un perfil. El orden de perfile se
aplica de la manera siguiente:
1. Si todas las interfaces se autentican para el controlador de dominio para el dominio del que
es miembro el equipo, se aplica el perfil del dominio.
2. Si todas las interfaces se autentican para el controlador de dominio o están conectadas a
redes clasificadas como ubicaciones de la red privada, se aplica el perfil privado.
3. De lo contrario, se aplica el perfil público.
Utilice el complemento MMD de Firewall de Windows con seguridad avanzada para ver y configurar
todos los perfiles del firewall. El elemento Firewall de Windows del Panel de control solo configura el
perfil actual.
7. Utilizar el complemento Firewall de Windows con seguridad avanzada
Se pueden configurar opciones de firewall avanzadas adicionales utilizando el complemento MMC del
Firewall de Windows con seguridad avanzada. El complemento incluye un asistente de reglas y
expone valores de configuración adicionales que no están disponibles en el elemento Firewall de
Windows en el Panel de control. Entre estas opciones de configuración, se incluyen las siguientes:
Configuración de cifrado
Restricciones de servicios
Restringir conexiones para equipos por nombre
Restringir conexiones para usuarios o perfiles específicos
Cruce de perímetro que permite que el tráfico evite los enrutadores de Traducción de
direcciones de red (NAT)
Configurar reglas salientes
Configurar reglas de seguridad
Requerir IPSec para conexiones entrantes
Para crear una nueva regla de firewall mediante el asistente de Nueva regla
1. En el menú Inicio, haga clic en Ejecutar, escriba WF.msc y, a continuación, haga clic
en Aceptar.
2. En el Firewall de Windows con seguridad avanzada, en el panel izquierdo, haga clic con
el botón secundario en Reglas de entrada y, a continuación, haga clic en Nueva regla.
3. Complete el Asistente para nueva regla de entrada usando la configuración que desee.
8. Solucionar problemas de configuración del firewall
Las herramientas y técnicas siguientes pueden ser útiles para solucionar problemas del firewall:
El estado efectivo del puerto es la unión de todas las reglas relacionadas con el
puerto. Cuando intente bloquear el acceso a través de un puerto, puede ser útil para revisar
todas las reglas que citan el número de puerto. Para ello, utilice el complemento MMC del
Firewall de Windows con seguridad avanzada y ordene las reglas entrantes y salientes por
número de puerto.
Revise los puertos activos en el equipo en el que se esté ejecutando SQL Server. Este
proceso de revisión incluye la comprobación de qué puertos TCP/IP están escuchando y
también la comprobación del estado de los puertos.
Para comprobar qué puertos están escuchando, utilice la utilidad de la línea de
comandos netstat. Además de mostrar las conexiones TCP activas, la utilidad netstat también
muestra diversa información y estadísticas de IP.
Para mostrar qué puertos TCP/IP están escuchando
1. Abra la ventana de símbolo del sistema.
2. En el símbolo del sistema, escriba netstat -n -a.
El modificador -n indica a netstat que muestre numéricamente la dirección y el número de
puerto de las conexiones TCP activas. El modificador -a indica a netstat que muestre los
puertos TCP y UPD en los que está escuchando el equipo.
La utilidad PortQry se puede usar para notificar el estado de los puertos TCP/IP para indicar
que están escuchando, no escuchando o filtrados. (Con un estado de filtrado, el puerto puede
o no estar escuchando; este estado indica que la utilidad no ha recibido una respuesta del
puerto.) La utilidad PortQry se puede descargar desde el Centro de descargas de Microsoft.
9. Demostración :
Cortafuegos de Windows con seguridad avanzada
Como sabemos, el cortafuego permite o deniega la apertura de una conexión
con nuestro equipo en un puerto determinado. Para acceder a la configuración básica
del servidor podemos hacerlo desde el centro de redes:
Como vemos, en la parte izquierda tenemos un enlace para acceder a su
configuración:
Como vemos en el recuadro marcado, podemos de una forma rápida, habilitar
nuestro servidor para permitir un determinado tráfico. Por ejemplo, cuando tengamos
el servicio DHCP instalado en el próximo capítulo, la instalación creará una regla para
permitir este tráfico. Además de poder crear reglas podemos directamente habilitar el
cortafuegos para determinados programas:
En este caso, el servidor sabe que puertos utiliza el servicio de DHCP, abriendo esos puerto
mediante las correspondientes reglas.
Configuración avanzada
Accedemos a la configuración Avanzada (Se puede Acceder de 2 formas); esta vez
trabajaremos desde el Administrador de Servidores
1. Abra el Administrador de servidores de la barra de tareas.
2. Haga clic en el menú Herramientas y seleccione Firewall de Windows con
seguridad avanzada .
3. Primero revise la configuración actual seleccionando Propiedades de Windows
Firewall de la página de destino MMC. Esto permite el acceso a modificar la
configuración para cada uno de los tres perfiles de firewall, de dominio, privado y
públicos , así como la configuración de IPSec.
La aplicación de reglas personalizadas
Reglas personalizados permiten el mejor nivel de control sobre el tráfico entrante y saliente a
su Windows Server 2012.
1. Si aún no lo ha hecho ya cargar el MMC Firewall de Windows, abra
el Administrador de servidores de la barra de tareas, haga clic en el menú
Herramientas y seleccionar el Firewall de Windows con seguridad avanzada .
2. Seleccione Reglas de entrada o Reglas de salida bajo el Firewall de Windows
con seguridad avanzada en el lado izquierdo de la consola de administración.
Nota: Esto proporcionará un listado en cada una de las reglas de cortafuegos
configurados actualmente. Reglas que están habilitados actualmente se indican con
el icono casilla verde, mientras que las reglas con discapacidad muestran un icono de
la casilla gris. Rightclicking regla permitirá alternar activar / desactivar.
3. En el lado derecho de cada una de la Reglas de entrada o Reglas de
salida pestaña haga clic en Nueva regla .
4. Seleccione personalizada desde el botón radial Tipo de regla y haga clic
en Siguiente .
5. Seleccione la asociación Programa para la regla de firewall personalizada ya sea Todos
los programas o la ruta a un programa y haga clic en Siguiente .
6. En el campo Tipo de protocolo , seleccione el tipo de protocolo y haga clic
en Siguiente .
7. Seleccione una asociación de direcciones IP para las direcciones locales y
remotas y haga clic en Siguiente .
8. Seleccione una acción a tomar en la coincidencia de tráfico y haga clic
en Siguiente .
9. Seleccione los perfiles asociados a la regla personalizada y haga clic
en Siguiente .
10. Proporcionar un nombre para la regla de firewall y una descripción
opcional y haga clic en Finalizar .
11. Una vez creada la regla se activará. La regla de firewall se puede encontrar en la
pestaña Regla correspondiente, ya sea de entrada o salida, dependiendo del tipo
creado. Para desactivar o eliminar la regla encontrar la regla en la MMC, haga clic en
él y seleccione Regla Desactivar o Eliminar.
BibliografíaAnónimo. (s.f.). Linux Máxima Seguridad. Madrid, España: Prentice Hall.
Matthews, M. (2009). Windows Server. Guia del Administrador. Madrid: McGRAW-HILL.
Sanz Mercado, P. (2008). Seguridad en Linux. Madrid: Servicio de Publicaciones de la Universidad Autónoma de Madrid.
top related