Ir para conteúdo
  • Cadastre-se

Script Básico para Firewall.


olokz

Posts Recomendados

Script básico para liberar porta no IPTABLES.

O mesmo dispõe de configuração para até quatro ranges de portas individuais!

o script aplica as regras a todas as interfaces, por padrão bloqueia portas fora do range (INPUT),  icmp, UDP DNS, e alguns Floods.

CUIDADO! A conexão do servidor será diretamente afetada, caso for editar o code do script, teste-o em um ambiente fora de produção.    

Download do Script (Básico): fw.sh

Como usar o Script (Básico):

Pré requisitos:

Acesso root ou equivalente, Wget, iptables e nano instalados.

Para verificar as versões do mesmos:

# iptables --version

# wget --version

# nano --version

Com tudo ok, basta upar o script para o servidor, ou cria-lo com o nano.

# nano fw.sh

# colar o code do script e apertar Ctrl+x  para sair, e pressionar Y quando for confirmar a saída, isso salvará o arquivo.

 Após devidamente upado para o servidor, o script precisa de permissão de execução, leitura e escrita, para entregar tais permissões basta utilizar o CHMOD.

# chmod 755 fw.sh

Lembrando caso mude de nome o arquivo, utilizar o nome salvo.

 

Configuração e Ativação do Script:

Após o script devidamente alocado no servidor, vamos efetuar os testes para funcionamento, antes de edita-lo e coloca-lo em produção.

Use o comando ./fw.sh status o mesmo deve mostar o seguinte resultado. (pode variar caso ja exista alguma regra no iptables.)

img1.thumb.PNG.ed9a9ecbf36c250f782abc269

Antes de configurar, você deve executa-lo uma unica vez com a config padrão em modo FULL, para verificar se seu iptables esta com todas os modulo ativos.

# ./fw.sh FULL

se tudo estiver ok ira mostrar uma tela parecida com a abaixo:

img2.thumb.PNG.b752926c80c7e2cd579472412

Após o teste efetuado com sucesso, desative-o ./fw.sh stop para executar a configuração do mesmo.

Para configura-lo, precisamos edita-lo com o NANO, a configuração é de fácil execução ja que basta apenas informar os ranges de portas a serem usadas.

nano fw.sh (deve ter uma saida parecida com a abaixo).

img3.thumb.PNG.c83f2c50c3a29251f9f1b43e0

Na parte de Variáveis você deve editar a referente a cada range de porta que deseja usar.

img4.thumb.PNG.ea3732059ad42653944269105

Não esqueça de LIMPAR o range que não for usar, basta adicionar 0 entre os aspas (Não deixe em branco, ou irá aparecer erros na execução.) caso contrário ele ira abrir as portas de demonstração.

img5.thumb.PNG.d8ba396e196d505901451e663

Agora é só salvar e usa-lo.

Para saber as opções disponíveis, basta executa-lo sem nenhuma opção, o mesmo te providenciará um menu.

img6.thumb.PNG.1c38330dbacd872b137c54ae0

Bom uso a todos! 

Code do script:

#!/bin/bash
# Script Feito por Luis Fernando - OLKHost.net
# Parte Deste script foi baseada em outro script, feito por Eudes - PLAYHARD-JOSELITO
# Divulgação Livre desde que seja divulgada a fonte. 
# Qualquer tipo de modificação deve ser notificada ao criador, pelo email: olokz@olkhost.net
# Para que a mesma seja disponibilizada publicamente na fonte. 
# Proibida a Comercialização do Mesmo.
# Sua ajuda e de extrema importancia, para a manutencao do script.
# Caso algum host de sua rede esteja alocado em nossa listagem, por favor entre em contato.#
######################################################
# Variaveis
######################################################
# IPTABLES.                                          
ipt="/sbin/iptables"                                 
######################################################
#Range de portas 1
R1="25:2000"
######################################################
#Range de portas 2
R2="25:2000"
######################################################
#Range de portas 3
R3="25:2000"
######################################################
#Range de portas 4
R4="25:2000"
######################################################

fw_R1(){

#Regras do Range 1

 $ipt -A INPUT -p tcp --destination-port $R1 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R1 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port $R1 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R1 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R1 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R1 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 
 echo "RANGE 1 ATIVADO COM SUCESSO. "
}

fw_R2(){

#Regras do Range 2

 $ipt -A INPUT -p tcp --destination-port $R2 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R2 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port $R2 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R2 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R2 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R2 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 
 echo "RANGE 2 ATIVADO COM SUCESSO. "

}

fw_R3(){

#Regras do Range 3

 $ipt -A INPUT -p tcp --destination-port $R3 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R3 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port $R3 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R3 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R3 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R3 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 
 echo "RANGE 3 ATIVADO COM SUCESSO. "
}

fw_R4(){

#Regras do Range 4

 $ipt -A INPUT -p tcp --destination-port $R4 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R4 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port $R4 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R4 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port $R4 -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name R4 --hashlimit 5/s --hashlimit-burst 5 -j ACCEPT
 
 echo "RANGE 4 ATIVADO COM SUCESSO. "
}

basic(){

#Regras Basicas.
 $ipt -F
 $ipt -X
 $ipt -P INPUT ACCEPT
 $ipt -P OUTPUT ACCEPT
 $ipt -A INPUT -i lo -j ACCEPT
 $ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port 20:22 -j ACCEPT
 $ipt -A INPUT -p udp --destination-port 20:22 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port 53 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port 953 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port 80 -j ACCEPT
 $ipt -A INPUT -p tcp --destination-port 443 -j ACCEPT 

  echo "REGRAS BASICAS ATIVADAS COM SUCESSO. "
}

kernel(){

#Config Kernel.

 echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all
 echo "1" > /proc/sys/net/ipv4/tcp_syncookies
 echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

 echo "REGRAS DE KERNEL ATIVADAS."
}

drop(){

#Regras de DROP.

 $ipt -A INPUT -m state --state INVALID -j DROP
 $ipt -A INPUT -p udp -m pkttype --pkt-type broadcast -j DROP
 $ipt -A INPUT -p icmp -f -j DROP
 $ipt -A OUTPUT -p icmp --icmp-type 3 -j DROP
 $ipt -A INPUT  -s 10.0.0.0/8 -j DROP
 $ipt -A INPUT  -s 169.254.0.0/16 -j DROP
 $ipt -A INPUT  -s 172.16.0.0/12 -j DROP
 $ipt -A INPUT  -s 224.0.0.0/4 -j DROP
 $ipt -A INPUT  -s 240.0.0.0/5 -j DROP
 $ipt -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
 $ipt -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
 $ipt -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
 $ipt -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
 $ipt -A INPUT -p udp --sport 0 -j DROP
 $ipt -A INPUT -j DROP
 
 echo "REGRAS DE DROP ATIVADAS COM SUCESSO. "
}


stop(){

echo "Desativando o Firewall."

# Limpando as regras de Firewall.
 $ipt -F
 $ipt -X
 $ipt -t mangle -F
 $ipt -t mangle -X
 $ipt -P INPUT ACCEPT
 $ipt -P OUTPUT ACCEPT

 

# Habilitando o Ping.
echo "0" >/proc/sys/net/ipv4/icmp_echo_ignore_all


echo "FIREWALL DESATIVADO COM SUCESSO. "

}

 

case "$1" in
 "R1")
        basic; fw_R1; kernel; drop;
  ;;
 
  "R2")
        basic; fw_R2; kernel; drop;
  ;;
 
  "R3")
        basic; fw_R3; kernel; drop;
  ;;
 
  "R4")
        basic; fw_R4; kernel; drop;
  ;;

 "stop")
        stop
  ;;

 "status")
    clear
    $ipt -L -n -v |more
  ;;

  "FULL")
         basic; fw_R1; fw_R2; fw_R3; fw_R4; kernel; drop;
  ;;


  *)
    echo "Opcao incorreta, opcoes disponiveis:"
    echo "R1 - ATIVA A CONFIGURACAO APENAS DO RANGE 1 "
    echo "R2 - ATIVA A CONFIGURACAO APENAS DO RANGE 2 "
    echo "R3 - ATIVA A CONFIGURACAO APENAS DO RANGE 3 "
    echo "R4 - ATIVA A CONFIGURACAO APENAS DO RANGE 4 "
    echo "FULL - ATIVA TODAS AS CONFIGURACOES DE RANGE. "
    echo "status - MOSTRA UMA TELA COM AS REGRAS NO IPTABLES. "
    echo "stop - DESATIVA E REMOVE AS REGRAS. "
    echo " "
    echo "VERSION 0.1a - ALPHA TESTE. by Olokz."    
esac

 

ChangeLog do Script:

----------------------------------------------

Versão 0.1a - * Inicio da Produção.

-----------------------------------------------

Redes Bloqueadas pelo Script.

Em Produção

Pessoas que ajudaram no desenvolvimento do Script.

Em Produção

Por Favor. Ajude na manutenção do script! - Esta usando ??? Deixe o seu FeedBack! - Gostou do Script?? Curta!

Editado por olokz
Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Infelizmente, seu conteúdo contém termos que não são permitimos. Edite seu conteúdo para remover as palavras destacadas abaixo.
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?