Iptables (rc.firewall)
FIrewall bem completo
Categoria: Segurança
Software: Iptables
[ Hits: 18.610 ]
Por: Gilson Paulo Schuck
Segue um firewall para servidores web, ftp, no-ip, ssh, squid, etc. Espero que ajude, estou a disposicao para ideias e melhorias.
#!/bin/sh # # cftk Bring up/down the packet filtering rules # # chkconfig: 345 08 92 # description: Bring up/down the packet filtering rules # description(pt_BR): Bring up/down the packet filtering rules # probe: true # # # Observações: # # O conntrack aplica o conceito de "ESTABLISHED" e "NEW" inclusive # para conexões UDP e ICMP, além de TCP. # # # # ################################################################## # DEFINIÇÃO DE VARIÁVEIS ################################################################# IPTABLES="/usr/sbin/iptables" MODPROBE="/sbin/modprobe" # Alterar os dados abaixo de acordo com a rede do cliente IF_LOC="lo" # Interface Loopback IF_EXT="eth0" # Interface da internet (externa) IF_INT="eth1" # Interface da intranet (interna) IP_INT="192.168.0.100" # IP da interface IF_INT IP_EXT="192.168.1.100" # IP da interface IF_EXT (Link) NET_LOC="127.0.0.0/24" # Rede da interface IF_LOC NET_INT="192.168.0.0/24" # Rede da interface IF_INT NET_EXT="192.168.1.0/24" # Rede da interface IF_EXT BRO_INT="192.168.0.255" # Broadcast da IF_INT BRO_EXT="192.168.1.255" # Broadcast da IF_EXT IP_CLIENTESSH="xxx.xxx.xxx.xxx" / Caso vc queira definir somente um ip que tera acesso ao ssh ################################################################# # CARGA DE MÓDULOS ################################################################# carrega_modulos() { $MODPROBE ip_tables $MODPROBE iptable_filter $MODPROBE ip_conntrack $MODPROBE ip_conntrack_ftp # $MODPROBE ip_conntrack_irc $MODPROBE ip_nat_ftp # $MODPROBE ip_nat_irc } ################################################################# # CARGA DE REGRAS ################################################################# cria_regras() { cria_regras_auxiliares cria_regras_PREROUTING cria_regras_INPUTOUTPUT cria_regras_INT2EXT cria_regras_EXT2INT cria_regras_FORWARD cria_regras_POSTROUTING } ################################################################# # FLUSH E POLÍTICAS DEFAULT ################################################################# destroi_regras() { # Define política default para chains defaults $IPTABLES -P INPUT DROP # política default para filter $IPTABLES -P FORWARD DROP # política default para filter $IPTABLES -P OUTPUT DROP # política default para filter $IPTABLES -F -t filter # flush nas regras de filter $IPTABLES -F -t nat # flush nas regras de nat $IPTABLES -F -t mangle # flush nas regras de mangle $IPTABLES -X -t filter # deleta chains de filter $IPTABLES -X -t nat # deleta chains de nat $IPTABLES -X -t mangle # deleta chains de mangle $IPTABLES -Z -t filter # zera contadores de filter $IPTABLES -Z -t nat # zera contadores de nat $IPTABLES -Z -t mangle # zera contadores de mangle } abre_regras() { # Define política default para chains defaults $IPTABLES -P INPUT ACCEPT # política default para filter $IPTABLES -P FORWARD ACCEPT # política default para filter $IPTABLES -P OUTPUT ACCEPT # política default para filter $IPTABLES -F -t filter # flush nas regras de filter $IPTABLES -F -t nat # flush nas regras de nat $IPTABLES -F -t mangle # flush nas regras de mangle $IPTABLES -X -t filter # deleta chains de filter $IPTABLES -X -t nat # deleta chains de nat $IPTABLES -X -t mangle # deleta chains de mangle $IPTABLES -Z -t filter # zera contadores de filter $IPTABLES -Z -t nat # zera contadores de nat $IPTABLES -Z -t mangle # zera contadores de mangle } ################################################################# # CHAIN DE PREROUTING ################################################################# cria_regras_PREROUTING() { # Melhora latência de ssh pra fora $IPTABLES -A PREROUTING -t mangle -p tcp --dport ssh -j TOS --set-tos Minimize-Delay # Aqui vc podera direcionar portas para outras maquinas na rede ou portas para outras portas $IPTABLES -A PREROUTING -t nat -p tcp -i $IF_EXT --dport 22 -j DNAT --to 192.168.1.100 / Direciona a porta 22 para a maquina 192.168.1.100 $IPTABLES -A PREROUTING -t nat -p tcp -i $IF_EXT --dport 8080 -j DNAT --to 192.168.1.100:80 / Direcina a porta 8080 para a maquina 192.168.100 na porta 80 $IPTABLES -A PREROUTING -t nat -p tcp -i $IF_EXT --dport 3306 -j DNAT --to 192.168.1.10 / Direciona a porta 3306 MySQL para a maquina 192.168.1.10 } ################################################################# # CHAIN DE POSTROUTING ################################################################# cria_regras_POSTROUTING() { # Faz o mascaramento da rede interna. $IPTABLES -A POSTROUTING -t nat -o $IF_EXT -j MASQUERADE } ################################################################# # CHAINS DE INPUT, OUTPUT ################################################################# cria_regras_INPUTOUTPUT() { #Libera tudo ateh a casa arrumar $IPTABLES -A INPUT -j ACCEPT $IPTABLES -A OUTPUT -j ACCEPT #LIbera interface local $IPTABLES -A INPUT -j ACCEPT -i $IF_LOC $IPTABLES -A OUTPUT -j ACCEPT -o $IF_LOC # Recusa pacotes invaálidos em primeiro lugar $IPTABLES -A INPUT -j END_INVALID -m state --state INVALID ### Serviços que rodam na máquina # Aceita ssh da maquina definida (manutenção) $IPTABLES -A INPUT -j ACCEPT -p tcp -s $IP_CLIENTESSH --dport ssh $IPTABLES -A OUTPUT -j ACCEPT -p tcp -d $IP_CLIENTESSH --sport ssh #Aceita que o firewall acesse a web $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 80 $IPTABLES -A OUTPUT -j ACCEPT -p tcp --dport 80 #Aceita squid $IPTABLES -A INPUT -j ACCEPT -s $NET_INT -p tcp --dport squid $IPTABLES -A OUTPUT -j ACCEPT -p tcp --sport squid #Aceita que o firewall faca ssh pra fora $IPTABLES -A INPUT -j ACCEPT -p tcp --sport ssh $IPTABLES -A OUTPUT -j ACCEPT -p tcp --dport ssh #Aceita conexao com o no-ip.com $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 8245 $IPTABLES -A OUTPUT -j ACCEPT -p tcp --dport 8245 #Aceita conexao com o MySQL $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 3306 $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 3306 #Aceita conexao com o Apache $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 80 $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 80 #Aceita conexao com o Proftpd $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 21 $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 21 #Aceita conexao com o ssh $IPTABLES -A INPUT -j ACCEPT -p tcp --sport 22 $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 22 # Testa por broadcasts e descarta (sem logar) $IPTABLES -A INPUT -j DROP -d $BRO_INT $IPTABLES -A INPUT -j DROP -d $BRO_EXT $IPTABLES -A INPUT -j DROP -d 255.255.255.255 $IPTABLES -A OUTPUT -j DROP -d $BRO_INT $IPTABLES -A OUTPUT -j DROP -d $BRO_EXT $IPTABLES -A OUTPUT -j DROP -d 255.255.255.255 # Aceita conexoes da rede interna $IPTABLES -A INPUT -j ACCEPT -s $NET_INT $IPTABLES -A OUTPUT -j ACCEPT -d $NET_INT # Aceita consultas a DNSs externos $IPTABLES -A INPUT -j ACCEPT -p udp --sport domain --dport 1024: $IPTABLES -A OUTPUT -j ACCEPT -p udp --sport 1024: --dport domain $IPTABLES -A INPUT -j ACCEPT -p udp --dport domain $IPTABLES -A OUTPUT -j ACCEPT -p udp --sport domain # Checa por trojans, para logar diferenciado $IPTABLES -A INPUT -j TROJAN_CHECK -m state --state NEW # Recusa e loga todo o resto $IPTABLES -A INPUT -j END_INPUT $IPTABLES -A OUTPUT -j END_OUTPUT } ################################################################# # CHAINS DE FORWARD ################################################################# cria_regras_FORWARD() { # Se for inválido, jogamos fora $IPTABLES -A FORWARD -j END_INVALID -m state --state INVALID # Se já está estabelecida, pode passar $IPTABLES -A FORWARD -j ACCEPT -m state --state ESTABLISHED # Se relacionada, pode passar (inclusive ftp & cia caem aqui) $IPTABLES -A FORWARD -j ACCEPT -m state --state RELATED ## Apenas conexões NEW daqui pra frente $IPTABLES -A FORWARD -p tcp --dport 1433 -j ACCEPT # Checa por trojans (para registrar no log se encontrar) $IPTABLES -A FORWARD -j TROJAN_CHECK $IPTABLES -A FORWARD -j ACCEPT -s 192.168.0.0/24 -d 192.168.1.0/24 $IPTABLES -A FORWARD -j ACCEPT -s 192.168.1.0/24 -d 192.168.0.0/24 $IPTABLES -A FORWARD -j INT2EXT -s $NET_INT -o $IF_EXT $IPTABLES -A FORWARD -j EXT2INT -i $IF_EXT -d $NET_INT # Se sobreviver, dropa e loga $IPTABLES -A FORWARD -j END_FORWARD } ################################################################# # CHAINS DIRECIONAIS ################################################################# ### INT2EXT cria_regras_INT2EXT() { $IPTABLES -N INT2EXT $IPTABLES -A INT2EXT -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 25 -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 110 -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 21 -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 20 -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 1299 -j ACCEPT $IPTABLES -A INT2EXT -p tcp --dport 1024:5000 -j ACCEPT # Bloqueia o que sobrou $IPTABLES -A INT2EXT -j END_INT2EXT } ### EXT2INT cria_regras_EXT2INT() { $IPTABLES -N EXT2INT $IPTABLES -A EXT2INT -j ACCEPT -d 192.168.1.100 # Nenhum accept, simplesmente nega tudo $IPTABLES -A EXT2INT -j END_EXT2INT } ################################################################# # CHAINS AUXILIARES ################################################################# cria_regras_auxiliares() { ### END_INPUT $IPTABLES -N END_INPUT #$IPTABLES -A END_INPUT -j LOG --log-prefix "FIREWALL: End_Input! " $IPTABLES -A END_INPUT -j DROP ### END_OUTPUT $IPTABLES -N END_OUTPUT $IPTABLES -A END_OUTPUT -j LOG --log-prefix "FIREWALL: End_Output! " $IPTABLES -A END_OUTPUT -j DROP ### END_FORWARD $IPTABLES -N END_FORWARD $IPTABLES -A END_FORWARD -j LOG --log-prefix "FIREWALL: End_Forward! " $IPTABLES -A END_FORWARD -j DROP ### END_INVALID $IPTABLES -N END_INVALID $IPTABLES -A END_INVALID -j LOG --log-prefix "FIREWALL: Invalid! " $IPTABLES -A END_INVALID -j DROP ### END_TROJAN $IPTABLES -N END_TROJAN $IPTABLES -A END_TROJAN -j LOG --log-prefix "FIREWALL: Trojan! " $IPTABLES -A END_TROJAN -j DROP ### END_INT2EXT $IPTABLES -N END_INT2EXT $IPTABLES -A END_INT2EXT -j LOG --log-prefix "FIREWALL: End_Int2Ext! " $IPTABLES -A END_INT2EXT -j DROP ### END_EXT2INT $IPTABLES -N END_EXT2INT $IPTABLES -A END_EXT2INT -j LOG --log-prefix "FIREWALL: End_Ext2Int! " $IPTABLES -A END_EXT2INT -j DROP ### TROJANS # Alguns trojans, os mais comuns # Nào é necessário checar por trojans se você adota a política de # tudo fechado, abrem-se as excessões. Mas, você pode querer verificar # mesmo assim, para poder registrar um log mais específico (nosso caso). $IPTABLES -N TROJAN_CHECK $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 555 # phAse zero $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 555 # phAse zero $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 1243 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 1243 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 3129 # Masters Paradise $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 3129 # Masters Paradise $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 6670 # DeepThroat $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 6670 # DeepThroat $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 6711 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 6711 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 6969 # GateCrasher $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 6969 # GateCrasher $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 12345 # NetBus $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 12345 # NetBus $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 21544 # GirlFriend $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 21544 # GirlFriend $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 23456 # EvilFtp $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 23456 # EvilFtp $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 27374 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 27374 # Sub-7, SubSeven $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 30100 # NetSphere $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 30100 # NetSphere $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 31789 # Hack'a'Tack $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 31789 # Hack'a'Tack $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 31337 # BackOrifice, and many others $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 31337 # BackOrifice, and many others $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p tcp --dport 50505 # Sockets de Troie $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p udp --dport 50505 # Sockets de Troie }
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta