iptables (firewall.sh)

firewall.sh

Categoria: Segurança

Software: iptables

[ Hits: 11.364 ]

Por: guilherme gustavo ribeiro de godoi


Neste arquivo mostro como criar um firewall utilizando iptables no debian lenny 5.0.

Descreverei como o firewall do meu servidor de internet esta configurado. Estarei mostrando como fazer NAT para alguns Servidores que não tiver IP' Fixos na sua rede.

Também abordarei politicas de segurança.

Crie o arquivo em /etc/init.d/firewall e de permissão para o arquivo ser executado ( chmod +x 777 /etc/init.d/firewall  ). Pronto!


#!/bin/bash
 iniciar(){

 #Configuraç do Firewall atravédo iptables
 #Autoria do Script
 #"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
 #"| Script de Firewall - IPTABLES"
 #"| Criado por: Guilherme Ribeiro"
 #"| Analista de Redes"
 #"| gustavo.ti@hotmail.com.br"
 #"| Uso: firewall start|stop|restart"
 #"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"

 #mensagem de inicializaçao
 echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
 echo "| Script de Firewall - IPTABLES"
 echo "| Criado por: Guilherme Ribeiro"
 echo "| Analista de Redes"
 echo "| gustavo.ti@hotmail.com.br"
 echo "| Uso: firewall start|stop|restart"
 echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
 echo
 echo "=========================================================|"
 echo "|:INICIANDO A CONFIGURAÃ DO FIREWALL NETFILTER ATRAVÃ|"
 echo "|:                    DO IPTABLES                       :|"
 echo "=========================================================|"

#iniciar(){

 # Móos #
 modprobe ip_tables
 modprobe ip_conntrack
 modprobe iptable_filter
 modprobe iptable_mangle
 modprobe iptable_nat
 modprobe ipt_LOG
 modprobe ipt_limit
 modprobe ipt_state
 modprobe ipt_REDIRECT
 modprobe ipt_owner
 modprobe ipt_REJECT
 modprobe ipt_MASQUERADE
 modprobe ip_conntrack_ftp
 modprobe ip_nat_ftp
#Limpa as regras #
 iptables -X
 iptables -Z
 iptables -F INPUT
 iptables -F OUTPUT
 iptables -F FORWARD
 iptables -F -t nat
 iptables -F -t mangle

# Politicas padrao #
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT

#Compartilhar conexãecho
echo 1 > /proc/sys/net/ipv4/ip_forward
echo ".ativando o redirecionamento no arquivo ip_forward."
echo ".ON .........................................................................................[OK]."

# Manter conexoes jah estabelecidas 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Aceita todo o trafego vindo do loopback e indo pro loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
#####################
### LOG DO FIREWALL ###
#######################

iptables -A INPUT -d 192.168.1.1 -p tcp --dport 227 -j LOG --log-level 6 --log-prefix "FIREWALL: SSH EXT 22"
iptables -A INPUT -d 192.168.1.1 -p tcp --dport 21 -j LOG --log-level 6 --log-prefix "FIREWALL: FTP EXT 21"
iptables -A INPUT -d 192.168.1.0/24 -p tcp --dport 227 -j LOG --log-level 6 --log-prefix "FIREWALL: SSH INT 22"
iptables -A INPUT -d 192.168.1.0/24 -p tcp --dport 21 -j LOG --log-level 6 --log-prefix "FIREWALL: FTP INT 21"


 # Redireconamento de portas
 # sql Para algum micro (192.168.0.102 = nome da pessoa)
 iptables -t nat -A PREROUTING -d 187.115.x.x -p tcp --dport 1433 -j DNAT --to 192.168.1.102:1433
 iptables -t nat -A PREROUTING -d 187.115.x.x -p tcp --dport 1434 -j DNAT --to 192.168.1.102:1434
 iptables -t nat -A PREROUTING -d 187.115.x.x -p udp --dport 1433 -j DNAT --to 192.168.1.102:1433
 iptables -t nat -A PREROUTING -d 187.115.x.x -p udp --dport 1434 -j DNAT --to 192.168.1.102:1434
 iptables -t nat -A PREROUTING -d 187.115.x.x -p tcp --dport 3080 -j DNAT --to 192.168.1.100:3080
 iptables -t nat -A PREROUTING -d 187.115.x.x -p tcp --dport 3389 -j DNAT --to 192.168.1.102:3389
 iptables -t nat -A PREROUTING -d 187.115.x.x -p udp --dport 3389 -j DNAT --to 192.168.1.102:3389
 iptables -t nat -A PREROUTING -d 187.115.x.x -p tcp --dport 80 -j DNAT --to 192.168.1.100:80
 echo .Redirecionamento Ativado
 echo .ON .........................................................................................[OK].

 ###############################
 #       TABELA Input          #
 ###############################
 ### Destino Externo ###

 # Liberando Porta 227 (SSH)
 iptables -A INPUT  -p tcp --dport 227 -j LOG --log-level 6 --log-prefix "FIREWALL: SSH EXT 227"
 iptables -A INPUT  -p tcp --dport 227 -j ACCEPT


iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT
 # Liberando Porta 21 (ftp)
 iptables -A INPUT  -p tcp --dport 21 -j LOG --log-level 6 --log-prefix "FIREWALL: FTP EXT 21"
 iptables -A INPUT  -p tcp --dport 21 -j ACCEPT

 ### Destino Interno ###

 # Liberando Porta 227 (SSH)
 iptables -A INPUT  -p tcp --dport 227 -j LOG --log-level 6 --log-prefix "FIREWALL: SSH INT 227"
 iptables -A INPUT  -p tcp --dport 227 -j ACCEPT

 # Liberando porta 3128 (Squid)
 iptables -A INPUT  -p tcp --dport 3128 -j ACCEPT
# Liberando Porta 80 (http)
 iptables -A INPUT  -p tcp --dport 80 -j LOG --log-level 6 --log-prefix "FIREWALL: HTTP INT 80"
 iptables -A INPUT  -p tcp --dport 80 -j ACCEPT

 # Liberando Porta 21 (ftp)
 iptables -A INPUT  -p tcp --dport 21 -j LOG --log-level 6 --log-prefix "FIREWALL: FTP INT 21"
 iptables -A INPUT  -p tcp --dport 21 -j ACCEPT

 # Liberando porta 3000 (NTOP)
 iptables -A INPUT  -p tcp --dport 3000 -j ACCEPT

 ###############################
 #       TABELA Forward        #
 ###############################
 ## MSN ###
 # Libera msn para o IP #
 # nome
 #iptables -A FORWARD -s 192.168.0.11 -p tcp --dport 1863 -j ACCEPT

 # Bloqueio de MSN #
# iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 5190 -j REJECT
# iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 1863 -j REJECT
# iptables -A FORWARD -s 192.168.0.0/24 -d loginnet.passport.com -j REJECT
# iptables -A FORWARD -s 198.168.0.0/24 -d loginnet.passport.com -j REJECT
# iptables -A FORWARD -s 198.168.0.0/24 -d messenger.hotmail.com -j REJECT
# iptables -A FORWARD -s 198.168.0.0/24 -d webmessenger.msn.com -j REJECT
# iptables -A FORWARD -p tcp --dport 1080 -j REJECT
 #iptables -A FORWARD -s 198.168.0.0/24 -p tcp --dport 1080 -j REJECT
 #iptables -A FORWARD -p tcp --dport 1863 -j REJECT
# iptables -A FORWARD -d 64.4.13.0/24 -j REJECT

 # Liberando Porta 227 (SSH)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 227 -j ACCEPT

 # Liberando Porta 22 (SSH)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
 # Liberando Porta 110 (pop-3)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT
 # Liberando Porta 995 (spop-3)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 995 -j ACCEPT

 # Liberando Porta 25 (smtp)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT
 #Liberando Porta 465 (smtp-s)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 465 -j ACCEPT

 # Liberando Porta 21 (ftp)
 iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 21 -j ACCEPT
 iptables -A FORWARD -s 192.168.1.0 -p udp --dport 20 -j ACCEPT

 # Liberando porta 53 (DNS)
 iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT
 iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 3128 -j ACCEPT

 # Regras forward para o funcionamento de redirecionamento de portas (NAT)
 iptables -A FORWARD -p tcp --dport 1433:1434 -j ACCEPT
 iptables -A FORWARD -p udp --dport 1433:1434 -j ACCEPT
 iptables -A FORWARD -p tcp --dport 3080 -j ACCEPT
 iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
 iptables -A FORWARD -p udp --dport 3389 -j ACCEPT
 iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
 ### regras de segurançfirewall ####

 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
 iptables -A INPUT -m state --state INVALID -j DROP
 ### Impedindo ataque Ping of Death no Firewall ####
 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

 ### Descarte de pacotes nao identificados ICMP ####
 iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP
 iptables -A INPUT -m state -p icmp --state INVALID -j DROP
 iptables -A FORWARD -m state -p icmp --state INVALID -j DROP

 ### Impedindo ataque de Denial Of Service Dos na rede e servidor ####
 iptables -I FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
 iptables -A INPUT -p tcp -m limit --limit 1/s -j ACCEPT
## Impedindo ataque Port Scanners na rede e no Firewall ####
 iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
 iptables -I INPUT -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO>'
 iptables -A INPUT -p udp --dport 33435:33525 -j DROP
 iptables -I FORWARD -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO NA REDE>'
 iptables -A FORWARD -p udp --dport 33435:33525 -j DROP

 ### Bloquear Back Orifice na rede ####
 iptables -I INPUT -p tcp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE DROPADO>'
 iptables -A INPUT -p tcp --dport 31337 -j DROP
 iptables -I INPUT -p udp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE UDP>'
 iptables -A INPUT -p udp --dport 31337 -j DROP
 iptables -I FORWARD -p tcp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE NA REDE>'
 iptables -A FORWARD -p tcp --dport 31337 -j DROP
 iptables -I FORWARD -p udp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE NA REDE UDP>'
 iptables -A FORWARD -p udp --dport 31337 -j DROP

 ### Bloquear NetBus na rede ####
 iptables -I INPUT -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS >'
 iptables -A INPUT -p tcp --dport 12345 -j DROP
 iptables -I INPUT -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
 iptables -A INPUT -p udp --dport 12345 -j DROP
 iptables -I FORWARD -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS NA REDE>'
 iptables -A FORWARD -p tcp --dport 12345 -j DROP
 iptables -I FORWARD -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
 iptables -A FORWARD -p udp --dport 12345 -j DROP

###Desabilita resposta para pingecho 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 ### Desabilita port scan ####
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

 ### Desabilita redirecionamento de ICMP ####
 for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
 echo 0 >$f
 done

 ### Protecao contra synflood ####
 echo "1" > /proc/sys/net/ipv4/tcp_syncookies

 ### Ativando protecao contra responses bogus ####
 echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
### Protecao contra worms ####
 iptables -I FORWARD -p tcp --dport 135 -j LOG --log-level info --log-prefix 'WORMS REDE>'
 iptables -A FORWARD -p tcp --dport 135 -j DROP
 iptables -I INPUT -p tcp --dport 135 -j LOG --log-level info --log-prefix 'WORMS >'
 iptables -A INPUT -p tcp --dport 135 -j DROP

 ### Bloqueando tracertroute ####
 iptables -A INPUT -p udp -s 0/0 -i eth0 --dport 33435:33525 -j REJECT

 ### Permite o redirecionamento seguro dos pacotes ####
 echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects

 ### IMPEDINDO O REDIRECIONAMENTO E UMA ROTA ####
 echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
 echo Seguranca Carregada e logs gerados ..... [ok]

 # Aceita Pacotes Estabilizados ####

 echo Estabilizando Pacotes
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 echo Pacotes Estabilizado ..... [ok]

#echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 3128
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


 # Mascaramento de rede para acesso externo #
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 #Bloqueia todo o resto
 #iptables -A INPUT -p tcp -j LOG --log-level 6 --log-prefix "FIREWALL: GERAL "
 iptables -A INPUT -p tcp --syn -j DROP
 iptables -A INPUT -p tcp -j DROP
 iptables -A INPUT -p udp -j DROP
 echo "Regras de firewall e compartilhamento desativados"

}

 parar(){
 iptables -F
 iptables -t nat -F
 iptables -P INPUT ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD ACCEPT
 echo 0 > /proc/sys/net/ipv4/ip_forward
 echo "Regras de firewall e compartilhamento desativados"
 }
 case "$1" in
 "start") iniciar ;;
 "stop") parar ;;
 "restart") parar; iniciar ;;
 *) echo "Use os parâtros start ou stop"
 esac
  


Comentários
[1] Comentário enviado por augusto.jcs em 22/04/2015 - 10:08h

Ola!? Gostaria de sua ajuda se não for muito incomodo. Fiz uma firewall bem parecido com o seu mas, eu estou usando IPTABLES com NETFILTER. Esta tudo aparentemente correto, só que, quando eu reinicio o Servidor e ele comessa a carregar as informações da lista dos SITES BLOQUEADOS o IPTABLES da um erro e não sei o que é!!! Gostaria muito de sua ajuda para resolver esse problema. Sou iniciante ainda no Linux, sei que tenho muito a aprender e com a ajuda de vocês do VIVA chego la!!!

A distribuição que estou usando do Linux é o Ubunto Server 12.04 64x

O erro é esse:

Iptables v1.4.12: Host/Network `pornografia.com´ not found
Try `iptables -h´ or 'iptables --Help for more information.

Desde já agradeço!!! Segue o script do meu firewall:

#!/bin/sh
#Configuracao do Firewall atraves do iptables
#Autoria do Script
#"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
#"| Script de Firewall - IPTABLES"
#"| Uso: firewall start|stop|restart"
#"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"

#Declaracao de variaveis
PATH=/sbin:/bin:/usr/sbin:/usr/bin
IPTABLES="/sbin/iptables"
PROGRAMA="/etc/init.d/firewall"

#Caminho absoluto da lista dos IPs e MACs liberados
MACLIST="/etc/conffarewall/macsliberadosfirewall"

#Caminho absoluto da lista das portas liberadas e bloqueadas
PORTSLIB="/etc/conffarewall/portslib"
PORTSBLO="/etc/conffarewall/portsblo"

#Caminho absoluto da lista de sites negados e de redirecionamento
SITESNEGADOS=/etc/conffarewall/sitesnegados
REDILIST="/etc/conffarewall/listaderedirecionamento"

#Interfaces de rede local e internet
LAN=eth0
WAN=eth1
REDE="10.10.1.0/24"

#Os diversos modulos do iptables sao chamdos atraves do modprobe
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe ipt_multiport
modprobe iptable_mangle
modprobe ipt_tos
modprobe ipt_limit
modprobe ipt_mark
modprobe ipt_MARK

case "$1" in
start)

#Mensagem de inicializacao
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall - IPTABLES"
echo "| Uso: firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo
echo "=========================================================|"
echo "|:INICIANDO A CONFIGURACAO DO FIREWALL NETFILTER ATRAVES:|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"

$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -X

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

#Ativar o redirecionamento no arquivo ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "ativado o redirecionamento no arquivo ip_forward"
echo "ON .................................................[ OK ]"

