Você está na página 1de 16

Introduo

Tive a iniciativa de fazer este artigo por ver muitas postagens, no frum do Viva o
Linux, a respeito dos temas que sero abordados.
Outro fato, para ajudar estudantes de cursos tcnicos e superiores de informtica a
terem uma vivncia maior na utilizao do GNU/Linux em ambientes para servidores,
saindo apenas da teoria para a prtica propriamente dita.
A distribuio utilizada ser o Ubuntu Server. A explicao o fator do suporte e
compatibilidade grande quantidade de hardware como placas de rede e RAID. Esta
distribuio tem suporte de atualizaes at 2019, ou seja, mais um fator que contribui
para a sua utilizao.
Procurarei seguir os padres da LPIC para abordagem dos temas aqui propostos. Ento,
ser um complemento a mais para quem estiver se preparando para prestar este to
importante exame.

Cenrio
Imaginemos o seguinte cenrio, de acordo com a figura 1:

O cliente passou as seguintes informaes:

Dois links de Internet;

Um servidor;

Possui 10 estaes de trabalho.

Suas necessidades, so:

Ativar um servidor DHCP;

Compartilhar a Internet e aplicar regras de bloqueio a sites e controle de banda,


mas sem a utilizao de um proxy;

Aplicar regras de segurana, j que esta mquina ser utilizada como Firewall;

Configurar os dois links de Internet de tal forma para que, quando um estiver
fora, o outro assuma.

Configurao dos links


No vou entrar no mrito da instalao do sistema operacional. Vou levar em
considerao que o sistema j esteja instalado.
Os dois links que o cliente possui so de operadoras distintas e o modem da mesma, se
encarrega de fazer a discagem PPPoE. Os dois links esto conectados a um Switch e o
servidor tambm.
Essa uma configurao semelhante em pequenas empresas e escritrios que no tm
tantos recursos para manter uma infraestrutura mais adequada.
As informaes que nos foram passadas pelo cliente a respeito do link, so:
Link 1 - Primrios:

IP do modem: 10.0.2.2

Mscara: 255.255.255.0

Rede: 10.0.2.0

Interface: eth0

Link 2 - Secundrio:

IP do modem: 192.168.1.1

Mscara: 255.255.255.0

Rede: 192.168.1.0

Interface: eth1

Rede local
Com essas informaes, j podemos configurar as interfaces de rede do servidor. A
mquina possui trs interfaces de rede, onde duas so para os links de Internet e a outra
para a rede local. O servidor precisa estar com os IPs configurados como fixo. Esta
configurao dever ser feita no arquivo /etc/network/interfaces.
# vi /etc/network/interfaces
E a configurao ficaria da seguinte forma:
# Link Primrio
auto eth0
iface eth0 inet static
address 10.0.2.254
netmask 255.255.255.0
network 10.0.2.0
broadcast 10.0.2.255
# Link Secundrio
auto eth1
iface eth1 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
# Rede Local
auto eth2
iface eth2 inet static
address 10.10.10.254
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
Salve o arquivo e saia do mesmo.
Para que as interfaces de redes sejam configuradas, execute o comando:
# /etc/init.d/networking restart
Verifique se as trs placas subiram com as devidas configuraes.

# ifconfig
Se por algum motivo no estiver apresentando informaes dos IPs nas placas, ou se
elas no subiram, execute o comando abaixo que analisa o contedo do arquivo
/etc/network/interfaces e reconfigure as mesmas com as informaes contidas neste
arquivo:
# ifdown eth0
# ifup eth0
# ifdown eth1
# ifup eth1
# ifdown eth2
# ifup eth2

Configurando o FailOver dos links


Este servio vai permitir que caso haja uma falha no primeiro link, o secundrio possa
assumir at o retorno do primrio.
Neste cenrio, h dois gateways:

10.0.2.2 (Primrio)

192.168.1.1 (Secundrio)

E abaixo, est o script utilizado para fazer o FailOver dos dois links:
#!/bin/bash
#---------------------------#
# CONFIGURAO DOS GATEWAYS #
#---------------------------#
GW1=10.0.2.2
GW2=192.168.1.1
LOG=/root/rc.firewall.log
#------------------------------#
# INCIO DA FUNO DE FAILOVER #
#------------------------------#
# Aqui optei em por uma funo para deixar a estrutura do
# script mais organizada e legvel. de suma importncia
# que voc esteja familiarizado com o shell script
failover ()
{

# Criao de um loop infinito para testar a disponibilidade


# dos links de internet
while [ 1 ]
do
# Altera sempre para o gateway padro dentro da tabela
# main de roteamento, ou seja, quando o link primrio voltar,
# automticamente a navegao volta para este
/sbin/ip route replace default via $GW1
# Neste for, o comando dig retornar os dois IPs relacionados
# ao site do UOL. Voc poderia por qualquer site a, porm o UOL
# retorna dois IPs que sero utilizados pelo script para saber
# se o link de internet principal est fora
for i in `dig +short uol.com.br`
do
# Verificando a comunicao do link de internet
/bin/ping -c 1 $i
done
# Caso o resultado do comando anterior seja 0 (zero), o link
# de internet principal est ok. Se for 1 (um) houve falha no comando
# deduzindo assim ausncia de conexo. Quem vai determinar isso o
# comando echo $?. Mais abaixo, haver um if para testar as condies
STATUS_CMD_LINK=`echo $?`
if [ $STATUS_CMD_LINK -eq 0 ]; then
# Caso haja sucesso no teste do comando do ping
# as regras para o compartilhamento de internet sero inseridas
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
else
# Se o link falhar, os comandos mais abaixo faro a limpeza
# das regras de iptables e iro configurar o segundo link de internet
# e ser criado um arquivo de log informando quando houve a queda
echo "_________________________" >> $LOG

echo " " >> $LOG


echo "# LINK SECUNDARIO ATIVO.: `date +%d/%m/%y-%H:%M:%S`">>
$LOG
echo " " >> $LOG
echo "_________________________" >> $LOG
/sbin/ip route replace default via $GW2
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
fi
# A cada 2 minutos (120 segundos) ser feito um teste no link
# principal para constar se o mesmo encontra-se no ar.
sleep 120
done
}
####### CHAMA A FUNO ########
failover
Lembre-se de salvar o seu script e dar permisso de execuo ao mesmo:
# chmod +x failover.sh
interessante deixar o script sendo executado em segundo plano, para liberar o terminal
para outras atividades.
# ./failover.sh
No esquea de pr a execuo do script na inicializao do sistema operacional. Edite
o arquivo /etc/rc.local e insira o caminho do script:
# vi /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/failover.sh &
exit 0
Aps salvar o arquivo, reinicie a mquina e veja se o script estar rodando com o
comando:
# ps -auxf | grep failover
Pronto! Os links j esto configurados e liberando a Internet para a rede local. Vamos
agora configurar o servio de DHCP e, por ltimo, acrescentar mais algumas regras s
tabelas do IPtables.

Configurando o servidor DHCP


Em nosso cenrio, o cliente possui 10 estaes de trabalho. Isso pode vir a aumentar
com o passar do tempo ou at diminuir. Porm, pensando em uma futura expanso, seria
muito trabalhoso se a rede aumentasse e tivssemos que pr IP nas mquinas
manualmente.
Uma soluo vivel, ativar um servio de DHCP. Como isto, toda mquina da rede
possuir um IP e informaes de gateway, DNS, entre outras.
O DHCP (Dynamic Host Configuration Protocol) um protocolo que funciona nas
camadas 2 e 3 do modelo OSI e amplamente utilizado para oferecer endereamento IP
a um host que ainda no est configurado, o que oferece uma flexibilidade ao
administrador de sistemas.
O protocolo DHCP opera da seguinte forma:

DHCPDISCOVER :: um cliente envia um quadro broadcast (destinado a todas


as mquinas) com um pedido DHCP.

DHCPOFFER :: o servidor DHCP captura o quadro e oferece um endereo IP ao


cliente.

DHCPREQUEST :: o cliente envia um DHCP REQUEST endereado para o


servidor DHCP aceitando o IP.

DHCPACK :: esse o pacote que confirma a atribuio de uma configurao de


rede a um cliente, ou seja, aquele cliente agora possui configuraes distribudas
pelo servidor DHCP.

DHCPNAK :: caso o cliente no aceite aquele endereo IP ele enviar um


DHCPNAK para o servidor, e realizar o DHCPDISCOVER novamente.

Fonte: Dhcp | TutoriaisGNULinux.com

Instalando o servio
Em distribuies derivadas do Debian o pacote a ser instalado o isc-dhcp-server:
# aptitude install isc-dhcp-server
Eu recomendo definir logo qual a placa que estaro servindo os IPs para o demais
micros na rede. Isso til para no haver problemas e conflitos no servio. Edite o
arquivo /etc/default/isc-dhcp-server:
# vi /etc/default/isc-dhcp-server
Na varivel "INTERFACE", digite o nome da interface de rede local. No meu caso
eth2 como visto abaixo:
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid

# Additional options to start dhcpd with.


#
Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#
Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth2"
Feito isso, salve o arquivo e reinicie o servio de DHCP:
# service isc-dhcp-server restart
O nome do servio isc-dhcp-server e o arquivo para configurao do mesmo, o
dhcpd.conf.
Faa uma cpia do arquivo original:
# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.old
Agora, vamos limpar o arquivo atual, j que este contm um modelo para utilizao do
servio e vamos digitar as nossas configuraes:
# echo " " > /etc/dhcp/dhcpd.conf
Vamos comear a editar o arquivo:
# vi /etc/dhcp/dhcpd.conf
Insira as configuraes, abaixo de acordo com a sua realidade:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.100 10.10.10.115;
option routers 10.10.10.254;
option domain-name-servers 8.8.8.8,208.67.220.220;
option broadcast-address 10.10.10.255;
}
Abaixo, explico alguns detalhes das configuraes anteriores:

default-lease-time 600 :: servidores DHCP cedem endereos sob pedido por um


tempo pr-determinado. O padro nesse exemplo, ceder o endereo IP por 600
segundos, ou 10 minutos.

max-lease-time 7200 :: caso o cliente solicite um tempo maior, o tempo mximo


permitido ser de 7.200 segundos (2 horas).

option subnet-mask :: essa opo define a mscara de sub-rede a ser fornecida


aos clientes.

option broadcast-address :: essa opo define o endereo de envio para


requisies de broadcast.

option routers :: o cliente, alm do nmero IP, recebe tambm a informao do


nmero do host que o gateway de sua rede.

option domain-name-servers :: essa opo lista os servidores de nomes (DNS) a


serem utilizados para resoluo de nomes.

Configurando um IP fixo
Em algumas situaes, pode ser necessrio que uma mquina ou dispositivo na rede,
tenha um IP fixo como uma impressora compartilhada em um computador, um
notebook de um gerente, entre outros.
Para resolver essa questo, basta inserir as informaes abaixo, aps a ltima chave
("}"):
host gerente {
hardware ethernet 00:80:C7:D2:E8:D3;
fixed-address 10.10.10.20;
}
O arquivo final, ficaria assim:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.100 10.10.10.115;
option routers 10.10.10.254;
option domain-name-servers 8.8.8.8,208.67.220.220;
option broadcast-address 10.10.10.255;
}
host gerente {
hardware ethernet 00:80:C7:D2:E8:D3;
fixed-address 10.10.10.20;
}

Obs.: o IP da mquina do gerente, foi posto fora do range padro para diferenciar dos
demais. Apenas como forma de organizao.
Feche o arquivo e reinicie o servio de DHCP:
# service isc-dhcp-server restart
Para visualizar os IPs que j foram entregues s estaes de trabalho:
# cat /var/lib/dhcp/dhcpd.leases
Pronto! Finalizada mais uma etapa.
Neste momento, os clientes j esto recebendo IP automaticamente e navegando na
Internet sem problemas.
Configuraes de Firewall

O Netfilter um mdulo que fornece ao sistema operacional Linux as


funes de firewall, NAT e log dos dados que trafegam por rede de
computadores.
IPtables o nome da ferramenta utilizada pelo usurio que permite a
criao de regras de Firewall e NATs. Apesar de, tecnicamente, o IPtables ser
apenas uma ferramenta que controla o mdulo Netfilter, o nome "IPtables"
frequentemente utilizado como referncia ao conjunto completo de
funcionalidades do Netfilter. O IPtables parte de todas as distribuies
modernas do GNU/Linux.
Fonte: Netfilter Wikipdia, a enciclopdia 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 execuo de aplicativos torrent.
Crie o arquivo de Firewall com o nome que desejar:
# vi rc.firewall.sh
E insira as informaes abaixo:
#!/bin/bash
#------------------------------#

# CONFIGURAO INICIAL
#------------------------------#

IPT=/sbin/iptables
#----------------------#
#
FUNES
#
#----------------------#
iniciar(){
#-----------------------------------------#
# Proteo contra ataques externos
#-----------------------------------------#

# Manter a poltica drop por padro no FORWARD


$IPT -P FORWARD DROP
# Protees 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 avanados (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 informaes da rede
interna
$IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

# Bloqueio de contedo
# Crie o arquivo blacklist e aponte para a sua exata localizao no loop
abaixo
# Dentro dessa lista voc vai por palavras como sexo, [*****], pornografia
entre outros
# Esta regra de iptables vai analisar o contedo do pacote e se achar uma
das strings que esto
# 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 mdulo xtables-addons-common
instalado )
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT

-I FORWARD -p tcp -m ipp2p --bit -j DROP


-I FORWARD -p udp -m ipp2p --bit -j DROP
-I FORWARD -p tcp -m ipp2p --edk -j DROP
-I FORWARD -p udp -m ipp2p --edk -j DROP
-I FORWARD -p tcp -m ipp2p --dc -j DROP
-I FORWARD -p tcp -m ipp2p --kazaa -j DROP
-I FORWARD -p udp -m ipp2p --kazaa -j DROP
-I FORWARD -p tcp -m ipp2p --kazaa -j DROP
-I FORWARD -p udp -m ipp2p --kazaa -j DROP
-I FORWARD -p tcp -m ipp2p --ares -j DROP
-I FORWARD -p tcp -m ipp2p --soul -j DROP
-I FORWARD -p tcp -m ipp2p --winmx -j DROP
-I FORWARD -p tcp -m ipp2p --apple -j DROP
-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 endereos especficos para bloquear como
www.youtube.com
# Evite por a palavra youtube no arquivo blacklist, pois, a o Google no vai
abrir por conta que a pgina
# deste contm referncia 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
#-----------------------------------------------------------#
# Liberao de HOSTS para acessar FULL a internet
#-----------------------------------------------------------#

# Aqui voc pem os IPs que tero acesso FULL, os demais tero as
restries das regras anteriores. Basta apenas pr o nmero
# 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 contedo de todas as tabelas
#------------------------------------------------#
$IPT
$IPT
$IPT
$IPT
$IPT
$IPT
}

-F
-X
-t nat -F
-t nat -X
-t mangle -F
-t mangle -X

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parmetros start ou stop"
esac
Uma dica muito importante pr 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 iro funcionar
normalmente.
A execuo 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
Concluso

Bom pessoal, com isso finalizo este artigo.


Todos os scripts foram testados em laboratrios virtuais com sucesso,
porm, pode haver melhorias sim, nestes, e vocs podem ajudar a propagar
o conhecimento do GNU/Linux.
Recomendo complementar os estudos com outros artigos aqui na
comunidade VOL que ajudaro, e muito, a complementar o seu
conhecimento.
Boa sorte a todos e bons estudos.

Você também pode gostar