NoCatAuth - Construindo um firewall/gateway autenticado
Autor: Patrick Brandao Data: 30/08/2004
Introduo
Por Patrick Brandohttp://[email protected]
Aviso
Este tutorial pode ser distribudo, impresso e copiado de todas as formas possveis desde que se mantenha onome, a pgina web e o e-mail do autor no cabealho em local visvel, abaixo do ttulo e com a letra maior ouigual a usada no texto.
O programa NoCatAuth, criado pela nocat.net tem o propsito de evitar que pessoas no autorizadas tenhamacesso a internet em rede wireless. Para isso, esse programa em Perl captura o trfego na porta 80 e o desviapara um servidor HTTP, onde haver uma pgina solicitando usurio e senha, e opcionalmente, uma pginapara cadastro.
O NoCat tambm pode ser usado para simplesmente obrigar o usurio a ler uma pgina de splash antes denavegar, onde se pode colocar um termo de uso, um aviso ou simplesmente a pgina do provedor de acesso.
O NoCat pode ser configurado para rodar em trs modos:
OPEN - O trfego na porta 80 capturado e redirecionado para uma pgina de splash, aps a pginater sido carregada, o acesso internet liberado para o host.PASSIVE - O trfego dos usurios no autenticados para a porta 80 ser capturado, aps aautenticao, uma regra de firewall (iptables ou ipchains) permitir o acesso internet por meio deNAT.CAPTIVE - Semelhante ao PASSIVE, porm, ao se identificar com sucesso, o acesso internet serliberado, mas sem NAT.
O NoCatAuth funciona com duas instncias nos modos PASSIVE e CAPTIVE, uma, NoCat Gateway, e outraNoCat Auth, o Gateway redirecionar o trfego HTTP para a porta 80 do servidor Auth que aps autenticar ousurio, se conectar na porta 5280 do Gateway para dar permisso de passagem ao host. A conexo doservidor Auth na porta 5280 do Gateway criptografada com PGP para dar suporte a casos em que oservidor Auth tem uma conexo no confivel com o servidor Gateway.
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
1 de 10 22/4/2013 18:01
Tomei a iniciativa de escrever este tutorial ao ver que no encontrava, nem no Google, nem na prpria pginano NoCat, um tutorial que me ensinasse com clareza como se usa este programa.
Objetivo
Permitir acesso internet somente a usurios autenticados;A autenticao ter que ser feita em uma pgina web e a base de dados dever ser armazenada em umbanco de dados MySQL;Usar HTTPS na pgina de autenticao;Os hosts devem receber um endereo IP dinmico e invlido (no rotevel);Os usurios devem ter acesso por NAT, que ser feito no gateway;Os servidores NoCatAuth e NoCatGateway devero ser instalados no mesmo computador.
Tecnologias usadas e ambiente de laboratrio
Linux 2.4.26 (distribuio Slackware 10.0 - instalao FULL)Apache 2.0.50/mod_sslOpenSSL 0.9.7dGnuPG 1.2.2NocatAuth 0.82MySQL 4.0.20Perl 5.8.4DHCPD 1.3.0pl2BIND 9.2.3IPTABLES 1.2.10
Computador de laboratrio:
Processador: K6-II 500MHzMemria: 128 MBHD: 15GB ( Particionamento: 1 - 512 MB Swap, 2 - 14200 MB EXT3)Placas de rede: 2 - 3COM (eth0 192.168.150.21, eth1 192.168.10.1)Sistema operacional: Linux Slackware 10.0 (instalao FULL).
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
2 de 10 22/4/2013 18:01
CDROM 52x
Material mnimo necessrio:Computador com 2 interfaces de rede e drive cdrom/dvdrom, cd de instalao do Slackware 10.0, acesso ainternet no momento da instalao (downloads de pendncias).
Instalao dos programas
O Slackware 10.0 vem com o Apache 1.3, mas eu particularmente prefiro o Apache 2.0.50, por isso vouus-lo nesta soluo. Se voc tem experincia como Apache 1.3.x, fique a vontade em us-lo, seno:
Removendo Apache 1.3:
# removepkg apache-1.3.31-i486-2
O OpenSSL verso 0.9.7.d, GnuPG 1.2.4, MySQL 4.0.20 e Perl 5.8.4 (e modulo perl Digest::MD5) j veminstalados por padro (instalao FULL) no Slack 10.
Instalao do Apache 2.0.50
# cd /usr/local/src# wget http://apache.usp.br/httpd/httpd-2.0.50.tar.gz# tar xvzf httpd-2.0.50.tar.gz# cd httpd-2.0.50# ./configure --enable-ssl --enable-cgi --enable-suexec --enable-so# make# make install
O Apache ser instalado no diretrio /usr/local/apache2, os arquivos de configurao ficaro na pastausr/local/apache2/conf.
Mdulos Perl
Os mdulos usados pelo NoCat para esta soluo so:
Net::NetmaskDBIDBD::mysqlDigest::MD5
Se voc deseja usar outro tipo de autenticao, consulte a documentao do NoCat. Vrias tecnologias sosuportadas: IMAP, LDAP, SAMBA, PAM, RADIUS, etc.
A primeira vez que voc invocar o CPAN do Perl, ele solicitar algumas configuraes do sistema e dalocalidade, basta responder N que ele usar a configurao padro. Necessrio estar conectado.
# perl -MCPAN -e shell
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
3 de 10 22/4/2013 18:01
cpan> install Bundle::CPAN (ENTER para todas as perguntas)cpan> install DBIcpan> install DBD::mysqlcpan> install Digest::MD5cpan> install Net::Netmaskcpan> exit
Ateno, as linhas seguintes testam os mdulos e no podem retornar erros:
# perl -MDBI# perl -MDBD::mysql# perl -MDigest::MD5# perl -MNet::Netmask
Agora o Perl est completo para o NoCat.
Ativar MySQL
Vamos ativar o MySQL, pois no Slackware 10.0 ele se encontra instalado, porm alguns ajustes sonecessrios para coloc-lo rodando.
Como ns iremos usar o MySQL apenas para armazenar algumas centenas de logins, no convm reservarrecursos desnecessrios. Por isso ser usado o arquivo de configurao my-small.cnf (ver documentao doMySQL).
Em seguida criaremos um banco de dados para o NoCatAuth e um login de acesso para ele.
# cp /etc/my-small.cnf /etc/my.cnf# mysql_install_db# chown mysql.mysql /var/lib/mysql /var/run/mysql -R# chmod +x /etc/rc.d/rc.mysqld# /etc/rc.d/rc.mysqld start
Conferindo se o servidor MySQL esta de p:
# nmap localhost -p 3306Starting nmap 3.50 ( http://www.insercure.org/nmap/ ) at 2004-07-26 16:02 Interesting ports on localhost(127.0.0.1):PORT STATE SERVICE3306/tcp open mysqlNmap run completed - 1 IP address (1 host up) scanned in 0.331 seconds
Ajustando a senha do root mysql:
# mysqladmin password senhadorootmysqlaqui# mysql -u root -psenhadorootmysqlaquimysql> CREATE DATABASE nocat;mysql> GRANT ALL PRIVILEGES ON nocat.* TO nocat@localhost IDENTIFIED BY"senhadonocat" WITH GRANT OPTION;mysql> FLUSH PRIVILEGES;mysql> exit
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
4 de 10 22/4/2013 18:01
Substitua "senhadorootmysqlaqui" pela senha de root do MySQL, cuidado com esta senha. Faa o mesmocom "senhadonocat".
NoCAT
Todos os cdigos necessrios para construo do nosso servidor, tanto Auth como Gateway esto no mesmopacote:
# wget http://nocat.net/download/NoCatAuth/NoCatAuth-0.82.tar.gz# tar -xvzf NoCatAuth-0.82.tar.gz# cd NoCatAuth-0.82
NoCAT Gateway
# make PREFIX=/usr/local/nocat/gw gateway
NoCAT Auth
# make PREFIX=/usr/local/nocat/authserv authserv
Chave PGP
A chave de PGP deve ser a mesma para ambas as instncias para que elas se comuniquem, portanto, vamoscri-la no authserv e copi-la para o gateway. No defina uma senha para esta chave.
# make PREFIX=/usr/local/nocat/authserv pgpkey# cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/gw/pgp
Pronto, a instalao j est feita, agora vamos configurar tudo, comeando pelo Apache.
Configurao
Apache
Criando certificados:Como no temos dinheiro sobrando para comprar um certificado da VeriSign (pelo menos eu no), vamos sernossa prpria entidade certificadora. Crie um diretrio na pasta raz do Apache com o nome ssl:
# cd /usr/local/apache2# mkdir ssl# cd ssl
Vamos criar os certificados:
# openssl genrsa -out nocat.key 1024
Criar assinatura do certificado digital:
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
5 de 10 22/4/2013 18:01
# openssl req -new -key nocat.key -out nocat.csr
Certificado auto-assinado:
# openssl x509 -days 365 -req -in nocat.csr -signkey nocat.key -out nocat.crt
Configurando HTTPS e CGI-BIN
Edite o arquivo /usr/local/apache2/conf/httpd.conf e procure onde est a definio da pasta virtual cgi-bin:
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
AllowOverride None Options None Order allow,deny Allow from all
Altere para o exemplo abaixo:
ScriptAlias /cgi-bin/ /usr/local/nocat/authserv/cgi-bin/
SetEnv PERL5LIB /usr/local/nocat/suthserv/lib SetEnv NOCAT /usr/local/nocat/authserv/nocat.conf
Edite o arquivo /usr/local/apache2/conf/ssl.conf e preencha com o seguinte contedo:
SSLRandomSeed startup builtinSSLRandomSeed connect builtin
Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache SSLSessionCacheTimeout 300 SSLMutex file:/usr/local/apache2/logs/ssl_mutex DumentRoot /usr/local/apache2/htdocs ServerName authserv.dominio.com.br:443 ServerAdmin [email protected] ErrorLog /usr/local/apache2/logs/erros_log TransferLog /usr/local/apache2/logs/access_log SSLEngine on SSLCipherSuiteALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /usr/local/apache2/ssl/nocat.crt SSLCertificateKeyFile /usr/local/apache2/ssl/nocat.key
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
6 de 10 22/4/2013 18:01
SSLOptions +StdEnvVars SSLOptions +StdEnvVars SetEnvIf User-Agent .*MSIE.* \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog /usr/local/apache2/logs/ssl_request_log \ %t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \%r\ %b
NoCatAuth
V at o diretrio /usr/local/nocat/authserv, edite o arquivo nocat.conf e confira os parmetros:
Verbosity 10PGPKeyPath /usr/local/nocat/authserv/pgpHomePage http://www.dominio.com.br/DocumentRoot /usr/local/nocat/authserv/htdocs
# configuraao do banco de dados MySQL# reveja a ativao do mysql para conferir a senha que voc configurouDataSource DBIDatabase dbi:mysql:database=nocatDB_User nocatDB_Passwd senhadonocat
Os demais parmetros devem permanecer inalterados, a menos que voc saiba o que esta fazendo. Naativao do MySQL, ns apenas criamos o banco de dados nocat, agora vamos criar as tabelas. No pacote deinstalao do NoCat h uma pasta etc e dentro dela um arquivo chamado nocat.schema. Execute o seguintecomando para criar a estrutura de tabelas:
# mysql -u root -psenhadorootmysqlaqui nocat < /usr/local/src/NoCatAuth-0.82/etc/nocat.schema
MUITO IMPORTANTE:J vi varias perguntas na internet sobre um erro:
"INTERNAL SERVER ERROR"
Quando se solicita a autenticao. Como o nocat auth roda por meio de cgi, o usuario que acessa os arquivosem /USR/LOCAL/NOCAT/AUTHSERV/* o usuario do Apache. Para que esse erro desaparea, d odomnio desses arquivos para o Apache, execute:
# chown apacheuser.apachegroup /usr/local/nocat/authserv -R# chmod 700 /usr/local/nocat/authserv -R
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
7 de 10 22/4/2013 18:01
LEMBRANDO QUE: apacheuser e apachegroup dever ser substitudo pelo usurio e grupo que roda oApache.
NoCatGateway
Edite agora o arquivo nocat.conf do diretrio /usr/local/nocat/gw e confira os parmetros abaixo:
Verbosity 10GatewayName Domnio Gateway - Autenticao
# se o gateway tambm faz NAT, voc deve usar Passive, seno, use CaptiveGatewayMode PassiveLoginTimeout 86400HomePage http://www.dominio.com.br/DocumentRoot /usr/local/nocat/gw/htdocs
# Coloque no parmetro abaixo, os logins que tem livre acesso separados de espao# ou comentar essa linha para que todos autentiquemOwners [email protected] [email protected]
# ip da interface em contato com rede wireless ou rede localAuthServiceAddr 192.168.10.1AuthServiceURL https://$AuthServiceAddr/cgi-bin/loginLogoutURL https://$AuthServiceAddr/logout.html
# interface com ip rotevel na internetExternalDevice eth0
# interface com usurios (192.168.10.1)InternalDevice eth1
# apenas este DNS poder ser usado na rede dos usurios, caso# este parmetro no seja definido, sero liberados os endereos# dos servidores no arquivo /etc/resolv.conf# lembre-se de colocar os mesmos servidores na configurao do DHCPDDNSAddr 192.168.10.1 192.168.150.56
Os demais parmetros devem permanecer inalterados, a menos, claro, que voc saiba o que est fazendo.
Configurando DHCPD
Para que os usurios no tenham que trocar nas configuraes de rede dos seus computadores, vamosconfigurar o gateway para servir isso para eles. Edite o arquivo /etc/dhcpd.conf e preencha com as linhas:
ddns-update-style none;default-lease-time 600;max-lease-time 600000;option broadcast-address 192.168.10.255;
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
8 de 10 22/4/2013 18:01
# desativar dhcpd para a interface 192.168.150.21subnet 192.168.150.0 netmask 255.255.255.0 {}subnet 192.168.10.0 netmaks 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; option domain-name "dominiowireless.com.br"; option domain-name-servers 192.168.10.1;}# mais informacoes: # man dhcpd.conf
Opcional: Servidor DNS
recomendvel que voc tenha um servidor DNS no gateway, portando adiciona o NAMED na inicializaodo Slackware 10.0:
# chmod +x /etc/rc.d/rc.bind
Iniciando o servidor
Por motivos de segurana, j que o Apache 1.3 foi removido, desative o rc.httpd com o comando:
# chmod -x /etc/rc.d/rc.httpd
Crie o arquivo /etc/rc.d/rc.nocat com o seguinte contedo:
#!/bin/shNC=/usr/loca/nocat/gwexport PERL5LIB=$NC/lib:$PERL5LIBexport NOCAT=$NC/nocat.confcase "$1" in start) echo "Starting the NoCat gateway ..." $NC/bin/gateway ;; stop) echo "Stopping the NoCat gateway ..." killall gateway 2>/dev/null restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1esac
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
9 de 10 22/4/2013 18:01
E torne-o executvel:
# chmod +x /etc/rc.d/rc.nocat
Execute os comandos abaixo para rodar o DNS e o MySQL na inicializao do sistema:
# chmod +x /etc/rc.d/rc.bind# chmod +x /etc/rc.d/rc.mysqld
Vamos agora configurar o servidor para levantar os servios de forma organizada. Edite o arquivo /etc/rc.d/rc.local e certifique-se de que h as seguintes linhas (adicione as que faltarem):
# iniciando servidor DHCPDdhcpd
# iniciando apache com suporte a SSLIf [ -x /usr/local/apache2/bin/apachectl ]; then /usr/local/apache2/bin/apachectl startsslfi
# iniciando NoCatGateway/etc/rc.d/rc.nocat start
Agora, reinicie o servidor. Seu gateway autenticado est pronto!
http://www.vivaolinux.com.br/artigo/NoCatAuth-Construindo-um-firewall-gateway-autenticado
Voltar para o site
NoCatAuth - Construindo um firewall/gateway autenticado [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338
10 de 10 22/4/2013 18:01
Top Related