GustavoHenrique.net

  • About
  • Contact
  • RSS Feed
  • Twitter

 

18
Jan

Servidor Linux com Proxy e Controle de Banda – Parte 3

By gustavohenrique|Django, Linux|4 Comments

firewall
Finalmente consegui escrever a última parte do artigo. :D
Nas partes 1 e 2 mostrei como configurar um servidor Linux para firewall e controle de banda, usando scripts que fazem a leitura de um arquivo texto contendo as informações dos pontos de rede (IP, MAC, velocidade de download e upload…). Entretanto, acessar o servidor e ficar editando um arquivo texto, na minha opinião é muito chato, possui risco de falha humana e apenas quem tem acesso ao servidor pode fazer isso. Para resolver esse contratempo foi desenvolvido o Bandcontrol, um pequeno sistema web que armazena os dados dos pontos de rede em um banco de dados e gera o arquivo texto usado pelos shell scripts.
O sistema foi desenvolvido em Django, personalizando o Admin. Vou mostrar apenas como instalar e usar. O código fonte está disponível para consulta de programadores, curiosos e simpatizantes.

Instalação

Há diversas maneiras de se instalar um sistema feito em django. Vou mostrar como fazer o deploy usando Apache2 com o módulo mod_wsgi.
O ambiente completo usa Apache2, sqlite3, python-2.6 e Django-1.1.

root@localhost# apt-get install apache2 libapache2-mod-wsgi sqlite3 python-pysqlite2 python-django

O diretório web padrão do Apache no Ubuntu é o /var/www. Vamos manter assim. Faça o download do Bandcontrol pelo site github.com (no site, clique no botão Download Source), descompacte no /var/www, renomeie o diretório para bandcontrol e altere o dono/grupo de acordo com o usuário do apache.

root@localhost: /var/www# tar zxvf gustavohenrique-bandcontrol-XXXXXX.tar.gz
root@localhost: /var/www# mv gustavohenrique-bandcontrol-XXXXXX bandcontrol
root@localhost: /var/www# chown www-data.www-data -Rf bandcontrol

Os shell scripts usam o Iptables para firewall e TC para controle de banda. É necessário permissão de super usuário para executar esses comandos. Vamos configurar o sudo para que o usuário do Apache possa executar tais comandos como root.

root@localhost: /var/www# visudo

Adicione essas linhas no arquivo /etc/sudoers:

# No Ubuntu o iptables e o tc estao dentro do /sbin
Cmd_Alias BANDCONTROL = /sbin/iptables, /sbin/tc
www-data  ALL = (ALL) NOPASSWD: BANDCONTROL

Configuracao do Apache

Configure um virtualhost no apache criando o arquivo /etc/apache2/sites-enabled/bandcontrol contendo:

WSGIRestrictStdout Off
NameVirtualHost bandcontrol
 
        ServerAdmin webmaster@localhost
        LimitInternalRecursion 1000
        ServerName bandcontrol
 
 
                Options ExecCGI FollowSymLinks MultiViews
                AllowOverride FileInfo
                MultiviewsMatch Handlers
                Order deny,allow
                Allow from all
 
 
        ErrorLog /var/log/apache2/bandcontrol_error.log
        CustomLog /var/log/apache2/bandcontrol_access.log combined
 
        WSGIScriptAlias /     "/var/www/bandcontrol/config.wsgi"
 
        Alias /admin_media/ "/usr/lib/pymodules/python2.6/django/contrib/admin/media/"
        Alias /media/           "/var/www/bandcontrol/media/"

Edite o /etc/hosts e adicione:

127.0.0.2     bandcontrol

Configuracao do Bandcontrol

Altere o arquivo /var/www/bandcontrol/config.wsgi ajustando o diretório de instalação do Django. O padrão do Ubuntu é /usr/lib/pymodules/python2.6/django. Nesse arquivo também é configurado o diretório do bandcontrol:

import os, sys
PROJECT_ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, PROJECT_ROOT_PATH)
sys.path.append('/usr/lib/pymodules/python2.6/django/')
sys.path.append('/var/www')
os.environ['DJANGO_SETTINGS_MODULE']='settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
 
import bandcontrol.monitor
bandcontrol.monitor.start(interval=1.0)

No arquivo /var/www/bandcontrol/settings.py é possível fazer mais alterações.
Para definir as interfaces de rede e classe IP utilizada na rede, edite os arquivos /var/www/bandcontrol/scripts/CONFIG e /var/www/bandcontrol/scripts/firewall.


Por padrão é utilizado o banco de dados sqlite3. Você pode escolher usar o MySQL ou PostgreSQL editando o arquivo /var/www/bandcontrol/settings.py.
Para criar o BD, entre no diretório do bandcontrol e execute o comando manage.py syncdb. Digite yes para confirmar a criação do super usuário. Forneça um login, e-mail e senha:

root@localhost: /var/www/bandcontrol# python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table rede_plano
Creating table rede_pontorede
 
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'root'): gustavo
E-mail address: eu@gustavohenrique.net
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Installing index for admin.LogEntry model
Installing index for rede.PontoRede model

Reinicie o Apache para que as alterações tenham efeito.

Utilização

Abra o browser e acesse http://bandcontrol/.
Reparem que no campo de endereço da URL e os nomes de usuário utilizados não condizem com o que foi exemplificado nesse artigo. Bom... estou com preguiça para alterar as imagens, então vamos desconsiderar esse "bug".

Entre com o login e senha criados no passo anterior.
bandcontrol_tela0

Tela inicial do sistema.
bandcontrol_tela1

Clique em Planos e vamos criar alguns.
bandcontrol_tela2

Volte à tela inicial, clique em Pontos de Rede. No menu superior há opção para executar o firewall, parar o controle de banda e exibir os IPs conectados ao servidor. Sempre que fizer alguma alteração no sistema deve executar o firewall para ativar as mudanças.
bandcontrol_tela3

Em exibir IPs conectados, para adicionar um IP no sistema forneça uma descrição única, escolha o plano e clique em [+].
bandcontrol_tela4

O bandcontrol permite criar outros usuários com acesso ao sistema. Trabalha com permissões e grupos. Cortesia do Django \o/
bandcontrol_tela5

Conclusão

Bandcontrol foi uma daquelas coisas "pra ontem". Foi feito em uma tarde de terça-feira. Tal velocidade se deve ao framework Django.
Esse artigo foi escrito um pouco de cada vez, por isso há grandes chances de algo sair errado. Há muito material disponível na web sobre deploy de projetos em Django. Em caso de dúvidas estarei disposto a ajudar.

Bookmark It

Add to Del.icio.us Add to Diigo Add to Facebook Add to Google Bookmarks Add to LinkedIn Add to Mister Wong Add to Twitter Add to Yahoo My Web
Tagged as: Django, firewall, Linux, qos, shell script
Add your comment →

4 Comments

  1. Muito obrigado mesmo será de grande ajuda na faculdade

    By: Rodrigo Reply →
    January 31, 2010 at 2:28 pm
  2. como posso instala esse sistema no fedora 8,pois estou tentando e não estou conseguindo

    By: william Reply →
    September 4, 2010 at 9:16 pm
  3. Olá

    criei o arquivo /etc/apache2/sites-enabled/bandcontrol, com o conteudo indicado para configuracao do apache virtual host e o seguinte erro acontece apos reiniciar o apache2.

    We failed to correctly shutdown apache, so we’re now killing all running apache processes. This is almost certainly suboptimal, so please make sure your system is working as you’d expect now!
    … waiting Syntax error on line 10 of /etc/apache2/sites-enabled/bandcontrol:
    AllowOverride not allowed here

    Poderia me ajudar ? Obrigado

    By: Luis Reply →
    July 12, 2011 at 12:11 pm
  4. Olá Gustavo.
    Tentei colocar em funcionamento no slack, mas no log de erro aparece a mensagem:

    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] mod_wsgi (pid=10433): Target WSGI script ‘/var/www/htdocs/bandcontrol/config.wsgi’ cannot be loaded as Python module.
    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] mod_wsgi (pid=10433): Exception occurred processing WSGI script ‘/var/www/htdocs/bandcontrol/config.wsgi’.
    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] Traceback (most recent call last):
    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] File “/var/www/htdocs/bandcontrol/config.wsgi”, line 10, in
    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] import bandcontrol.monitor
    [Wed Jul 20 16:52:29 2011] [error] [client 10.2.40.6] ImportError: No module named bandcontrol.monitor

    Alguma ideia que seja esse erro?

    By: Luiz Almeida Reply →
    July 20, 2011 at 4:57 pm

Leave your comment below! Cancel Reply

View More Posts:
  • ←
  • →

Tags

admin Django extjs firewall grails jquery KingHost liberações Linux manual model modelform mod_wsgi moeda brasileira mudanças mysql nível de serviço oo PagSeguro pdf php PIL pisa problemas proxy python qa qos real relacionamento roteamento service desk shell script sites tdd tipsforlinux traducao ubicomp ubuntu urllib virtualhost Webservices wikipedia xsol __init__

Recent Posts

  • Configurando um servidor LDAP no CentOS 6.2
  • Introdução ao padrão MVC no Ext JS 4
  • Virtualização com KVM
  • Autenticação Facebook no Grails
  • Grails com Sqlite3 no Ubuntu 11.04
  • Deploy no tomcat usando django-jython
  • Deploy múltiplas versões do Django no Nginx com VirtualEnv
  • Comandos básicos do Git
  • Introdução ao Apache Wicket
  • Feliz 2011

Archives

Categories

My tweets

  • @tregismoreira Genesis 7200 com android 4 3 days ago
  • @marcomaciel blz! 1 week ago
  • @marcomaciel hack com qualquer linguagem em qualquer plataforma pra mim ta valendo! #soudev 1 week ago
  • Fui instalar o android 2.3 da lg e agora meu celular não liga. #ffuuu 1 week ago
  • Tentando gerar uma NFe e não consigo =/ #stacktrace Impressionante como todos os sites e apps do governo são ruins. 2 weeks ago
  • More updates...

Powered by the inLine Minimal WordPress Theme