+ Responder ao Tópico



  1. #1

    Padrão Regras IPTABLES (Servidor dedicado)

    Ola pessoal,

    tenho um servidor dedicado de jogos a meses mas não ativei o firewall nele.
    Entao montei o script abaixo para o servidor mas ainda não testei, pois tenho medo de rodar e não conseguir mais acessar o server via SSH.
    Fui pegando na internet "pedaços" prontos e montando o meu de acordo com que preciso.
    Então peço uma pequena ajuda para verificar se esta tudo certo antes de colocar no server.

    Preciso liberar apenas SSH/HTTP/FTP/PING e as portas dos jogos, o resto deve ser bloqueado.
    E quando acessar via SSH o server, preciso ter acesso completo na internet.

    #!/bin/sh
    # endereco IP do seu servidor
    SERVER_IP=XXX.XXX.XXX.XXX

    # se voce tiver uma conexao com IP dedicado, pode adiciona-lo aqui.
    #ADMIN_IP=yyy.yyy.yyy.yyy

    # interface a ser configurado com o firewall
    $INTERFACE=eth0
    IPTABLES='/sbin/iptables'

    # Flush (limpa) (-F) todas as regras
    $IPTABLES -F INPUT
    $IPTABLES -F FORWARD
    $IPTABLES -F OUTPUT

    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
    $IPTABLES -P OUTPUT ACCEPT


    # Comunicacao interna ao firewall
    $IPTABLES -A INPUT -i $INTERFACE -m state –state ESTABLISHED,RELATED -j ACCEPT


    # Derruba todas as conexoes vindas da rede publica que tentam
    # se passar por enderecos internos
    $IPTABLES -A INPUT -i $INTERFACE -s $SERVER_IP/32 -j DROP
    $IPTABLES -A INPUT -i $INTERFACE -s 192.168.0.0/24 -j DROP
    $IPTABLES -A INPUT -i $INTERFACE -s 127.0.0.0/8 -j DROP


    # Aceita HTTP, HTTPS
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port http –syn -j ACCEPT
    #$IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port https –syn -j ACCEPT



    # SSH
    # Em mundo ideal voce possui um IP fixo em sua casa ou escritorio e deve liberar apenas
    # esse IP. Na pratica isso é muito raro, mas se for esse o seu caso, retire o comentario,
    # o simbolo de “#”, da linha abaixo. Nao se esqueca de colocar o endereco da sua conexao
    # nos parametros do comeco do script.
    #$IPTABLES -A INPUT -p tcp -s $ADMIN_IP/32 -d $SERVER_IP/32 –destination-port s sh –syn -j ACCEPT

    # LIBERA SSH PARA QUALQUER IP
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port ssh –syn -j ACCEPT


    # DNS
    #$IPTABLES -A INPUT -p udp -s 0/0 -d 0/0 –destination-port domain -j ACCEPT
    #$IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port domain -j ACCEPT


    # For FTP server, restricted to specific local hosts (and see /etc/xinetd.conf):
    # $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port ftp-data –syn -j A CCEPT
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port ftp –syn -j ACCEPT

    # MySQL
    # ATENCAO, permite que usuarios externos “tentem” se conectar ao seu mysql
    # $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port mysql –syn -j ACCEPT


    # se voce quiser bloquear algum endereco especifico, coloque na linha abaixo
    # e retire o comentario
    #$IPTABLES -A INPUT -s xyz.xyz.xyz.xyz/32 -d 0/0 -p tcp –syn -j DROP


    # Protecao contra SynFloods
    $IPTABLES -A INPUT -p tcp --syn -m limit --limit 3/s -j ACCEPT


    # Protecao contra ping da morte
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


    # Protecao contra ping flood
    $IPTABLES -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT



    # JOGOS
    #

    # CS
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port 27023 –syn -j ACCEPT
    $IPTABLES -A INPUT -p udp -s 0/0 -d 0/0 –destination-port 27023 –syn -j ACCEPT

    # CS
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port 27043 –syn -j ACCEPT
    $IPTABLES -A INPUT -p udp -s 0/0 -d 0/0 –destination-port 27043 –syn -j ACCEPT

    # CS
    $IPTABLES -A INPUT -p tcp -s 0/0 -d 0/0 –destination-port 27053 –syn -j ACCEPT
    $IPTABLES -A INPUT -p udp -s 0/0 -d 0/0 –destination-port 27053 –syn -j ACCEPT

    # ENEMY TERRITORY
    $IPTABLES -A INPUT -p udp -s 0/0 -d 0/0 –destination-port 27961 –syn -j ACCEPT

  2. #2

    Padrão

    cara..

    esse script aí tem alguns erros e pode ficar mais organizado, vou te dar um exemplo de um script para sua situação:

    Código :
    #!/bin/bash
     
    IPT=`which iptables`
     
    # Interface que receberá as requisições
    IF=eth0
     
    # IP atribuído a $IF
    IP_SERV=200.200.200.200
     
    # Limpando regras antigas
     
    $IPT -t nat -F
    $IPT -t filter -F
    $IPT -t mangle -F
    $IPT -t nat -X
    $IPT -t filter -X
    $IPT -t mangle -X
     
    # Definindo política padrão
     
    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT ACCEPT
     
    # Portas TCP que terão acesso liberado
    TCP=22,80,21,27023,27043,27053,27961
     
    # Portas UDP que terão acesso liberado
    UDP=27043,27053,27961
     
    # Bloqueia pacotes com estado INVALID
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -m state --state INVALID -j DROP
     
    # Aceita conexões de pacotes com estado RELATED e ESTABLISHED
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -m state --state RELADES,ESTABLISHED -j ACCEPT
     
    # Aceita conexões das portas especificadas em TCP
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -p tcp -m multport --dports $TCP -j ACCEPT
     
    # Aceita conexões das portas especificadas em UDP
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -p tcp -m multport --dports $UDP -j ACCEPT
     
    # Protecao contra SynFloods
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -p tcp --syn -m limit --limit 3/s -j ACCEPT
     
    # Protecao contra ping da morte
    $IPT-t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    através deste script você pode modificá-lo para sua situação...
    Última edição por lucianogf; 30-01-2008 às 05:21.

  3. #3

    Padrão

    Valew amigo !
    Vou estar testando e te digo se ficou tudo OK !

    Att,

  4. #4

    Padrão

    cara..

    antes te testar, leia todo script, estude-o e principalmente, entenda todas as linhas.

  5. #5

    Padrão

    Citação Postado originalmente por lucianogf Ver Post
    cara..

    antes te testar, leia todo script, estude-o e principalmente, entenda todas as linhas.


    Eu já fiz isso e vi q era exatamente o q precisava ... mas como o mundo não é perfeito ... acabei vacilando .. meu server esta fora desde 14:20 e o pessoal ainda n resetou !! heuehueheu

    O q aconteceu foi o seguinte, eu deveria ter colocado as regras iniciais como ACCEPT .. e depois de tudo testado mudar para DROP ... mas não fiz ... entao quando mandei executar ele deu erro na linha
    $IPT -t filter -A INPUT -i $IF -s 0/0 -d $IP_SERV -m state --state RELADES,ESTABLISHED -j ACCEPT

    e bloqueou geral o server ... heuehueehuehu
    o erro foi na escrita "RELADES"
    Última edição por ESX; 30-01-2008 às 16:35.

  6. #6

    Padrão

    é... computador é um bixo burro, qualquer um saberia quem em vez de RELADES era RELATED... hehehe

    por isso que digo, quando pegar algo na net, leia, estude e entenda, pra depois usar...

    o erro não foi intencional, mas acontece..

  7. #7

    Padrão

    hehehehe ... cara .. pior q olhei tudo e nao percebi ... é q o cerebro já processa a informação pelo inicio da frase achando q o resto esta OK ... (q desculpa esfarrapada né.. heuheuehue)

    Mas vlw ... daqui a pouco o server ta online e eu mudo pra accept e vou colocar no cron para limpar o firewall a cada 10min .. ai da pra brincar e se errar .. so esperar.

  8. #8

    Padrão

    deu erro de multiporta .. vou colocar uma linha pra cada porta .. mas sabe como resolver ?
    iptables v1.3.5: Couldn't load match `multport':/lib64/iptables/libipt_multport.so: cannot open shared object file: No such file or directory

  9. #9

    Padrão

    Nao funcionou ... posso bloquear qualquer porta que consigo acessar externamente.

    ficou assim as regras:

    Chain INPUT (policy DROP)
    target prot opt source destination
    DROP all -- anywhere anywhere state INVALID
    ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
    ACCEPT tcp -- anywhere anywhere tcp dpt:http
    ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
    ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
    ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data
    ACCEPT tcp -- anywhere anywhere tcp dpt:27023
    ACCEPT tcp -- anywhere anywhere tcp dpt:27043
    ACCEPT tcp -- anywhere anywhere tcp dpt:27053
    ACCEPT tcp -- anywhere anywhere tcp dpt:27500
    ACCEPT udp -- anywhere anywhere udp dpt:27023
    ACCEPT udp -- anywhere anywhere udp dpt:27043
    ACCEPT udp -- anywhere anywhere udp dpt:27053
    ACCEPT udp -- anywhere anywhere udp dpt:27961
    ACCEPT udp -- anywhere anywhere udp dpt:27500
    ACCEPT tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN limi t: avg 3/sec burst 5
    ACCEPT icmp -- anywhere anywhere icmp echo-request limit: avg 1 /sec burst 5

    Chain FORWARD (policy DROP)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

  10. #10

    Padrão

    descobri q o problema esta na regra
    $IPT -t filter -A INPUT -p tcp --syn -m limit --limit 3/s -j ACCEPT

    ou seja, isso vai invalidar tudo q esta acima, vai aceitar qualquer coisa.
    Comentei a linha e passou a funcionar normalmente o firewall ..
    Mas como adicionar esta linha sem dar problemas no firewall ?

  11. #11