Projeto Integrador - 2009.2 - Dicas de GER
Revisão de 17h57min de 3 de dezembro de 2009 por Etorresini (discussão | contribs)
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 clusterRede { label = "Rede" DHCP }
subgraph clusterAplicacao { label = "Aplicação" DNS HTTP MySQL SMTP IMAP }
DHCP -> DNS -> HTTP MySQL -> HTTP -> MySQL DNS -> SMTP -> HTTP DNS -> IMAP -> HTTP } </graphviz>
Integração entre Aplicações
À espera da necessidade dos alunos :-)
Scripts
- Exemplo de firewall:
#!/bin/bash
# Variáveis: MEXA aqui!
#
# Interfaces
EXTERNA_IFACE="eth0"
DMZ_IFACE="eth0:0"
LAN="eth0:1"
#
# Redes
EXTERNA_REDE="200.135.37.0/24"
DMZ_REDE="172.31.0.16/30"
LAN_REDE="172.31.0.0/28"
#
# Servidores
ROTEADOR="200.135.37.82"
DMZ_WEB="172.31.0.17"
#
# Portas
PORTAS_TCP_SERVIDOR="22"
PORTAS_UDP_SERVIDOR=""
PORTAS_TCP_WEB="25 80"
PORTAS_UDP_WEB="53"
limpa_regras()
{
echo "- Antigas regras de NAT."
iptables -t nat -F
echo "- Antigas regras de filtro de pacotes."
iptables -F
}
politica_padrao()
{
echo "- Política padrão para NAT."
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
echo "- Política padrão para filtro de pacotes."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
}
regras_basicas()
{
echo "- Regras básicas:"
echo " - Loopback."
iptables -A INPUT -i lo -j ACCEPT
echo " - Conexões ativas."
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
}
roteamento()
{
echo "- Roteamento."
sysctl -w net.ipv4.ip_forward=1 > /dev/null
}
nat()
{
echo "- NAT para as redes internas."
iptables -t nat -A POSTROUTING -o ${EXTERNA_IFACE} -j MASQUERADE
}
redir_portas()
{ echo "- De externa para o servidor Web:"
for porta in ${PORTAS_TCP_WEB}; do
echo " - Redireciona porta ${porta}/TCP."
iptables -t nat -A PREROUTING -d ${ROTEADOR} -p tcp \
--dport ${porta} -j DNAT --to ${DMZ_WEB}
done
for porta in ${PORTAS_UDP_WEB}; do
echo " - Redireciona porta ${porta}/UDP."
iptables -t nat -A PREROUTING -d ${ROTEADOR} -p udp \
--dport ${porta} -j DNAT --to ${DMZ_WEB}
done
}
filtro_local()
{
echo "- Filtro de pacotes:"
for porta in ${PORTAS_TCP_SERVIDOR}; do
echo " - Libera porta ${porta}/TCP."
iptables -A INPUT -p tcp --dport ${porta} -j ACCEPT
done
for porta in ${PORTAS_UDP_SERVIDOR}; do
echo " - Libera porta ${porta}/UDP."
iptables -A INPUT -p udp --dport ${porta} -j ACCEPT
done
echo " - Bloqueia o resto."
iptables -P INPUT DROP
}
filtro_roteamento()
{
echo "- Filtro de pacotes:"
echo " - Bloqueia da DMZ para a LAN interna."
iptables -A FORWARD -s ${DMZ_REDE} -d ${LAN_REDE} -j DROP
echo " - Libera o resto."
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
}
status()
{
echo "#####################"
echo "# Filtro de pacotes #"
echo "#####################"
iptables -L -n -v
echo
echo
echo "#######"
echo "# NAT #"
echo "#######"
iptables -t nat -L -n -v
}
case ${1} in
"start"|"restart")
clear
echo
echo "Removendo:"
limpa_regras
echo
echo "Aplicando:"
politica_padrao
echo
echo "Para o acesso direto ao servidor:"
regras_basicas
filtro_local
echo
echo "Para o roteamento:"
roteamento
nat
redir_portas
filtro_roteamento
echo
echo "Pronto!"
;;
"stop")
clear
echo
echo "Removendo:"
limpa_regras
echo
echo "Aplicando:"
politica_padrao
roteamento
nat
echo
echo "Pronto!"
;;
"status")
clear
status
;;
*)
echo "Use: ${0} (start|stop|restart|status)"
exit -1
;;
esac