
Finalmente consegui escrever a última parte do artigo. ![]()
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# chmod +w /etc/sudoers root@localhost: /var/www# vim /etc/sudoers
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
<VirtualHost bandcontrol>
ServerAdmin webmaster@localhost
LimitInternalRecursion 1000
ServerName bandcontrol
<Directory /var/www/bandcontrol>
Options ExecCGI FollowSymLinks MultiViews
AllowOverride FileInfo
MultiviewsMatch Handlers
Order deny,allow
Allow from all
</Directory>
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/"
</VirtualHost>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.

Clique em Planos e vamos criar alguns.

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.

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

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

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.















Posted in
Tags: 
Muito obrigado mesmo será de grande ajuda na faculdade