Julio_Jose
(usa Debian)
Enviado em 27/08/2007 - 12:16h
veja como é meu firewall
#!/bin/bash
#
# cftk Bring up/down the packet filtering rules
#
# chkconfig: 345 15 92
# description: Bring up/down the packet filtering rules
# description(pt_BR): Bring up/down the packet filtering rules
# probe: true
#
# This script is part of Conectiva Firewall Tool Kit package.
#
# It was originally created by
# Jefferson Luiz Brindarolli <jefferson@conectiva.com> and
# Fabio R. Schmidlin <frs@conectiva.com.br> for kernels 2.2 (ipchains)
# Modified to kernel 2.4 by André Ruiz <andre@conectiva.com.br> based
# on previous work from Harald Welte <laforge@conectiva.com.br>,
# Leonardo Marques de Souza <leo@conectiva.com.br> and
# Andreas Hasenack <andreas@conectiva.com.br>
#
# This piece of software is distributed under GPL. See
#
http://www.gpl.org for further information on this license.
#
. /etc/rc.d/init.d/functions
#
# Observações:
#
# O conntrack aplica o conceito de "ESTABLISHED" e "NEW" inclusive
# para conexões UDP e ICMP, além de TCP.
#
#
# FIXME: retirar as regras daqui, colocar em /etc/sysconfig/iptables
#
#################################################################
# 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_INT="eth1" # Interface da intranet (interna)
IP_INT="192.168.0.18" # IP da interface IF_INT
NET_LOC="127.0.0.0/24" # Rede da interface IF_LOC
NET_INT="192.168.0.0/16" # Rede da interface IF_INT
BRO_INT="192.168.255.255" # Broadcast da IF_INT
# Servidores
IP_WWW1="192.168.0.18" # Máquina da DMZ que serve WWW para o mundo
IP_SMTP="192.168.0.18" # Máquina da DMZ que serve SMTP para o mundo
IP_POP="192.168.0.18" # Máquina da DMZ que serve POP para o mundo
IP_FTP="192.168.0.18" # Máquina da DMZ que serve ftp para o mundo
IP_DNS="192.168.0.18" # Máquina da DMZ que serve auth domain para o mundo
IP_DNS1="192.168.0.18" # Máquina da INT que serve dns na a rede interna
IP_DB="192.168.0.18" # Máquina da DMZ que serve ftp para o mundo
IP_SSH="192.168.0.18" # Máquina da DMZ que serve ftp para o mundo
#################################################################
# 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
$MODPROBE ipt_REJECT
}
#################################################################
# 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
cria_regras_LOADBALANCING
cria_regras_PROXY
# cria_regras_orkut
}
#################################################################
# 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
#cria_regras_POSTROUTING
cria_regras_LOADBALANCING
cria_regras_PROXY
}
#################################################################
# 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
# Não deixa smtp sair com prioridade pra não matar o link
$IPTABLES -A PREROUTING -t mangle -p tcp --dport smtp -j TOS --set-tos Normal-Service
# Melhora Thoughput de http que sai
# $IPTABLES -A PREROUTING -t mangle -p tcp -s $NET_DMZ --sport http -j TOS --set-tos Maximize-Throughput
# Piora Thoughput de http que entra
# FIXME: Normal-Service?
# $IPTABLES -A PREROUTING -t mangle -p tcp --dport http -j TOS --set-tos Normal-Service
}
#################################################################
# CHAINS DE INPUT, OUTPUT
#################################################################
cria_regras_INPUTOUTPUT() {
# Recusa pacotes inválidos em primeiro lugar
$IPTABLES -A INPUT -j END_INVALID -m state --state INVALID
# Deixa loopback livre
$IPTABLES -A INPUT -j ACCEPT -i $IF_LOC
$IPTABLES -A OUTPUT -j ACCEPT -o $IF_LOC
# Deixa interna livre
$IPTABLES -A INPUT -j ACCEPT -i $IF_INT
$IPTABLES -A OUTPUT -j ACCEPT -o $IF_INT
# Deixa interna livre
$IPTABLES -A INPUT -j ACCEPT -i eth0
$IPTABLES -A OUTPUT -j ACCEPT -o eth0
# Verifica se o pacote sofreu spoof de IP
$IPTABLES -A INPUT -j SPOOF_CHECK
## Serviços que rodam na máquina
# Aceita ssh da rede interna (manutenção)
$IPTABLES -A INPUT -j ACCEPT -p tcp -s $NET_INT --dport ssh
$IPTABLES -A OUTPUT -j ACCEPT -p tcp -d $NET_INT --sport ssh
# Aceita forward obrigatório de servidores DNS internos
# O DNS da DMZ deve ser recursivo apenas para a própria DMZ (controle por ACLs)
$IPTABLES -A INPUT -j ACCEPT -p udp -s $IP_DNS --dport domain
$IPTABLES -A OUTPUT -j ACCEPT -p udp -d $IP_DNS --sport domain
$IPTABLES -A INPUT -j ACCEPT -p udp -s $IP_DNS1 --dport domain
$IPTABLES -A OUTPUT -j ACCEPT -p udp -d $IP_DNS1 --sport domain
# Aceita consultas a DNSs externos (existe maneira mais restritiva?)
$IPTABLES -A INPUT -j ACCEPT -p udp --sport domain --dport 1024:
$IPTABLES -A OUTPUT -j ACCEPT -p udp --sport 1024: --dport domain
# Aceita ICMP (todos) da rede interna apenas
$IPTABLES -A INPUT -j ACCEPT -p icmp -s $NET_INT
$IPTABLES -A OUTPUT -j ACCEPT -p icmp -d $NET_INT
# Aceita ICMP (todos) da rede interna apenas
$IPTABLES -A INPUT -j ACCEPT -p icmp -i $IF_INT
$IPTABLES -A OUTPUT -j ACCEPT -p icmp -o $IF_INT
# Dropa o resto dos ICMP sem logar (muita coisa)
#$IPTABLES -A INPUT -j DROP -p icmp
#$IPTABLES -A OUTPUT -j DROP -p icmp
# VPN entre este firewall e outro
#$IPTABLES -A INPUT -j ACCEPT -p 50 -s $IP_VPN
#$IPTABLES -A INPUT -j ACCEPT -p udp -s $IP_VPN --sport 500 --dport 500
#$IPTABLES -A OUTPUT -j ACCEPT -p 50 -d $IP_VPN
#$IPTABLES -A OUTPUT -j ACCEPT -p udp -d $IP_VPN --sport 500 --dport 500
# Checa por trojans, para logar diferenciado
$IPTABLES -A INPUT -j TROJAN_CHECK -m state --state NEW
# Testa por broadcasts e descarta (sem logar)
$IPTABLES -A INPUT -j DROP -d $BRO_INT
$IPTABLES -A INPUT -j DROP -d 255.255.255.255
$IPTABLES -A OUTPUT -j DROP -d $BRO_INT
$IPTABLES -A OUTPUT -j DROP -d 255.255.255.255
# 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
# Verifica se o pacote é spoof de IP
$IPTABLES -A FORWARD -j SPOOF_CHECK
# 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
# Checa por trojans (para registrar no log se encontrar)
$IPTABLES -A FORWARD -j TROJAN_CHECK
# Pula para chain específica
$IPTABLES -A FORWARD -j INT2EXT -s $NET_INT
$IPTABLES -A FORWARD -j EXT2INT -d $NET_INT
# Se sobreviver, dropa e loga
$IPTABLES -A FORWARD -j END_FORWARD
}
#################################################################
# CHAINS DIRECIONAIS
#################################################################
### INT2EXT
cria_regras_INT2EXT() {
$IPTABLES -N INT2EXT
# Restringe o que a rede interna pode acessar fora
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport smtp -d 200.234.205.142
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport pop3 -d 200.234.205.142
# $IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport smtp
# $IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport pop3
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 465
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport pop3s
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport telnet
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport ssh
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport ftp
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport ftp
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport http
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport https
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 53
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport 53
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 5432 # PostgreSQL
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 194 # IRC (ñ sei se é necess.)
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 4662 # P2P Donkey
$IPTABLES -A INT2EXT -j REJECT -p udp --dport 4672 # P2P Donkey
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 4661 # P2P Donkey
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 4242 # P2P Donkey
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 500 # teste
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 1214 # KaZaA
$IPTABLES -A INT2EXT -j REJECT -p udp --dport 1215 # KaZaA
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 5800 #VNC
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 2628 #KDICT
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 9898 #AIM
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 1863 #MSN
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 6891 #MSN voz
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 6900 #MSN dados
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 5000:5010 #YAHOO
$IPTABLES -A INT2EXT -j REJECT -p tcp --dport 5190 #ICQ
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 3389 #Terminal Server
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 1755 # MMS streaming
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport 1755 # MMS streaming
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 554 # radiouol
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport 554 # radiouol
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport 5005 # RTSP streaming
$IPTABLES -A INT2EXT -j ACCEPT -p tcp --dport 8000 # Radio Stream
$IPTABLES -A INT2EXT -j ACCEPT -p udp --dport 8000 # Radio Stream
# fixme: escolher os tipos realmente queremos e limitar flood
$IPTABLES -A INT2EXT -j ACCEPT -p icmp
# Bloqueia o que sobrou
$IPTABLES -A INT2EXT -j END_INT2EXT
}
### EXT2INT
cria_regras_EXT2INT() {
$IPTABLES -N EXT2INT
# Restringe o que a rede externa pode acessar na interna
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport smtp -d 200.234.205.142
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport pop3 -d 200.234.205.142
# $IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport smtp
# $IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport pop3
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport pop3s
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport telnet
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport ssh
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport ftp
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport ftp
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport http
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport https
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 53
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport 53
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 5432 # PostgreSQL
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 194 # IRC (ñ sei se é necess.)
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 4662 # P2P Donkey
$IPTABLES -A EXT2INT -j REJECT -p udp --dport 4672 # P2P Donkey
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 4661 # P2P Donkey
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 4242 # P2P Donkey
$IPTABLES -A EXT2INT -j REJECT -p udp --dport 4665 # ñ sei
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 500 # teste
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 1214 # KaZaA
$IPTABLES -A EXT2INT -j REJECT -p udp --dport 1215 # KaZaA
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 5800 #VNC
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 2628 #KDICT
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 9898 #AIM
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 1863 #MSN
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 6891 #MSN voz
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 6900 #MSN dados
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 5000:5010 #YAHOO
$IPTABLES -A EXT2INT -j REJECT -p tcp --dport 5190 #ICQ
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 3390 #ICQ
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 1755 # MMS streaming
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport 1755 # MMS streaming
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 554 # RTSP streaming
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport 554 # radiouol
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport 5005 # RTSP streaming
$IPTABLES -A EXT2INT -j ACCEPT -p tcp --dport 8000 # Radio Stream
$IPTABLES -A EXT2INT -j ACCEPT -p udp --dport 8000 # Radio Stream
# 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_SPOOF
$IPTABLES -N END_SPOOF
#$IPTABLES -A END_SPOOF -j LOG --log-prefix "FIREWALL: Spoof! "
$IPTABLES -A END_SPOOF -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
### SPOOFCHECK
# As redes internas são consideradas confiáveis, só é checado o
# path de roteamento. Para se proteger de spoof interno também
# seria necessário monitorar os MAC:IP na rede interna.
$IPTABLES -N SPOOF_CHECK
$IPTABLES -A SPOOF_CHECK -j END_SPOOF -s $NET_INT -i ! $IF_INT
$IPTABLES -A SPOOF_CHECK -j END_SPOOF -s ! $NET_INT -i $IF_INT
### 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
}
#################################################################
# CHAIN DE POSTROUTING
#################################################################
cria_regras_POSTROUTING() {
# Faz o mascaramento da rede interna.
$IPTABLES -A POSTROUTING -t nat -j SNAT --to-source 201.46.241.26 -s 192.168.0.0/24 -o eth0
$IPTABLES -A POSTROUTING -t nat -j SNAT --to-source 201.46.241.26 -s 192.168.1.0/24 -o eth0
$IPTABLES -A POSTROUTING -t nat -j SNAT --to-source 201.46.241.26 -s 192.168.2.0/24 -o eth0
$IPTABLES -A POSTROUTING -t nat -j SNAT --to-source 201.46.241.26 -s 192.168.3.0/24 -o eth0
$IPTABLES -A POSTROUTING -t nat -j SNAT --to-source 201.46.241.26 -s 192.168.4.0/24 -o eth0
}
#################################################################
# CHAIN DE LOAD BALANCING
#################################################################
cria_regras_LOADBALANCING() {
NET_INT="192.168.0.0/16";
NET_0="192.168.0.0/24";
NET_1="192.168.1.0/24";
NET_2="192.168.2.0/24";
NET_3="192.168.3.0/24";
NET_4="192.168.4.0/24";
# NET_SPDY1="200.204.180.0/24";
IF0="eth1"
IF1="eth0"
# IF1="eth0"
GW1="200.228.149.65"
# GW1="192.168.0.40"
IP1="201.46.241.26"
# LIP1="200.204.180.1"
#apagar os route padrao das placas
#route del -net $NET_INT dev $IF0
#route del -net $NET_INT dev $IF1
#route del -net $NET_INT dev $IF2
#route del -net $NET_INT dev $IF3
#route del -net $NET_INT dev $IF4
#inserir os routes para as redes internas
#route add -net $NET_0 dev $IF0
#route add -net $NET_1 dev $IF0
#route add -net $NET_2 dev $IF0
#route add -net $NET_3 dev $IF0
#inserir os routes para as redes gateway dos roteadores speedy
#route add -net $NET_SPDY1 dev $IF1
#route add -net $NET_SPDY2 dev $IF2
#route add -net $NET_SPDY3 dev $IF3
#route add -net $NET_SPDY4 dev $IF4
#inserir os routes para a internet, equalizando por speedy
#ip route add default equalize \
# nexthop via $GW2 dev $IF2 \
# nexthop via $GW3 dev $IF3 \
# nexthop via $GW4 dev $IF4
#ip route add default scope global equalize \
# nexthop via $GW1 dev $IF1 \
# nexthop via $GW2 dev $IF2 \
# nexthop via $GW3 dev $IF3 \
# nexthop via $GW4 dev $IF4
#ip route add default scope global via $GW2 dev $IF2
ip route add default via $GW1 dev $IF1
#ip rule add prio 201 from $IP1/24 table 201
#ip route add default via $GW1 dev $IF1 src $LIP1 proto static table 201
#ip route append prohibit default table 201 metric 1 proto static
#ip rule add prio 202 from $IP2/24 table 202
#ip route add default via $GW2 dev $IF2 src $LIP2 proto static table 202
#ip route append prohibit default table 202 metric 1 proto static
#ip rule add prio 203 from $IP3/24 table 203
#ip route add default via $GW3 dev $IF3 src $LIP3 proto static table 203
#ip route append prohibit default table 203 metric 1 proto static
#ip rule add prio 204 from $IP4/24 table 204
#ip route add default via $GW4 dev $IF4 src $LIP4 proto static table 204
#ip route append prohibit default table 204 metric 1 proto static
#ip rule add prio 222 table 222
#ip route add default table 222 proto static \
# nexthop via $GW2 dev $IF2 \
# nexthop via $GW3 dev $IF3 \
# nexthop via $GW4 dev $IF4
}
#################################################################
# CHAIN DE POSTROUTING
#################################################################
cria_regras_PROXY() {
# proxy transparente, via redirecionamento da rede
$IPTABLES -t nat -A PREROUTING -i $IF_INT -p tcp --dport 80 -j REDIRECT --to-port 3128
#for local squid/adsl
#iptables -A INPUT -i eth0 -p tcp -d 192.168.200.0/24 --dport 80 -j ACCEPT
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
#for local adsl/ remote squid
#iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
#iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
#iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
}
#########
# ORKUT #
#########
#cria_regras_orkut() {
#
#$IPTABLES -A FORWARD -d
www.orkut.com -p tcp --dport 443 -j DROP
#$IPTABLES -A INPUT -d
www.orkut.com -p tcp --dport 443 -j DROP
#$IPTABLES -A FORWARD -d orkut.com -p tcp --dport 443 -j DROP
#$IPTABLES -A INPUT -d orkut.com -p tcp --dport 443 -j DROP
#
#}
#################################################################
# SCRIPT INIT DO SYSV
#################################################################
#################################################################
# SCRIPT INIT DO SYSV
#################################################################
# checa se o pacote iptables foi instalado
if [ ! -x "$IPTABLES" ]; then
echo "O executável $IPTABLES não existe!"
exit 1
fi
# checa se o kernel é 2.3 ou 2.4
KERNELMAJ=`uname -r | sed -e 's,\..*,,'`
KERNELMIN=`uname -r | sed -e 's,[^\.]*\.,,' -e 's,\..*,,'`
if [ ! "$KERNELMAJ" -eq 2 -o ! "$KERNELMIN" -eq 4 ] ; then
echo "Você não está usando um kernel versão 2.4"
exit 1
fi
# Não insere regras se o modo ipchains estiver carregado
if /sbin/lsmod 2>/dev/null | grep -q ipchains; then
echo "Descarregue o módulo ipchains para o netfilter!"
exit 1
fi
if ! carrega_modulos; then
echo "Não consegui carregar os módulos do iptables"
exit 1
fi
case "$1" in
start)
echo -n "Configurando regras do firewall: "
destroi_regras && cria_regras && \
echo_success || echo_failure
echo ""
touch /var/lock/subsys/iptables
;;
stop)
echo -n "Removendo regras do firewall: "
destroi_regras && \
echo_success || echo_failure
echo ""
rm -f /var/lock/subsys/iptables
;;
stopopen)
echo -n "Removendo regras e abrindo firewall: "
abre_regras && \
echo_success || echo_failure
echo ""
rm -f /var/lock/subsys/iptables
;;
restart)
# isso não é um daemon, então não é necessário dar "stop"
# foi deixado aqui para os que esperam que ele exista
$0 start
;;
status)
$IPTABLES --list -n
;;
*)
echo "Uso: $0 {start|stop|stopopen|restart|status}"
esac