On 25-Sep-2003 Jederson wrote:
> iptables -t nat -A PREROUTING -p tcp -d 200.210.47.67
> --dport 3050 -j DNAT --to 191.161.10.100
> 
> iptables -t nat -A POSTROUTING -p tcp -s
> 191.161.10.100 --sport 3050 -j SNAT --to 200.210.47.67
> (est� regra foi um frequentador da lista que me passou
> e a coloquei tbm)
> 
...
> Ajude este simples mortal aqui, que t� se matando para
> fazer isso aqui funcionar.... e at� agora nda...
> 

Rio de Janeiro, 26-Sep-2003

Em primeiro lugar, tem certeza do IP que voc� est� usando na rede interna?
N�o est� em uma das faixas de IP reservadas pelo RFC 1918. N�o deveria ser
192.168.x.x?

OK, vamos consolidar e simplificar o que voc� precisa:

Notando que que voc� est� realizando a conex�o com ppp (linha discada?), o
pppd executa os scripts /etc/ppp/ip-up depois de estabelecer a conex�o e
/etc/ppp/ip-down quando fecha ou cai. Estes scripts normalmente chamam seus
equivalentes locais - /etc/ppp/ip-up-local e /etc/ppp/ip-down-local - que
n�o s�o substituidos quando h� atualiza��o do pacote. Se estes arquivos
*-local n�o existirem, crie-os com permiss�o de execu��o (a+x).

Nas regras que vou colocar a seguir, usei duas capacidades que tenho visto
pouca gente usar: controle de estado de conex�o (-m state) e Chains
definidas pelo usu�rio. S�o duas coisas que nos permitem manter a seguran�a
reduzindo o n�mero de regras.

NB: Eu n�o testei isto, embora partes sejam de scripts que eu usei em casa
at� ter conex�o por cabo.

No arquivo /etc/ppp/ip-down-local, coloque os seguintes comandos:

#-----------
# Desabilita o roteamento
sysctl -w net.ipv4.ip_forward=0

# Limpa TODAS as regras de iptables
iptables -t filter -F
iptables -t nat    -F
iptables -t mangle -F

# retira chains definidas pelo usu�rio
iptables -t filter -X
iptables -t nat    -X
iptables -t mangle -X

# retorna default policy ao "default"
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#-----------

Isto vai garantir um estado "limpo" cada vez que come�ar uma conex�o.

Agora, no arquivo /etc/ppp/ip-up-local, coloque os seguintes comandos:

#-----------
# Os par�metros s�o, na ordem:
# interface tty velocidade IP-local IP-remoto [extras]
IF="$1"         # Interface externa
IP="$4"         # IP local

# Auxiliares
IN="eth0"               # Interface interna
IBSERV="191.161.10.100" # InterBase Server
IBPORT="3050"           # InterBase Port (tcp)

# ICMP de servi�o
ICMPUTIL="echo-reply destination-unreachable time-exceeded parameter-problem"

# Desabilita o roteamento at� estabelecer as regras
sysctl -w net.ipv4.ip_forward=0

# Chains de LOG, para INPUT e FORWARD
# Limita o LOG a 10/minuto, para evitar lotar o LOG em scan
iptables -N DROPLOGI
iptables -A DROPLOGI -j LOG --logprefix "DENY:INPUT: " --loglevel 6 \
        -m limit --limit 10/minute
iptables -A DROPLOGI -j DROP
iptables -N DROPLOGF
iptables -A DROPLOGF -j LOG --logprefix "DENY:FORWARD: " --loglevel 6 \
        -m limit --limit 10/minute
iptables -A DROPLOGF -j DROP

# masquerade
iptables -t nat -A POSTROUTING -o "$IF" -j MASQUERADE

# cuidados com o loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -F FORWARD -i lo -o lo -j ACCEPT

# limpeza do Input: IPs de rede interna (RFC 1918) vindos da Internet
iptables -A INPUT -i "$IF" -s 10.0.0.0/8         -j DROPLOGI
iptables -A INPUT -i "$IF" -s 172.16.0.0/12      -j DROPLOGI
iptables -A INPUT -i "$IF" -s 192.168.0.0/16     -j DROPLOGI

# Bloqueia multicast - se quiser permitir multicast, substitua
# DROPLOGI por ACCEPT
iptables -A INPUT -i "$IF" -d 224.0.0.0/8        -j DROPLOGI

# Bloqueia o que n�o for destinado ao IP local
iptables -A INPUT -i "$IF" -d \! "$IP"           -j DROPLOGI

# Permite o PING, mas evitando o flood
iptables -A INPUT -i "$IF" -p icmp --icmp-type echo-request -j ACCEPT \
        -m limit --limit 60/minute --limit-burst 10

# Permite os pacotes ICMP �teis
for d in $ICMPUTIL ; do
        iptables -A INPUT -i "$IF" -p icmp --icmp-type $d -j ACCEPT
done

# OK, agora Forward gen�rico
iptables -A FORWARD -i "$IN" -o "$IF" -m state \
        --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i "$IF" -o "$IN" --state ESTABLISHED,RELATED \
        -j ACCEPT
iptables -A FORWARD -i "$IN" -o "$IN" -j ACCEPT
# Agora, o que n�o tiver regra, nega o acesso (default policy)
iptables -P FORWARD DROP

# Finalmente podemos habilitar o forward e colocar outras regras
sysctl -w net.ipv4.ip_forward=1

# Permite o acesso do InterBase, com controle de estado
iptables -A INPUT -i "$IF" -p tcp --dport "$IBPORT" -m state \
        --state NEW,ESTABLISHED -j ACCEPT

# Redireciona para rede interna
iptables -t nat -I PREROUTING -i "$IF" --dport "$IBPORT" -j DNAT \
        --to "$IBSERV"

# Permite o Forward do InterBase
iptables -A FORWARD -i "$IF" -o "$IN" -p tcp -d "$IBSERV" \
        --dport "$IBPORT" --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Fechamento

# input apenas da rede interna, de conex�es estabelecidas e das regras
# acima
iptables -A INPUT -i "$IF" -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i "$IN" -j ACCEPT

# O resto � bloqueado com log
iptables -A INPUT -i "$IF" -j DROPLOGI
iptables -A FORWARD -j DROPLOGF

#----------

-----
Paulo F. Sedrez
---------------------------------------------------------------------------
Esta lista � patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utiliza��o da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a