Servidor Web Con Framework Django en Apache

11
1 Artículo de Revisión. 2014 RESUMEN: El siguiente artículo de revisión muestra un método sencillo que busca la mejor forma de instalar, desarrollar y fortalecer la seguridad informática de un servidor con Framework Django para aplicaciones de alta confidencialidad y de producción. Para ello primero se generalizan conceptos acerca de las herramientas de trabajo como Django, SSH, Firewall, entre otras, y luego se describe el método llevado a cabo para instalar un servidor Django en Apache junto al protocolo HTTPS, por último se muestra la utilización del firewall de Linux que permite generar reglas de entrada y salida con el fin de denegar o permitir peticiones realizadas por los clientes. ABSTRAC: The following review article shows a simple method which seeks the best way to install, develop and strengthen information security of a server with Django Framework for applications of high-confidentiality and production. First shown concepts about tools like Django, SSH, Firewall generalize, among others, and then describes the method for installing a Django server by the Apache HTTPS, finally shown the use of Linux firewall rules that can generate input and output in order to deny or allow requests made by their clients. PALABRAS CLAVE: Apache, Django, Firewall SSL, SSH. 1 INTRODUCCIÓN Django es un Framework web de alto nivel que fomenta el rápido desarrollo y el diseño limpio, permite potencializar aplicaciones brindándole seguridad y haciéndolas más confiables sin alterar su integridad. Sin embargo para utilizarlo como servidor de producción es necesario que sea administrado y servido a través de Apache, que es un servidor web de código abierto para plataformas Unix, Linux, Windows, entre otras y es usado para muchas tareas donde se requiere que el contenido sea puesto a disposición en una forma segura y confiable en entornos masivos, sin embargo al activar apache como servidor de producción carece de seguridad en el manejo de datos puesto que esta característica se encuentra deshabilitada, por esa razón se activa el SSL que es un protocolo criptográfico que proporciona comunicaciones seguras por una red y el SSH (Secure Shell) que es un protocolo para acceder a maquinas remotas a través de una red, puede redirigir el tráfico, permite copiar datos de forma segura, usando técnicas de cifrado que hacen que la información que viaja por el medio de comunicación lo haga de manera no legible. Y por medio del firewall es un dispositivo configurado para dar restricción y limitar el acceso de usuarios no autorizados. 2 HERRAMIENTAS DE TRABAJO 2.1 DJANGO Django es un Framework web Python de alto nivel que fomenta el rápido SERVIDOR WEB CON FRAMEWORK DJANGO EN APACHE CON PROTOCOLO HTTPS BAJO SISTEMA OPERATIVO LINUX Gustavo Adolfo Morales García e-mail: [email protected] Shary Mairena Salamanca e-mail: [email protected]

description

Articulo IEEE para establecer un servidor Web en Apache con Django y encriptacion HTTPS

Transcript of Servidor Web Con Framework Django en Apache

SERVIDOR WEB CON FRAMEWORK DJANGO EN APACHE CON PROTOCOLO HTTPS BAJO SISTEMA OPERATIVO LINUXArtculo de Revisin. 2014

8

Gustavo Adolfo Morales Garca e-mail: [email protected] Shary Mairena Salamanca e-mail: [email protected]

RESUMEN: El siguiente artculo de revisin muestra un mtodo sencillo que busca la mejor forma de instalar, desarrollar y fortalecer la seguridad informtica de un servidor con Framework Django para aplicaciones de alta confidencialidad y de produccin. Para ello primero se generalizan conceptos acerca de las herramientas de trabajo como Django, SSH, Firewall, entre otras, y luego se describe el mtodo llevado a cabo para instalar un servidor Django en Apache junto al protocolo HTTPS, por ltimo se muestra la utilizacin del firewall de Linux que permite generar reglas de entrada y salida con el fin de denegar o permitir peticiones realizadas por los clientes. ABSTRAC: The following review article shows a simple method which seeks the best way to install, develop and strengthen information security of a server with Django Framework for applications of high-confidentiality and production. First shown concepts about tools like Django, SSH, Firewall generalize, among others, and then describes the method for installing a Django server by the Apache HTTPS, finally shown the use of Linux firewall rules that can generate input and output in order to deny or allow requests made by their clients. PALABRAS CLAVE: Apache, Django, Firewall SSL, SSH.

1 INTRODUCCIN Django es un Framework web de alto nivel que fomenta el rpido desarrollo y el diseo limpio, permite potencializar aplicaciones brindndole seguridad y hacindolas ms confiables sin alterar su integridad. Sin embargo para utilizarlo como servidor de produccin es necesario que sea administrado y servido a travs de Apache, que es un servidor web de cdigo abierto para plataformas Unix, Linux, Windows, entre otras y es usado para muchas tareas donde se requiere que el contenido sea puesto a disposicin en una forma segura y confiable en entornos masivos, sin embargo al activar apache como servidor de produccin carece de seguridad en el manejo de datos puesto que esta caracterstica se encuentra deshabilitada, por esa razn se activa el SSL que es un protocolo criptogrfico que proporciona comunicaciones seguras por una red y el SSH (Secure Shell) que es un protocolo para acceder a maquinas remotas a travs de una red, puede redirigir el trfico, permite copiar datos de forma segura, usando tcnicas de cifrado que hacen que la informacin que viaja por el medio de comunicacin lo haga de manera no legible.Y por medio del firewall es un dispositivo configurado para dar restriccin y limitar el acceso de usuarios no autorizados.

2 HERRAMIENTAS DE TRABAJO 2.1 DJANGO

Django es un Framework web Python de alto nivel que fomenta el rpido desarrollo y el diseo limpio y pragmtico.

Los orgenes de Django en la administracin de pginas de noticias son evidentes en su diseo, ya que proporciona una serie de caractersticas que facilitan el desarrollo rpido de pginas orientadas a contenidos. Por ejemplo, en lugar de requerir que los desarrolladores escriban controladores y vistas para las reas de administracin de la pgina, Django proporciona una aplicacin incorporada para administrar los contenidos, que puede incluirse como parte de cualquier pgina hecha con Django y que puede administrar varias pginas hechas con Django a partir de una misma instalacin; la aplicacin administrativa permite la creacin, actualizacin y eliminacin de objetos de contenido, llevando un registro de todas las acciones realizadas sobre cada uno, y proporciona una interfaz para administrar los usuarios y los grupos de usuarios.[1] 2.2 SSL

Secure Sockets Layer es un protocolo diseado para permitir que las aplicaciones pueda transmitir informacin de manera segura hacia el destino. Las aplicaciones que utilizan el protocolo SSL envan y reciben claves de cifrado con otras aplicaciones y pueden cifrar y descifrar los datos enviados entre el servidor y el cliente. [2]

El sistema SSL es independiente delprotocolo utilizado; esto significa que puede asegurar transacciones realizadas en la Web a travs delprotocolo HTTP y tambin conexiones a travs de los protocolosFTP,POPeIMAP. SSL acta como una capa adicional que permite garantizar la seguridad de los datos y que se ubica entre la capa de laaplicaciny la capa detransporte(por ejemplo, el protocolo TCP).De esta forma, SSL es transparente para el usuario (es decir, el usuario puede no conocer que est usando SSL). Por ejemplo, un usuario que utiliza un navegador de Internet para conectarse a una pgina Web de comercio electrnico protegido por SSL enviar datos cifrados sin tener que realizar ninguna operacin especial.[3]

2.3 SSH

SecureShell, es un protocolo que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarse a un host remotamente. A diferencia de otros protocolos de comunicacin remota tales como FTP o Telnet, SSH encripta la sesin de conexin, haciendo imposible que alguien pueda obtener contraseas no encriptadas.

SSH est diseado para reemplazar los mtodos ms viejos y menos seguros para registrarse remotamente en otro sistema a travs de la shell de comando, tales comotelneto rsh. Un programa relacionado, elscp, reemplaza otros programas diseados para copiar archivos entre hosts comorcp. Ya que estas aplicaciones antiguas no encriptan contraseas entre el cliente y el servidor, evite usarlas mientras le sea posible. El uso de mtodos seguros para registrarse remotamente a otros sistemas reduce los riesgos de seguridad tanto para el sistema cliente como para el sistema remoto. [4]

2.4 FIREWALL

Se trata de un dispositivo o conjunto de dispositivos configurados para permitir, limitar, cifrar, descifrar, el trfico entre los diferentes mbitos sobre la base de un conjunto de normas y otros criterios.Los cortafuegos pueden ser implementados en hardware o software, o una combinacin de ambos. Los cortafuegos se utilizan con frecuencia para evitar que los usuarios de Internet no autorizados tengan acceso a redes privadas conectadas a Internet, especialmente intranets.[5]Hoy en da un firewall es muy importante si queremos tener nuestro servidor bien protegido. El firewall es capaz de bloquear IPs atacantes y posibles intentos de hackers de descubrir alguna contrasea de cuenta de e-mail, FTP, etc.

3 OBJETIVOS

3.1 OBJETIVO GENERAL

Realizar un artculo de revisin que permita mostrar las mejores prcticas para instalacin y desarrollo de servidores de produccin de alto nivel como Django en sistemas operativos Linux.

3.2 OBJETIVOS ESPECIFICOS

Investigar y realizar un anlisis de las herramientas y dependencias necesarias para la instalacin y el desarrollo de servidores Web Django. Clasificacin, anlisis y validacin de la informacin recopilada Caracterizacin del marco conceptual referente a las herramientas de trabajo ms utilizadas para la instalacin y desarrollo de servidores Django. Describir una forma sencilla y prctica en un artculo de revisin que permita desarrollar servidores web de alta produccin en sistemas operativo Linux.

4 METODOLOGIA

Investigacin, recopilacin de informacin referente al proceso de instalacin y desarrollo del servidor descrito en el ttulo del artculo. Clasificacin de las herramientas de trabajo. Seleccin, anlisis y validacin de fuentes bibliogrficas. Estudiar el modelo de instalacin y desarrollo de servidores Django, y dependencias necesarias para el mejoramiento del mismo. Pruebas y verificacin de la informacin recolectada en base a los resultados de los tems anteriores. Elaboracin del documento final que permite mostrar las mejores prcticas para instalacin y desarrollo de servidores de produccin de alto nivel como Django en sistemas operativos Linux.

5 RESULTADO

A continuacin se muestra el resultado obtenido en este artculo de revisin que se muestra en diferentes pasos representados por una numeracin de segundo orden, aqu se describe la mejor forma de instalar un aplicativo Web Django en Apache junto al protocolo HTTPS adems de crear reglas en el firewall para permitir o denegar peticiones de los clientes que acceden a el.

5.1 INSTALACIN DE DJANGO

Este tutorial est basado en Sistema Operativo Ubuntu una variante de Linux y es compatible con cualquiera de sus distribuciones. Una vez dentro se verifica la versin de Python esta debe ser 2.7, de lo contrario la instalacin de las siguientes dependencias no van a operar correctamente.

Una vez confirmada la versin se descarga Django del siguiente link: http://www.djangoproject.com/download/1.6.2/tarball una vez descargada se descomprime, y a travs de la consola se va a la carpeta descargada, all se instala el paquete a travs de Python con el siguiente comando:

Sudo python setup.py install

Como se muestra a continuacin en la figura 1.

Figura 1. Instalacin de Django

Para comprobar la correcta instalacin, se escribe python en la consola, y luego import Django tal como se observa en la siguiente figura:

Figura 2.Verificacion de instalacin

Si el proceso es satisfactorio, en la consola no se mostrara ningn error.

5.2 CREAR UN PROYECTO EN DJANGO

En la consola se crea el proyecto en cualquier carpeta de inters, en este caso Documentos con el siguiente comando:

django-admin.py startproject mysite, en donde mysite es el nombre del proyecto.

En consola y parndose en la ruta del nuevo proyecto se observa una carpeta con el mismo nombre del proyecto y un archivo llamado manage.py. Para verificar que el servidor web con Framework Django se halla creado correctamente se escribe en consola en la ruta del proyecto el siguiente comando:

python manage.py runserver

Luego en el navegador se digita localhost:8000, y se evidencia la siguiente imagen, indicando que el proyecto Django ya est en funcionamiento:

Figura 3. Bienvenido a Django

Como la intencin en este documento no es ensear el uso del Framework Django y la creacin de proyectos, se va a proseguir con un proyecto ya hecho en donde se va a manejar informacin sensible de los usuarios como lo es una posible aplicacin Web para la institucin de la Superintendencia de Minas y Transporte del pas, en donde la informacin contenida se considera crtica y sensible por contener toda la informacin acerca de los fraudes que cometen los ciudadanos colombianos en lo que respecta a normas de transporte, llevando un posible seguimiento, control y digitalizacin de las personas que infringen dichas normas.

5.3 INSTALACIN DE MYSQL, APACHE Y PHPMYADMIN

Para la instalacin de la Base de datos escribimos en la consola el siguiente comando, como se muestra en la Fig. 4:

sudo apt-get install apache2 mysql-server mysql-client php5 libapache2-mod-php5

Figura 4. Instalacin de Base de datos Mysql

Es necesario instalar Mysql como el sistema de gestin de bases de datos que va a servir para la plataforma web elaborada con el Framework Django, en la Fig. 5 se muestra cuando la instalacin de Mysql pide contrasea para administrar las bases de datos:

Figura 5. Contrasea de Mysql

Para evidenciar la correcta instalacin de Apache en el sistema operativo, en el navegador se digita localhost a lo cual se debe evidenciar lo siguiente:

Figura 6. Mysql/ Apache Instalado

Se instala Phpmyadmin con el fin de manejar el MySQL y sus bases de datos, a travs de interfaz web. Se debe instalar el paquete en python con el siguiente comando:

sudo apt-get install python-mysqldb.

5.4 DJANGO A TRAVS DE APACHE

Se instalan primero los mdulos de wsgi que permiten poner en apache el servidor con el Framework Django, en la consola se escribe el siguiente comando:

sudo apt-get install libapache2-mod-wsgi

Luego se reinicia el apache y en la ruta /etc/apache2/ se abre y edita el archivo ports.conf (Ver Fig. 7), en este se aade debajo de Listen 80, Listen 8010, esto quiere decir que se va a habilitar el puerto 8010 para Apache con el fin de que pueda escuchar en dicho puerto:

Figura 7. Archivo ports.conf

Estando en la consola, en la siguiente ruta /etc/apache2/sites-available, se crea un archivo con la siguiente informacin (En este caso el archivo es plataforma):

ServerAdmin [email protected] ServerName Superintendencia

Order deny,allow Allow from all

WSGIScriptAlias / /home/arthas/Documentos/Superintendencia/Superintendencia/wsgi.py WSGIDaemonProcess plataforma python-path=/home/arthas/Documentos/Superintendencia WSGIProcessGroup plataforma

Alias /static /home/arthas/Documentos/Superintendencia/Superintendencia/static/

SetHandler NoneOrder allow,denyAllow from all

ErrorLog /home/arthas/Documentos/Superintendencia/error.log

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog /home/arthas/Documentos/Superintendencia/web.log combined

Y con el siguiente comando se le dice al apache que existe un nuevo virtualhost:

sudo a2ensite nombre del archivo

Luego se reinicia apache con el siguiente comando:

sudo service apache2 restart

Para verificar que el servidor web basado en framework Django, es compatible con Apache, en el navegador se digita la direccin http://localhost:8010 y de forma inmediata muestra el servidor, como se evidencia en la Fig. 8.

Figura 8. Servidor Django en Apache

5.5 HABILITAR SSL PARA EL WEBSERVER

Se habilita el modulo SSL de apache a travs del siguiente comando:

sudo a2enmod ssl

Luego se le dice a Apache que habilite SSL:

sudo a2ensite default-ssl

Y se reinicia el apache.

Se crean las llaves en la ruta /etc/apache2 con los siguientes comandos:

sudo openssl genrsa -des3 -out server.key 1024 sudo openssl req -new -key server.key -out server.csr sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt sudo cp server.crt /etc/ssl/certs/ sudo cp server.key /etc/ssl/private/

Se abre el archive default-ssl en sites-available y se reemplazan las siguientes lneas:

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequireSSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.key

Se reemplazan los directorios con los del servidor con el Framework Django:

Order deny,allow Allow from all

WSGIScriptAlias / /home/arthas/Documentos/Superintendencia/Superintendencia/wsgi.py WSGIDaemonProcess plataforma python-path=/home/arthas/Documentos/Superintendencia WSGIProcessGroup plataforma

Alias /static /home/arthas/Documentos/Superintendencia/Superintendencia/static/

SetHandler NoneOrder allow,denyAllow from all

Se deshabilita el virtualhost creado anteriormente, con el comando sudo a2dissite plataforma y se reinicia el apache. Para comprobar el correcto funcionamiento del SSL se abre el navegador y se digita https://localhost/, en la siguiente figura se muestra una imagen del servidor con el SSL habilitado.

Figura 9. Servidor con SSL habilitado

6. FIREWALL

Para la ejecucin del firewall en el sistema operativo Ubuntu que se est manejando, se utilizara el comando iptable, con el que se establecern las reglas que filtraran el trfico de red del servidor Django con el que ya se viene trabajando.

6.1 IP TABLE

Es un sistema de Firewall que permite enviar instrucciones 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, con el que se puede, aadir, borrar y crear reglas que analizarn los paquetes de datos que entran, salen o pasan por nuestra mquina, y en funcin de las condiciones que se establezcan.

Para los paquetes que van a la propia maquina se aplican las reglas INPUT y OUTPUT, y para filtrar paquetes que van a otras redes o maquinas se aplican simplemente reglas FORWARD. INPUT, OUTPUT y FORWARD son los tres tipos de reglas de filtrado donde: Tipo INPUT: paquetes que llegan a nuestra mquina Tipo OUTPUT: paquetes que salen de nuestra mquina Tipo FORWARD: paquetes que pasan por nuestra mquina

Las posibilidades de iptables son infinitas, en este caso solo se trabajara en la toma de decisiones que normalmente ser permitir o denegar que dicho paquete siga su curso. Para empezar a crear las reglas con Iptable se realizan los siguientes pasos:

Abrir una terminal en Linux

Ingresar como usuario root para obtener privilegios con el siguiente comando (Ver figura 10):

Sudo su

Para ingresar como usuario root y obtener se debe proporcionar la contrasea de inicio de sesin de la maquina con la que se est trabajando en Ubuntu.

Figura 10. Usuario Root en Ubuntu

Para verificar si existe alguna regla aplicada por defecto, se utiliza el siguiente comando:

Iptables L

Figura 11. Reglas por defecto Iptables

Se puede observar que no hay aplicada ninguna regla hasta el momento, y est aceptando todo tipo de trfico. Se empieza a filtrar de acuerdo a la necesidad que se tenga:

El localhost se le permite todo, para evitar errores del sistema (por ejemplo conexiones locales a mysql) con el siguiente comando:

iptables A INPUT i lo j ACCEPT iptables A OUTPUT o lo j ACCEPT

Con esos comandos se le est diciendo al firewall que acepte todo de entrada y salida que provenga de localhost.

Figura 12. Habilitar Localhost

A nuestra IP la dejamos habilitados

iptables A INPUT s 195.65.34.234 j ACCEPT

Figura 13. Habilitar Ip de nuestra maquina

El puerto 80 lo dejamos abierto, es un servidor web, con el siguiente comando:

iptables A INPUT p tcp dport 80 j ACCEPT

Figura 14. Puerto 80 abierto

Con el comando inicial se verifica las reglas aplicadas hasta el momento:

iptables - L

Figura 15. Verificacin de Reglas iptable

Ahora para cerrar algunos puertos que vienen abiertos por defecto, se utilizan los siguientes comandos:

iptables A INPUT p tcp dport 3306 j DROPiptables A INPUT p tcp dport 10000 j DROPiptables A INPUT p udp dport 10000 j DROP

Figura 16. Denegar permisos a puertos por defecto

Las reglas a continuacin permiten salir del equipo conexiones nuevas que nosotros solicitamos, conexiones establecidas y solo deja ingresar conexiones establecidas.

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT

De nuevo se verifica si quedaron aplicadas las nuevas reglas, como se observa en la figura a continuacin:

Figura 17. Verificacin de Reglas iptable

7 CONCLUSIONES

Se investigaron las fuentes correspondientes para la bsqueda de las herramientas necesarias para la instalacin de servidores Django.

Se describi y documento la informacin, mostrando de manera sencilla la forma de instalar y desarrollar servidores de produccin con Framework Django.

Se analiz la informacin recopilada, realizando las respectivas pruebas en un sistema operativo Linux, dndole validez a la informacin relacionada en el artculo.

Se realiz un mtodo sencillo que permite a desarrolladores, especialistas en seguridad informtica e interesados en el tema, establecer servidores de produccin en Apache con ciertos patrones de seguridad en plataforma Linux

8 BIBLIOGRAFIA

Django (2014, Abril 6). Meet Django [En lnea]. Disponible en: https://www.djangoproject.comDigicert. (2014, Abril 6). Capa de conexin segura SSL [En lnea]. Disponible en: http://www.digicert.com/es/ssl.htmKioskea (2014, Abril 6). Criptografa - Secure Sockets Layers (SSL) [En lnea]. Disponible en: http://es.kioskea.net/contents/141-criptografia-secure-sockets-layers-ssl(2014, Abril 6). Red Hat Enterprise Linux 4: Manual de referencia [En lnea]. Disponible en: http://www.gb.nrao.edu/pubcomputing/redhatELWS4/RH-DOCS/rhel-rg-es-4/ch-ssh.html Hansen, Bernt (2014, Abril 6). Linux Firewall Configuration and Setup - iptables [En lnea]. Disponible en: http://doc.norang.ca/iptables.html Amanpreet, Singh Alam. (2014, Abril 6). Red Hat Enterprise Linux 4: Manual de referencia [En lnea]. Disponible en: http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-ssh.html