Академический Документы
Профессиональный Документы
Культура Документы
################################################################################
######
Firewalls en Linux
################################################################################
#################
- El firewall de host (FIREWALL BASTION HOST) solo protege a la maquina local o
servidor
- El firewall de red (FIREWALL PERIMETRAL) protege a la maquina local y redes qu
e pudieran estar detras de ella
HOST
Cliente
________
|
|
|
|
|
|
|
|<-----------------------------|
|
ssh | -A INPUT -p tcp --dport 22 |
|
tcp | -m state --state
|
|
22 | NEW,ESTABLISHED,RELATED
|
|
|
|
|
|
|
|
|----------------------------->|
|
-------- -A OUTPUT -p tcp --sport 22 ---------m state --state
ESTABLISHED,RELATED
* Restriccin de origen
INPUT: -s IPoHost
OUTPUT: -d IPoHost
HOST
Servidor
________
|----------------------------->|
|
ssh | -A OUPUT -p tcp --dport 22 | ssh
|
tcp | -m state --state
| tcp
|
22 | NEW,ESTABLISHED,RELATED
| 22
|
|
|
|
|
|
|
|<-----------------------------|
|
-------- -A INPUT -p tcp --sport 22 ---------m state --state
ESTABLISHED,RELATED
* Restriccin de destino
OUTPUT: -d IPoHost
INPUT: -d IPoHost
===============================
$> iptables -L -n ----------------------> muestra las reglas de la tabla de filt
rado
$> iptables -S --> muestra las reglas de filtrado
$> iptables -L -n -t nat
-t nat ---------------> muestra las reglas del
tabla NAT
$> iptables -S -t nat --> muestra las reglas de filtrado de la tabla NAT
$> systemctl stop firewalld (detiene el firewalld de CentOS y borra todas las re
glas)
$> iptables -S
LUEGO DEBEMOS CONTROLAR LAS POLITICAS POR DEFECTO
(forma mas segura)
$> iptables -P INPUT DROP
|
$> iptables -P OUTPUT DROP
|
deniega todo
$> iptables -P FORWARD DROP
|
* Primera prueba
$> ping 127.0.0.1
DAR ACCESO A LOS SERVICIOS QUE SE EJECUTAN EN EL SERVIDOR
$> iptables -A INPUT -i lo -j ACCEPT
$> iptables -A OUTPUT -o lo -j ACCEPT
dando permiso total de entrada y salida al lookback
* Prueba del ping
$> ping 127.0.0.1
DANDO ACCESO AL SERVIDOR SSH
$> iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
$> iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT
DANDO ACCESO A NUESTRA MAQUINA COMO CLIENTE
permitir conectarnos a cualquier servidor SSH, http,ftp,https
$> iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443 -m state --st
ate NEW,ESTABLISHED,RELATED -j ACCEPT
$> iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443 -m state --sta
te ESTABLISHED,RELATED -j ACCEPT
permitir conectarnos a un servidor DNS
$> iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
$> iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j A
CCEPT
* prueba de ping
$> ping www.google.com
HABILITAR ICMP para la salida de paquetes
$> iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state NEW,ESTA
BLISHED,RELATED -j ACCEPT
####################################
#########################
echo "habilitando navegacion a internet desde nuestro host hacia los puertos SSH
,FTP,HTTP y HTTPS"
iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443 -m state --state
ESTABLISHED,RELATED -j ACCEPT
echo "habilitando las consultas DNS desde nuestro host"
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j
ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCE
PT
############### Reglas de Ping ################################################
#########################
echo "permitiendo el ping desde la LAN a nuestro host"
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.130.0/24 -m stat
e --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -d 192.168.130.0/24 -m state
--state ESTABLISHED,RELATED -j ACCEPT
echo "haciendo ping desde nuestro host a la cualquier destino"
iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state NEW,ESTABLI
SHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,R
ELATED -j ACCEPT
#Guardando permanente las reglas
/usr/libexec/iptables/iptables.init save
------------------------------------------------------------------------------------------------------Dando permisos de ejecucin y ejecutando el firewall
$> chmod 755 firewall-bastion
$> ./firewall-bastion
$> iptables -S
Reiniciando el firewall para verificar las reglas guardadas
$> systemctl restart iptables
$> iptables -S
SELINUX
------------------------------------------------------------------------------------Selinux nos permite establecer restricciones de acceso a archivos procesos y pue
rtos
con el uso de contextos y boleanos
SELINUX utiliza dos modelos de seguridad:
MAC - Control de Acceso Mandatorio
RBAC - Control de Acesso Basado en Roles
Por Defecto Linux usa el modelo de seguridad DAC (Control de Acceso Discreto)
La principal ventaja de MAC es que maneja la seguridad en los objetos
(Archivos y Directorios) y sujetos (procesos del sistema)
Cuando un sujeto, tal como una aplicacin, intenta acceder a un objeto tal como
a un archivo, el servidor de aplicacin de polticas verifica un cach de vector
de acceso (AVC), donde se registran los permisos de objeto y del sujeto. Si no s
e
puede tomar una decisin basado en los datos en el AVAC, la peticin continua al
servidor de seguridad, el cual busca el contexto de seguridad de la aplicacin y
del archivo en una matriz. Los permisos son entonces otorgados o negados,
con un mensaje de avc: denied detallado en /var/log/messages.
Los sujetos y objetos reciben su contexto de seguridad a partir de la poltica
instalada, que tambin proporciona informacin para llenar la matriz de seguridad
del servidor.
Adems de ejecutarse en un modo impositivo (Enforcing), SELinux puede ejecutarse
en un modo permisivo (Permissive), donde el AVC es verificado y se registran los
rechazos, pero SELinux no hace cumplir esta poltica.
Modo de Ejecucin de SELINUX
------------------------------------------------------------------------------------Permissive 0 (no ejecuta bloqueos, solo loguea en /var/log/audit/audit.log)
Enforcing 1
(ejecuta bloqueos activamente)
Saber el modo de ejecucin de SELINUX
$> getenforce
$> sestatus
Establecer SELINUX en modo permisivo
$> setenforce 0
-------> dominio
|
drwx------. alumno alumno unconfined_u:object_r:user_home_dir_t:s0 alumno
drwx------. tuxito tuxito unconfined_u:object_r:user_home_dir_t:s0 tuxito
$> ls -Z /var/www
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
root
root
root
root
root
root
root
root
-----------> dominio
|
system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
system_u:object_r:httpd_sys_content_t:s0 error
system_u:object_r:httpd_sys_content_t:s0 html
system_u:object_r:httpd_sys_content_t:s0 icons
de los
comandos restorecon y semanage
$> yum -y install policycoreutils policycoreutils-python
Vamos a hacer una prueba con el servidor web
$> cd
Verificamos el contexto del Document Root
$> ls -Zd /var/www/html
------> usuario
|
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
|
---------> dominio
Creamos un archivo dento del raiz web
$> touch /var/www/html/index.html
Verificamos el contexto del archivo creado; vemos que ha heredado el dominio del
directorio
contenedor; pero no el usuario
$> ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html
/index.html
Creamos 2 archivos en el /tmp
$> touch /tmp/prueba1
$> touch /tmp/prueba2
Verificamos los contextos de los archivos creados
$> ls -lZ /tmp/prueba*
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/prueba1
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/prueba2
Ahora copiamos prueba1 y movemos prueba2 al directorio raiz web
$> cp /tmp/prueba1 /var/www/html
$> mv /tmp/prueba2 /var/www/html
Verificamos los contextos de los archivos
$> ls -lZ /var/www/html/prueba*
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html
/prueba1
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /var/www/html/prueba2
Vemos que en el caso del archivo movido, mantiene el dominio original.
Si
$>
$>
$>
Esto se debe a que los contextos (usuario,rol y dominio) deben ser iguales a los
del i
directorio contenedor