Servidor Firewall com IPTables [Exemplo do coditiano]

Started by Reeves, 11 de August , 2008, 01:05:21 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Reeves

Olá amigos..

Neste tópico vou mostrar como um exemplo, como é o as regras de um firewall para uma empresa... visando ajudar você caso tenham esse desafio de ser Administrador de Redes um dia.
Caso tenham dúvidas ou sugestões fiquem a vontade para fazer perguntas inteligentes.   :)


Para melhor compreenção das regras, esteja em mente que:
* A Empresa possui 1 IP válido na internet, então o firewall redireciona para o webmail ao invés do webmail possuir um ip própio.. como acontese em muitos casos.
* O controle de acesso a internet é gerenciado pelo Servidor proxy Squid, rodando em modo transparente.
* Alguns dados foram omitidos para preservar a segurança da empresa que hoje possue regras parecidas em seu firewall.
* Esse conjunto de regras atende aos departamentos: Financeiro, Pessoal e Contabilidade.


Para melor visualização recomendo usar o Notepad++ com a opção de linguagem setada para Shell.
   ;)



#!/bin/sh

#Configuração de Váriaveis.
IPT=/usr/sbin/iptables
IF=eth0
LOG="iplog -i $IF -w -d -l /var/log/iplogs"

#printf "."

# Acionando o redirecionamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
# caso queira iguinorar respostas ao ping
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
fi
#printf "."

#Ativando syn cookies proteção no kernel
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]
then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
#printf "."

#Setando o kernel para dinamico IP mascarado
if [ -e /proc/sys/net/ipv4/ip_dynaddr ]
then
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
fi
#printf "."

#Limpando as regras e criando chains.
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
#printf "."

#Capturando o IP da internet e jogando na variavel $net
net=$1
net=`ifconfig $IF| grep inet| cut -f2 -d:| cut -f1 -d " "`
#printf "."

# Regras para o gerente
$IPT -A INPUT  -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A INPUT  -s 192.168.8.6 -j ACCEPT
$IPT -A OUTPUT -d 192.168.8.6 -j ACCEPT

#Setando por padrão o DROP.
$IPT -P OUTPUT ACCEPT
$IPT -A INPUT -i $IF -j DROP


#Liberando a Conectividade Social da Caixa
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.174.0/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.173.0/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.166.0/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.174.204/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.174.207/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.166.200/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d obsupgdp.caixa.gov.br -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.201.173.68/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.231.155.65/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.244.109.67/255.255.255.0 -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d cmt.caixa.gov.br -j ACCEPT


#Liberando cheqsat
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 208.254.3.0/24      -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 208.230.93.1/24     -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.212.239.132/24  -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d web2.cheqsat.com.br -j ACCEPT
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 200.212.239.132/24  -j ACCEPT

#Liberando Receita Federal
$IPT -t nat -A PREROUTING -s 192.168.0.0/16 -d 161.148.231.100/255.255.255.0 -j ACCEPT

#Liberando o site da Smart.NET
$IPT -t nat -A PREROUTING -d $net -p tcp -s 200.196.234.108 --dport 80 -j ACCEPT
$IPT -t nat -A PREROUTING -d $net -p udp -s 200.196.234.108 --dport 80 -j ACCEPT

#Liberando o SICOV da Caixa Economica Federal
$IPT -t nat -A PREROUTING -d $net -p tcp -s 200.244.109.67 --dport 2006 -j ACCEPT
$IPT -t nat -A PREROUTING -d $net -p udp -s 200.244.109.67 --dport 2006 -j ACCEPT


#Liberação do aplicativo da VIVO (Rede 19)

$IPT -A INPUT -i eth1 -p tcp -d 200.142.128.40 -j ACCEPT
$IPT -A INPUT -i eth1 -p udp -d 200.142.128.40 -j ACCEPT

$IPT -A INPUT -i eth1 -p tcp -d 200.142.128.40 --dport 264 -j ACCEPT
$IPT -A INPUT -i eth1 -p tcp -d 200.142.128.40 --dport 500 -j ACCEPT
$IPT -A INPUT -i eth1 -p tcp -d 200.142.128.40 --dport 18231 -j ACCEPT
$IPT -A INPUT -i eth1 -p tcp -d 200.142.128.40 --dport 18232 -j ACCEPT

$IPT -A INPUT -i eth1 -p udp -d 200.142.128.40 --dport 500 -j ACCEPT
$IPT -A INPUT -i eth1 -p udp -d 200.142.128.40 --dport 2746 -j ACCEPT
$IPT -A INPUT -i eth1 -p udp -d 200.142.128.40 --dport 18233 -j ACCEPT
$IPT -A INPUT -i eth1 -p udp -d 200.142.128.40 --dport 18234 -j ACCEPT

