Projeto Integrador - 2009.2 - Dicas de GER

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Organização

<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:
Imagem descritiva
#!/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()



Voltar para Página principal do Projeto