Ajudem a melhorar este script IPTABLES

Publicado por Cleyton Ferrari 12/05/2005

[ Hits: 17.736 ]

Homepage: www.w7br.com

Download alfire




Olá fiz este script e queria a contribuição de vc do vol para ver se nao tem nada de errado com ele!
Ajudem a melhora-lo

obrigado valew galera

  



Esconder código-fonte

#!/bin/bash
#
# Firewall
# Desenvolvido por Cleyton Ferrari
# Baseado nos seguintes scripts:
#            cnc-firewall <conectiva linux 10>
#            Script de Firewall para bloqueio por MACaddress <Carlos Eduardo Langoni>
#            Kurumin Firewall <Morimoto>
#            E demais conhecimentos adquirido nas dicas do www.vivaolinux.com.br
# Data: 12/05/2005
#
#---------------------------------#
# VARIAVEIS
#---------------------------------#
IPT=iptables         #Diretório/Destino do IPTABLES
PROGRAMA=/etc/alfire      #Diretório/Arquivo do Script
NET_IFACE=wlan0         #Interface da Rede Externa (Internet)
LAN_IFACE=eth0         #Interface da Rede Interna (LAN)
MACLIST=/etc/maclist      #Diretário/Arquivo onde fica armazenado as MAC,IP dos clientes da rede interna(LAN)
PORTAS="20,21,25,53,80,106,110,445" #Portas Para acesso a internet
FAIXA="192.168.1.0/24"      #Faixa do Nat
SSH="192.168.20.230"      #SSH, coloque aki o ip que você deseja liberar para o acesso externo ao SSH

#---------------------------------#
# EXEMPLO DO ARQUIVO MACLIST
#---------------------------------#
#a;00:40:F4:AA:2E:28;192.168.1.10;Planejamento_Interno
#b;00:E0:4D:EC:4A:96;192.168.1.11;Compras_e_Protocolo
#a;00:1E:5B:EE:16:3D;192.168.1.12;Tesouraria_PMAP
#Os parametros passados são 4: Opção; MAC; IP; Descrição
#<OPÇÃO> "a" é para liberar o acesso a internet e "b" é para bloquear o acesso
#<MAC> Endereço da MAC do cliente
#<IP>  Endereço do IP do cliente
#<Descrição> Uma Descrição do Cliente
#---------------------------------#
# SCRIPT PROPRIAMENTE DITO
#---------------------------------#
#Ativa o FORWARD (roteamento no kernel)
echo "1" > /proc/sys/net/ipv4/ip_forward

case $1 in
start)
#---------------------------------#
# INICIA O FIREWALL
#---------------------------------#
# Limpa as regras do iptables
for table in nat mangle filter; do
   $IPT -t $table -F
   $IPT -t $table -X
done

echo "..:: Lista de Clientes da Rede Interna <macfile> ::.."
#---------------------------------#
# ATIVA/BLOQUEA AS MAC/IP
#---------------------------------#
#Lê o arquivo maclist e joga seus valores nas respectivas variaveis
for i in `cat $MACLIST`; do
   STATUS=`echo $i | cut -d ';' -f 1`
   IPSOURCE=`echo $i | cut -d ';' -f 3`
   MACSOURCE=`echo $i | cut -d ';' -f 2`
   CLIENTE=`echo $i | cut -d ';' -f 4`

   #Se status = a então libera a conexão
   if [ $STATUS = "a" ]; then
      $IPT -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
      $IPT -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT
      $IPT -t nat -A POSTROUTING -s $IPSOURCE -o $NET_IFACE -j MASQUERADE
      $IPT -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
      $IPT -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j ACCEPT

      #Auxilia pra escrever os nomes do clientes no prompt
      echo "Liberado  - IP[$IPSOURCE] - Mac [$MACSOURCE] - [$CLIENTE]"

   # Se for = b então bloqueia a conexão (Bloqueia MAC/IP)
   else
      $IPT -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j DROP
      $IPT -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j DROP
      $IPT -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j DROP
      $IPT -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j DROP
      #Auxilia pra escrever os nomes do clientes no prompt
      echo "Bloqueado - IP[$IPSOURCE] - Mac [$MACSOURCE] - [$CLIENTE]"
   fi # Fim do IF
done #Fim do FOR

#---------------------------------#
# FIREWALL
#---------------------------------#
#Abre uma faixa para loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
$IPT -A INPUT -p tcp -s $FAIXA -j ACCEPT

#---------------------------------#
# ATIVA O SSH PARA O IP DESEJADO 
#---------------------------------#
$IPT -A INPUT -p tcp -s $SSH -j ACCEPT

#Abre uma faixa para internet
$IPT -A INPUT -m multiport -p tcp --port $PORTAS -j ACCEPT

#Bloqueia o SSH para todos os ip
$IPT -A INPUT -s 0/0 -p tcp --dport 22 -j DROP #FEcha demais SSH

#Bloqueio contra ping
#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

#Protege nosso servidor contra synflood
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
$IPT -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT

#Protege conta ICMP Broadcasting
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#Bloquea Traceroute
$IPT -A INPUT -p udp --dport 33435:33525 -j DROP

# Proteção contra trinoo@ 
$IPT -N TRINOO
$IPT -A TRINOO -j DROP
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 27444 -j TRINOO
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 27665 -j TRINOO
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 31335 -j TRINOO
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 34555 -j TRINOO
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 35555 -j TRINOO

# Proteção contra tronjans@
$IPT -N TROJAN
$IPT -A TROJAN -j DROP
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 666 -j TROJAN
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 666 -j TROJAN
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 4000 -j TROJAN
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 6000 -j TROJAN
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 6006 -j TROJAN
$IPT -A INPUT -p TCP -i $NET_IFACE --dport 16660 -j TROJAN

# Proteção contra worms@
$IPT -A FORWARD -p tcp --dport 135 -i $NET_IFACE -j REJECT

# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
$IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -N VALID_CHECK
$IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP

# Bloqueia programas P2P
#iMesh
$IPT -A FORWARD -d 216.35.208.0/24 -j REJECT
#BearShare
$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#ToadNode
$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#WinMX
$IPT -A FORWARD -d 209.61.186.0/24 -j REJECT
$IPT -A FORWARD -d 64.49.201.0/24 -j REJECT
#Napigator
$IPT -A FORWARD -d 209.25.178.0/24 -j REJECT
#Morpheus
$IPT -A FORWARD -d 206.142.53.0/24 -j REJECT
$IPT -A FORWARD -p TCP --dport 1214 -j REJECT
#KaZaA
$IPT -A FORWARD -d 213.248.112.0/24 -j REJECT
$IPT -A FORWARD -p TCP --dport 1214 -j REJECT
#Limewire
$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#Audiogalaxy
$IPT -A FORWARD -d 64.245.58.0/23 -j REJECT

#Ponto Chave do firewall! Se nao entrar em nenhuma regra acima rejeita tudo!
$IPT -A INPUT -p tcp --syn -j DROP

# lista todas as regras validas
echo ""
echo "..:: Listando todas as Regras do iptables Ativas ::.."
sleep 2
$IPT -L
$IPT -t nat -L
echo ""
echo "..:: Listagem completa ::.."
sleep 2

echo ""
echo "..:: FIREWALL ATIVADO ::.."
;;
stop)
#---------------------------------#
# PARA O FIREWALL
#---------------------------------#
# Limpa as regras do iptables
for table in nat mangle filter; do
   $IPT -t $table -F
   $IPT -t $table -X
done
#Aceita todos os pacotes
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
#Devolve a configuração padrão
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "..:: FIREWALL LIBERADO ::.."
;;
    *)
#---------------------------------#
# EXIBE AS OPÇÕES DE USO
#---------------------------------#
echo "Usage: alfire {start|stop}"
echo
exit 1
esac

Scripts recomendados

Backup com TAR em LOG usando FITA LTO/DLT com filtro de arquivos, SPLIT em FITAS, envio de LOG por E

rc.htblimit

Limpando cache do Squid (Baseado em Debian)

sync2test - sincroniza arquivos do subversion

Calculadora Shell com Yad


  

Comentários
[1] Comentário enviado por angkor em 08/06/2005 - 09:02h

Achei muito bom esse script pra mim funcionou bem, só queria saber o q tenho q fazer, quais regras tenho q adicionar ou alterar para liberar sómente as portas 25 e 110 para os hosts que eu que estão bloqueados. (Status b) ?

Atenciosamente
Angkor

[2] Comentário enviado por balani em 29/10/2006 - 00:36h

Caro Clayton seu script tá muito bom mais podemos melhor em muitos aspectos, por exemplo, vc não colocou nada que logue as tentativas de ataque em determinadas portas, isto é, colocar informação no /var/log/messages, então vamos as melhorias:
na seção TRIN00 vc pode adicionar a seguinte linha:
iptables -A TRIN00 -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trin00: "
na seção TROJAN vc pode colocar a seguinte linha:
iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "

#################################################
e para logar varias portas:
iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: "
iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: "
iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: "
iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: "
iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: identd: "
iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: "
iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: irc: "
iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "
iptables -A INPUT -p tcp --dport 3389 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: Terminal Services: "

#################################################
agora vamos a algumas proteções mais especificas:
as seguintes regras bloqueiam qualquer tentativa de conexão com o firewall atravez dessas portas, liberando apenas a sua rede interna, troque a variavel pela faixa de ip da sua rede.
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 3128 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 80 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 8080 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 1080 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 135 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 21 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 22 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 25 -j REJECT
iptables -A INPUT -p tcp -s ! ip_rede_interna/24 --dport 110 -j REJECT

##############################################
proteção contra port scanners:

iptables -N SCANNER
iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: port scanner: "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER

################################################
regras para liberar o outlook na rede interna:

iptables -A FORWARD -p TCP -s ip_rede_interna/24 --dport 25 -j ACCEPT
iptables -A FORWARD -p TCP -s ip_rede_interna/24 --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -j ACCEPT

depois eu te envio mais regras, qualquer duvida, meu msn e e-mail: adrianobalani@yahoo.com.br



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts