8.Automatización del firewall

Anuncio
Proyecto Fin de Carrera
8.
Departamento de Ingenierı́a Telemática
Automatización del Firewall
Para hacer que los cambios realizados sean permanentes, hay que configurar el sistema para
que cargue los módulos modificados y creados al arrancar la máquina. Existe un fichero de
configuración llamado ”iptables-config” que se encuentra en /etc/sysconfig que permite decirle
a Netfilter cuales son los módulos que deben cargarse al inicio en el sistema cuando se arranca
el servicio iptables. La configuración de este fichero es bien sencilla, escribimos:
IPTABLES MODULES=” n f d e f r a g i p v 4 n f c o n n t r a c k n f c o n n t r a c k i p v 4
x t l 7 s t a t e xt ndpicontrol xt ndpi ”
Además, es importante poder realizar toda la instalación del firewall de golpe parcheando el
kernel con los módulos modificados del Connection Tracking System. Para ello, vamos a construir
el script ”install-redBorder-Stronghold.sh” para que nos facilite la tarea. Vamos a ir viendo paso
a paso lo que debemos escribir en el script para conseguir automatizar el funcionamiento del firewall en un entorno productivo. El script en su totalidad puede ser consultado en el anexo 12.15.
Lo primero que debemos hacer si queremos convertir nuestro sistema operativo en un firewall
de capa 7 es instalar las dependencias necesarias para obtener las fuentes del kernel:
[ root@redBorder−S t r o n g h o l d ]# yum i n s t a l l rng−t o o l s . i 6 8 6
[ root@redBorder−S t r o n g h o l d ]#
yum i n s t a l l rpm−b u i l d redhat −rpm−c o n f i g u n i d e f
[ root@redBorder−S t r o n g h o l d ]#
yum i n s t a l l g c c p a t c h u t i l s xmlto a s c i i d o c e l f u t i l s −l i b e l f −d e v e l
e l f u t i l s −d e v e l z l i b −d e v e l b i n u t i l s −d e v e l newt−d e v e l python−d e v e l
a u d i t −l i b s −d e v e l b i s o n f l e x hmaccalc p e r l −E x t U t i l s −Embed
Para facilitar los cambios en las versiones del kernel nos definimos una variable en el script
que guarde la versión actual del kernel, en teorı́a la más reciente. En caso de que salga otra
versión nueva, siempre que se haga un update la variable tomará el valor correcto:
KERNEL VERSION=$ ( uname −r | s e d ” s / . i 6 8 6 / / ” )
Habiendo instalado todas las dependencias que requiere el proceso de preparación de las
fuentes del kernel, lo siguiente que hay que hacer es descargarnos el paquete rpm que contiene
las fuentes del repositorio oficial de CentOS:
[ root@redBorder−S t r o n g h o l d ]#
wget h t t p : / / v a u l t . c e n t o s . o r g / 6 . 5 / u p d at e s / S o u r c e / SPackages
/ k e r n e l −$ (KERNEL VERSION ) . s r c . rpm
Instalamos el paquete rpm que nos hemos descargado:
[ root@redBorder−S t r o n g h o l d ]# rpm −i v h k e r n e l −$ (KERNEL VERSION ) . s r c . rpm
127
Proyecto Fin de Carrera
Departamento de Ingenierı́a Telemática
Antes de preparar las fuentes es preciso hacer que el sistema genere una clave gpg usando
rng-tools. De otra manera, el proceso de preparación de las fuentes se quedará eternamente
bloqueado en el último paso. Siendo un poco más especı́fico, el sistema necesita generar números
aleatorios grandes para generar claves criptográficas robustas. El kernel requiere de una seguridad
alta y por tanto de claves robustas que no pueden ser generadas a partir de la fecha del sistema.
Es aquı́ donde entra en juego rng-tools, que si recordamos fue instalado al principio. Decirle al
sistema que no utilice la fecha y que use el servicio rngd se hace de la siguiente manera:
[ root@redBorder−S t r o n g h o l d ]# rngd −r / dev /urandom
Ahora sı́ estamos en condiciones de iniciar el proceso de preparación de las fuentes del kernel y
las vamos a alojar, como ya es habitual, en /usr/src.
[ root@redBorder−S t r o n g h o l d ]# cd rpmbuild /SPECS
[ root@redBorder−S t r o n g h o l d SPECS]# rpmbuild −bp k e r n e l . s p e c
[ root@redBorder−S t r o n g h o l d SPECS]#
cp −R . . / BUILD/ k e r n e l −$ (KERNEL VERSION)
/ l i n u x −$ (KERNEL VERSION ) . i 6 8 6 / u s r / s r c
Lo siguiente que debemos hacer es parchear el kernel para disponer de las nuevas capacidades:
[ root@redBorder−S t r o n g h o l d ]# cd p r o j e c t / redBorder−ndpi / patch
[ root@redBorder−S t r o n g h o l d patch ]# cp ndpi − 2 . 6 . 3 2 . patch / u s r / s r c
[ root@redBorder−S t r o n g h o l d patch ]# cd / u s r / s r c
[ root@redBorder−S t r o n g h o l d s r c ]# patch −p0 < ndpi − 2 . 6 . 3 2 . patch
El parche ndpi-2.6.32 se construye estableciendo las diferencias a nivel de código entre las
fuentes del kernel originales y las fuentes del kernel modificadas. La construcción del parche no
forma parte de la instalación pero es preciso indicar cómo se hace:
[ root@redBorder−S t r o n g h o l d ]# d i f f −Nru / u s r / s r c / l i n u x −d p i p r o j e c t . o r i g
/ u s r / s r c / l i n u x −d p i p r o j e c t > ndpi . patch
[ root@redBorder−S t r o n g h o l d ]# c a t ndpi . patch | patch −p0 −−dry−run
Donde linux-dpi project.orig es un enlace simbólico a las fuentes del kernel modificadas, probadas y funcionales. El segundo comando con la opción –dry-run es para comprobar que el parche
se aplicarı́a de forma correcta.
Una vez aplicado el parche, es preciso volver a compilar las fuentes del kernel. En este punto,
se puede configurar también los módulos que queremos que se carguen con el kernel:
[ root@redBorder−S t r o n g h o l d ]# cd / u s r / s r c / l i n u x −KERNEL VERSION . i 6 8 6 /
&& make menuconfig && make
Cuando termina la compilación copiamos los módulos del kernel modificados en la la carpeta
”extra” y las librerı́as dinámicas de iptables en el directorio /lib/xtables-1.4.7. Esta copia se
realiza a través del script auxiliar ”insert new modules.sh”, el cual puede ser consultado en el
anexo 12.16:
[ root@redBorder−S t r o n g h o l d ]# cd p r o j e c t / redBorder−ndpi / patch
[ root@redBorder−S t r o n g h o l d patch ]# . / i n s e r t n e w m o d u l e s . sh
128
Proyecto Fin de Carrera
Departamento de Ingenierı́a Telemática
En este punto ya hemos terminado con Netfilter, tanto en el espacio de usuario como en
el espacio del kernel, y queda solamente instalar nDPI con las modificaciones realizadas. Para
ello vamos a copiar las fuentes modificadas en /usr/src y vamos a realizar todo el proceso de
instalación a través del script install ndpi.sh que puede ser consultado en el anexo 12.3:
[ root@redBorder−S t r o n g h o l d patch ]# mkdir −p / u s r / s r c / redBorder−ndpi
[ root@redBorder−S t r o n g h o l d patch ]# cd
[ root@redBorder−S t r o n g h o l d ]# cd p r o j e c t / redBorder−ndpi
[ root@redBorder−S t r o n g h o l d redBorder−ndpi ]#
cp −R h t t p . c / u s r / s r c / redBorder−ndpi
[ root@redBorder−S t r o n g h o l d redBorder−ndpi ]#
cp −R nDPI/ / u s r / s r c / redBorder−ndpi
cp −R h t t p . c / u s r / s r c / redBorder−ndpi
[ root@redBorder−S t r o n g h o l d redBorder−ndpi ]#
cd / u s r / s r c / redBorder−ndpi /nDPI
[ root@redBorder−S t r o n g h o l d nDPI]# . / i n s t a l l n d p i . sh
129
Proyecto Fin de Carrera
Departamento de Ingenierı́a Telemática
palabra
130
Descargar