Montando Servidor de Internet com Ubuntu Server

Abordagem deste artigo vai tratar da montagem um servidor para compartilhamento de Internet para uma pequena empresa, utilizando os serviços de DHCP e IPtables.

[ Hits: 154.425 ]

Por: Wagner Souza em 12/09/2014 | Blog: https://medium.com/@souzaw


Configurações de Firewall



O Netfilter é um módulo que fornece ao sistema operacional Linux as funções de firewall, NAT e log dos dados que trafegam por rede de computadores.

IPtables é o nome da ferramenta utilizada pelo usuário que permite a criação de regras de Firewall e NATs. Apesar de, tecnicamente, o IPtables ser apenas uma ferramenta que controla o módulo Netfilter, o nome "IPtables" é frequentemente utilizado como referência ao conjunto completo de funcionalidades do Netfilter. O IPtables é parte de todas as distribuições modernas do GNU/Linux.

Fonte: Netfilter – Wikipédia, a enciclopédia livre

Antes de configurar as regras de Firewall, instale os pacotes:

# apt-get install build-essential
# apt-get install xtables-addons-common

Este último pacote servirá para bloquear a execução de aplicativos torrent.

Crie o arquivo de Firewall com o nome que desejar:

# vi rc.firewall.sh

E insira as informações abaixo:

#!/bin/bash

#------------------------------#
# CONFIGURAÇÃO INICIAL         #
#------------------------------#

IPT=/sbin/iptables

#----------------------#
#       FUNÇÕES        #
#----------------------#

iniciar(){

#-----------------------------------------#
# Proteção contra ataques externos        #
#-----------------------------------------#

# Manter a política drop por padrão no FORWARD

$IPT -P FORWARD DROP

# Proteções contra ataques

    $IPT -A INPUT -m state --state INVALID -j DROP

# Ping flood (ping da morte)

    $IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Protege contra os ataques do tipo "Syn-flood, DoS, etc"

    $IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

# Permitir repassamento (NAT, DNAT, SNAT) de pacotes estabilizados e os relatados ...

    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Logar os pacotes mortos por inatividade

    $IPT -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG

# Protege contra port scanners avançados (Ex.: nmap)

    $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Protege contra pacotes que podem procurar e obter informações da rede interna

    $IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

# Bloqueio de conteúdo
# Crie o arquivo blacklist e aponte para a sua exata localização no loop abaixo
# Dentro dessa lista você vai por palavras como sexo, porno, pornografia entre outros
# Esta regra de iptables vai analisar o conteúdo do pacote e se achar uma das strings que estão
# mencionadas

    for  i in `cat /root/blacklist`
    do
        $IPT -I FORWARD -m string --string "$i" --algo bm -j REJECT
    done

# Bloquear torrent ( Precisa ter o módulo xtables-addons-common instalado )

$IPT -I FORWARD -p tcp -m ipp2p --bit -j DROP
$IPT -I FORWARD -p udp -m ipp2p --bit -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --edk -j DROP
$IPT -I FORWARD -p udp -m ipp2p --edk -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --dc -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p udp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p udp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --ares -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --soul -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --winmx -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --apple -j DROP
$IPT -t mangle -A PREROUTING -m ipp2p --bit -j DROP

#-------------------------------------------#
# Liberar portas TCP para a rede local      #
#-------------------------------------------#

PORTAS_LIBERADAS="20 21 25 53 80 81 110 443 465 587 995"
for i in $PORTAS_LIBERADAS
do
    $IPT -A FORWARD -d 0/0 -p tcp --dport $i -j ACCEPT
    $IPT -A FORWARD -d 0/0 -p tcp --sport $i -j ACCEPT
done

#-------------------------------------------#
# Liberar portas UDP para a rede local      #
#-------------------------------------------#

PORTAS_LIBERADAS="20 21 53"
for i in $PORTAS_LIBERADAS
do
    $IPT -A FORWARD -d 0/0 -p udp --dport $i -j ACCEPT
    $IPT -A FORWARD -d 0/0 -p udp --sport $i -j ACCEPT
done

# No arquivo urlbad, você bota endereços específicos para bloquear como www.youtube.com
# Evite por a palavra youtube no arquivo blacklist, pois, aí o Google não vai abrir por conta que a página
# deste contêm referência ao YouTube. Prefira utilizar a regra abaixo que bloqueia qualquer urlbad para a rede local
# a minha rede local é 10.10.10.0/24

for i in `cat /root/urlbad`
do
    $IPT -I FORWARD -s $i -d 10.10.10.0/24 -j DROP
    $IPT -I FORWARD -s 10.10.10.0/24 -d $i -j DROP
done

#-----------------------------------------------------------#
# Liberação de HOSTS para acessar FULL  a internet          #
#-----------------------------------------------------------#

# Aqui você põem os IPs que terão acesso FULL, os demais terão as restrições das regras anteriores. Basta apenas pôr o número
# final do IP e ajustar a regra à sua rede local

HOSTS_LIBERADOS="102 110"
for i in $HOSTS_LIBERADOS
do
        $IPT -I FORWARD -d 10.10.10.$i -j ACCEPT
        $IPT -I FORWARD -s 10.10.10.$i -j ACCEPT
done

}

parar(){

#------------------------------------------------#
# Apagando o conteúdo de todas as tabelas        #
#------------------------------------------------#

    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X

}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parâmetros start ou stop"
esac

Uma dica muito importante é pôr esse arquivo, rc.firewall.sh, para rodar primeiro que o script do failover.sh, pois este último realiza uma "limpeza" nas regras do Netfilter (IPtables). Assim, os dois scripts irão funcionar normalmente.

A execução do script rc.firewall.sh é da seguinte forma:

Iniciar o script:

# ./rc.firewall.sh start

Parar o script:

# ./rc.firewall.sh stop

Restartar o script:

# ./rc.firewall.sh restart

Veja como ficou o meu arquivo /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/root/rc.firewall.sh start
/root/failover.sh &

exit 0

Conclusão

Bom pessoal, com isso finalizo este artigo.

Todos os scripts foram testados em laboratórios virtuais com sucesso, porém, pode haver melhorias sim, nestes, e vocês podem ajudar a propagar o conhecimento do GNU/Linux.

Recomendo complementar os estudos com outros artigos aqui na comunidade VOL que ajudarão, e muito, a complementar o seu conhecimento.

Boa sorte a todos e bons estudos.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Configuração dos links
   3. Configurando o servidor DHCP
   4. Configurações de Firewall
Outros artigos deste autor

Exploração de Falhas em Servidores FTP

Atualização das provas LPIC-1, 304 e Essentials

Teste de Intrusão com Metasploit

Algoritmos em Shell Script

Shell Script nosso de cada dia - Episódio 3

Leitura recomendada

ZRAM (Compressed RAM) no Debian

Criando disquetes de inicialização

Instalando Cacti no Debian 5.0

Criando facilmente um servidor APACHE2 + PHP5 (ou PHP4) + SNMP + MRTG

Instalação e configuração do gdesklets no Slackware 10

  
Comentários
[1] Comentário enviado por danniel-lara em 12/09/2014 - 09:43h

Parabéns pelo Artigo principalmente pela parte de Configuranção do FailOver

[2] Comentário enviado por kciolucio em 12/09/2014 - 09:58h

Muito bom artigo Wagner, parabéns!

[3] Comentário enviado por konishi em 15/09/2014 - 19:08h

Muito bom!

[4] Comentário enviado por thalesx em 29/09/2014 - 16:09h

Excelente!

[5] Comentário enviado por kaique-rangel em 30/10/2014 - 16:23h

Muito Bom!

[6] Comentário enviado por removido em 04/11/2014 - 15:48h

Excelente material!

[7] Comentário enviado por fbocosta em 13/11/2014 - 10:41h

SHow !! Mais e o controle de banda ?

[8] Comentário enviado por metzjuarez em 11/12/2014 - 09:05h

Bom dia, preciso de uma ajuda, fiz todos os passos descritos, mas não consigo navegar na internet nos clientes.

O servidor é Ubuntu Server 14.04 LTS.
Tem 3 placas de redes.
2 entra a internet, estão fucionando.
1 sai a rede local, está distribuindo os endereços de rede, porem não navegam.

O que pode ser que está faltando?

[9] Comentário enviado por MAPOGOS em 20/12/2014 - 19:44h

Muito bom este arquivo.

[10] Comentário enviado por augusto.jcs em 13/01/2015 - 18:24h

Wagner Souza, gostaria de saber se nessa configuração de servidor fica só um gateway pra toda a rede mesmo com dois links de conexão ??? Pois tenho uma pequena rede de 30 Pcs, tenho dois links de acesso a internet e gostaria das mesmas configurações do seu artigo acima só que um link distribuísse para 15 pcs e o outro para os outros 15... se e que você me entendeu!!!??? Desde já agradeço se me ajudar!!!

[11] Comentário enviado por andressa.moura em 29/04/2015 - 14:00h

Excelente artigo! Muito fácil de entender. Parabéns!

Nesse caso você tem um link como reserva. Mas se quiser ter os dois links funcionando juntos porém em redes diferentes, como faria? Ex: 10 pcs usam o primeiro link e 10 usam o segundo link.
Acho que é semelhante a situação do colega augusto.jcs que perguntou aí em cima...
Seriam duas redes e dois gateways diferentes.

[12] Comentário enviado por wagnerfs em 29/04/2015 - 21:27h

Boa noite.

Prezado, andressa.moura neste caso seria um outro artigo a parte. Mas caso queria se antecipar, aqui mesmo no VOL já foram publicados alguns temas sobre o assunto. Para fazer isso é preciso criar tabelas com as devidas rotas com o comando ip router.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782

[13] Comentário enviado por hwrbet em 27/09/2015 - 21:58h

Excelente didática, parabens!!!

[14] Comentário enviado por wagnerfs em 28/09/2015 - 21:58h


[13] Comentário enviado por hwrbet em 27/09/2015 - 21:58h

Excelente didática, parabens!!!


Obrigado pelo incentivo.

[15] Comentário enviado por leofernandesms em 06/11/2015 - 12:57h

Olá! Eu instalei o linux (distro Ubuntu) agora, versão para desktop. É possível aplicar esse tutorial nele? ou Vai ser necessário instalar uma versão para servidor? Desculpe se falei alguma bobagem, mas to começando a usar linux agora, e tenho interesse em ser adm de rede. A propósito, o artigo é muito bom, excelente didática.

[16] Comentário enviado por wagnerfs em 09/11/2015 - 10:42h


[15] Comentário enviado por leofernandesms em 06/11/2015 - 12:57h

Olá! Eu instalei o linux (distro Ubuntu) agora, versão para desktop. É possível aplicar esse tutorial nele? ou Vai ser necessário instalar uma versão para servidor? Desculpe se falei alguma bobagem, mas to começando a usar linux agora, e tenho interesse em ser adm de rede. A propósito, o artigo é muito bom, excelente didática.


Você pode usar a versão desktop sim, porém, esta possui uma interface gráfica bem como aplicativos desnecessários para um servidor.

[17] Comentário enviado por bruninhocielo em 12/11/2015 - 22:57h

Olá realmente muito boa a dinamica ...porem nao obtive sucesso estou tendo o mesmo problema q o amigo ,,,::
Bom dia, preciso de uma ajuda, fiz todos os passos descritos, mas não consigo navegar na internet nos clientes.

O servidor é Ubuntu Server 14.04 LTS.
Tem 3 placas de redes.
2 entra a internet, estão fucionando.
1 sai a rede local, está distribuindo os endereços de rede, porem não navegam.
que pode ser que está faltando?

no meu caso eth0 é a rede local ( dhcpd)
eth1 é a net ( dhcp)
eth2 vivo fibra pppoe

servidor navega...quando desligo o modem da vivo apos 2 minutos funciona a net automaticamente..
as maquinas recebem os ips...mas nao navegam...

usei a versao desktop ( pois a maquina é um i3 4gb 500) ...e me acho mais facilmente no modo grafico...kkkk
Fatos estranhos:
com a vivo conectada parece q navegacao fica mais lenta mesmo sendo 100mb ...e no teste de velocidade bate 108mb...
qdo ligo a maquina aprece uma msg de aguarde preparando rede....depois pede mais 60 segundos...depois da um erro que o sistema esta inicializando porem sem configuracao de rede completa....( porem no servidor ambas conexoes funcionam e as maquinas recebem os ips)
outro fato estranho qdo mando rodar o firewall.sh ...da algumas msg de no match chain....algo assim...
porem mesmo com o servico "parado" ..nao muda nada...

acho estranho o fato da configuracao da placa da rede local ficar com o gateway semlhante ao ip principal...nao testei colocar o gateway da net por exemplo na principal...porem se fosse assim só funcionaria a net nao é isso ?

Desde já agradeco !! a ajuda !!! li reli refiz...e nada...abs

[18] Comentário enviado por mastermoral em 29/05/2016 - 14:38h

Muito bom, simples e claro.
Obrigado

[19] Comentário enviado por guto__007 em 30/06/2018 - 14:27h

boa tarde,
Estou tentando montar um servidor de internet aqui no meu comercio, tenho dois links
link1 192.168.0.1
link2 192.168.02

e estou tentando configurar o ubuntu no virtual box, e estou com dificuldades bem no começo ja, porque nao consigo colocar os ip fixo, acho que é alguma configuração nas placas do virtual box, alguem poderia por favor me dar uma ajuda, em arrumar as placas do vb, e sobre minha classe de ip, se eu devo mudar o ips dos modem ou deixo assim mesmo?

Desde ja agradeço a todos, e essa comunidade e 100%..

[20] Comentário enviado por guto__007 em 01/07/2018 - 16:28h

boa tarde, resolvi a situação mundando o comando de eth0 para enp0s3, mas meu script continua dando erro de sintaxe, algum pode dar uma ajuda?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts