Você está na página 1de 8

Artculo de Revisin.

2014

SERVIDOR WEB CON FRAMEWORK DJANGO EN APACHE CON


PROTOCOLO HTTPS
BAJO
OPERATIVO LINUX
Gustavo
Adolfo SISTEMA
Morales Garca
e-mail: tavomorales88@gmail.com

Shary Mairena Salamanca


e-mail: sharysmega@hotmail.com

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.

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.

2 HERRAMIENTAS DE TRABAJO
2.1 DJANGO

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:
Firewall SSL, SSH.

Apache,

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]

Django,

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

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]

Artculo de Revisin. 2014


El
sistema
SSL
es
independiente
del protocolo utilizado; esto significa que puede
asegurar transacciones realizadas en la Web a
travs del protocolo HTTP y tambin conexiones a
travs de los protocolos FTP, POP e IMAP. SSL
acta como una capa adicional que permite
garantizar la seguridad de los datos y que se ubica
entre la capa de la aplicacin y la capa
de transporte (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]

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

2.3 SSH

Secure Shell, 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 como telnet o rsh. Un
programa relacionado, el scp, reemplaza otros
programas diseados para copiar archivos entre
hosts como rcp. 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]

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

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.

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

Artculo de Revisin. 2014


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.
Figura 2.Verificacion de instalacin

Una vez confirmada la versin se descarga


Django
del
siguiente
link:
http://www.djangoproject.com/download/1.6.2/tarbal
l 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:

Si el proceso es satisfactorio, en la consola no


se mostrara ningn error.

5.2 CREAR
DJANGO

Sudo python setup.py install

UN

PROYECTO

EN

En la consola se crea el proyecto en cualquier


carpeta de inters, en este caso Documentos con
el siguiente comando:

Como se muestra a continuacin en la figura 1.

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 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:

Artculo de Revisin. 2014

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.

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:

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 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


Figura 4. Instalacin de Base de datos Mysql

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:

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:

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:

Artculo de Revisin. 2014

LogFormat "%h %l %u %t \"%r\" %>s


%b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog
/home/arthas/Documentos/Superintendencia/web.l
og combined
</VirtualHost>
Y con el siguiente comando se le dice al
apache que existe un nuevo virtualhost:

sudo a2ensite nombre del archivo

Luego se
comando:
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):

reinicia

apache

con

el

siguiente

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.

<VirtualHost *:8010>
ServerAdmin admin@mail.com
ServerName Superintendencia
<Directory
/home/arthas/Documentos/Superintendencia/Super
intendencia>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIScriptAlias
/
/home/arthas/Documentos/Superintendencia/Super
intendencia/wsgi.py
WSGIDaemonProcess plataforma pythonpath=/home/arthas/Documentos/Superintendencia
WSGIProcessGroup plataforma

Figura 8. Servidor Django en Apache

5.5
HABILITAR
WEBSERVER

SSL

PARA

EL

Se habilita el modulo SSL de apache a travs


del siguiente comando:

Alias
/static
/home/arthas/Documentos/Superintendencia/Super
intendencia/static/
<Directory
/home/arthas/Documentos/Superintendencia/Super
intendencia/static/>

sudo a2enmod ssl

Luego se le dice a Apache que habilite SSL:

SetHandler None
Order allow,deny
Allow from all
</Directory>

sudo a2ensite default-ssl

Y se reinicia el apache.
Se crean las llaves en la ruta /etc/apache2 con los
siguientes comandos:

ErrorLog
/home/arthas/Documentos/Superintendencia/error.l
og

sudo openssl genrsa -des3 -out server.key


1024

Artculo de Revisin. 2014

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 sitesavailable y se reemplazan las siguientes lneas:


SSLOptions +FakeBasicAuth +ExportCertData
+StrictRequire
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key

Figura 9. Servidor con SSL habilitado

6. FIREWALL

Se reemplazan los directorios con los del


servidor con el Framework Django:

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.

<Directory
/home/arthas/Documentos/Superintendencia/Super
intendencia>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

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.

WSGIScriptAlias
/
/home/arthas/Documentos/Superintendencia/Super
intendencia/wsgi.py
WSGIDaemonProcess plataforma pythonpath=/home/arthas/Documentos/Superintendencia
WSGIProcessGroup plataforma

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:

Alias
/static
/home/arthas/Documentos/Superintendencia/Super
intendencia/static/
<Directory
/home/arthas/Documentos/Superintendencia/Super
intendencia/static/>
SetHandler None
Order allow,deny
Allow from all
</Directory>
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.

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:

Artculo de Revisin. 2014

Abrir una terminal en Linux

Ingresar como usuario root para obtener


privilegios con el siguiente comando (Ver
figura 10):

Figura 12. Habilitar Localhost


A nuestra IP la dejamos habilitados

iptables A INPUT s 195.65.34.234 j


ACCEPT

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 13. Habilitar Ip de nuestra maquina
El puerto 80 lo dejamos abierto, es un
servidor web, con el siguiente comando:

Figura 10. Usuario Root en Ubuntu

Para verificar si existe alguna regla aplicada por


defecto, se utiliza el siguiente comando:

iptables A INPUT p tcp dport 80 j


ACCEPT

Iptables L

Figura 11. Reglas por defecto Iptables

Figura 14. Puerto 80 abierto

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:

Con el comando inicial se verifica las reglas


aplicadas hasta el momento:

iptables - L

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 15. Verificacin de Reglas iptable

Artculo de Revisin. 2014


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

Figura 17. Verificacin de Reglas iptable

iptables A INPUT p tcp dport 3306 j DROP


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

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.

Figura 16. Denegar permisos a puertos por defecto

Se analiz la informacin recopilada,


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

Las reglas a continuacin permiten salir del


equipo
conexiones
nuevas
que
nosotros
solicitamos, conexiones establecidas y solo deja
ingresar conexiones establecidas.

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

iptables -A INPUT -m state --state


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

8 BIBLIOGRAFIA
[1]
[2]
[3]

De nuevo se verifica si quedaron aplicadas


las nuevas reglas, como se observa en la figura a
continuacin:

[4]

[5]

[6]

Django (2014, Abril 6). Meet Django [En lnea].


Disponible en: https://www.djangoproject.com
Digicert. (2014, Abril 6). Capa de conexin segura SSL
[En lnea].
Disponible en:
http://www.digicert.com/es/ssl.htm
Kioskea (2014, Abril 6). Criptografa - Secure Sockets
Layers (SSL) [En lnea].
Disponible en:
http://es.kioskea.net/contents/141-criptografia-securesockets-layers-ssl
(2014, Abril 6). Red Hat Enterprise Linux 4: Manual de
referencia [En lnea].
Disponible en:
http://www.gb.nrao.edu/pubcomputing/redhatELWS4/RHDOCS/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/RHDOCS/rhel-rg-es-4/ch-ssh.html