#!/bin/bash

function inicia()
{
 	echo " Iniciando regras do Firewall Quesada....."
# Muda a politica da chain para drop. A politica padrão de uma # chain é ACCEPT

	iptables -P INPUT DROP
# Libera a interface de loopback
	iptables -A INPUT -i -lo -j ACCEPT 

# Gera um log no arquivo /var/log/kern.log que coincide com a regra
	iptables -A INPUT -p icmp  -j LOG --log-prefix "Pinga nele:" --log-level 7

# aceita Pacote icmp desde que os mesmos cheguem a cada 1 segundo -m = modulo
	iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT

# Proteção contra ataques do tipo syn-flood, aceita pacotes tcp com a flag syn ligada desde
# que venham a cada 1 segundo	
	iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Tentatva de host proib

	iptables -A INPUT -m mac --mac-source 00:11:D8:6B:BA:97  -p tcp --dport 22 -j LOG --log-prefix "Proibido acesso mac:" --log-level 7


# Bloqueia os hosts baseando-se no endereço fisico (mac Address)

	iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP

# Bloqueia uma rede

	iptables -A INPUT -s 192.168.0.0/24 -j DROP
 
# Bloqueia uma host tentando acessar a porta 23

	iptables -A INPUT -p tcp --dport 23 -s 172.16.37.230/32 -j DROP

# O modulo iprange nos permite passar ao kernel uma faixa de endereço IP

	iptables -A INPUT -m iprange --src-range 172.16.37.51-172.16.37.57 -j DROP


# o módulo multiport permite especificar diversas portas, separando-as por vírgula.
# na situação abaixo estamos liberando somente os serviçõs que estao em execução no host
# para verificar os serviços em execuçao utulizamos o comando nmap local host , para descobrir
# os udp utilizamos nmap -sU localhost

	iptables -A INPUT -p tcp -m multiport --dports 21,22,80,111,113,139,445 -j ACCEPT

	iptables -A INPUT -p udp -m multiport --dports 111,137,138 -j ACCEPT

# Libera a faixa das portas sem a utilização do módulo limit.As chamadas altas aquelas que são #utilizadas pelo sistema como portas de saída não é um bom procedimento pois teremos o trabalho #de bloquear uma a uma as portas dos serviços que trabalham nessas portas altas.
# utilize RELATED , ESTABILISHED
	
#	iptables -A INPUT -p tcp --dport 1024:6553 -j ACCEPT
#	iptables -A INPUT -p udp --dport 1024: -j ACCEPT

# Aceita pacotes que estão relacionados a uma conexão ou já estabilizados
	iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
	iptables -A INPUT -m state --state NEW,INVALID -j DROP

# Liberando a internet para os computadores da rede
# Habilita o repasse de pacotes
	echo 1 > /proc/sys/net/ipv4/ip_forward

# Nega qualquer tipo de comando
	iptables -P FORWARD DROP

# Bloqueia o repasse de pacotes para a maquina 172.16.37.199
	iptables -A FORWARD -s 172.16.37.199/32 -j DROP

# Bloqueia o ip 172.16.37.198 de acessar o dominio orkut.com

	iptables -A FORWARD -s 172.16.37.198/32 -d www.orkut.com -j DROP

# Nao permite acesso aos protocolos ftp e telnet para a rede 172.16.37.0/24
	
	iptables -A FORWARD -s 172.16.37.0/24 -p tcp -m multiport --dports 21,23  -j DROP


# Permite a rede 172.16.37.0/24 
	iptables -A FORWARD -s 172.16.37.0/24 -j ACCEPT


# Tabela NAT 

	iptables -t nat -A POSTROUTING -s  

# Redireciona os pacotes vindos com destino a minha máquina na porta 80, para a máquina XXX na #porta 80 da mesma
	iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 172.16.37.30:80

# Redireciona os pacotes com destino a minha maquina na porta 21 para a minha máquina na porta   # 60021
	iptables -t nat -A PREROUTING -p tcp --dport 21 -j REDIRECT --to 60021

# Tabela MANGLE 		
}


function para()
{
	echo "Parando regras de Firewall Quesada ... "
	iptables -P INPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -P OUTPUT ACCEPT
	iptables -t nat -F
	
# Limpa (flush) todas as regras de todas as chains.
	iptables -F	
}

function reinicia()
{
	para
	inicia
}	

case $1 in
	start)
		inicia
		;;
	stop)
		para
		;;
	restart)
		reinicia
		;;
	*)
		echo	"Uso: $0 {stop|start|restart}"
		;;
esac


# iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "Acesso Quesada na porta 80:"
