iptabels complicando minha vida!

Iniciado por _ubuntu_, 01 de Março de 2013, 12:08

tópico anterior - próximo tópico

_ubuntu_

Bom dia pessoal, seguinte.
Atualmente tenho um servidor que roda Ubuntu server 10.04 LTS.
Placa de rede: externa eth0 192.168.1.50 - interna eth1 10.1.1.1

Nesse servidor eu rodo samba, apache, squid3, iptables entre outros programinhas....

tenho o seguinte problema, ja tentei de todas (ou pelo menos quase todas) as maneiras possiveis que encontrei na internet para liberar as seguintes portas.
20, 21, 22, 3306
atualmente preciso urgente liberar as portas do FTP que é a 20 e 21

Explicando melhor...
tenho um site online, onde conecto normalmente quando estou fora do firewall, mas quando coloco o firewal para cuidar da rede..ele me bloqueia a conexao ftp. (quero da rede interna acessar um ftp externo)!

segue abaixo meu script firewall:


# DESABILITANDO O TRAFEGO IP ENTRE AS PLACAS DE REDE
echo "0" > /proc/sys/net/ipv4/ip_forward
#---------------------

# CARREGANDO MODULOS
modprobe ip_conntrack
modprobe ip_tables
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe iptable_nat
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ip_nat_ftp
#---------------------

# LIBERA REDE INTERNA
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
#---------------------

# DECLARACAO DAS VARIAVEIS
PORTAS_TCP="20,21,22,23,443,80,3128,10000"
PORTAS_UDP="53,137,138,139"
#---------------------

# LIMPAR REGRAS EXISTENTES
iptables -F
iptables -t nat -F
#--------------------
 
# BLOQUEANDO TODO O TRAFEGO
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#---------------------

# CRIA IDA E VOLTA DO ACESSO NAS CHAINS INPUT, OUTPUT E FORWARD
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#-------------------- 

# LIBERANDO ROTEAMENTO E REGRAS DE NAT
##echo 1 > /proc/sys/net/ipv4/ip_forward
#--------------------

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
 
# LIBERANDO SQUID
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
#-------------------- 

# LIBERANDO PORTAS
iptables -A INPUT -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT

iptables -A INPUT -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT
iptables -A FORWARD -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT
#--------------------


# No iptables, temos de dizer quais sockets sao validos em uma conexao
iptables -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
#--------------------

# Habilitando o trafego Ip, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward
#--------------------
clear
iptables -L



#iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:3128
ACCEPT     tcp  --  anywhere             anywhere            multiport dports ftp-data,ftp,ssh,telnet,https,www,3128,webmin
ACCEPT     udp  --  anywhere             anywhere            multiport dports domain,netbios-ns,netbios-dgm,netbios-ssn
ACCEPT     all  --  anywhere             anywhere            state NEW,RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            multiport dports ftp-data,ftp,ssh,telnet,https,www,3128,webmin
ACCEPT     udp  --  anywhere             anywhere            multiport dports domain,netbios-ns,netbios-dgm,netbios-ssn

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            multiport dports ftp-data,ftp,ssh,telnet,https,www,3128,webmin
ACCEPT     udp  --  anywhere             anywhere            multiport dports domain,netbios-ns,netbios-dgm,netbios-ssn

zekkerj

Não analisei todo seu firewall ainda... mas vi um erro em seu script aqui:

Citar
(...)

# LIBERA REDE INTERNA
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
#---------------------
(...)
# LIMPAR REGRAS EXISTENTES
iptables -F
iptables -t nat -F
#--------------------
(...)

Quando vc faz o "iptables -F" depois de lançar a regra de liberação do tráfego de loopback e do tráfego vindo da rede local, essas regras estão sendo perdidas...

Outros dois erros que vi, enquanto escrevia:

1. Vc faz política DROP na cadeia INPUT, mas fecha suas regras com uma regra que aceita conexões novas e antigas --- ou seja, todas as conexões. Pq usa política DROP, então, se aceita tudo?

2. [Grave!!!] Você disse que a rede local entra pela interface eth1. Mas na regra de proxy transparente, você redireciona para o proxy o tráfego que entra pela eth0... idem pra regra de Masquerade --- vc só está fazendo NAT no tráfego que vem da internet pra sua máquina, e não o contrário.

Ou será que vc na verdade trocou a eth0 pela eth1?

Mais um erro que estou vendo... ao liberar as portas TCP, você colocou todas no mesmo grupo --- e está liberando essas portas, independente de onde o tráfego seja originado.
Isso significa que você está abrindo para a internet acessar teu Squid, teu webmin, teu samba, teu telnet... coisas que vc nunca deveria expor.
Sugestão: tenha dois grupos de portas que podem ser liberadas; algumas você libera só pra rede interna ("-i eth1"), outras vc libera pra internet ("-i eth0").
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D