#Habilitando o fluxo interno entre os processos
$IPTABLES -I INPUT -i lo -j ACCEPT
$IPTABLES -I OUTPUT -o lo -j ACCEPT
echo "ativado o fluxo interno entre os processos"
echo "ON .................................................[ OK ]"

#Liberar as portas principais do servidor
for i in `cat $PORTSLIB`; do
$IPTABLES -A INPUT -p tcp --dport $i -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport $i -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport $i -j ACCEPT
done
$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
$IPTABLES -I OUTPUT -p icmp -o $WAN -j ACCEPT
$IPTABLES -I INPUT -p icmp -j ACCEPT
echo "Ativado as portas abertas para estabelecer conexoes"
echo "Ativado a liberacao das portas principais do servidor $HOSTNAME"
echo "ON .................................................[ OK ]"

#Bloquear acesso de sites negados a rede interna
for i in `cat $SITESNEGADOS`; do
$IPTABLES -t filter -A FORWARD -s $REDE -d $i -j DROP
$IPTABLES -t filter -A FORWARD -s $i -d $REDE -j DROP
$IPTABLES -t filter -A INPUT -s $i -j DROP
$IPTABLES -t filter -A OUTPUT -d $i -j DROP
done
echo "Ativado o bloqueio de envio de pacotes com origem aos sites negados"
echo "ON .................................................[ OK ]"

#Bloqueio ping da morte
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
$IPTABLES -N PING-MORTE
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE
$IPTABLES -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A PING-MORTE -j DROP
echo "Ativado o bloqueio a tentativa de ataque do tipo ping da morte"
echo "ON .................................................[ OK ]"

#Bloquear ataque do tipo SYN-FLOOD
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
$IPTABLES -N syn-flood
$IPTABLES -A INPUT -i $WAN -p tcp --syn -j syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j DROP
echo "Ativado o bloqueio a tentativa de ataque do tipo SYN-FLOOD"
echo "ON .................................................[ OK ]"

#Bloqueio de ataque ssh de força bruta
$IPTABLES -N SSH-BRUT-FORCE
$IPTABLES -A INPUT -i $WAN -p tcp --dport 22 -j SSH-BRUT-FORCE
$IPTABLES -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A SSH-BRUT-FORCE -j DROP
echo "Ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"
echo "ON .................................................[ OK ]"

