Mudanças entre as edições de "Projeto Integrador - 2009.2 - Dicas de GER"
Ir para navegação
Ir para pesquisar
Linha 35: | Linha 35: | ||
=''Scripts''= | =''Scripts''= | ||
+ | <syntaxhighlight lang=bash> | ||
+ | #!/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 | ||
+ | </syntaxhighlight> | ||
{{Voltar|Projeto Integrador - 2009.2#Gerência de Redes|Página principal do Projeto}} | {{Voltar|Projeto Integrador - 2009.2#Gerência de Redes|Página principal do Projeto}} |
Edição das 17h57min de 3 de dezembro 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 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
#!/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