Linux (rc.firewall)

Firewall com IPTables

Categoria: Segurança

Software: Linux

[ Hits: 7.759 ]

Por: José Wiltomar Duarte


Esse é um script de firewall com uso de iptables e mascaramento de conexão.


#!/bin/sh
# Script de Firewall 
# Wiltomar Duarte
#
# ALTERACOES:
#
#   DATA   RESPONSAVEL        MOTIVO
# 03/07/03   Wiltomar      Habilitacao de transparent proxy para as
#               portas 20, 21 e 80
# 03/07/03   Wiltomar      Mascarading da porta 1024 para a maquina
#               interna 192.168.1.100

VERSAO="v. 2.02"
ULTALT="Julho 2003" 

echo "Carregando Firewall $VERSAO - Ultima Atualizacao $ULTALT"

# Localizacao do utilitario iptables

IPTABLES=/sbin/iptables

# Definicao de interfaces, redes e enderecos

# Rede EXTERNA

EXTIF="eth0"
EXTIP="200.xxx.xxx.xxx"
EXTNET="200.xxx.xxx.xxx"

# Rede INTERNA

INTIF="eth1"
INTIP="192.168.1.1"
INTNET="192.168.1.0"

# Carga dos Modulos

rmmod ipchains
modprobe ip_tables
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_nat
modprobe ip_nat_ftp

# Habilitando IP forwarding

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# Reiniciando cadeias (zerando as politicas)

$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F

# Definicao do mascaramento

$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

$IPTABLES -A FORWARD -j LOG
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

# Redirecionando porta Advanced Protheus

$IPTABLES -t nat -A PREROUTING -t nat -p tcp -d $EXTIP --dport 3000 -j DNAT --to 192.168.1.100:1024

$IPTABLES -t nat -A PREROUTING -t nat -p tcp -d $EXTIP --dport 3000 -j LOG

# Transparent proxy

$IPTABLES -t nat -A PREROUTING -p tcp -s $INTNET/24 -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -p tcp -s $INTNET/24 -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-ports 3128

#$IPTABLES -t nat -A PREROUTING -p tcp -s $INTNET/16 -d 0.0.0.0/0 --dport 21 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -p tcp -s $INTNET/16 -d 0.0.0.0/0 --dport 20 -j REDIRECT --to-ports 3128

# Firewall de fato

# Protecao contra TCP syncookies

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

# Verificacao do source address

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo "1" > $f
done

# Desabilitando a passagem de pacotes ICMP REDIRECT

for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do   
    echo "0" > $f
done

# Desabilitando pacotes source routed

for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo "0" > $f
done

# Regra contra pacotres danificados ou suspeitos

$IPTABLES -A FORWARD -m unclean -j DROP

# Regra contra PING

$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -j DROP

# Regra contra Ping of Death

$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Regra contra ataques Syn-flood

$IPTABLES -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

# Regra contra Scanners Avancados ( NMAP )

$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/s -j ACCEPT

$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/s -j LOG

# Regra para padroes nao roteaveis

$IPTABLES -A INPUT -i $EXTIF -s 255.255.255.255/32 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 127.0.0.0/8 -j DROP

# Regra para enderecos privados (RFC1918)

$IPTABLES -A INPUT -i $EXTIF -s 10.0.0.0/8 -j DROP 
$IPTABLES -A INPUT -i $EXTIF -s 172.16.0.0/16 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 192.168.0.0/24 -j DROP

# Regra para enderecos reservados (multicast)

$IPTABLES -A INPUT -i $EXTIF -s 240.0.0.0/5 -j DROP

# Regra para proteger a rede interna de IP spoofing

$IPTABLES -A INPUT -i $EXTIF -s 192.168.0.0/16 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 192.168.0.0/16 -j LOG

# bloquear conexoes telnet externas

#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23 -j DROP
#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23 -j LOG

# Bloquear conexoes SSH externas (temporariamente desativado, vide abaixo)

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 22 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 22 -j LOG

# Bloquear conexoes FTP externas

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 21 -j DROP

# Bloquear conexoes internas e externas NetBIOS do Windows NT 4.0

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 138:139 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP

# Bloquear conexoes internas ao FTP (a passagem deve ser feita atraves do proxy)

#$IPTABLES -A INPUT -i $INTIF -s $INTNET/24 -d 0.0.0.0/0 -p tcp --dport 20:21 -j DROP
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET/24 -d 0.0.0.0/0 -p tcp --dport 20:21 -j DROP
#$IPTABLES -A INPUT -i $INTIF -s $INTNET/24 -d 0.0.0.0/0 -p udp --dport 20:21 -j DROP
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET/24 -d 0.0.0.0/0 -p udp --dport 20:21 -j DROP

# Bloquear conexoes internas e externas ao NetBIOS do Windows 2000

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 445 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 445 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 445 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 445 -j DROP

# Bloquear conexoes internas e externas de rlogon

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 512:514 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 512:514 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 512:514 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 512:514 -j DROP

# Bloquear conexoes para portmap/rpcbind

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 111 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 111 -j DROP

# Bloquear conexoes ao NFS (porta default)

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 2049 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 2049 -j DROP

# Bloquear conexoes ao lockd

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 4045 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 4045 -j DROP

# Bloquear conexoes ao X

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET/16 -p tcp --dport 6000:6255 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET/16 -d 0.0.0.0/0 -p tcp --dport 6000:6255 -j DROP
#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET2/16 -p tcp --dport 6000:6255 -j DROP
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET2/16 -d 0.0.0.0/0 -p tcp --dport 6000:6255 -j DROP

# Bloquear DNS queries para qualquer um, com excessao do servidor DNS remoto
# (Firewall)

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d ! $EXTIP/32 -p udp --dport 53 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s ! $EXTIP/32 -d 0.0.0.0/0 -p udp --dport 53 -j DROP

# Permitir DNS queries de saida do firewall

$IPTABLES -A OUTPUT -o $EXTIF -s $INTIP/32 -d 0.0.0.0/0 -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTIP/32 -p udp --sport 53 -j ACCEPT
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTIP2/32 -d 0.0.0.0/0 -p udp --dport 53 -j ACCEPT
#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTIP2/32 -p udp --sport 53 -j ACCEPT

# Bloquear acesso ao LDAP

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET/16 -p tcp --dport 389 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET/16 -p udp --dport 389 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET/16 -d 0.0.0.0/0 -p tcp --dport 389 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET/16 -d 0.0.0.0/0 -p udp --dport 389 -j DROP

#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET2/16 -p tcp --dport 389 -j DROP
#$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d $INTNET2/16 -p udp --dport 389 -j DROP
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET2/16 -d 0.0.0.0/0 -p tcp --dport 389 -j DROP
#$IPTABLES -A OUTPUT -o $EXTIF -s $INTNET2/16 -d 0.0.0.0/0 -p udp --dport 389 -j DROP

# Bloquear trafego POP3 e IMAP4 para todas as maquinas com excecao do NATI

#$IPTABLES -A INPUT -i $EXTIF -s ! $NATI/32 -d 0.0.0.0/0 -p tcp --dport 109:110 -j DROP
#$IPTABLES -A INPUT -i $EXTIF -s ! $NATI/32 -d 0.0.0.0/0 -p tcp --dport 143 -j DROP

# Bloquear servicos menores internos e externos

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 0:19 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 0:19 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 0:19 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 0:19 -j DROP

# Bloquear acessos internos e externos ao TFTP

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 69 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 69 -j DROP

# Bloquear requisitos de finger internos e externos

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 79 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 79 -j DROP

# Bloquear requisitos externos de NNTP

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 119 -j DROP

# Bloquear requisitos internos e externos ao NTP

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 123 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 123 -j DROP

# Bloquear requisitos internos e externos ao LPD

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 515 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 515 -j DROP

# Bloquear acesso ao syslog de dentro e de fora

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 514 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 514 -j DROP

# Bloquear requisitos de pooling SNMP internos e externos

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 161:162 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 161:162 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 161:162 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 161:162 -j DROP

# Bloquear mensagens de BGP route internas e externas

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 179 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 179 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 179 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 179 -j DROP

# Bloquear conexoes SOCKS internas e externas

$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 1080 -j DROP
$IPTABLES -A INPUT -i $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 1080 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 1080 -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 1080 -j DROP
  


Comentários
[1] Comentário enviado por ferdi em 06/10/2005 - 20:52h

# Rede EXTERNA

EXTIF="eth0"
EXTIP="200.xxx.xxx.xxx"
EXTNET="200.xxx.xxx.xxx"

# Rede INTERNA

INTIF="eth1"
INTIP="192.168.1.1"
INTNET="192.168.1.0"

-//-

Tenho que mudar algo acima?
Ele diz -> host/network '200.xxx.xxx.xxx' not found

[2] Comentário enviado por removido em 07/10/2005 - 08:18h

Ai você teria de usar o IP da sua rede exerta..

Ex:

host/network "200.218.118.24"

O X ele colocou como exemplo.. e isso cara só use caso você tenha uma rede externa... pois eis a questão!

Um firewall nunca é o ideal para a mesma pessoa !!!
Ele deu um ótimo exemplo do firewall que a empresa dele necessita... um bom firewall seria você mesmo fazer a construção de acordo com suas necessidades .. Assim como o wiltomar fez este.

Parabens Wiltonmar.


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts