Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Problemas com iptables

    Montei um servidor com Ubuntu 7.10 para bloqueio de sites e relatório de log.

    Porém preciso colocar algumas regras no firewall tipo liberar portas como de FTP q não está funcionando e o Microsoft outlook e nem o eMule. Como posso liberar essas portas e em qual arquivo de inicialização eu posso colocar os comandos ?!?

    obrigado desde ja.
    Última edição por ogait666; 19-03-2008 às 16:51.

  2. #2

    Padrão

    Então meu amigo!!

    Para você liberar portas que você quer usar com iptables geralmente você faz da seguinte forma

    Código :
    iptables -t filter -A FORWARD -i $LAN -p tcp -m multiport --destination-port 21,20 -j ACCEPT
    Isso seria para FTP, ai você ainda precisa liberar as outras portas dos outros serviços que você deseja, como smtp 25, pop 110, dns 53, web 80 e por ai vai!

    Não esqueça de permitir que as conexões feitas voltem

    Código :
    iptables -t filter -A FORWARD -o $LAN -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    As regras de iptables você pode colocar elas em um script shell e coloca-lo na inicialização do ubuntu. Geralmente os scripts de inicialização ficam em /etc/init.d! Se o seu script chamar firewall coloque ele ai e você pode executar o seguinte comando para adiciona-lo para inicialização com o sistema:

    Código :
    update-rc.d firewall defaults
    Se você não tiver esse comando provavelmente você não tem o pacote sysv-rc instalado!

  3. #3

    Padrão

    2 perguntas

    Depois q eu dou o comando do iptables era pra funcionar imediatamente, ou eu preciso reiniciar o servidor ou restartar algum serviço ?

    Eu criei o arquivo firewall na pasta /etc/init.d e digitei o comando update-rc.d firewall defaults e apareceu a msg

    Código :
    root@Server:/etc/init.d# update-rc.d firewall defaults
     Adding system startup for /etc/init.d/firewall ...
       /etc/rc0.d/K20firewall -> ../init.d/firewall
       /etc/rc1.d/K20firewall -> ../init.d/firewall
       /etc/rc6.d/K20firewall -> ../init.d/firewall
       /etc/rc2.d/S20firewall -> ../init.d/firewall
       /etc/rc3.d/S20firewall -> ../init.d/firewall
       /etc/rc4.d/S20firewall -> ../init.d/firewall
       /etc/rc5.d/S20firewall -> ../init.d/firewall

    mas ainda não funcionou o e-mail q está no outlook nem o ftp e nem o emule.

    desde ja obrigado.

  4. #4
    Moderador Avatar de Bruno
    Ingresso
    Nov 2002
    Localização
    Guarapuava-PR
    Posts
    4.181
    Posts de Blog
    1

    Padrão

    vc tem que digitar isto depois que vc carrega o default do iptables
    vc tem que liberar sua rede
    e ativar o ip_forward tb

  5. #5

    Padrão

    Citação Postado originalmente por Benatto Ver Post
    vc tem que digitar isto depois que vc carrega o default do iptables
    vc tem que liberar sua rede
    e ativar o ip_forward tb

    perai até o arquivo de inicialização com as regras ta blz.

    mas como eu libero a rede e ativo o ip_forward ?

  6. #6

    Padrão

    Então cara...
    Para você habilitar o ip_forward você tem que fazer isso aqui:

    Código :
    echo "1" > /proc/sys/net/ipv4/ip_forward

    Você pode colocar esse comando no seu script de firewall!

    Para você liberar sua rede vai fazendo aquilo que te falei no post anterior!
    Liberando os serviços que você quer!
    Você colocou as regras para liberar os serviços??
    Sem isso não vai funcionar cara!

  7. #7

    Padrão

    Código:
    echo "1" > /proc/sys/net/ipv4/ip_forward
    Você pode colocar esse comando no seu script de firewall!

    Para você liberar sua rede vai fazendo aquilo que te falei no post anterior!
    Liberando os serviços que você quer!
    Você colocou as regras para liberar os serviços??
    Sem isso não vai funcionar cara!

    Eu digitei esse comando do ip_forward quando compartilhei a rede.

    é claro q eu digitei os comandos, ja fiz refiz deletei tudo depois digitei iptables -F e digitei de novo pra testa, e nada do outlook e o ftp funcionar.

    ta foda =/

  8. #8

    Padrão

    bom cara... uma coisa é certa!
    agente daqui (remotamente) podemos te dar dicas!
    você ai precisa tentar "debugar" o problema!

    você já verificou se suas regras estão fazendo match nos pacotes?
    para verificar isso você precisa executar o comando:

    Código :
    iptables -t filter -L -v -n
    por exemplo no meu computador, fiz uma regra só para te mostrar!

    Código :
    Chain INPUT (policy ACCEPT 289 packets, 21468 bytes)
     pkts bytes target     prot opt in     out     source               destination
       39  3068 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
    Essa regra mostra que ela esta fazendo match na minha conexão ssh! Você pode observar os campos "pkts" e "bytes" eles estao sendo incrementados!
    Estou usando porta 22 e protocolo tcp (obvio! )

    Outra coisa... suas regras de politica do iptables estao para drop?
    Se sim você não pode deixar de configurar para que as conexões possam voltar!

    Código :
    iptables -t filter -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    Tenta aee manow!

  9. #9

    Padrão

    Outra coisa...
    O que você ta mandando para o squid?
    Exatamente TUDO ou porta 80?

    Com o squid ai no meio você tem mais um ponto de falha!
    Tem que analizar TUDO!
    Última edição por zenun; 24-03-2008 às 15:05.

  10. #10

    Padrão

    Código:
    Chain INPUT (policy ACCEPT 289 packets, 21468 bytes)
    pkts bytes target prot opt in out source destination
    39 3068 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
    Essa regra mostra que ela esta fazendo match na minha conexão ssh! Você pode observar os campos "pkts" e "bytes" eles estao sendo incrementados!
    Estou usando porta 22 e protocolo tcp (obvio! )

    Tipo fiz isso ai mas o meu aparece o IP, olha

    Código :
    root@Server:/etc/squid# iptables -t filter -L -v -n
    Chain INPUT (policy ACCEPT 83641 packets, 52M bytes)
     pkts bytes target     prot opt in     out     source               destination
     
    Chain FORWARD (policy ACCEPT 7553 packets, 498K bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
        0     0 ACCEPT     tcp  --  192.168.0.254 *       0.0.0.0/0            0.0.0.0/0           multiport dports 21,20
        0     0 ACCEPT     tcp  --  192.168.0.254 *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,110
        0     0 ACCEPT     tcp  --  192.168.0.3 *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,110
        0     0 ACCEPT     tcp  --  192.168.0.2 *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,110

    esse comando ai no lugar do LAN eu coloco o meu IP ou o do servidor ?
    mas de qualquer forma ja coloquei de todos jeitos possiveis.

    Código :
    iptables -t filter -A FORWARD -i $LAN -p tcp -m multiport --destination-port 25,110 -j ACCEPT


    meu squid não tem regra nenhuma especifica só ta fazendo cache, mostrando um arquivo pra sites bloqueados nada de mais.

    me fala o q mais eu posso te informar pra vc me ajudar melhor.

    vlw cara

  11. #11

    Padrão

    mais uma coisa

    quando eu coloco o $ antes do IP no comando, meu ip aparece sem o 1 la no iptables -t filter -L -v -n

    sem o $ aparece o 192 certo

  12. #12

    Padrão

    tem como eu liberar um ou mais IP's pra não passar pelo firewall ?
    só pelo squid.

    talvez seja mais fácil
    ja q não to conseguindo fazer funcionar liberando as portas.

  13. #13

    Padrão

    Então cara... o $lan é uma variavel! Ela pode assumir os valores que você quiser... Isso ai já é outro papo!

    Ali você deveria colocar a sua rede interna por exemplo 192.168.1.0/24!

    E uma coisa... a sua politica padrão do iptables está em ACCEPT!
    As regras que estão ali na verdade não vao servir! Porque qualquer pacote que não fizer um match nas suas regras usarão a politica padrão da sua chain forward que é ACCEPT! Tanto é isso que seus contadores estão todos em 0!

    Eu estou imaginando se você colocou a regra para habilitar o MASQUERADING! Sem isso ele não vai funcionar cara! Hehehe

    Código :
    iptables -t nat -A POSTROUTING -o <sua interface da internet> -j MASQUERADE

    Como esta seu script de firewall?
    Você já tinha feito isso alguma vez?

  14. #14

    Padrão

    Como esta seu script de firewall?
    Você já tinha feito isso alguma vez?
    meu arquivo fica na pasta /etc/init.d/firewall

    será q tem como vc fazer esse script pra mim por favor ??
    só digita ai como os comandos tem q ficar no arquivo,
    e tem q ter aquele !/bin/sh no inicio do arquivo neh ?
    minha interface de entrada da internet é a eth0 de saida pra rede eh eth1 o ip do servidor é 192.168.0.10 e eu preciso liberar as portas pra ftp, emule, smtp, pop, dns, web, etc...

    não eu nunca fiz isso hehe
    senão puder não tem problema ja aprendi muito com vc

    vlw

  15. #15

    Padrão

    Código :
    !/bin/sh
     
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -t filter -A FORWARD -i $192.168.0.3 -p tcp -m multiport --destination-port 21,20,53,110,80,25 -j ACCEPT
    iptables -t filter -A FORWARD -o $192.168.0.3 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT


    olha ai como ta o arquivo, mas pelo jeito não ta inicializando junto com o sistema eu resetei a maquina e não tinha nenhuma regra no iptables -L -n

    e eu digitei o comando

    Código :
    root@Server:/etc/init.d# update-rc.d firewall defaults
     System startup links for /etc/init.d/firewall already exist.
    tem algo errado ?!?
    Última edição por ogait666; 25-03-2008 às 13:23.

  16. #16

    Padrão

    Então cara!
    O seguinte!

    Quando você coloca um "$" antes de qualquer nome, como você fez ali, o sistema pensa que isso é uma variavel! E o que você colocou ali não é!

    O que você tem que colocar ali é só o ip mesmo e ta tudo certo!

    Que regra você ta usando para jogar o trafego no squid?

    Umas regras basicas do iptables que deveria funcionar para o caso de só compartilhar internet

    Código :
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -t filter -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT
    iptables -t filter -A FORWARD -o eth1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    O parametro -o do iptables assume que seja uma interface, não um IP!
    Eu recomendo fortemente que você leia o manual do iptables!
    Ele ensina todas essas coisas básicas de sintax!

    O DNS também precisa de UDP!

    E se você não colocar a politica padrão do iptables da chain FORWARD para DROP essas regras de ACCEPT não SERVEM PARA NADA!

    Uma coisa você colocou seu "Gateway" com o ip 192.168.0.10, isso esta sendo entregue por DHCP para os seus hosts? Porque se os seus hosts não sabem que ele é o gateway (ou que você de alguma outra forma envie o trafego para lá) NUNCA VAI FUNCIONAR!

  17. #17

    Padrão

    blz essa parte do $ eu entendi perfeitamente agora.

    cara o squid eu sei q ta funcionando, mas realmente não sei te explica q regra ta jogando o trafego pra la naum.

    o outlook e o ftp funcionaram agora, consegui fazer o arquivo de inicialização funcionar, ta liberando pra um IP, só consegui assim por enquanto.

    Código :
    !/bin/sh
     
    #iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    #iptables -t filter -A FORWARD -i $192.168.0.3 -p tcp -m multiport --destination-port 21,20,53,110,80,25 -j ACCEPT
    #iptables -t filter -A FORWARD -o $192.168.0.3 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
     
    ### COMPARTILHA CONEXAO ###
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    echo 1 > /proc/sys/net/ipv4/ip_forward
     
    ### LIBERA PORTAS ###
    iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT
    iptables -A INPUT -p tcp --destination-port 110 -j ACCEPT
    iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT
    iptables -A INPUT -p tcp --destination-port 20 -j ACCEPT
     
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-dest 192.168.0.2
    iptables -A FORWARD -p tcp -i eth0 --dport 25 -d 192.168.0.2 -j ACCEPT
     
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to-dest 192.168.0.2
    iptables -A FORWARD -p tcp -i eth0 --dport 110 -d 192.168.0.2 -j ACCEPT

    esse comando de cima q ta liberando a porta 25 e 110 pro IP 192.168.0.2 funcionaria liberando para todos os IPs dessa forma ?

    Código :
     iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-dest 192.168.0.2-192.168.0.254
    iptables -A FORWARD -p tcp -i eth0 --dport 25 -d 192.168.0.2-192.168.0.254 -j ACCEPT

    eu comentei as primeiras linha pq eu ja tinha tentado com elas e não funcionou, então eu adcionei essas abaixo pra testar, de alguma maneira funcionou.
    vou ler o manual do iptables pode dexar.

    Sim o IP do servidor é 192.168.0.10 mas eh claro q eu configurei o proxy e a rede de todos os clientes com esse IP como gateway.
    Última edição por ogait666; 25-03-2008 às 14:37.

  18. #18

    Padrão

    Então cara...
    Ai você tem um problema bem grande!
    Você não sabe como sua rede funciona!

    As regras que você ta colocando ali para os hosts não tem sentido, porque você ta jogando a porta 25 ( que é do servidor para o seu host, que é o cliente! Recomendo estudar também tcp/ip)!

    Acho que para te ajudar melhor só sabendo mesmo como ta configurado esse seu servidor! Preciso da saida desses comandos aqui a principio:

    Código :
    iptables -t filter -L -v -n
    iptables -t nat -L -v -n

  19. #19

    Padrão

    cara eu entendo de tcp/ip o problema eh o seguinte eu não sei pra q serve -t -c -p -A então não da pra eu saber qual comando eh util e qual naum eh, então eu fui simplesmente testando os comandos até funcionar.

    iptables -t filter -L -v -n

    Código :
    root@Server:/var/log/squid# iptables -t nat -L -v -n
    Chain PREROUTING (policy ACCEPT 964 packets, 106K bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 to:192.168.0.2
        0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110 to:192.168.0.2
        0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 to:192.168.0.2
        0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110 to:192.168.0.2
     
    Chain POSTROUTING (policy ACCEPT 29 packets, 1945 bytes)
     pkts bytes target     prot opt in     out     source               destination
      957 56501 MASQUERADE  0    --  *      eth0    0.0.0.0/0            0.0.0.0/0
        0     0 MASQUERADE  0    --  *      eth0    0.0.0.0/0            0.0.0.0/0
     
    Chain OUTPUT (policy ACCEPT 827 packets, 50496 bytes)
     pkts bytes target     prot opt in     out     source               destination


    iptables -t nat -L -v -n

    Código :
    root@Server:/var/log/squid# iptables -t filter -L -v -n
    Chain INPUT (policy ACCEPT 22159 packets, 9940K bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:20
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:20
     
    Chain FORWARD (policy ACCEPT 4834 packets, 993K bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.0.2         tcp dpt:25
        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.0.2         tcp dpt:110
        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.0.2         tcp dpt:25
        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.0.2         tcp dpt:110
     
    Chain OUTPUT (policy ACCEPT 22124 packets, 14M bytes)
     pkts bytes target     prot opt in     out     source               destination

    vlw

  20. #20

    Padrão

    Então meu amigo...
    Por esse motivo que eu te digo, leia o man do iptables Man page of IPTABLES

    Isso vai te ajudar a entender as regras! E para que serve cada chain!

    Vendo essas saidas ai não tem nada que esteja redirecionando o trafego para um servidor proxy! Eu faria um script basico assim para compartilhar a internet:

    Código :
    iptables -t filter -F
    iptables -t filter -Z
    iptables -t filter -X
     
    iptables -t nat -F
    iptables -t nat -Z
    iptables -t nat -X
     
    # Isso habilita o encaminhamento de pacotes no linux
    echo "1" > /proc/sys/net/ipv4/ip_forward
     
    # Isso habilita o nat na interface eth0
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    Isso é mais do que suficiente para habilitar o compartilhamento de internet usando um linux e não mudando as politicas padrão das chains!

    Se você quer liberar só algumas coisas é preciso acrescentar regras como:

    Código :
     
    # Muda a politica padrão da chain forward para DROP
    # Essa chain é onde os pacotes em transito pelo firewall usam!
    # Dessa forma só o que for EXPLICITAMENTE permitido vai passar!
    # Para voltar a ACCEPT faça o seguinte "iptables -P FORWARD ACCEPT"
    iptables -P FORWARD DROP
     
    # Permitindo que as conexões voltem!
    iptables -t filter -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
     
    # Ai você vai liberando o acesso aos serviços que você quer permitir
    iptables -t filter -A FORWARD -s 192.168.0.2 -p tcp --dport 80 -j ACCEPT
    Olha cara se isso não funciona ai já não é culpa do iptables, deve ter alguma outra coisa que esta configurada de forma errada!