nocatauth - construindo um firewall_gateway autenticado [artigo]

Upload: victorpepy

Post on 30-Oct-2015

84 views

Category:

Documents


0 download

TRANSCRIPT

  • 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