Duvida com MASQUERADE [RESOLVIDO]

1. Duvida com MASQUERADE [RESOLVIDO]

don
donssp

(usa Fedora)

Enviado em 30/08/2013 - 10:28h

Bom dia. Estou com dificuldade em algo que creio ser básico mas vamos la

estou implementando o seguinte script :

##################################################

#!/bin/bash

##Declaração de variaveis

## Constantes
ipt=/usr/sbin/iptables
modprobe=/sbin/modprobe

##Interfaces
if_ext=eth0
if_int=eth1


##Redes
ip_ext=192.168.0.199
ip_lan=10.1.1.0/8

##Portas especificas
SSH=22

##Servidores de DNS utilizados
DNS1=8.8.8.8
DNS2=8.8.4.4

function start(){
###PREPARACAO

##Carregando modulos
echo "Ativando modulos Iptables..."
$modprobe iptable_nat
$modprobe ip_conntrack
$modprobe ip_conntrack_ftp
$modprobe ip_nat_ftp
$modprobe ipt_LOG
$modprobe ipt_REJECT
$modprobe ipt_MASQUERADE
echo "..."

## Esvaziando Tabelas
echo "Limpando regras atuais..."
$ipt -F
$ipt -X
#$ipt -F -t nat
#$ipt -X -t nat
#$ipt -F -t mangle
#$ipt -X -t mangle
echo "..."

### Ativando Funcoes do Kernel

## Habilitando encaminhamento ip
echo 1 > /proc/sys/net/ipv4/ip_forward

## Protege contra IP spoofing
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

## Habilitando a protecao contra TCP SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

## Ignorando Bradcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


######## FILTER

### CHAIN INPUT

## Definindo politica padrao
$ipt -P INPUT DROP

## Concedendo acesso de Loopback
$ipt -A INPUT -i lo -j ACCEPT

## Conceder acesso local ao squid, amarrando interface e range IP
######################################

## Permitir acesso a porta 80
#$ipt -A INPUT -p tcp -s $ip_lan --dport 80 -j ACCEPT


## Bloqueando Spoofing
$ipt -A INPUT -i $if_ext -s 10.0.0.0/8 -j DROP
$ipt -A INPUT -i $if_ext -s 172.16.0.0/12 -j DROP
$ipt -A INPUT -i $if_ext -s 192.168.0.0/16 -j DROP
$ipt -A INPUT -i $if_ext -s 224.0.0.0/4 -j DROP
$ipt -A INPUT -i $if_ext -s 240.0.0.0/5 -j DROP

## Manter conexoes ja estabelecidas
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Abrir porta SSH (Acesso interno)
$ipt -A INPUT -p tcp -s $ip_lan --dport $SSH -j ACCEPT

## Abrir porta SSH (Acesso externo)
$ipt -A INPUT -p tcp -i $if_ext --dport $SSH -j ACCEPT

## Bloequear outras portas pela interface externa
$ipt -A INPUT -i $if_ext -j REJECT

# Descartar pings
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type echo-request -j ACCEPT
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type 8 -j ACCEPT
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type 0 -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type echo-request -j DROP
$ipt -A INPUT -p icmp --icmp-type 8 -j DROP
$ipt -A INPUT -p icmp --icmp-type 0 -j DROP

## Protecao contra port scanners
$ipt -N SCANNER
$ipt -A SCANNNER -j DROP
$ipt -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL NONE -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL ALL -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $if_ext -j SCANNER

## Descarta pacotes malformados, protegendo contra ataques diversos
$ipt -A INPUT -m unclean -j DROP
$ipt -A INPUT -m state --state INVALID -j DROP

## Descarta a abertura de novas conexoes, bloqueando o acesso externo
#ipt -A INPUT -p tcp --syn -j DROP

## Descarta pacotes que nao se enquadram em nenhuma regra
$ipt -A INPUT -j REJECT

### CHAIN OUTPUT

## Definindo politica padrao
$ipt -P OUTPUT -j ACCEPT

## Conceder acesso de loopback
$ipt -A OUTPUT -o lo -j ACCEPT

## Manter conexoes ja estabelecidas
$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

### CHAIN FORWARD
## Descarta pacotes mal formados, protegendo contra ataques diversos
$ipt -A FORWARD -m state --state INVALID -j DROP

## Definindo politica padrao
$ipt -P FORWARD DROP


## Permitir conexao com o servidor DNS
#$ipt -A FORWARD -p udp -d $DNS1 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS2 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS3 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS4 --dport 53 -j ACCEPT

## Permitir que pacotes com conexoes ja estabelecidas ou solicitadas atravessem o firewall
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

## Protecao contra worms
$ipt -A FORWARD -p tcp --dport 135 -i $if_ext -j REJECT


## Protecao contra syn-flood
$ipt -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT

## Protecao contra ping da morte
$ipt -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Bloqueando pacotes TCP indesejaveis
$ipt -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP


### NAT

## CHAIN POSTROUTING

## Liberando acesso

$ipt -t nat -A POSTROUTING -s $ip_lan -j MASQUERADE

### CHAIN PREROUTING


## CHAIN FORWARD

###MANGLE

## CHAIN INPUT

## CHAIN OUTPUT

## Otimizando resolucao de nomes
$ipt -t mangle -A OUTPUT -o $if_ext -p udp --dport 53 -j TOS --set-tos 16

## Otimizando conexao http/https
$ipt -t mangle -A OUTPUT -o $if_ext -p tcp --dport 80 -j TOS --set-tos 16
$ipt -t mangle -A OUTPUT -o $if_ext -p tcp --dport 443 -j TOS --set-tos 16

## CHAIN FORWARD

## Otimizando resolucao de nomes
$ipt -t mangle -A FORWARD -o $LP -p udp --dport 53 -j TOS --set-tos 16
$ipt -t mangle -A FORWARD -o $INTRAGOV -p udp --dport 53 -j TOS --set-tos 16

## CHAIN PREROUTING

## CHAIN POSTROUTING

####################################################################

# Salvar configurações
#ipt-save
}

function limpa(){
echo "Limpando tabelas..."

$ipt -F
$ipt -X
$ipt -F -t nat
$ipt -X -t nat
$ipt -F -t mangle
$ipt -X -t mangle

echo "..."
}

function stop(){

echo "Desabilitando encaminhamento IP e outras funcoes..."

#Desabilitando encaminhamento IP
echo 0 > /proc/sys/net/ipv4/ip_forward

#IP Spoofing
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

#Protecao contra TCP SYN Cookie
echo 0 > /proc/sys/net/ipv4/tcp_syncookies

#Ignorando Broadcast
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo "..."

echo "Limpando tabelas..."
$ipt -F
$ipt -X
$ipt -F -t nat
$ipt -X -t nat
$ipt -F -t mangle
$ipt -X -t mangle
echo "..."

echo "Redefinindo Policy..."
$ipt -t filter -P INPUT ACCEPT
$ipt -t filter -P OUTPUT ACCEPT
$ipt -t filter -P FORWARD ACCEPT
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT
$ipt -t nat -P FORWARD ACCEPT
$ipt -t mangle -P INPUT ACCEPT
$ipt -t mangle -P OUTPUT ACCEPT
$ipt -t mangle -P FORWARD ACCEPT
$ipt -t mangle -P PREROUTING ACCEPT
$ipt -t mangle -P POSTROUTING ACCEPT
echo "..."
}

function restart(){
stop
start
}

case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
limpa)
limpa
;;
*)
echo ""
echo "(start-stop-restart-limpa)"
echo ""
exit 0
;;
esac

## Salvando configurações
#ipt-save

# Firewall habilitado
#exit

########################################################


O problema por enquanto é o seguinte:

notem que a linha na chain INPUT "$ipt -A INPUT -p tcp -s $ip_lan --dport 80 -j ACCEPT" esta comentada. Eu gostaria que a principio o acesso a porta 80 não seja permitido, então dei as permissões desejadas e no fim inclui a regra "$ipt -A INPUT -j DROP" para recusar oque não se encaixa. Porém quando habilito a regra "$ipt -t nat -A POSTROUTING -s $ip_lan -j MASQUERADE" ele compartilha a rede, e consequentemente o acesso web, mesmo eu não dando qualquer permissão de acesso na porta 80. Eu acreditava que mesmo habilitando o MASQUERADE, eu deveria dar permissão explicita as portas e conexões desejadas, mas pelo jeito não é assim. Gostaria de ter esse controle, até porque posteriormente vou instalar o squid e direcionar tudo para a porta 3128.

Alguém pode dar um help?

Grato =D



  


2. Re: Duvida com MASQUERADE [RESOLVIDO]

Natanael Henrique
n4t4n

(usa Arch Linux)

Enviado em 31/08/2013 - 12:56h

Don, a regra aplicada na chain INPUT está bloqueando somente o que tem origem na rede interna com destino à máquina do firewall, na porta 80. Não bloqueia acessos da rede interna para a internet. Tudo o que conseguirá com esta regra é fazer com que um servidor WEB na máquina do firewall não esteja disponível para a rede interna.

Dados que atravessam a máquina do firewall devem ser colocados na chain FORWARD. Quando você habilita o masquerade o acesso WEB está sendo permitido pela regra abaixo:

## Permitir que pacotes com conexoes ja estabelecidas ou solicitadas atravessem o firewall
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


Para bloquear o acesso à porta 80 a regra ficaria assim:

$ipt -A FORWARD -s $ip_lan -o $if_ext -p tcp --dport 80 -j DROP

Dá uma lida no Guia Foca, que pode te ajudar a entender melhor.

http://www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html


3. Re: Duvida com MASQUERADE [RESOLVIDO]

don
donssp

(usa Fedora)

Enviado em 04/09/2013 - 13:09h

Oi amigo , desculpe a demora. Então , coloquei essa regra explicitamente bloqueando a porta 80 de funcionou. A principio pensei que só colocando a regra : "$ipt -A INPUT -j DROP ". Bloquearia tudo oque não especifiquei com -j ACCEPT nas linhas acima. Mas tudo bem , ja rodei o squid aqui também e ao que tudo indica ta indo bem.
Valeu mesmo pela ajuda. Até mais.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts