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