#Bloqueio de portas
for i in `cat $PORTSBLO`; do
$IPTABLES -A INPUT -p tcp -i $WAN --dport $i -j DROP
$IPTABLES -A INPUT -p udp -i $WAN --dport $i -j DROP
$IPTABLES -A FORWARD -p tcp --dport $i -j DROP
done

#Bloqueio Anti-Spoofings
$IPTABLES -A INPUT -s 10.0.0.0/8 -i $WAN -j DROP
$IPTABLES -A INPUT -s 127.0.0.0/8 -i $WAN -j DROP
$IPTABLES -A INPUT -s 172.16.0.0/12 -i $WAN -j DROP
$IPTABLES -A INPUT -s 192.168.1.0/16 -i $WAN -j DROP
echo "Ativado o bloqueio de tentativa de ataque do tipo Anti-spoofings"
echo "ON .................................................[ OK ]"

#Bloqueio de scanners ocultos (Shealt Scan)
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPT
echo "Bloqueado scanners ocultos"
echo "ON .................................................[ OK ]"

#Amarrar IP ao MAC
for i in `cat $MACLIST`; do

#Aqui cada linha do maclist eh atribuida de cada vez
STATUS=`echo $i | cut -d ';' -f 1`

#O comando echo exibe o conteudo da variavel e o pipe "|" repassa a saida para outro comando,
#o cut por sua vez reparte cada linha em pedaços onde o delimitador (-d) eh o ';' no parametro
#-f imprime na tela conteudo da 1a coluna (status), a saida deste eh enviada para STATUS;

IPSOURCE=`echo $i | cut -d ';' -f 2`
MACSOURCE=`echo $i | cut -d ';' -f 3`
MARK=`echo $IPSOURCE | cut -d '.' -f 4`

#Neste caso o IPSOURCE e o MACSOURCE recebem as outras colunas da mesma linha, faço uma
#ressalva para o nome do computador que eu coloquei apenas para a organização do maclist,
#pois neste do script contara ate a 3a coluna.

#Aqui neste caso o comando if esta dentro do laco for
#Se status = a entao iptables libera a conexao atraves destes comandos construidos na tabela filter

if [ $STATUS = "a" ]; then
$IPTABLES -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
$IPTABLES -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT
$IPTABLES -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
$IPTABLES -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j ACCEPT
$IPTABLES -t mangle -A PREROUTING -s $IPSOURCE -j MARK --set-mark $MARK

#Se for = b entao bloqueia o MAC, ele so executa este comandos se STATUS nao for igual a "a".

else #Se nao
$IPTABLES -t filter -A FORWARD -m mac --mac-source $MACSOURCE -j DROP
$IPTABLES -t filter -A INPUT -m mac --mac-source $MACSOURCE -j DROP
$IPTABLES -t filter -A OUTPUT -m mac --mac-source $MACSOURCE -j DROP
fi #Fim do se
done #Fim do comando laco for
echo "Ativado a amarracao do IP ao MAC"
echo "ON .................................................[ OK ]"

#Proxy transparente
$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
echo "Proxy Transparente ativado"
echo "ON .................................................[ OK ]"

#Ativar o mascaramento
$IPTABLES -t nat -A POSTROUTING -o $WAN -j MASQUERADE

#Carrega controlador de banda
/etc/init.d/cbq start #Para Ubuntu
echo
echo "==========================================================|"
echo "::TERMINADA A CONFIGURACAO DO FIREWALL NETFILTER ATRAVES::|"
echo ":: DO IPTABLES ::|"
echo "==========================================================|"
echo "FIREWALL ATIVADO - SISTEMA PREPARADO"
echo "SCRIPT DE FIREWALL CRIADO POR :-) MARCELO MAGNO :-)"
;;

stop)
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -Z

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

/etc/init.d/cbq stop #Para Ubuntu
echo "FIREWALL DESCARREGADO - SISTEMA LIBERADO"
;;

restart)
$PROGRAMA stop
$PROGRAMA start
;;
*)
echo "Use: $N {start|stop|restart}" >&2
echo -e "\033[01;31mATENCAO";tput sgr0
echo "Voce nao colocou nenhum argumento ou algum conhecido, entao Por Padrao sera dado em 5 segundos um restart no firewall"
sleep 5
$PROGRAMA restart
exit 1
esac
exit 0


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts