Projeto Integrador - 2009.2 - Dicas de GER
Ir para navegação
Ir para pesquisar
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
Firewal
#!/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
Controle de Tráfego
- Sugestão do Prof. Emerson:
#!/bin/bash
# variaveis
TAXA=4000 # 4Mbps
UMPOR=`expr $TAXA / 100`
OURO=`expr $UMPOR \* 60` # 60% da taxa de transmissao
PRATA=`expr $UMPOR \* 25` # 25% da taxa de transmissao
BRONZE=`expr $UMPOR \* 15` # 15% da taxa de transmissao
DEV=eth1
# ----------- TC ------------------#
# eliminando as regras anteriores
tc qdisc del dev ${DEV} root 2>/dev/null
# adicionando a disciplina de fila na raiz
tc qdisc add dev ${DEV} root handle 1:0 htb default 12
# criando a classe pai para limitar a velocidade
tc class add dev ${DEV} parent 1:0 classid 1:1 htb rate ${TAXA}kbps ceil ${TAXA}kbps
# criando 3 classes (ouro, prata e bronze)
tc class add dev ${DEV} parent 1:1 classid 1:10 htb rate ${OURO}kbps ceil ${TAXA}kbps
tc class add dev ${DEV} parent 1:1 classid 1:11 htb rate ${PRATA}kbps ceil ${TAXA}kbps
tc class add dev ${DEV} parent 1:1 classid 1:12 htb rate ${BRONZE}kbps ceil ${TAXA}kbps
# adicionando qdisc para cada classe
tc qdisc add dev ${DEV} parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev ${DEV} parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev ${DEV} parent 1:12 handle 12: sfq perturb 10
# criando os filtros para direcionar os trafegos para cada classe de acordo com o IP
# de destino
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.1 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.2 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.3 flowid 1:12 # vai para bronze
Teste de Servidor DNS
#!/usr/bin/python
import os
def limpar(equipe, registro, servidor):
enter=''
print("Tecle ENTER...")
raw_input(enter)
os.system('clear')
print('@' + servidor + ' ' + registro + ' ' + equipe)
def main():
equipes = {}
prefixo = '200.135.37'
dominio = 'sj.ifsc.edu.br'
equipes.update({'iguana':'111'})
equipes.update({'mlwnetworks':'112'})
equipes.update({'technet':'113'})
equipes.update({'urano':'114'})
equipes.update({'epsilon':'115'})
for equipe in equipes:
for registro in ('SOA', 'NS', 'MX', 'A'):
limpar(equipe, registro, prefixo + '.65')
os.system('dig @' + prefixo + '.65 ' + registro +
' ' + equipe + '.' + dominio)
limpar(equipe, registro, prefixo + '.' + equipes[equipe])
os.system('dig @' + prefixo + '.' + equipes[equipe] +
' ' + registro + ' ' + equipe + '.' + dominio)
if __name__ == '__main__':
main()