Exemplo de script de iptables usando variáveis

** Devido a um bug no editor do WordPress quando digito – – junto, o que é o correto no prompt ele agrega para — portanto em todos os posts pode ser necessário essa correção em algum momento. Outro problema são as aspas duplas e simples que quando copiadas não são reconhecidas no linux.

# !/bin/bash

 

echo “Ativando Regras de Firewall”

 

#########################
# Variaveis / Entidades #
#########################

 

iptables=”/sbin/iptables”

 

# Redes

 

# Maquinas

 

# Portos
FTP=”20,21″
FTP_DATA=”20″
FTP_ATIVO=”21″
SSH=”22″
SMTP=”25″
DNS=”53″
HTTP=”80″
SNMP=”161,162″
HTTPS=”443″
ORACLE=”1521″
RECEITA=”3456″
MSTSC=”4899″
HTTP_PROXY=”8080″
MON_ZABBIX=”10050,10051″
FWSSH=”65534″

 

echo Variaveis Carregadas! 166

 

################
# Habilitacoes #
################

 

# IP Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

 

# Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

 

# Loga Marcianos – end. impossiveis
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

 

# Disponibilizando maior quantidade de portos
echo 10000 65000 > /proc/sys/net/ipv4/ip_local_port_range

 

# Aumentando a memoria resevarda por conexao recebida/enviada
echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo “4096 87380 4194304” > /proc/sys/net/ipv4/tcp_rmem
echo “4096 16384 4194304” > /proc/sys/net/ipv4/tcp_wmem

 

# Tempo para finalizar uma conexao fechada pelo host
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

 

# Número de testes antes de finalizar a conexao
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

 

# Habilita a reciclagem de conexões em TIME_WAIT para novas conexoes consideradas seguras pelo protocolo
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

 

# Ignora Broadcast de ICMP
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

 

# Bloqueia tentativa de burlar a conexao em uma interface especifica
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

 

# Modulos FTP
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp

 

# Aumento de quantidade de requisicoes atendidas
echo 10000000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max

 

# Controle de Execucao
echo Habilitacoes concluidas! 222

 

############
# Flush all#
############

 

$iptables -F
$iptables -X
$iptables -Z
$iptables -F -t nat

 

# Controle de Execucao
echo Limpeza de regras executada! 234

 

####################
# Politicas Padrao #
####################

 

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

 

# Controle de Execucao
echo Politicas aplicadas! 245

 

#############################
# Conexoes ja Estabelecidas #
#############################

 

$iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
$iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

 

# Controle de Execucao
echo Manutencao de conexao aplicada! 255

 

##############
# IP´s Alias #
##############

 

ifconfig eth2:1 END_IP_ALIAS # Alias do Firewall

 

# Controle de Execucao
echo Alias Levantados! 264

 

############
# IP`s NAT #
############

 

ifconfig eth3:1 END_IP_NAT # Nat Administrativo // Rede

 

# Controle de Execucao
echo Enderecos NAT Levantados! 289

 

##########################
# Bloqueio IPs Suspeitos #
##########################

 

# Bloqueio Your Freedom
$iptables -A FORWARD -d 212.227.0.0/16 -j DROP
$iptables -A FORWARD -s 212.227.0.0/16 -j DROP
$iptables -A FORWARD -s 213.251.0.0/16 -j DROP
$iptables -A FORWARD -d 213.251.0.0/16 -j DROP
$iptables -A FORWARD -s 66.90.0.0/16 -j DROP
$iptables -A FORWARD -d 66.90.0.0/16 -j DROP
$iptables -A FORWARD -s 66.96.0.0/16 -j DROP
$iptables -A FORWARD -d 66.96.0.0/16 -j DROP
$iptables -A FORWARD -s 67.159.0.0/16 -j DROP
$iptables -A FORWARD -d 67.159.0.0/16 -j DROP
$iptables -A FORWARD -s 81.169.0.0/16 -j DROP
$iptables -A FORWARD -d 81.169.0.0/16 -j DROP
$iptables -A FORWARD -s 85.214.0.0/16 -j DROP
$iptables -A FORWARD -d 85.214.0.0/16 -j DROP

 

echo Your Freedom Bloqueado! 311

 

######################
# Liberacao Firewall #
######################

 

# Syn-Flood
#$iptables -N syn-flood
#$iptables -A INPUT -p tcp –syn -j syn-flood
#$iptables -A FORWARD -p tcp –syn -j syn-flood
#$iptables -A syn-flood -m limit –limit 35/s -j RETURN
#$iptables -A syn-flood -j DROP

 

# Log USERX – Um usuário suspeito na sua rede
$iptables -A FORWARD -s $USERX -j LOG –log-level debug –log-prefix “IPTABLES-FORWARD-USERX”

 

# Novos devem ser Syn
$iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

 

# Anti Xmas
$iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP

 

# Null mal formado
$iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

 

# Fragmentos
$iptables -A INPUT -f -j DROP
$iptables -A FORWARD -f -j DROP

 

# Pacotes Invalidos
$iptables -A INPUT -i eth0 -m state –state INVALID -j DROP
$iptables -A FORWARD -m state –state INVALID -j DROP

 

# MTU
$iptables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –set-mss 1460

 

# Controle de ICMP
$iptables -A INPUT -p icmp -s $LAN -m limit –limit 10/s -j ACCEPT
$iptables -A INPUT -p icmp -s $DMZ -m limit –limit 10/s -j ACCEPT
$iptables -A INPUT -p icmp -s $SERV -m limit –limit 10/s -j ACCEPT
$iptables -A FORWARD -p icmp -s $LAN -m limit –limit 10/s -j ACCEPT
$iptables -A FORWARD -p icmp -s $DMZ -m limit –limit 10/s -j ACCEPT
$iptables -A FORWARD -p icmp -s $SERV -m limit –limit 10/s -j ACCEPT

 

# Acesso SSH
$iptables -A INPUT -p tcp -s $MAQ1 –dport $FWSSH -j ACCEPT
$iptables -A INPUT -p tcp -s $MAQ2 –dport $FWSSH -j ACCEPT

 

# Monitoracao Zabbix
$iptables -A FORWARD -p tcp -m multiport –dport $MON_ZABBIX -s $ZABBIX -j ACCEPT

 

# Monitoracao Cacti
$iptables -A INPUT -p udp -m multiport –dport $SNMP -s $CACTI -j ACCEPT
$iptables -A FORWARD -p udp -m multiport –dport $SNMP -s $CACTI -j ACCEPT
$iptables -A FORWARD -p udp -m multiport –dport $SNMP -d $CACTI -j ACCEPT

 

# Consulta DNS
$iptables -A INPUT -p udp -d $DNS1 –dport $DNS -j ACCEPT
$iptables -A INPUT -p udp -s $DNS1 –sport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -d $DNS1 –dport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -s $DNS1 –sport $DNS -j ACCEPT
$iptables -A INPUT -p udp -d $DNS2 –dport $DNS -j ACCEPT
$iptables -A INPUT -p udp -s $DNS2 –sport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -d $DNS2 –dport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -s $DNS2 –sport $DNS -j ACCEPT
$iptables -A INPUT -p udp -d $CORREIO_INT_DNS3 –dport $DNS -j ACCEPT
$iptables -A INPUT -p udp -s $CORREIO_INT_DNS3 –sport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -d $CORREIO_INT_DNS3 –dport $DNS -j ACCEPT
$iptables -A FORWARD -p udp -s $CORREIO_INT_DNS3 –sport $DNS -j ACCEPT

 

# Controle de Execucao
echo Liberacoes do Firewall aplicadas! 382

 

#############
# Redirects #
#############

 

# Redirect Relay
$iptables -t nat -A PREROUTING -p tcp -d $RELAY –dport $SMTP -j DNAT –to-destination $NRELAY:$SMTP

 

# Redirect proxy
$iptables -t nat -A PREROUTING -p tcp -d $FW_SEDE_USU_Eth1 –dport $HTTP_PROXY -j DNAT –to-destination $PROXY:$HTTP_PROXY

 

# Controle de Execucao
echo Redirects implementados! 798

 

###################
# Sistema de Logs #
###################

 

# Dados Bloqueados
$iptables -A INPUT -j LOG –log-level debug –log-prefix “IPTABLES-INPUT-DROP: ”
$iptables -A FORWARD -j LOG –log-level debug –log-prefix “IPTABLES-FORWARD-DROP: ”

 

# Controle de Execucao
echo “Log do que e descartado implementado!” 809

 

####################
# Mensagens finais #
####################

 

sleep 1
echo “Regras de Firewall Ativadas”

 

#OBS: As rotas se encontram no arquivo /etc/rotas

 

############# FIM #############

Exemplo de script de restauração de backup

#!/bin/bash

 

# Variaveis
servidor=`hostname`
dirbase=”/home/gustavo/backup”

 

# Seleciona o diretorio raiz como corrente
cd /

 

# Descriptografa o arquivo
unzip -P senha -q /home/gustavo/.restaura/$servidor-*.zip

 

# Descompacta os arquivos
tar -xzf $dirbase/$servidor-*.tgz -p -s

 

# Envia o arquivo para o administrador
cat /root/msg/b | mutt -s “Restaurado o Backup do FWSede” usuario@sua_organização -c chefe@sua_organização -b usuario2@sua_organização

 

# Limpa os arquivos
rm $dirbase/* -Rf
rm /home/gustavo/.restaura/$servidor-*.zip

Exemplo de Script de Backup

#!/bin/bash

 

# Variaveis
servidor=`hostname`
data=`date +%d-%m-%Y-%Hh%M`
tgz=`ls /home/gustavo/`
dirbase=”/home/gustavo/backup”
dirbase2=”/home/gustavo/.restauraR”
diriptable=”/etc/iptables/”
dirinterfaces=”/etc/network/”
dirrotas=”/etc/rotas/”
dircacti=”/etc/snmp/”
dircacti2=”/etc/default/”
diretc=”/etc/”
dirpostfix=”/etc/postfix/”
diriptable2=”/etc/rsyslog.d/”
dirsshh=”/etc/ssh/”
regras=”/etc/iptables/regras.sh”
interfaces=”/etc/network/interfaces”
rotas=”/etc/rotas/rotas.sh”
cacti=”/etc/snmp/snmpd.conf”
cacti2=”/etc/default/snmpd”
syslog=”/etc/rsyslog.conf”
postfix=”/etc/postfix/main.cf”
iptable2=”/etc/rsyslog.d/iptables.conf”
sshh=”/etc/ssh/sshd_config”
lista=”/etc/network/interfaces /etc/rotas/ /etc/iptables/ /etc/snmp/ /etc/default/ /etc/rsyslog.conf /etc/rsyslog.d/ /etc/init.d/firewall /etc/ssh/ /root/msg /etc/postfix/”

 

# descompacta o arquivo para comparacao
cd $dirbase2
unzip -P C4%iop0Z# $dirbase2/.regras-*.zip
unzip -P C4%iop0Z# $dirbase2/.interfaces-*.zip
unzip -P C4%iop0Z# $dirbase2/.rotas-*.zip
unzip -P C4%iop0Z# $dirbase2/.cacti-*.zip
unzip -P C4%iop0Z# $dirbase2/.cacti2-*.zip
unzip -P C4%iop0Z# $dirbase2/.syslog-*.zip
unzip -P C4%iop0Z# $dirbase2/.iptables-*.zip
unzip -P C4%iop0Z# $dirbase2/.ssh-*.zip
rm .regras-*.zip .interfaces-*.zip .rotas-*.zip .cacti-*.zip .cacti2-*.zip .syslog-*.zip .iptables-*.zip .ssh-*.zip

 

# copia o arquivo atual para comparacao futura
cd $diriptable
zip -r9 -P senha $dirbase2/.regras-$data.zip regras.sh
cd $dirinterfaces
zip -r9 -P senha $dirbase2/.interfaces-$data.zip interfaces
cd $dirrotas
zip -r9 -P senha $dirbase2/.rotas-$data.zip rotas.sh
cd $dircacti
zip -r9 -P senha $dirbase2/.cacti-$data.zip snmpd.conf
cd $dircacti2
zip -r9 -P senha $dirbase2/.cacti2-$data.zip snmpd
cd $diretc
zip -r9 -P senha $dirbase2/.syslog-$data.zip rsyslog.conf
cd $diriptable2
zip -r9 -P senha $dirbase2/.iptables-$data.zip iptables.conf
cd $dirsshh
zip -r9 -P senha $dirbase2/.ssh-$data.zip sshd_config

 

# Apaga o arquivo anterior
rm -Rf $dirbase/*

 

# Compara os arquivos
echo “Diferencas no arquivo de regras:” > $dirbase/mudancas.log
diff $regras $dirbase2/regras.sh >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de interfaces:” >> $dirbase/mudancas.log
diff $interfaces $dirbase2/interfaces >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de rotas:” >> $dirbase/mudancas.log
diff $rotas $dirbase2/rotas.sh >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de configuracao do cacti (primeiro):” >> $dirbase/mudancas.log
diff $cacti $dirbase2/snmpd.conf >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de configuracao do cacti (segundo):” >> $dirbase/mudancas.log
diff $cacti2 $dirbase2/snmpd >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de syslog:” >> $dirbase/mudancas.log
diff $syslog $dirbase2/rsyslog.conf >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de iptables:” >> $dirbase/mudancas.log
diff $iptable2 $dirbase2/iptables.conf >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Diferencas no arquivo de ssh:” >> $dirbase/mudancas.log
diff $sshh $dirbase2/sshd_config >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log

 

# conta as linhas de arquivo
echo “Linhas do arquivo de regras anterior:” >> $dirbase/mudancas.log
cat $dirbase2/regras.sh | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de regras atual:” >> $dirbase/mudancas.log
cat $regras | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de interfaces anterior:” >> $dirbase/mudancas.log
cat $dirbase2/interfaces | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de interfaces atual:” >> $dirbase/mudancas.log
cat $interfaces | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de rotas anterior:” >> $dirbase/mudancas.log
cat $dirbase2/rotas.sh | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de rotas atual:” >> $dirbase/mudancas.log
cat $rotas | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de cacti (primeiro) anterior:” >> $dirbase/mudancas.log
cat $dirbase2/snmpd.conf | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de cacti (primeiro) atual:” >> $dirbase/mudancas.log
cat $cacti | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de cacti (segundo) anterior:” >> $dirbase/mudancas.log
cat $dirbase2/snmpd | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de cacti (segundo) atual:” >> $dirbase/mudancas.log
cat $cacti2 | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de syslog anterior:” >> $dirbase/mudancas.log
cat $dirbase2/rsyslog.conf | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de syslog atual:” >> $dirbase/mudancas.log
cat $syslog | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de iptables anterior:” >> $dirbase/mudancas.log
cat $dirbase2/iptables.conf | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de iptables atual:” >> $dirbase/mudancas.log
cat $iptable2 | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log
echo “Linhas do arquivo de ssh anterior:” >> $dirbase/mudancas.log
cat $dirbase2/sshd_config | wc -l >> $dirbase/mudancas.log
echo “Linhas do arquivo de ssh atual:” >> $dirbase/mudancas.log
cat $sshh | wc -l >> $dirbase/mudancas.log
echo ” ” >> $dirbase/mudancas.log

 

# Apaga os arquivos comparados
cd $dirbase2
rm *.sh *.conf interfaces sshd_config snmpd

 

# Compacta os arquivos de configuracao no diretorio /home/gustavo
tar -czf $dirbase/$servidor-$data.tgz $lista -p -s

 

# Criptografa o arquivo
zip -r9 -P senha $dirbase/$servidor-$data.zip $dirbase/*.tgz

 

# Envia o arquivo para o administrador
cat $dirbase/mudancas.log | mutt -s “Backup FWSede” -a $dirbase/*.zip usuario@sua_organização -c chefe@sua_organização -b usuario2@sua_organização
rm $dirbase/mudancas.log

 

# Chama a funcao limpa
/sbin/limpa.sh