[Resolvido] Como configurar iptables - iniciante

Iniciado por victsiqueira, 13 de Agosto de 2013, 08:48

tópico anterior - próximo tópico

victsiqueira

Olá a todos, é a primeira mensagem que eu posto aqui e caso eu faça algo que não seja permitido, me perdoem de antemão.  ;D

Bom, configurei um pc com ubuntu 12.04, já instalei webmin, sarg, squid, dhcp e o shorewall6 firewall.
A minha dúvida neste momento é com relação ao iptables, eu uso o firewall dfl-210 da d-link e tinha algumas regras já definidas que gostaria de "converter" para iptables, espero que algum de vocês possa me auxiliar nesta questão:
Vou postar aqui como está atualmente no firewall dfl-210 e em negrito como eu acho que é no iptables (http://www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html), se vocês puderem me dizer se está correto ou se posso melhorar algo:

Dica: ETH0 está ligado para ser o dhcp da rede local e ETH1 está ligado ao link da embratel (futuramente pretendo colocar um outro link de internet para o caso de o da embratel cair ter uma internet "reserva", fail over)

###Regra redirect_server#######

SERVICE RDP/TCP: PORTA 3389
source interface : any
source network: all nets
destination interface: core
destination network: wan_ip (x.x.x.x *troquei o ip da internet para x por motivo de segurança)
ACTION: SAT/ALLOW
destination ip_address: 172.20.1.141

iptables -A INPUT -p tcp --dport 3389 -i eth1  -j REDIRECT -to 172.20.1.141

###CAMERAS###

SERVICE HTTP/TCP: PORTA 80
source interface : ANY
source network: ALL NETS
destination interface: core
destination network: Wan_ip (x.x.x.x)
ACTION: SAT/ALLOW
destination ip_address: 172.20.1.197

iptables -A INPUT -p tcp --dport 80 -i eth1  -j REDIRECT -to 172.20.1.197

***

SERVICE TCP: PORTA 81,3550,4550,5550
source interface : ANY
source network: ALL NETS
destination interface: core
destination network: Wan_ip (x.x.x.x)
ACTION: SAT/ALLOW
destination ip_address: 172.20.1.197

iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 81,3550,4550,5550 -j REDIRECT -to 172.20.1.197

###VPN###

SERVICE VPN/TCP: PORTA 1723
source interface : ANY
source network: ALL NETS
destination interface: core
destination network: Wan_ip (x.x.x.x)
ACTION: SAT/ALLOW
destination ip_address: 172.20.1.8

iptables -A INPUT -p tcp --dport 1723 -i eth1  -j REDIRECT -to 172.20.1.8

***

SERVICE GRE_ENCAP IPPROTO: 47
source interface : ANY
source network: ALL NETS
destination interface: core
destination network: Wan_ip (x.x.x.x)
ACTION: SAT/ALLOW
destination ip_address: 172.20.1.8

Esse aqui eu to totalmente em dúvida, não sei como configurar esse IPPROTO, no firewall da d-link diz que é necessário para a vpn funcionar, não sei se aqui também precisa.

*  Outra coisa, eu não especifiquei a tabela das regras, é necessário colocar na tabela nat(-t nat)? ou pode deixar na padrão?

*  Por último, eu instalei o shorewall6 via webmin, mas ainda não estou usando pois não sei configurar, estou configurando o firewall padrão mesmo.

zekkerj

Citariptables -A INPUT -p tcp --dport 3389 -i eth1  -j REDIRECT -to 172.20.1.141

O iptables tem 5 tabelas, chamadas "filter", "nat", "mangle", "raw" e "security". Delas, as que te interessam são a tabela filter, que faz a filtragem de pacotes (este pode passar, este não pode) e a tabela nat, que faz alterações nos endereços do pacote. Quando vc não diz qual a tabela que quer usar, significa que está usando a tabela filter.

Quando você diz "-j REDIRECT", essa ação forçosamente redireciona o pacote para a própria máquina. E a única forma de fazer isso é alterando o endereço de destino, retirando o endereço original e colocando o endereço da própria máquina. Ou seja, é uma ação que só está disponível na tabela nat.

CitarOutra coisa, eu não especifiquei a tabela das regras, é necessário colocar na tabela nat(-t nat)? ou pode deixar na padrão?

Exato: para fazer um "-j REDIRECT", tem que usar a tabela "nat" (-t nat).

Sua intenção não era redirecionar pra própria máquina (-j REDIRECT) e sim desviar o pacote pra outra máquina; então a ação que vc tem que tomar é "-j DNAT". Sua regra vai ficar assim:

iptables -t nat -A INPUT -p tcp --dport 3389 -i eth1  -j DNAT -to 172.20.1.141

Mude as outras regras de acordo.

CitarEsse aqui eu to totalmente em dúvida, não sei como configurar esse IPPROTO, no firewall da d-link diz que é necessário para a vpn funcionar, não sei se aqui também precisa.
O protocolo 47 é o GRE, usado para criar túneis genéricos. Simplesmente substitua onde vc usaria o tcp ou o udp, pelo número do protocolo. Vc poderia também ter usado o número do protocolo tcp (6) em lugar do seu nome, ou 17 p/ udp. Vc pode usar "gre" em lugar do número 47, se o seu arquivo /etc/protocols estiver configurado corretamente.

Sua regra ficaria:

iptables -t nat -A INPUT -p gre -i eth1 -j DNAT --to 172.20.1.8

CitarPor último, eu instalei o shorewall6 via webmin, mas ainda não estou usando pois não sei configurar, estou configurando o firewall padrão mesmo.
Se não está usando, remova.
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

victsiqueira

Obrigado Zekkerj,

Entendi a respeito do uso de nat quando se quer mudar o ip de destino para uma outra máquina na rede;

O meu arquivo /etc/iptables.up.rules ficou assim:
Citar# Generated by webmin
#*filter

#-A FORWARD -o eth0 -j LOG --log-level 7 --log-prefix BANDWIDTH_OUT:
#-A FORWARD -i eth0 -j LOG --log-level 7 --log-prefix BANDWIDTH_IN:
#-A OUTPUT -o eth0 -j LOG --log-level 7 --log-prefix BANDWIDTH_OUT:
#-A INPUT -i eth0 -j LOG --log-level 7 --log-prefix BANDWIDTH_IN:
#COMMIT


#-------------editado por victor----------------------
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -i lo -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 10000 -j ACCEPT
#-A INPUT -p tcp --dport 3128 -j ACCEPT
# Uncomment below if you also want to allow HTTPS connections too!
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections  THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --dport 22 --state NEW -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG  --log-prefix "iptables denied: " --log-level 7

#Compartilhar internet de eth1 para eth0
-A POSTROUTING -o eth1 -j MASQUERADE



# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
# Completed
# Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
#RDP para servidor
-A INPUT -p tcp --dport 3389 -i eth1  -j DNAT -to 172.20.1.141

#configuracao das cameras via internet
-A INPUT -p tcp --dport 80 -i eth1  -j DNAT -to 172.20.1.197
-A INPUT -p tcp -m multiport --destination-port 81,3550,4550,5550 -i eth1  -j DNAT -to 172.20.1.197

#config da vpn para tecdc01
-A INPUT -p tcp --dport 80 -i eth1  -j DNAT -to 172.20.1.8
-A INPUT -p gre -i eth1 -j DNAT --to 172.20.1.8

COMMIT
# Completed

Só que quando peço para reiniciar o firewall da erro na linha 37:

Citar-A POSTROUTING -o eth1 -j MASQUERADE
Saberia dizer o que está errado? (a internet ainda está funcionando) será que tem a ver com o meu arquivo /etc/rc.local estar assim:

Citarmodprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

exit 0

Ou seja, por já estar no rc.local não precisa por também no /etc/iptables.up.rules?

E outra dúvida  ::)
usando um port scan eu vi que a regra
Citar-A INPUT -p tcp --dport 3128 -j ACCEPT

deixa meu servidor squid sendo passível de uso por pessoas na internet, e se eu comentar esta linha o meu servidor squid na rede interna vai ficar desabilitada, certo?
a solução poderia ser para aceitar apenas de eth0(rede local)?:
Citar-A INPUT -p tcp --dport 3128 -i eth0 -j ACCEPT

Muito obrigado, mais uma vez,

sds

zekkerj

MASQUERADE é um caso especial de SNAT, usado quando o endereço que vai substituir o endereço do pacote é dinâmico, e por isso deve ser lido da configuração da interface. Portanto essa regra tem que estar no grupo das regras de NAT, não no grupo das regras de filtro.

Outra coisa, se vc tem configuração do iptables pelo webmin, não tente fazê-la manualmente em outro lugar --- ou faz tudo pelo webmin, ou faz tudo maunalmente.

Sobre a regra do squid, a sua sugestão resolve o problema, limitando a liberação aos pacotes que vêm da rede local.
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

victsiqueira

ok, eu vou fazer alguns testes depois para resolver esta parte do firewall compartilhar a internet, pois a regra nos 2 arquivos que citei está dando conflito, o importante é que funciona mas o servidor demora para ativar o compartilhamento da internet e não consigo aplicar as configurações do firewall;
tentei apenas colocar a regra na parte destinada às regras de Nat mas não aplica, diz que era necessário especificar a tabela -t nat, mas se eu especifico a mesma da erro.
Mais tarde eu vou tirar a regra do rc.local e deixar só no iptables.up.rules e reiniciar o servidor para ver se funciona.

Quanto a opção de ativar a porta do squid somente para rede local aparentemente funcionou, o port scan agora diz que está fechada...
Só não entendi porque diz que a porta 53 (dns) está aberta...eu tenho que colocar o padrão input do Nat como negar?

zekkerj

CitarSó não entendi porque diz que a porta 53 (dns) está aberta...eu tenho que colocar o padrão input do Nat como negar?

Ou bloquear explicitamente a porta 53/udp pra pedidos vindos da internet. Eu bloquearia.
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

victsiqueira

Olá, não ta dando certo.

eu já coloquei as regras na "sessão" nat, mas mesmo assim da erro:

CitarFalha ao aplicar configuração :
iptables-restore v1.4.12: Line 18 seems to have a -t table option.

e se eu coloco a opção "-t nat" ele da erro...
outra coisa agora é que a internet só funciona em algumas máquinas (depois que eu tirei a regra do rc.local e deixei só no iptables), me parece ser o dhcp ou DNS, enfim...vou ter bastante trabalho esse mês  :P

Depois eu vou zerar a configuração do iptables e fazer conforme a sua sugestão de fazer tudo pelo webmin, apesar de parecer ser ainda mais complicado, pois tem várias opções e o risco de fazer algo errado é maior.

Se alguém tiver alguma sugestão eu agradeço, senão depois eu digo aqui como resolvi (só não sei quanto tempo vou levar  :'( )

zekkerj

Citare se eu coloco a opção "-t nat" ele da erro...
Lembra que eu comentei sobre trabalhar com forma automática e manual ao mesmo tempo? Vc está mexendo manualmente num arquivo que deveria estar sendo manipulado por via automática.

Não é um arquivo criado pelo webmin? Então dê preferência a usar o próprio webmin pra configurar seu firewall.
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

victsiqueira

Olá, só para finalizar o assunto e ajudar alguém que tenha o mesmo problema, consegui resolver usando a seguinte configuração:

Citar# Generated by webmin
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -o eth1 -j LOG --log-level 7 --log-prefix BANDWIDTH_OUT:
-A FORWARD -i eth1 -j LOG --log-level 7 --log-prefix BANDWIDTH_IN:
-A OUTPUT -o eth1 -j LOG --log-level 7 --log-prefix BANDWIDTH_OUT:
-A INPUT -i eth1 -j LOG --log-level 7 --log-prefix BANDWIDTH_IN:
#linha10
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
# -A INPUT -d 127.0.0.0/8 -i lo -j REJECT
-A INPUT -i eth0 -j ACCEPT
# Accepts all established inbound connections
-A INPUT -m state -i eth1 --state RELATED,ESTABLISHED -j ACCEPT
# tirei o -s w.x.0.0/16 dps do syn
-A INPUT -p tcp -m state -i eth1 --dport 80 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 81 --state NEW -j ACCEPT  --syn
#linha20
-A INPUT -p tcp -m state -i eth1 --dport 3550 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 4550 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 5550 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 3389 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 1723 --state NEW -j ACCEPT  --syn
-A INPUT -p tcp -m state -i eth1 --dport 10000 --state NEW -j ACCEPT  --syn
-A INPUT -p gre -m state -i eth1 --state NEW -j ACCEPT
#configurar squid transparente
#-A INPUT -p tcp -m state -i eth1 --dport 80 --state NEW -j ACCEPT  --syn
COMMIT
#linha30
# Completed
# Generated by webmin
*mangle
:PREROUTING ACCEPT [1471:303908]
:INPUT ACCEPT [636:240607]
:FORWARD ACCEPT [832:63181]
:OUTPUT ACCEPT [437:39285]
:POSTROUTING ACCEPT [1269:102466]
COMMIT
#linha40
# Completed
# Generated by webmin
*nat
:PREROUTING ACCEPT [203:14045]
:POSTROUTING ACCEPT [192:12653]
:OUTPUT ACCEPT [20:1217]
#tirei o -s w.x.0.0/16 dps do syn
-A PREROUTING -i eth1 -p tcp --syn --dport 80 -j DNAT --to-destination 172.20.1.197:80
-A PREROUTING -i eth1 -p tcp --syn --dport 81 -j DNAT --to-destination 172.20.1.197:81
-A PREROUTING -i eth1 -p tcp --syn --dport 3550 -j DNAT --to-destination 172.20.1.197:3550
-A PREROUTING -i eth1 -p tcp --syn --dport 4550 -j DNAT --to-destination 172.20.1.197:4550
-A PREROUTING -i eth1 -p tcp --syn --dport 5550 -j DNAT --to-destination 172.20.1.197:5550
-A PREROUTING -i eth1 -p tcp --syn --dport 3389 -j DNAT --to-destination 172.20.1.141:3389
-A PREROUTING -i eth1 -p tcp --syn --dport 1723 -j DNAT --to-destination 172.20.1.8:1723
-A PREROUTING -i eth1 -p gre -j DNAT --to-destination 172.20.1.8
#squid transparente
-I PREROUTING -i eth0 -p tcp --syn --dport 80 -j REDIRECT --to-port 3128
#-I POSTROUTING -s 172.20.1.0/24 -j MASQUERADE
#-A PREROUTING -i eth0 -p tcp --syn --dport 80 -j DNAT REDIRECT --to-destination 172.20.1.141:3128
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT

Pelo o que eu entendi, eu preciso declarar um INPUT para a porta na tabela filter e depois na tabela Nat fazer o PREROUTING com o endereço IP de destino e sua respectiva porta.

sds