Iptables (Firewall.sh)

Firewall do Iptables simples que pode ser utilizado em servidor ou maquina pessoal

Categoria: Init

Software: Iptables

[ Hits: 37.292 ]

Por: Tacio de Jesus Andrade


Este Script de configuração do IPtables foi criado com base em diversos artigos do Viva o Linux e da leitura do livro: Servidores Linux - Guia Pratico do Morimoto.

Ele foi criado como um Daemon para poder ser adicionado como um serviço, bastando edita-lo da forma que preferir e depois jogar na pasta correspondente, no caso de distros Debian-Like (/etc/init.d/) e coloca-la para iniciar com o sistema.

Quando fizer alguma modificação nele para melhora-lo coloco aqui novamente.


#! /bin/bash
###############################################################################
# Autor: Tácio de Jesus Andrade
# Criação: 11/04/2011
# Modificação: 02/05/2011
# Função: Arquivo de Configuração Padrão do Firewall IpTables
# Utilização: Mova-o para o diretório /etc/init.d/ (em distros Debian-Like)
#             e adicione o serviço para iniciar com o Sistema (pode-se utilizar 
#             o rcconf ou o comando de carregamento do serviço de sua distro)
###############################################################################

case "$1" in
start)

    ###############
    # TITULO ABRE #
    ###############
    echo "Iniciando a Configuração do Firewall"

    ########################
    # Zera todas as Regras #
    ########################
    echo "Regras Zeradas"
      iptables -F

    ########################################
    # Bloqueia tudo, nada entra e nada sai #
    ########################################
    echo "Fechando tudo"
      iptables -P INPUT DROP
      iptables -P FORWARD DROP
      iptables -P OUTPUT DROP

    ############################################################################
    # Impede ataques DoS a maquina limitando a quantidade de respostas do ping #
    ############################################################################
    #echo "Previne ataques DoS"
    #  iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    #################################
    # Bloqieia completamente o ping #
    #################################
    echo "Bloqueia o pings"
      iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

    ##########################
    # Politicas de segurança #
    ##########################
    echo "Implementação de politicas de segurança"
      echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route # Impede falsear pacote
      echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects # Perigo de descobrimento de rotas de roteamento (desativar em roteador)
      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Risco de DoS
      echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Só inicia a conexão quando recebe a confirmação, diminuindo a banda gasta
      echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter # Faz o firewall responder apenas a placa de rede que recebeu o pacote
      iptables -A INPUT -m state --state INVALID -j DROP # Elimina os pacotes invalidos

    #################################
    # Libera conexoes estabelecidas #
    #################################
    echo "Liberando conexões estabelecidas"
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
      iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT

    #######################################################################################
    # Libera o acesso via SSH e Limita o número de tentativas de acesso a 4 a cada minuto #
    #######################################################################################
    #echo "Liberando o SSH"
    #  iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
    #  iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    #  iptables -A INPUT -p udp --dport 22 -j ACCEPT

    ##################
    # Libera o Samba #
    ##################
    #echo "Liberando o Samba"
    #  iptables -A INPUT -p tcp --dport 137:139 -j ACCEPT
    #  iptables -A INPUT -p udp --dport 137:139 -j ACCEPT

    ###################
    # Libera o Apache #
    ###################
    #echo "Liberando o Apache"
    #  iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    ################
    # TITULO FECHA #
    ################
    echo "Configuração do Firewall Concluida."

;;

stop)
     echo "Finalizando o Firewall"
     rm -rf /var/lock/subsys/firewall

     # -----------------------------------------------------------------
     # Remove todas as regras existentes
     # -----------------------------------------------------------------
       iptables -F
       iptables -X
       iptables -t mangle -F
     # -----------------------------------------------------------------
     # Reseta as politicas padrões, aceitar tudo
     # -----------------------------------------------------------------
       iptables -P INPUT   ACCEPT
       iptables -P OUTPUT  ACCEPT
       iptables -P FORWARD ACCEPT

;;

restart|reload)
       $0 stop
       $0 start
     ;;

*)
   echo "Selecione uma opção valida {start|stop|status|restart|reload}"
   exit 1

esac

exit 0
  


Comentários
[1] Comentário enviado por gurudefestas em 11/05/2011 - 17:25h

firewall =firewall
hackers
o
/
firewall





[2] Comentário enviado por BraveDOG em 14/05/2011 - 09:55h

Olá, na parte de liberação do SSH, a eth0 citada é a placa da rede local ou da internet (no caso da maquina ter duas placas de rede) ??

[3] Comentário enviado por Tacioandrade em 14/05/2011 - 22:11h

No meu caso, a maquina tem apenas 1 placa de rede (a de rede local). Caso você tenha 2 placas, é so colocar a placa que deseja librar na regra (que geralmente é eth0 interna e eth1 externa.

[4] Comentário enviado por BraveDOG em 15/05/2011 - 08:09h

Salve Tacio, obrigado pelo esclarecimento !!

Vou abusar mais um pouco .. rss..

Esse script é apropriado para uma rede ou só é válido para uma maquina ? E caso ele rode em rede como seria, por exemplo, dar acesso a porta 3070 a uma estação dessa rede que não seja o servidor ?

Abraços

[5] Comentário enviado por Tacioandrade em 15/05/2011 - 22:37h

Pode perguntar sem problemas. =D

Olha você pode utiliza-lo tanto em sua maquina local como em um servidor interno, como por exemplo um servidor de arquivos, apache local, etc, sem modificar quase nada, apenas descomentar as linhas referentes aos serviços que irá utilizar em seu computador/servidor.

Para liberar o acesso a porta 3070, adicione as seguintes regras de firewall no arquivo:

##################
# Libera a porta 3070 #
##################
echo "Liberando a porta 3070"
iptables -A INPUT -p tcp --dport 3070 -j ACCEPT
iptables -A INPUT -p udp --dport 3070 -j ACCEPT


Porem seria mais seguro para você, saber se o serviço que vai utilizar nesta porta utiliza apanas TCP ou apenas UDP e liberar apenas o que você for usar, apenas por segurança mesmo.

Espero ter ajudado.

[6] Comentário enviado por MatheusMassa em 10/06/2011 - 11:27h

Olá Tacio, muito bom seu script. Como sou iniciante tenho uma pergunta. Para liberar as portas para eu usar o torrent uso as mesmas regras do comentario acima ou tem algo diferente à fazer ?

[7] Comentário enviado por Tacioandrade em 10/06/2011 - 15:03h

Abra alguma porta no se script acima de 45000 (pois os scans geralmente so olham as portas mais baixas, como na seguinte regra:

############
# Libera Torrent #
############
echo "Liberando o torrent na porta 4111"
iptables -A INPUT -p tcp --dport 4111-j ACCEPT
iptables -A INPUT -p udp --dport 4111 -j ACCEPT

Depois disso vá no seu programa de torrent, como o transmission e faça com que ele use esta porta que está aberta para acesso do torrent.


Espero ter ajudado. =D


[8] Comentário enviado por t31x31r4-onl em 29/06/2011 - 10:23h

muito bom o script.
como eu faço para redirecionar uma porta para um outro endereço IP ? tipo um PortForward.

[9] Comentário enviado por removido em 29/12/2011 - 20:03h

Ola amigo, sem querer ser chato já sendo :D teria um script como esse para usar em uma empresa com duas placas de rede Interna e Externa . Ficaria grato.

[10] Comentário enviado por Tacioandrade em 29/12/2011 - 20:27h

Amigo, pronto não tenho, mais é bem simples você modificar este dai. Para a modificação recomendo adicionar no início:

INTERNA="eth0"
EXTERNA="eth1"

Depois modifique todas as regras acicionando -i INTERNA ou -i EXTERNA, mais ou menos assim:

iptables -A INPUT -p tcp -i INTERNA --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i EXTERNA --dport 80 -j ACCEPT

Espero ter ajudado.

[11] Comentário enviado por franklincsilva em 18/04/2012 - 16:05h

fazendo uso da pargunta do t31x... como faço para redirecionar a porta 3389 para um outro micro da rede.

vamos supor a porta 3389 é o ts do windows ate ae normal:

sendo que tenho duas maquinas que quero liberar acesso ts, cada uma com seu ip diferente como faço isso:

tipo assim:

tenho que permitir entrar por portas diferentes e entregar na porta 3389 tem como?

[12] Comentário enviado por tacioandrade em 18/04/2012 - 17:38h

Para fazer isso seria a mesma coisa. A regra de bloqueio fecha todas as portas que não foram bloqueadas, então é só liberar da seguinte forma:

iptables -A FORWARD -p tcp -d 192.168.x.x --dport 3389 -j ACCEPT

Caso você queira colocar por exemplo o servidor TS (protegido pelo firewall), para ser acessado via net, faça o seguinte:

iptables -t nat -A PREROUTING -d ip-servidor -p tcp -m tcp --dport 3389 -j DNAT --to-destination ip-ts:3389

Boa sorte ai. =)

[13] Comentário enviado por ragnar1720 em 27/12/2016 - 10:31h

Parabens e Obrigado pela contribuição, estou abrindo um Servidor Debian, e usarei alguma dessas regras, e adicionarei algumas minhas !

[14] Comentário enviado por Tacioandrade em 27/12/2016 - 16:36h


[13] Comentário enviado por ragnar1720 em 27/12/2016 - 10:31h

Parabens e Obrigado pela contribuição, estou abrindo um Servidor Debian, e usarei alguma dessas regras, e adicionarei algumas minhas !


Por nada, fico feliz em ter ajudado. =) Essas dai são boas para se usar como modelo, tanto que até hoje uso esse script quando esqueço que parâmetro usar, etc. rsrsrs


