Mudanças entre as edições de "Projeto Integrador - 2009.1 - Dicas de GER"
(44 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
+ | ==Organização== | ||
* Usem [http://www.mindmeister.com mapas mentais] ou [http://www.graphviz.org grafos direcionados] (dígrafos) para ver/compreender a relação entre camadas e serviços de rede. Exemplo: | * Usem [http://www.mindmeister.com mapas mentais] ou [http://www.graphviz.org grafos direcionados] (dígrafos) para ver/compreender a relação entre camadas e serviços de rede. Exemplo: | ||
<graphviz> | <graphviz> | ||
digraph Serviços | digraph Serviços | ||
{ | { | ||
− | |||
splines = true | splines = true | ||
Linha 29: | Linha 29: | ||
RADIUS -> DHCP -> DNS -> HTTP | RADIUS -> DHCP -> DNS -> HTTP | ||
− | MySQL -> HTTP | + | MySQL -> HTTP -> MySQL |
− | DNS -> SMTP -> | + | DNS -> SMTP -> HTTP |
− | + | DNS -> IMAP -> HTTP | |
} | } | ||
</graphviz> | </graphviz> | ||
+ | ==Integração entre Aplicações== | ||
* Integrem as aplicações Web com programas ligados ao S.O. Por exemplo, uma página em PHP pode ser agendada para realizar operações de manipulação de arquivos. Exemplo: arquivo <tt>/etc/crontab</tt>: | * Integrem as aplicações Web com programas ligados ao S.O. Por exemplo, uma página em PHP pode ser agendada para realizar operações de manipulação de arquivos. Exemplo: arquivo <tt>/etc/crontab</tt>: | ||
... | ... | ||
00 */12 * * * root php -q /var/www/hotel/manipula_arquivo_de_usuarios.php | 00 */12 * * * root php -q /var/www/hotel/manipula_arquivo_de_usuarios.php | ||
+ | * Sugestão de integração: | ||
+ | ** A aplicação Web controla todas as operações sobre os outros serviços em rede. No banco de dados, ficam armazenadas informações estáticas (nome, endereço) e dinâmicas (entradas, saídas). Já na aplicação do RADIUS, ficam replicados estes usuários, a fim desta aplicação poder autenticá-los conforme o padrão IEEE 802.1x. A integração pode ser feita de forma automatizada, agendando as manipulações de usuários em horários predeterminados. A título de exemplo: todas as entradas e saídas de hospedagem ocorrem às 12h; portanto, é nesse horário específico que usuários ficam (des|h)abilitados a usar a rede com e sem fio. | ||
+ | ** A aplicação RADIUS pode utilizar bases remotas de usuários, como por exemplo LDAP ou bancos de dados (MySQL, por exemplo). Entretanto, pela dificuldade de implementação a curto prazo, é aconselhável o uso de arquivos em formato texto próprios do RADIUS ([http://wiki.freeradius.org/EAP/MD5_HOWTO#User_configuration_.28users.29 clientes] e [http://wiki.freeradius.org/Clients.conf usuários]). | ||
+ | <graphviz> | ||
+ | digraph Integração | ||
+ | { | ||
+ | HTTP -> Cron [label="Agendamento"] | ||
+ | Cron -> RADIUS [label="Manipulação de usuários"] | ||
+ | HTTP -> MySQL [label="Cadastro de Usuários"] | ||
+ | MySQL -> HTTP | ||
+ | HTTP -> RADIUS | ||
+ | } | ||
+ | </graphviz> | ||
+ | |||
+ | = Segurança via Filtro de Pacotes = | ||
+ | O reforço da segurança via filtro de pacotes é relativamente fácil e rápido de se implementar. Por isso, e pelo resultado aceitável em servidores expostos na rede, é recomendado o seu uso. Entretanto, nunca deve ser considerado como elemento único ou final da proteção. Combinações com IDS e outras aplicações proativas são quase uma obrigatoriedade hoje em dia :-) | ||
+ | |||
+ | Para o projeto, a configuração abaixo pode ser útil: | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Caso geral | ||
+ | # | ||
+ | # Bloqueia tudo | ||
+ | iptables -P INPUT DROP | ||
+ | # | ||
+ | # Apaga as linhas antigas | ||
+ | iptables -F | ||
+ | # | ||
+ | # Libera o mínimo: interface local (loopback) e conexões já estabelecidas | ||
+ | iptables -A INPUT -i lo -j ACCEPT | ||
+ | iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | # Libera aplicações TCP | ||
+ | # | ||
+ | # SSH | ||
+ | iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT | ||
+ | # | ||
+ | # HTTP | ||
+ | iptables -A INPUT -p tcp --dport 80 --syn -j ACCEPT | ||
+ | |||
+ | # Libera aplicações UDP | ||
+ | # | ||
+ | # DHCP | ||
+ | iptables -A INPUT -p udp --dport 67 -j ACCEPT | ||
+ | # | ||
+ | # Autenticação RADIUS (via proxy proxy.sj.ifsc.edu.br) | ||
+ | iptables -A INPUT -s proxy.sj.ifsc.edu.br -p udp --dport 1812 -j ACCEPT | ||
+ | |||
+ | = Preferência por Aplicações Compiladas = | ||
+ | ==FreeRADIUS== | ||
+ | ===Limpeza do Sistema=== | ||
+ | * Remoção de antiga(s) instalação(ões): | ||
+ | apt-get remove freeradius* | ||
+ | |||
+ | * Uso do diretório <tt>/tmp</tt> como "lixeira": | ||
+ | cd /etc | ||
+ | mv freeradius* /tmp | ||
+ | |||
+ | === Preparação para a Instalação=== | ||
+ | * Pacotes para a compilação com suporte a SSL/TLS: | ||
+ | ** <tt>gcc</tt> | ||
+ | ** <tt>g++</tt> | ||
+ | ** <tt>make</tt> | ||
+ | ** <tt>libssl-dev</tt> | ||
+ | |||
+ | ===Instalação=== | ||
+ | * ''Download'' do código-fonte da aplicação: | ||
+ | cd /usr/local/src | ||
+ | wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.7.tar.gz | ||
+ | |||
+ | * Descompactação do código: | ||
+ | tar xzf freeradius-server-2.1.7.tar.gz | ||
+ | |||
+ | * Compilação (usando o diretório <tt>/usr/local/freeradius-server-2.1.7</tt> como destino): | ||
+ | cd freeradius-server-2.1.7 | ||
+ | ./configure --prefix=/usr/local/freeradius-server-2.1.7 --exec-prefix=/usr/local/freeradius-server-2.1.7 | ||
+ | make | ||
+ | Obs.: em sistemas Debian, pode haver falha na compilação. Uma solução é adicionar o argumento <tt>--with-system-libtool</tt> ao comando <tt>./configure</tt> acima. | ||
+ | |||
+ | * Instalação dos arquivos e criação de ''links'' para uso via console: | ||
+ | make install | ||
+ | cd /usr/local | ||
+ | ln -s freeradius-server-2.1.7 freeradius | ||
+ | cd /usr/local/bin | ||
+ | ln -s ../freeradius/bin/radtest radtest | ||
+ | cd /usr/local/sbin | ||
+ | ln -s ../freeradius/sbin/radiusd radiusd | ||
+ | |||
+ | ===Configuração=== | ||
+ | {| | ||
+ | | [[Imagem:PI_GER_20091_esquerda.jpg|thumb|150px|Esquerda]] | ||
+ | | [[Imagem:PI_GER_20091_centro.jpg|thumb|150px|Centro]] | ||
+ | | [[Imagem:PI_GER_20091_direita.jpg|thumb|150px|Direita]] | ||
+ | |} | ||
+ | |||
+ | ===Execução=== | ||
+ | Como <tt>root</tt>, inicie o serviço a partir de um console (modo depuração ativado): | ||
+ | radiusd -X | ||
+ | e em outro console (qualquer usuário): | ||
+ | radtest | ||
+ | com os demais parâmetros para testar o serviço. | ||
+ | ====Início do Sistema==== | ||
+ | Como o serviço RADIUS é bastante crítico, é interessante monitorar o serviço para que o mesmo sempre esteja rodando. Isso pode ser feito via <tt>init</tt> ou via [http://www.daemon-tools.cc/ daemontools]. |
Edição atual tal como às 17h00min de 9 de outubro de 2009
Organização
- Usem mapas mentais ou grafos direcionados (dígrafos) para ver/compreender a relação entre camadas e serviços de rede. Exemplo:
<graphviz> digraph Serviços { splines = true
subgraph clusterEnlace { label = "Enlace" RADIUS }
subgraph clusterRede { label = "Rede" DHCP }
subgraph clusterAplicacao { label = "Aplicação" DNS HTTP MySQL SMTP IMAP }
RADIUS -> DHCP -> DNS -> HTTP MySQL -> HTTP -> MySQL DNS -> SMTP -> HTTP DNS -> IMAP -> HTTP } </graphviz>
Integração entre Aplicações
- Integrem as aplicações Web com programas ligados ao S.O. Por exemplo, uma página em PHP pode ser agendada para realizar operações de manipulação de arquivos. Exemplo: arquivo /etc/crontab:
... 00 */12 * * * root php -q /var/www/hotel/manipula_arquivo_de_usuarios.php
- Sugestão de integração:
- A aplicação Web controla todas as operações sobre os outros serviços em rede. No banco de dados, ficam armazenadas informações estáticas (nome, endereço) e dinâmicas (entradas, saídas). Já na aplicação do RADIUS, ficam replicados estes usuários, a fim desta aplicação poder autenticá-los conforme o padrão IEEE 802.1x. A integração pode ser feita de forma automatizada, agendando as manipulações de usuários em horários predeterminados. A título de exemplo: todas as entradas e saídas de hospedagem ocorrem às 12h; portanto, é nesse horário específico que usuários ficam (des|h)abilitados a usar a rede com e sem fio.
- A aplicação RADIUS pode utilizar bases remotas de usuários, como por exemplo LDAP ou bancos de dados (MySQL, por exemplo). Entretanto, pela dificuldade de implementação a curto prazo, é aconselhável o uso de arquivos em formato texto próprios do RADIUS (clientes e usuários).
<graphviz> digraph Integração { HTTP -> Cron [label="Agendamento"] Cron -> RADIUS [label="Manipulação de usuários"] HTTP -> MySQL [label="Cadastro de Usuários"] MySQL -> HTTP HTTP -> RADIUS } </graphviz>
Segurança via Filtro de Pacotes
O reforço da segurança via filtro de pacotes é relativamente fácil e rápido de se implementar. Por isso, e pelo resultado aceitável em servidores expostos na rede, é recomendado o seu uso. Entretanto, nunca deve ser considerado como elemento único ou final da proteção. Combinações com IDS e outras aplicações proativas são quase uma obrigatoriedade hoje em dia :-)
Para o projeto, a configuração abaixo pode ser útil:
#!/bin/bash # Caso geral # # Bloqueia tudo iptables -P INPUT DROP # # Apaga as linhas antigas iptables -F # # Libera o mínimo: interface local (loopback) e conexões já estabelecidas iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Libera aplicações TCP # # SSH iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT # # HTTP iptables -A INPUT -p tcp --dport 80 --syn -j ACCEPT # Libera aplicações UDP # # DHCP iptables -A INPUT -p udp --dport 67 -j ACCEPT # # Autenticação RADIUS (via proxy proxy.sj.ifsc.edu.br) iptables -A INPUT -s proxy.sj.ifsc.edu.br -p udp --dport 1812 -j ACCEPT
Preferência por Aplicações Compiladas
FreeRADIUS
Limpeza do Sistema
- Remoção de antiga(s) instalação(ões):
apt-get remove freeradius*
- Uso do diretório /tmp como "lixeira":
cd /etc mv freeradius* /tmp
Preparação para a Instalação
- Pacotes para a compilação com suporte a SSL/TLS:
- gcc
- g++
- make
- libssl-dev
Instalação
- Download do código-fonte da aplicação:
cd /usr/local/src wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.7.tar.gz
- Descompactação do código:
tar xzf freeradius-server-2.1.7.tar.gz
- Compilação (usando o diretório /usr/local/freeradius-server-2.1.7 como destino):
cd freeradius-server-2.1.7 ./configure --prefix=/usr/local/freeradius-server-2.1.7 --exec-prefix=/usr/local/freeradius-server-2.1.7 make
Obs.: em sistemas Debian, pode haver falha na compilação. Uma solução é adicionar o argumento --with-system-libtool ao comando ./configure acima.
- Instalação dos arquivos e criação de links para uso via console:
make install cd /usr/local ln -s freeradius-server-2.1.7 freeradius cd /usr/local/bin ln -s ../freeradius/bin/radtest radtest cd /usr/local/sbin ln -s ../freeradius/sbin/radiusd radiusd
Configuração
Execução
Como root, inicie o serviço a partir de um console (modo depuração ativado):
radiusd -X
e em outro console (qualquer usuário):
radtest
com os demais parâmetros para testar o serviço.
Início do Sistema
Como o serviço RADIUS é bastante crítico, é interessante monitorar o serviço para que o mesmo sempre esteja rodando. Isso pode ser feito via init ou via daemontools.