#REDIRECIONAMENTO DAS PORTAS TCP do Proxy Transparente(Squid)
$IPT -t nat -A PREROUTING -i eth1 -p tcp -d ! 200.142.128.40 --dport 264 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p tcp -d ! 200.142.128.40 --dport 500 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p tcp -d ! 200.142.128.40 --dport 18231 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p tcp -d ! 200.142.128.40 --dport 18232 \
-j REDIRECT --to-port 3128

#REDIRECIONAMENTO DAS PORTAS UDP do Proxy Transparente(Squid)
$IPT -t nat -A PREROUTING -i eth1 -p udp -d ! 200.142.128.40 --dport 500 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p udp -d ! 200.142.128.40 --dport 2746 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p udp -d ! 200.142.128.40 --dport 18233 \
-j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eth1 -p udp -d ! 200.142.128.40 --dport 18234 \
-j REDIRECT --to-port 3128
#printf "."

#Redirecionamento de IP (Servidor de E-mail)
$IPT -t nat -A PREROUTING -d $net -p tcp --dport 3000 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 3000 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 25 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 25 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p tcp --dport 110 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 110 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 143 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 143 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 465 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 465 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 993 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 993 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 995 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 995 -j DNAT --to-destination 192.168.7.80

$IPT -t nat -A PREROUTING -d $net -p tcp --dport 8009 -j DNAT --to-destination 192.168.7.80
$IPT -t nat -A PREROUTING -d $net -p udp --dport 8009 -j DNAT --to-destination 192.168.7.80



###################################################
#$@@@     Liberando meu acesso a rede
###################################################

#(via VNC)

$IPT -t nat -A PREROUTING -d $net -p tcp -s IP_MINHA_CASA --dport 5900 -j DNAT --to-destination 192.168.7.500
$IPT -t nat -A PRETOUTING -d $net -p udp -s IP_MINHA_CASA --dport 5900 -j DNAT --to-destination 192.168.7.500

#(via SSH)
        
$IPT -t nat -A PREROUTING -d $net -p tcp -s IP_MINHA_CASA --dport 22 -j DNAT --to-destination 192.168.7.95
$IPT -t nat -A PREROUTING -d $net -p udp -s IP_MINHA_CASA --dport 22 -j DNAT --to-destination 192.168.7.95
###################################################


#BLOQUEANDO TRANSFERENCIA DE ARQUIVOS PELO MSN
$IPT -I INPUT 1 -p tcp --dport 6891:6900 -j DROP
$IPT -I INPUT 1 -p udp --dport 6891:6900 -j DROP
#printf "."



#Criando Logs para a chain.
$IPT -N LDROP
$IPT -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "BackOrifice"
$IPT -A LDROP -p tcp -j LOG --log-level 3 --log-prefix "DROP"
$IPT -A LDROP -p udp -j LOG --log-level 3 --log-prefix "DROP"
#$IPT -A LDROP -p icmp -j LOG --log-level 3 --log-prefix "DROP"
$IPT -A LDROP -f -j LOG --log-level 3 --log-prefix "DROP"
$IPT -A LDROP -j DROP
$IPT -N LREJECT
$IPT -A LREJECT -p tcp -j LOG --log-level 3 --log-prefix "REJECT"
$IPT -A LREJECT -p udp -j LOG --log-level 3 --log-prefix "REJECT"
#$IPT -A LREJECT -p icmp -j LOG --log-level 3 --log-prefix "REJECT"
$IPT -A LREJECT -f -j LOG --log-level 3 --log-prefix "REJECT"
$IPT -A LREJECT -j REJECT
$IPT -N LACCEPT
$IPT -A LACCEPT -p tcp -j LOG --log-level 3 --log-prefix "ACCEPT"
$IPT -A LACCEPT -p udp -j LOG --log-level 3 --log-prefix "ACCEPT"
#$IPT -A LACCEPT -p icmp -j LOG --log-level 3 --log-prefix "ACCEPT"
$IPT -A LACCEPT -f -j LOG --log-level 3 --log-prefix "ACCEPT"
$IPT -A LACCEPT -j ACCEPT
$IPT -N TREJECT
$IPT -A TREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A TREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A TREJECT -j REJECT
$IPT -N LTREJECT
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -p tcp -j LOG --log-level 3 --log-prefix "REJECT "
$IPT -A LTREJECT -p udp -j LOG --log-level 3 --log-prefix "REJECT "
#$IPT -A LTREJECT -p icmp -j LOG --log-level 3 --log-prefix "REJECT "
$IPT -A LTREJECT -f -j LOG --log-level 3 --log-prefix "REJECT "
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
#$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -j REJECT
#printf "."

#Aceita trafico em lo (loopback) device
$IPT -I INPUT -i lo -j ACCEPT
$IPT -I OUTPUT -o lo -j ACCEPT
$IPT -I INPUT -i ! lo -s 127.0.0.0/255.0.0.0 -j DROP
#printf "."

#Aceita coneções por ack bit sets.
$IPT -A INPUT -p tcp ! --syn -i $IF -j ACCEPT
#printf "."

#Rejeita Pacotes Suspeitos ou Danificados
$IPT -A FORWARD -m unclean -j DROP
#printf "."

#Bloqueio a IP Spooling
$IPT -N syn-flood
#printf "."

#Bloqueio a Ping
$IPT -A FORWARD -p icmp --icmp-type echo-request -j DROP
printf "."


#Protege o IIS da Microsoft - Caso exista :)
$IPT -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
printf "."

#Bloqueio de Syn-flood via Limit
$IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#printf "."

#Bloqueio Scanners Ocultos
$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#printf "."


#Regra Anti-Spoofings
$IPT -A INPUT -j DROP -s 10.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 127.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 172.16.0.0/12 -i $IF
$IPT -A INPUT -j DROP -s 192.168.1.0/16 -i $IF
##printf "."

#Bloqueando Multicast
$IPT -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP
$IPT -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP
#printf "."
#

#Bloqueando Conexao ao samba pela internet
$IPT -A INPUT -p tcp -i $IF --dport 445 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 445 -j LDROP

$IPT -A INPUT -p tcp -i $IF --dport 139 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 139 -j LDROP

$IPT -A INPUT -p tcp -i $IF --dport 133 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 133 -j LDROP

$IPT -A INPUT -p tcp -i $IF --dport 137 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 137 -j LDROP

#printf "."

#Bloqueando Conexao ao Webmin pela internet
$IPT -A INPUT -p tcp -i $IF --dport 10000 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 10000 -j LDROP
#printf "."

#Bloqueando Conexao ao FTP pela internet
#$IPT -A INPUT -p tcp -i $IF --dport 21 -j LDROP
#$IPT -A INPUT -p udp -i $IF --dport 21 -j LDROP
#printf "."

#Bloqueando Conexao a porta 80
#$IPT -A INPUT -p tcp -i $IF --dport 80 -j LDROP
#$IPT -A INPUT -p udp -i $IF --dport 80 -j LDROP
#printf "."

#Bloqueando Conexao ao Squid pela internet
#$IPT -A INPUT -p tcp -i $IF --dport 3128 -j LDROP
#$IPT -A INPUT -p udp -i $IF --dport 3128 -j LDROP
#printf "."

#Bloqueando Conexao SSH pela internet
$IPT -A INPUT -p tcp -i $IF --dport 22 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 22 -j LDROP
#printf "."

#Bloqueando Back Orifice
$IPT -A INPUT -p tcp -i $IF --dport 31337 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
#printf "."
#
#Bloqueando NetBus
$IPT -A INPUT -p tcp -i $IF --dport 12345:12346 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 12345:12346 -j LDROP
#printf "."

#Bloqueando Trin00
$IPT -A INPUT -p tcp -i $IF --dport 1524 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 27665 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 27444 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31335 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
#printf "."

#Rejectando (N?o aceitos) ident requeridos.
$IPT -A INPUT -p tcp -i $IF --dport 113 -j TREJECT
$IPT -A INPUT -p udp -i $IF --dport 113 -j TREJECT
#printf "."
#
#Bloqueando acesso para o X Server.
$IPT -A INPUT -p tcp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 7100 -j LDROP
#printf "."

#Setando telnet, www, smtp, pop3 e FTP para Pouco Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 110 -j TOS --set-tos Minimize-Delay
#printf "."


$IPT -A INPUT -p icmp -i $IF -j LDROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -s 0/0 -i $IF -j ACCEPT
$IPT -A OUTPUT -p icmp -o $IF -j ACCEPT

#Bloqueando Tracertroute
$IPT -A INPUT -p udp -s 0/0 -i $IF --dport 33435:33525 -j DROP


logs /var/log/iplogs.n





  :-*
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

whit3_sh4rk

Cara, atualmente tenho aprendido bastante coisa sobre o 2003 Server, na verdade nunca havia nem lido sobre servidores, apenas entrava no ouvido e saía pelo outro.

Trabalhar com servidor no Linux deve ser uma experiência interessante.. ao mesmo tempo me pareceu um pouco complexo, talvez por trabalhar com a tela(visual) do ISA.
 
Quando sobrar um tempinho vou olhar os parâmetros que você utilizou para entender melhor o exemplo.

[]s

#phobia

Reeves, EXCELÊNTE post cara!

Gostei muito!
Muito útil... não tenho nem muitas palavras.

Enfim, não uso isso atualmente, mas sei que com certeza daqui a uns 2 anos vou usar! ^^
então.. já é de grande valia!

Agradeço por compartilhar com a galera ae!
Que sirva de exemplo!!!! ;)