Att. Tácio Andrade.

[15] Comentário enviado por dommaster em 07/05/2017 - 19:46h

0

[16] Comentário enviado por Tacioandrade em 07/05/2017 - 23:50h


[15] Comentário enviado por dommaster em 07/05/2017 - 19:46h


Eu tenho um jogo online as vezes os play loga o mesmo jogo 2 ou 3 contas usando o mesmo IP, A pergunta é como permitir á entrada somente de um IP assim evitando do jogador abrir varias contas ao mesmo tempo.
E lembrando que uso acesso interno na maquina não podendo bloquear como faixas de IP local. a duvida é somente para IP externo de qualquer tipo seja dentro do brasil ou fora do brasil.
iptables diretamente do ubuntu server 64 bit.
ALGUÉM PODE ME AJUDAR OBRIGADO.


Nos dias de hoje isso dai é muito complicado, pois esses vários usuários podem ser pessoas usando apenas o mesmo provedor, por exemplo o pessoal que utiliza provedores de internet menores muitas vezes compartilham o mesmo IP atrás de um NAT (em um provedor que trabalhei um bairro inteiro utilizava apenas 1 IP válido), então esse tipo de bloqueio não é viável. =/

[17] Comentário enviado por dommaster em 08/05/2017 - 00:06h

sim intendi seu ponto de vista, mais consegue definir esse bloqueio ? pelo iptables e firewall

[18] Comentário enviado por Tacioandrade em 08/05/2017 - 02:28h


[17] Comentário enviado por dommaster em 08/05/2017 - 00:06h

sim intendi seu ponto de vista, mais consegue definir esse bloqueio ? pelo iptables e firewall


Se a aplicação jogar em algum lugar (log) o IP do cara que logou na aplicação sim, porém não é algo automático, você terá que montar um script que guarda os IPs logados, ve se é na mesma conta, caso não seja, bloqueia o IP, porém terá que montar tudo e eu não sei como fará isso.


Contribuir com comentário