Visite também: BR-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]

Tutoriais/Loadbalance

De UnderLinux Wiki

<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head> <meta http-equiv=Content-Type content="text/html; charset=us-ascii"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 11"> <meta name=Originator content="Microsoft Word 11"> <link rel=File-List href="Tutorial-InstalandoumservidorLinuxFedoraCore3_arquivos/filelist.xml"> <title>MANUAL DE INSTALAÇÃO</title> <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"

name="PersonName"/>

<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"

name="State"/>

<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"

name="place"/>

<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"

name="metricconverter"/>

<style> </style> </head>

<body lang=PT-BR link=blue vlink=purple style='tab-interval:35.4pt'>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

MANUAL DE INSTALAÇÃO<o:p></o:p>

SERVIDORES/GATEWAY LINUX<o:p></o:p>

<o:p> </o:p>

RED HAT FEDORA CORE 3<o:p></o:p>


<a name="_Toc126167755"><![if !supportLists]>A.      <![endif]>Sumário</a>

<a href="#_Toc126167755">A.        Sumário. 2</a><o:p></o:p>

<a href="#_Toc126167756">B.        Introdução. 4</a><o:p></o:p>

<a href="#_Toc126167757">1.         Instalação do sistema operacional. 5</a><o:p></o:p>

<a href="#_Toc126167758">a.      Seleção de pacotes 5</a><o:p></o:p>

<a href="#_Toc126167759">b.      instalação de novos pacotes 6</a><o:p></o:p>

<a href="#_Toc126167760">c.      Atualizando o relógio da máquina pela internet 7</a><o:p></o:p>

<a href="#_Toc126167761">2.         compilando o kernel. 9</a><o:p></o:p>

<a href="#_Toc126167762">a.      Baixando o source do kernel 9</a><o:p></o:p>

<a href="#_Toc126167763">b.      Aplicando patchs ao novo kernel 9</a><o:p></o:p>

<a href="#_Toc126167764">i.        L7-Filter 10</a><o:p></o:p>

<a href="#_Toc126167765">ii.       Static, Alternative Routes, Dead Gateway Detection, NAT. 10</a><o:p></o:p>

<a href="#_Toc126167766">c.      compilando o kernel 11</a><o:p></o:p>

<a href="#_Toc126167767">d.      DEUS! NÃO inicia mais... 12</a><o:p></o:p>

<a href="#_Toc126167768">3.         software: QoS / nat / roteamento / load balance. 13</a><o:p></o:p>

<a href="#_Toc126167769">a.      iptables + l7-filter 13</a><o:p></o:p>

<a href="#_Toc126167770">b.      load balance (balanceamento de carga) 14</a><o:p></o:p>

<a href="#_Toc126167771">4.         software: cache (squid). 20</a><o:p></o:p>

<a href="#_Toc126167772">5.         software: email / spamassasin / anti vírus. 21</a><o:p></o:p>

<a href="#_Toc126167773">a.      Clamav Antivírus 22</a><o:p></o:p>

<a href="#_Toc126167774">i.        Fazendo Upgrade do Clamav. 24</a><o:p></o:p>

<a href="#_Toc126167775">b.      SpamAssassin. 26</a><o:p></o:p>

<a href="#_Toc126167776">c.      IMAP e POP. 26</a><o:p></o:p>

<a href="#_Toc126167777">d.      Inicializando os serviços 27</a><o:p></o:p>

<a href="#_Toc126167778">6.         software: servidor web (apache) / php / MYSQL. 28</a><o:p></o:p>

<a href="#_Toc126167779">a.      Configurando o Apache. 28</a><o:p></o:p>

<a href="#_Toc126167780">i.        Arquivo /etc/httpd/conf/httpd.conf 28</a><o:p></o:p>

<a href="#_Toc126167781">ii.       Arquivo /etc/httpd/conf.d/welcome.conf 28</a><o:p></o:p>

<a href="#_Toc126167782">iii.      Arquivo /etc/httpd/conf.d/virtuais.conf 28</a><o:p></o:p>

<a href="#_Toc126167783">b.      Configurando o PHP. 28</a><o:p></o:p>

<a href="#_Toc126167784">c.      Instalando e configurando o MySQL Server 29</a><o:p></o:p>

<a href="#_Toc126167785">7.         software: dns (bind). 30</a><o:p></o:p>

<a href="#_Toc126167786">a.      Arquivo /etc/named.conf 30</a><o:p></o:p>

<a href="#_Toc126167787">b.      Arquivo /var/named/named.ca. 31</a><o:p></o:p>

<a href="#_Toc126167788">c.      Arquivo /var/named/200.163.208.local 32</a><o:p></o:p>

<a href="#_Toc126167789">d.      Arquivo /var/named/cnett.com.br.zone. 32</a><o:p></o:p>

<a href="#_Toc126167790">8.         script: firewall / controle de banda. 35</a><o:p></o:p>

<a href="#_Toc126167791">9.         software: pppoe server / autenticação radius. 36</a><o:p></o:p>

<a href="#_Toc126167792">a.      Freeradius 36</a><o:p></o:p>

<a href="#_Toc126167793">i.        Arquivo /etc/raddb/radiusd.conf 36</a><o:p></o:p>

<a href="#_Toc126167794">ii.       Arquivo /etc/raddb/clients.conf 36</a><o:p></o:p>

<a href="#_Toc126167795">iii.      Arquivo /etc/raddb/dictionary. 36</a><o:p></o:p>

<a href="#_Toc126167796">iv.      Arquivo /etc/raddb/naslist 37</a><o:p></o:p>

<a href="#_Toc126167797">v.       Arquivo /etc/raddb/naspasswd. 37</a><o:p></o:p>

<a href="#_Toc126167798">vi.      Arquivo /etc/raddb/users. 37</a><o:p></o:p>

<a href="#_Toc126167799">b.      PPPoE Server 38</a><o:p></o:p>

<a href="#_Toc126167800">10.      monitoramento: cacti / mrtg / snmp / ntop. 42</a><o:p></o:p>

<a href="#_Toc126167801">11.      finalmente. 43</a><o:p></o:p>

<a href="#_Toc126167802">a.      pacotes que podem ser removidos 43</a><o:p></o:p>

<a href="#_Toc126167803">12.      Bibliografia e webografia. 44</a><o:p></o:p>

<o:p> </o:p>


<a name="_Toc126167756"><![if !supportLists]>B.      <![endif]>Introdução</a>

<o:p> </o:p>


<a name="_Toc126167757"><![if !supportLists]>1.           <![endif]>Instalação do sistema operacional</a>

               Este documento não visa explicar como deve ser feita a instalação de um sistema operacional linux com suas partições e afins. Para isso existem diversos outros documentos na internet. “O Google é seu amigo”.

               Apenas para que se saiba a versão a ser utilizada neste documento é a distribuição linux da Red Hat denominada Fedora Core 3. Mais informações sobre ela podem ser conseguidos no site:

<a href="http://www.redhat.com/en_us/USA/fedora/">http://www.redhat.com/en_us/USA/fedora/</a>

               Alguns pontos que serão abordados é o formato como fiz a minha instalação, principalmente na questão de seleção de pacotes e remoção de pacotes inúteis após a instalação do sistema.

<a name="_Toc126167758"><![if !supportLists]>a.            <![endif]>Seleção de pacotes</a>

               Após a instalação (onde selecionei a opção Custom e desmarquei todos os pacotes que são instalados por padrão, ficando a instalação com 591 MB e utilizando apenas o CD 1 do Fedora Core 3) fiz uma seleção de vários pacotes que eu acho inúteis e que nunca usei ou ainda nem tive tempo de descobrir para que servem. Abaixo está a listagem de todos os arquivos que removi do sistema.<o:p></o:p>


xorg-x11-libs-6.8.1-12.i386<o:p></o:p>

fontconfig-2.2.3-5<o:p></o:p>

ed-0.2-36<o:p></o:p>

pyxf86config-0.3.19-1<o:p></o:p>

policycoreutils-1.17.6-2<o:p></o:p>

synaptics-0.13.5-5<o:p></o:p>

xorg-x11-Mesa-libGL-6.8.1-12<o:p></o:p>

system-config-mouse-1.2.9-1<o:p></o:p>

bluez-libs-2.10-2<o:p></o:p>

eject-2.0.13-10<o:p></o:p>

anacron-2.3-32<o:p></o:p>

htmlview-3.0.0-8<o:p></o:p>

nc-1.10-22<o:p></o:p>

aspell-0.50.5-3.fc3<o:p></o:p>

fbset-2.1-17<o:p></o:p>

rdate-1.4-2<o:p></o:p>

rsh-0.17-23<o:p></o:p>

slocate-2.7-12<o:p></o:p>

tmpwatch-2.9.1-1<o:p></o:p>

wireless-tools-27-0.pre25.2<o:p></o:p>

gpm-1.20.1-66<o:p></o:p>

krb5-workstation-1.3.4-7<o:p></o:p>

libxslt-1.1.11-1<o:p></o:p>

minicom-2.00.0-19<o:p></o:p>

nss_db-2.2-29<o:p></o:p>

bind-utils-9.2.4-2<o:p></o:p>

pinfo-0.6.8-7<o:p></o:p>

lftp-3.0.6-3<o:p></o:p>

bluez-utils-2.10-2<o:p></o:p>

libxml2-python-2.6.14-2<o:p></o:p>

rhnlib-1.8-6.p23.fc3<o:p></o:p>

jpackage-utils-1.5.38-1jpp_3rh<o:p></o:p>

pam_ccreds-1-3<o:p></o:p>

sudo-1.6.7p5-30.1<o:p></o:p>

xmlsec1-openssl-1.2.6-3<o:p></o:p>

apmd-3.0.2-24<o:p></o:p>

dhclient-3.0.1-11<o:p></o:p>

ipsec-tools-0.3.3-1<o:p></o:p>

mkbootdisk-1.5.2-1<o:p></o:p>

autofs-4.1.3-28<o:p></o:p>

nss_ldap-220-3<o:p></o:p>

ppp-2.4.2-6.4.FC3<o:p></o:p>

rp-pppoe-3.5-22<o:p></o:p>

mdadm-1.6.0-2<o:p></o:p>

system-config-network-tui-1.3.22-1<o:p></o:p>

redhat-lsb-1.3-4<o:p></o:p>

yp-tools-2.8-7<o:p></o:p>

dmraid-1.0.0-rc5<o:p></o:p>

checkpolicy-1.17.5-1<o:p></o:p>

freetype-2.1.9-1<o:p></o:p>

ash-0.3.8-20<o:p></o:p>

nscd-2.3.3-74<o:p></o:p>

authconfig-4.6.5-3.1<o:p></o:p>

setools-1.4.1-5<o:p></o:p>

rhpl-0.148-1<o:p></o:p>

selinux-policy-targeted-1.17.30-2.19<o:p></o:p>

kbd-1.12-2<o:p></o:p>

cryptsetup-0.1-4<o:p></o:p>

bluez-hcidump-1.11-1<o:p></o:p>

dosfstools-2.8-15<o:p></o:p>

bluez-bluefw-1.0-6<o:p></o:p>

mt-st-0.8-1<o:p></o:p>

mtr-0.54-10<o:p></o:p>

pam_smb-1.1.7-5<o:p></o:p>

aspell-en-0.51-11<o:p></o:p>

numactl-0.6.4-1.9<o:p></o:p>

procmail-3.22-14<o:p></o:p>

rdist-6.1.5-38<o:p></o:p>

rsync-2.6.3-1<o:p></o:p>

statserial-1.1-35<o:p></o:p>

talk-0.17-26<o:p></o:p>

telnet-0.17-30<o:p></o:p>

unzip-5.51-4<o:p></o:p>

zip-2.3-24<o:p></o:p>

at-3.1.8-60<o:p></o:p>

jwhois-3.2.2-6<o:p></o:p>

libxml2-2.6.14-2<o:p></o:p>

make-3.80-5<o:p></o:p>

irda-utils-0.9.16-3<o:p></o:p>

nano-1.2.4-1<o:p></o:p>

bind-libs-9.2.4-2<o:p></o:p>

cups-libs-1.1.22-0.rc1.8<o:p></o:p>

pdksh-5.2.14-30<o:p></o:p>

psacct-6.3.2-31<o:p></o:p>

ftp-0.17-22<o:p></o:p>

parted-1.6.15-5<o:p></o:p>

pyOpenSSL-0.6-1.p23<o:p></o:p>

libwvstreams-3.75.0-2<o:p></o:p>

stunnel-4.05-3<o:p></o:p>

tcsh-6.13-9<o:p></o:p>

utempter-0.5.5-5<o:p></o:p>

xmlsec1-1.2.6-3<o:p></o:p>

acpid-1.0.3-2<o:p></o:p>

dhcpv6_client-0.10-8<o:p></o:p>

isdn4k-utils-3.2-18.p1.1<o:p></o:p>

NetworkManager-0.3.1-3<o:p></o:p>

pcmcia-cs-3.2.7-1.14<o:p></o:p>

nfs-utils-1.0.6-39<o:p></o:p>

quota-3.12-5<o:p></o:p>

sendmail-8.13.1-2<o:p></o:p>

system-config-securitylevel-tui-1.4.14-1<o:p></o:p>

up2date-4.3.47-5<o:p></o:p>

vconfig-1.8-4<o:p></o:p>

wvdial-1.54.0-3<o:p></o:p>

cups-1.1.22-0.rc1.8<o:p></o:p>

ypbind-1.17.2-3<o:p></o:p>

audit-0.5-1<o:p></o:p>

setserial-2.17-17<o:p></o:p>

dbus-0.22-10<o:p></o:p>

vim-minimal-6.3.030-3<o:p></o:p>

file-4.10-2<o:p></o:p>

kudzu-1.1.95-1<o:p></o:p>

prelink-0.3.2-11<o:p></o:p>

usermode-1.74-1<o:p></o:p>

mailcap-2.1.17-1<o:p></o:p>

redhat-menus-1.13-1<o:p></o:p>

dump-0.4b37-1<o:p></o:p>

dos2unix-3.1-21<o:p></o:p>

finger-0.17-26<o:p></o:p>

hesiod-3.0.2-30<o:p></o:p>

attr-2.4.16-3<o:p></o:p>

libjpeg-6b-33<o:p></o:p>

lrzsz-0.12.20-19<o:p></o:p>

pam_passwdqc-0.7.5-2<o:p></o:p>

patch-2.5.4-20<o:p></o:p>

schedutils-1.4.0-1<o:p></o:p>

lockdev-1.0.1-3<o:p></o:p>

symlinks-1.2-22<o:p></o:p>

unix2dos-2.2-24<o:p></o:p>

crash-3.8-5<o:p></o:p>

libtiff-3.6.1-7<o:p></o:p>

m4-1.4.1-16<o:p></o:p>

mtools-3.9.9-9<o:p></o:p>

bc-1.06-17.1<o:p></o:p>

sysreport-1.3.13-1<o:p></o:p>

time-1.7-25<o:p></o:p>

kernel-utils-2.4-13.1.39<o:p></o:p>

iptstate-1.3-4<o:p></o:p>

portmap-4.0-63<o:p></o:p>

comps-3-0.20041103<o:p></o:p>

expat-1.95.7-4<o:p></o:p>

dbus-glib-0.22-10<o:p></o:p>

hal-0.4.0-10<o:p></o:p>

rmt-0.4b37-1<o:p></o:p>

specspo-9.0.92-1.3<o:p></o:p>

glib-1.2.10-15<o:p></o:p>

lha-1.14i-17<o:p></o:p>

libgcrypt-1.2.0-3<o:p></o:p>

libusb-0.1.8-3<o:p></o:p>

lsof-4.72-1<o:p></o:p>

diskdumputils-0.6.1-1<o:p></o:p>

pax-3.0-9<o:p></o:p>

setarch-1.6-1<o:p></o:p>

netconfig-0.8.21-1<o:p></o:p>

setuptool-1.17-2<o:p></o:p>

binutils-2.15.92.0.2-5<o:p></o:p>

mgetty-1.1.31-2<o:p></o:p>

gettext-0.14.1-12<o:p></o:p>

syslinux-2.11-1<o:p></o:p>

cyrus-sasl-plain-2.1.19-3<o:p></o:p>

libpcap-0.8.3-7<o:p></o:p>

gnupg-1.2.6-1<o:p></o:p>

netdump-0.7.0-1<o:p></o:p>

pciutils-2.1.99.test8-3<o:p></o:p>

yum-2.1.11-3<o:p></o:p>


<o:p> </o:p>

               Com isso fechei a primeira parte que era a seleção de pacotes.

<a name="_Toc126167759"><![if !supportLists]>b.            <![endif]>instalação de novos pacotes</a>

               Para que possamos atualizar com facilidade os pacotes eu recomendo a utilização do programa apt-get. Esse programa é facilmente encontrado no Google, mas se você é preguiçoso ai vai o link para ele:

<a href="http://apt.freshrpms.net/">http://apt.freshrpms.net/</a>

<a href="http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/3/apt/">http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/3/apt/</a>

               Eu usei a versão apt-0.5.15cnc6-1.1.fc3.fr.i386.rpm. Para fazer a sua instalação é só executar os seguintes comandos:

               Após instalado o programa ele já direciona os repositórios para um repositório do seu sistema operacional. Se você quiser mudar as informações de repositórios use o link abaixo:

<a href="http://freshrpms.net/apt/repositories.html">http://freshrpms.net/apt/repositories.html</a>

               Para que os repositórios sejam atualizado é necessário executar:

#apt-get update

               Segundo o site oficial é necessária a execução desse programa por três vezes. Infelizmente nunca vi diferença entre a primeira e a última execução do programa e a última mas, por via das dúvidas eu executo as três vezes sempre. Tenho deixado esse comando no cron do meu box linux para que sempre esteja atualizado o sistema. Faço a atualização uma vez por dia. Coloquei a seguinte linha no arquivo /etc/cron.daily/apt-get-update (para editar textos eu uso o VI, por isso a linha de instalação dele. Além disso parar instalar a versão enhanced é necessário o programa GPM que pode ser desabilitado do SytemV, use o comando ntsysv para isso):

#apt-get install vim-common vim-enhanced gpm

#ln -s /usr/bin/vim /bin/vi

#apt-get clean

#vi /etc/cron.daily/apt-get-update

<o:p> </o:p>

---- inicio do arquivo /etc/cron.daily/apt-get-update ----

#!/bin/sh

/usr/bin/apt-get update

---- fim do arquivo /etc/cron.daily/apt-get-update ----

               Além disso não esqueça de dar permissão de execução para o arquivo e reinicie o serviço cron:

#chmod +x /etc/cron.daily/apt-get-update

#service crond restart

               Após isso tudo feito estamos prontos para o próximo passo: instalar os sistemas que serão necessários.

               Agora vamos fazer o update do sistema. Eu não costumo fazer upgrade da distribuição já que isso inclui a mudança do kernel (quando há um novo release) e isso é um programa já que terei que recompilar todo ele novamente. Mais a frente explicarei a compilação do kernel.

#apt-get upgrade

               Após todo o download feito o sistema irá instalar todos os pacotes necessários. Esse procedimento pode demorar um pouco. Depois de efetuado eu recomendo que sejam limpos os arquivos temporários dos pacotes baixados.

#apt-get clean

               Agora que estamos com tudo pronto vamos para a parte de maior empenho: recompilar o kernel com alguns patchs para melhorar o desempenho do servidor.

<a name="_Toc126167760"><![if !supportLists]>c.             <![endif]>Atualizando o relógio da máquina pela internet</a>

               É excencial que todos os relógios dos seus servidores estejam sincronizados. A melhor forma é fazer uma atualização diária usando um servidor NTP na internet.

               Para atualizar usaremos o ntpdate, para isso precisamos instalar alguns pacotes:

#apt-get install ntp

#apt-get clean

#wget http://cfm.gs.washington.edu/network/ntp/ntp/sync-clock

               Com a instalação do pacote NTP estamos prontos para usar o programa ntpdate que rodará junto com o cron. O sync-clock é o programa que efetuará a sincronização com o servidor NTP usando o ntpdate.

               Vamos mover o sync-clock para o diretório /etc/cron.daily/sync-clock:

#mv sync-clock /etc/cron.daily/sync-clock

#chmod +x /etc/cron.daily/sync-clock

               Precisamos editar o arquivo sync-clock para colocarmos um servidor de nossa região, assim sendo a sincronização será mais rápida, para isso deixe a linha abaixo desse modo:

SERVER="south-america.pool.ntp.org"

               Pronto. Agora execute o script para já deixar pronta a primeira sincronização e depois execute o comando hwclock para ver se foi realmente sincronizado.

#/etc/cron.daily/sync-clock

#hwclock

Wed 25 Jan 2006 09:55:40 PM BRST  -0.812720 seconds

<o:p> </o:p>

PS.: Não se esqueça de que, na instalação do sistema, você deve selecionar a região GMT-3h00 (Brazil-SaoPaulo). Eu não sei como altera isso depois do sistema instalado, mas vou procurar e coloco aqui.

PS. 2: Obrigado ao amigo stumm (<a href="http://www.inf.ufsm.br/~junior/">http://www.inf.ufsm.br/~junior/</a>) que me ajudou em um tópico sobre isso na UnderLinux (<a href="http://underlinux.com.br/modules.php?name=Forums&file=viewtopic&t=35707">http://underlinux.com.br/modules.php?name=Forums&file=viewtopic&t=35707</a>).

<o:p> </o:p>


<a name="_Toc126167761"><![if !supportLists]>2.           <![endif]>compilando o kernel</a>

<a name="_Toc126167762"><![if !supportLists]>a.            <![endif]>Baixando o source do kernel</a>

               No Fedora Core 3 não vêm mais dados do código fonte do kernel. Para que a compilação seja feita você deve baixar o Special RPM (SRPM) do site da RedHat:

<a href="http://download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/SRPMS/">http://download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/SRPMS/</a>

               Agora vamos configurar esse kernel para o que queremos fazer, para isso precisamos instalar vários outros pacotes que estão listados abaixo. Depois do servidor pronto você pode remover os pacotes instalados.

#apt-get install rpm-build make gcc redhat-rpm-config cpp glibc-devel glibc-headers glibc-kernheaders dbus dbus-glib expat gnupg hal kernel#2.6.12-1.1381_FC3 kernel-utils#1:2.4-13.1.39 kudzu m4 binutils file patch

#apt-get clean

#rpmbuild -bp --target=noarch /usr/src/redhat/SPECS/kernel-2.6.spec

               Esse procedimento demora um pouco, mas tudo depende do hardware que você for utilizar. Após isso feito o source vai estar disponível no diretório:

/usr/src/redhat/BUILD/kernel-2.6.9

               Por conveniência é bom que façamos alguns links simbólicos:

#ln -s /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src/linux

#ln -s /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src/linux-2.6.9

               Agora vamos baixar o source mais novo do kernel. Minha indicação é que isso seja feito no site:

<a href="http://kernel.org/">http://kernel.org/</a>

<a href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.4.tar.bz2">http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.4.tar.bz2</a>

               Fazer o download e instalar os sources:

#cd /usr/src

#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.4.tar.bz2

#bzip2 -d linux-2.6.13.4.tar.bz2

#tar -xvf linux-2.6.13.4.tar

#cd /usr/src/linux-2.6.13.4/

               Agora vamos aplicar os patchs.

<a name="_Toc126167763"><![if !supportLists]>b.            <![endif]>Aplicando patchs ao novo kernel</a>

               Afinal de contas o que é um patch?!

               Simples: um patch é uma junção de linhas de comando que altera algumas funções em um código fonte. Para que isso seja feito é necessário um pouco de trabalho com a compilação de um kernel novo e, muitas vezes, de programas relacionados a isso. Abaixo descreverei os patchs que farei. No futuro se houverem mais volto a coloca-los aqui.

<a name="_Toc126167764"><![if !supportLists]>i.               <![endif]>L7-Filter</a>

               O L7-Filter é um classificador de pacotes para linux netfilter que identifica os pacotes pelos dados do layer de aplicação (layer 7). Com isso podemos classificar pacotes com sendo do Kazaa, do eMule, do MSN Messenger e assim por diante. Mais informações podem ser conseguidas aqui:

<a href="http://l7-filter.sourceforge.net/">http://l7-filter.sourceforge.net/</a>

               Eu usei a última versão estável do patch que é a 1.5:

<a href="http://prdownloads.sourceforge.net/l7-filter/netfilter-layer7-v1.5.tar.gz">http://prdownloads.sourceforge.net/l7-filter/netfilter-layer7-v1.5.tar.gz</a>

               Vamos fazer o patch:

#cd /root/

#wget http://easynews.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v1.5.tar.gz

#tar -xzvf netfilter-layer7-v1.5.tar.gz

#cd /usr/src/linux-2.6.13.4/

#patch -p1 < /root/netfilter-layer7-v1.5/kernel-2.6.13-layer7-1.5.patch

               Outros pontos desse patch serão abordados nas instalações do programa L7-Filter e da compilação do iptables para que funcione com ele mais a frente. Antes disso teremos que terminar de compilar o kernel.

<a name="_Toc126167765"></a><a name=routes><![if !supportLists]>ii.             <![endif]>Static, Alternative Routes, Dead Gateway Detection, NAT</a>

               Esse patch para mim é um dos mais importante ele fará com que eu possa usar dois links em um mesmo gateway/servidor usando o iproute2, fazendo balanceamento de carga eficiente. Com o auxílio do L7-Filter o sistema de QoS do provedor fica perfeito podendo ser feito ao nível de camada de software. Informações sobre ele podem ser obitidos em:

<a href="http://www.ssi.bg/~ja/#routes">http://www.ssi.bg/~ja/#routes</a>

               Eu usei a seguinte versão:

<a href="http://www.ssi.bg/~ja/routes-2.6.13-12.diff">http://www.ssi.bg/~ja/routes-2.6.13-12.diff</a>

               Vamos fazer o patch:

#cd /root/

#wget http://www.ssi.bg/~ja/routes-2.6.13-12.diff

#cd /usr/src/linux-2.6.13.4/

#patch -p1 < /root/routes-2.6.13-12.diff

<a name="_Toc126167766"><![if !supportLists]>c.             <![endif]>compilando o kernel</a>

               Agora que já fizemos os patchs podemos dar andamento ao nosso caminho. Vamos ao trabalho:

#make mrproper

               Com esse comando deixaremos o kernel limpo. Agora vamos copiar no .config do kernel original do sistema para já termos os padrões adotados pelo Fedora Core 3, depois podemos apenas editar algumas instruções do kernel para podermos compila-lo.

#uname –rm

               Esse comando retorna seu sistema para poder copiar o arquivo certo:

#cp /usr/src/linux/configs/kernel-2.6.9-<sistema>.config /usr/src/linux-2.6.13.4/.config

#cd /usr/src/linux-2.6.13.4/

#make oldconfig

               Aperte enter até finalizar toda a lista. Agora vamos executar o menuconfig para podermos selecionar o que iremos precisar. Para que o menu config funcione precisamos do pacote ncurses-devel instalado, portanto:

#apt-get install ncurses-devel

#apt-get clean

#make menuconfig

               Vamos selecionar o que é e o que não é necessário. Se você têm medo de mexer no seu kernel, deixe ele intacto, apenas adicione as partes necessárias para que os patchs instalados funcionem de modo correto.

Módulos necessários para o L7-Filter:<o:p></o:p>

<![if !supportLists]>·         <![endif]>EXPERIMENTAL (Code maturity level options Prompt for development and/or incomplete code/drivers)

<![if !supportLists]>·         <![endif]>Netfilter (Device Drivers Networking support Networking Options Network packet filtering)

<![if !supportLists]>·         <![endif]>Connection tracking (Network packet filtering IP: Netfilter Configuration Connection tracking)

<![if !supportLists]>·         <![endif]>Connection tracking flow accounting (Network packet filtering IP: Netfilter Configuration Connection tracking)<o:p></o:p>

<![if !supportLists]>·         <![endif]>IP tables support (Network packet filtering IP: Netfilter Configuration Connection tracking)

<![if !supportLists]>·         <![endif]>Layer 7 match support (Network packet filtering IP: Netfilter Configuration Connection tracking)<o:p></o:p>

               Após toda a edição do seu .config é hora de compilar o kernel. Esse processe leva de 30 minutos a 2 ou mais horas, por isso aguarde até o final dele.

#make all; make modules_install; make install

               Depois de todo esse sofrimento eu espero que você tenha conseguido deixar seu kernel rodando.

<a name="_Toc126167767"><![if !supportLists]>d.            <![endif]>DEUS! NÃO inicia mais...</a>

               Antes de se apavorar com o que pode vir a acontecer existem alguns pontos que devem sempre serem analisados ao compilar um kernel e ter problemas:

<![if !supportLists]>·         <![endif]>Alterações indevidas: muitas vezes ao executar o “make menuconfig” a gente encontra milhões de opções que nunca ouviu falar. Talvez desabilitando uma delas (como o caso do initrd module) você tenha desabilitado algo importante para a sua máquina e por isso ela não venha a rodar mais. Para ter certeza disso volte ao passo da cópia do config original do Fedora e recomece o procedimento de compilação.

<![if !supportLists]>·         <![endif]>Evite tirar qualquer procedimento que você não tenha certeza do que é.

<![if !supportLists]>·         <![endif]>Mais uma vez: O GOOGLE É SEU AMIGO! Procure, pesquise, descubra informações por conta própria. Todas as funções de um config de kernel (TODAS mesmo) estão em algum lugar na internet devidamente explicados. Se esforce que você consegue.

<![if !supportLists]>·         <![endif]>Volte a acessar seu box com o kernel anterior (sim ele ainda funciona) e tente novamente a compilação.

               Ninguém falou que fazer um servidor/gateway para uma rede comercial ou seja qual outra finalidade virá a ter seria fácil. Se você chegou até aqui a honra já é sua. Daqui pra frente são todos procedimentos mais fáceis, ou como diz um amigo: menos difíceis...


<a name="_Toc126167768"><![if !supportLists]>3.           <![endif]>software: QoS / nat / roteamento / load balance</a>

               Como primeira parte desse capítulo precisamos fazer com que o nosso querido iptables saiba que o L7-Filter existe. Por isso passaremos direto as configuração do iptables com o L7-Filter.

<a name="_Toc126167769"><![if !supportLists]>a.            <![endif]>iptables + l7-filter</a>

               O iptables precisa ser compilado pois ele precisa encontrar os módulos adicionais do L7-Filter para que o QoS funcione de forma eficaz.

<a href="http://netfilter.org/">http://netfilter.org/</a>

<a href="http://netfilter.org/files/iptables-1.3.3.tar.bz2">http://netfilter.org/files/iptables-1.3.3.tar.bz2</a>

#wget http://netfilter.org/files/iptables-1.3.3.tar.bz2

#bzip2 -d iptables-1.3.3.tar.bz2

#tar -xvf iptables-1.3.3.tar

#cd iptables-1.3.3

               Com esses simples comandos temos o source code do iptables stable 1.3.3 que é suficientemente bom para o que iremos utilizar. Agora precisaremos fazer o patch do L7-Filter dentro do iptables. Dentro do diretório onde foi descompatado o conteúdo do arquivo netfilter-layer7-v1.5.tar.gz podemos encontrar um arquivo iptables-layer7-1.5.patch que é o que utilizaremos para fazer o patch no iptables (você deve estar dentro da pasta raiz do source code do iptables para executar o patch):

#patch -p1 < /root/netfilter-layer7-v1.5/iptables-layer7-1.5.patch

               Após aplicado o patch podemos fazer a compilação (não esqueça de remover o pacote rpm do iptables, senão teremos conflitos):

#chmod +x extensions/.layer7-test

#make KERNEL_DIR=/usr/src/linux-2.6.13.4

#rpm -e iptables

#make install KERNEL_DIR=/usr/src/linux-2.6.13.4

               Aguarde alguns instantes pois o procedimento de compilação pode demorar entre 5 e 20 minutos (ou mais dependendo do hardware). Teoricamente ele deve terminar a compilação sem erros (talvez um ou outro warning, mas nada grave). A partir de agora, diferentemente do padrão do Fedora Core 3, seu iptables está no path /usr/local/sbin/iptables.

               Depois de compilado precisamos colocar as bibliotecas de definições de protocolos do L7-Filter:

<a href="http://l7-filter.sourceforge.net/">http://l7-filter.sourceforge.net/</a>

<a href="http://prdownloads.sourceforge.net/l7-filter/l7-protocols-2005-09-12.tar.gz">http://prdownloads.sourceforge.net/l7-filter/l7-protocols-2005-09-12.tar.gz</a>

               Vamos a instalação das definições:

#wget http://easynews.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2005-09-12.tar.gz

#tar -xzvf l7-protocols-2005-09-12.tar.gz

#cd l7-protocols-2005-09-12/

#make install

               Agora suas definições estão instaladas no diretório /etc/l7-protocols.

               Prontinho! Você tem um kernel rodando perfeitamente com o L7-Filter e muitos outros recursos surpreendentes. Abaixo darei algumas dicas de como fazer o gerenciamento de conexões com o L7-Filter.

               Apenas um teste de nosso L7-Filter para termos certeza de que está funcionando pode ser feito usando duas placas de rede nesse servidor. Ligue um cliente a uma das interfaces e ligue a outra no seu link de internet. Faça NAT entre as duas redes e teste para ver se está tudo ok com o NAT:

#iptables –t nat –A POSTROUTING –s <ip da maquina a fazer o NAT> -j MASQUERADE

               Agora vamos bloquear todo tráfego no MSN Messenger (vou bloquear APENAS para questões de teste pois, em um ambiente real, esse bloqueio seria nocivo já que não podemos privar a liberdade de ninguém. Se você for fazer isso no seu provedor ou empresa seja responsável pelo seu ato. Minha indicação é que sejam feitos padrões de QoS para determinados serviços liberando mais ou menos banda para determinados protocolos. Esse é o objetivo do L7-Filter):

#iptables –t mangle –A POSTROUTING –s <ip da maquina a bloquear> \

           -m layer7 –-l7proto msnmessenger –j DROP

               O comando têm que ser todo em uma única linha. Teste na máquina bloqueada se ele consegue acessar o MSN... Acho que não.

               Talvez seja notado que na tela do servidor com o L7-Filter ficam passando milhões de informações, o que pode atrapalhar o desempenho de quem estiver trabalhando no terminal. Estou tentando descobrir uma maneira de resolver esse problema.

<a name="_Toc126167770"><![if !supportLists]>b.            <![endif]>load balance (balanceamento de carga)</a>

               Como colocar dois ou mais links de internet (backbones) pra que uma mesma rede possa aproveitar a banda de todos eles? Essa é uma pergunta que destrói com qualquer pequenos provedor que precise desse serviço.

               Primeiro tenho que divulgar os locais de onde consegui informações para conseguir que funcionasse o script do modo como criei (como dizem: “Na natureza nada se cria, tudo se copia...”):

<a href="http://www.zago.eti.br/trafego.txt">http://www.zago.eti.br/trafego.txt</a>

<a href="http://www.lartc.org/">http://www.lartc.org/</a>

<a href="http://www.gulbf.com.br/index.php?option=com_content&task=view&id=69&Itemid=43">http://www.gulbf.com.br/index.php?option=com_content&task=view&id=69&Itemid=43</a>

               Além desses tiveram muitos outros scripts e tutoriais que li. Até em alemão eu acabei lendo coisas. Fiquei doido, mas pelo menos está funcionando de forma eficiente.

               O primeiro problema do balanceamento de carga é que o Linux em geral mantem um cache da rotas criadas para chegar a determinados pontos da rede internet. Essas marcações são pelos hops criados para ir e qual é o gateway de retorno. Então imaginem o cenário onde o primeiro cliente procura um acesso a um site. Passa-se alguns instantes e outro cliente tenta acessar o mesmo site e, por algum motivo, o sistema ainda têm a primeira rota mas quer, de qualquer maneira, mandar aquela requisição pelo segundo link. Resultado: não abre nada pois o servidor destino recebe um pacote de um gateway com retorno para outro local... Para que isso não aconteça já compilamos o kernel com suporte a esta nova situação: apagar as rotas dinamicamente.

               Antes de começar não esqueça de apagar suas rotas criadas usando o route:

#ip route <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> default table main

               Além disso precisamos criar as tabelas de roteamento usadas pelo iproute2. Eu vou criar duas tabelas com IDs 201 e 202 sendo elas a tabela 201 e 202 uma para cada um dos links de saída. E também vou criar uma tabela mais alta para a junção deles.

#echo “<st1:metricconverter ProductID="201 201”" w:st="on">201 201”</st1:metricconverter> >> /etc/iproute2/rt_tables

#echo “<st1:metricconverter ProductID="202 202”" w:st="on">202 202”</st1:metricconverter> >> /etc/iproute2/rt_tables

#echo “<st1:metricconverter ProductID="222 222”" w:st="on">222 222”</st1:metricconverter> >> /etc/iproute2/rt_tables

               Vou colocar o script completo de uma só vez para que seja vizualizado com completo. Dentro dele farei algumas anotações dizendo para que servem cada uma das partes dele (não se esqueça que esse script deve rodar apenas uma vez, já que ele gerará erros ao tentar criar novamente a estrutura das tabelas e das interfaces):

#!/bin/bash

#----

# Habilita a transferencia de pacotes entre as interfaces da maquina

# Pode ser habilitado no /etc/sysctl.conf

#----

echo "1" > /proc/sys/net/ipv4/ip_forward

#

#----

# Variaveis de Sistema

# Obviamente se refere ao path onde estao os programas a serem utilizados

#----

IPT="/usr/local/sbin/iptables"

IP="/sbin/ip"

#

#----

# VARIAVEIS

#----

# Rede interna

# Todos os dados da interface de rede interna, aquela que ira ligar seu servidor aos seus clientes

IFI1="eth0"

IPI1="172.30.0.1"

NWI1="172.30.0.0/24"

BRI1="172.30.0.255"

#

# link 1

# Interface de rede externa 1, ela ira ligar ao primeiro link de dados

IFE1="eth1"

IPE1="172.35.0.55"

NWE1="172.35.0.0/24"

NME1="255.255.255.0"

BRE1="172.35.0.255"

GWE1="172.35.0.1"

#

# link 2

# Interface de rede externa 2, ela ira ligar ao segundo link de dados

IFE2="eth2"

IPE2="10.1.1.10"

NWE2="10.1.1.0/24"

NME2="255.255.255.0"

BRE2="10.1.1.255"

GWE2="10.1.1.1"

#

# TABELAS DE ROTEAMENTO

# Aqui daremos nomes as tabelas de roteamento para facilitarmos a sua localizacao

L1="201"

L2="202"

MAIN="222"

#

#----

# HABILIANDO INTERFACES

# A interface loopback e a interface interna eu habilitei usando o /etc/sysconfig/network-scripts

#----

# Interface LINK 1

# Habilita a interface, limpa qualquer ip que exista nela e atribui o io da rede externa 1

$IP link set $IFE1 up

$IP addr flush dev $IFE1

$IP addr add $IPE1/$NME1 brd $BRE1 dev $IFE1

#

# Interface LINK 2

# Habilita a interface, limpa qualquer ip que exista nela e atribui o io da rede externa 2

$IP link set $IFE2 up

$IP addr flush dev $IFE2

$IP addr add $IPE2/$NME2 brd $BRE2 dev $IFE2

#

#----

# Regras gerais de tratamento de pacotes

#----

# Da um flush em todas as tabelas do iptables para limpar qualquer coisa que existam nelas

$IPT -F

$IPT -t mangle -F

$IPT -t mangle -X

$IPT -t nat -F

$IPT -t nat -X

$IPT -X

$IPT -F INPUT

$IPT -F FORWARD

$IPT -F OUTPUT

#

#----------

# Aceita todas as conexoes do loopback

#----------

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A FORWARD -i lo -j ACCEPT

#

#----------

# LOG e DROP de pacotes fragmentados

#----------

$IPT -A INPUT -f -j LOG --log-prefix "Pacote INPUT fragmentado: "

$IPT -A INPUT -f -j DROP

$IPT -A FORWARD -f -j LOG --log-prefix "Pacote FORWARD fragmentado: "

$IPT -A FORWARD -f -j DROP

#

#----------

# Descarta conexoes invalidas

#----------

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

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

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

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

#

#----

# Mantendo estados

# Nas tabelas FILTER e NAT

#----

$IPT -t filter -N keep_state

$IPT -t filter -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPT -t filter -A keep_state -j RETURN

$IPT -t nat -N keep_state

$IPT -t nat -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPT -t nat -A keep_state -j RETURN

#

#----

# Chama o procedimento

#----

$IPT -t nat -A PREROUTING -j keep_state

$IPT -t nat -A POSTROUTING -j keep_state

$IPT -t nat -A OUTPUT -j keep_state

$IPT -t filter -A INPUT -j keep_state

$IPT -t filter -A FORWARD -j keep_state

$IPT -t filter -A OUTPUT -j keep_state

#

#----

# Habilitanto NAT para interfaces externas

# Nao esqueca nunca do source do pacote. Tentei sem ele e nao funciona corretamente o balancemanto. Nao pergunte porque...

#----

$IPT -t nat -A POSTROUTING -o $IFE1 -s $NWI1 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $IFE2 -s $NWI1 -j MASQUERADE

#

#----

# Semppre que inicia meu box existe uma rota pra esse endereco, que como nao e necessaria eu apago

# Colocasse a tabela main com prioridade 50 e apaga a rota default dela

#----

$IP route <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> 169.254.0.0/16

$IP rule add prio 50 table main

$IP route <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> default table main

#

#----

# Rotas das redes externas

#----

# link 1

$IP rule add prio 201 from $NWE1 table $L1

$IP route add default via $GWE1 dev $IFE1 src $IPE1 proto static table $L1

$IP route append prohibit default table $L1 metric 1 proto static

# link 2

$IP rule add prio 202 from $NWE2 table $L2

$IP route add default via $GWE2 dev $IFE2 src $IPE2 proto static table $L2

$IP route append prohibit default table $L2 metric 1 proto static

#

#----

# Multipath route

# Divisao da carga igualmente. Um pedido para cada um dos gateways. O ultimo comando deve estar todo em uma unica linha.

#----

$IP rule add prio 222 table $MAIN

$IP route add default table $MAIN proto static /

           nexthop via $GWE1 dev $IFE1 weight 1 /

           nexthop via $GWE2 dev $IFE2 weight 1

               Ahhh sim... Esse script funciona perfeitamente bem! Estou usando ele nesse momento. O único incoveniente é que precisa-se de muitas requisições para que funcione de forma eficiente. Se você fizer uma requisição agora e outra daqui meia hora ele tende sempre a mandar as requisições para o primeiro nexthop (no meu caso para o link 1).

               Além disso eu fiz um pequeno script para rodar no cron de 5 em 5 minutos para resetar as rotas de cache e testar os links. Sim! Se um dos links cair o outro mantem e os clientes não notam que caiu. Abaixo o script (que salvei em /etc/iproute2/ping e coloquei modo +x nele):

#!/bin/sh

/bin/ping -c 1 -I eth1 www.uol.com.br

/bin/ping -c 1 -I eth2 www.uol.com.br

/sbin/ip route flush cache

               Coloquei ele no cron assim:

#echo “*/5 * * * * root /etc/iproute2/ping” >> /etc/crontab

               Pronto. Está testada nossa conexão.

               Para que vocês tenham certeza do funcionamento farei o teste para duas redes diferentes.

               Primeiro saindo pela interface eth2 (link2) e indo para o site do uol.com.br:

C:\Documents and Settings\Nataniel>tracert www.uol.com.br

Rastreando a rota para www.uol.com.br [200.221.2.45]

com no máximo 30 saltos:

  1    <1 ms    <1 ms    <1 ms  172.30.0.1

  2     1 ms    <1 ms     1 ms  10.1.1.1

  3    27 ms    26 ms     *     BrT-L10-ctaje700.dsl.brasiltelecom.net.br [201.15.255.254]

  4    29 ms    33 ms    30 ms  BrT-G5-2-705-ctame303.brasiltelecom.net.br [201.10.217.173]

  5   203 ms   240 ms    32 ms  BrT-G7-1-2-cta-core01.brasiltelecom.net.br [201.10.217.141]

  6    33 ms    29 ms    28 ms  BrT-G7-3-0-cta-border.brasiltelecom.net.br [201.10.217.34]

  7    34 ms    34 ms    35 ms  200.163.207.214

  8    52 ms   171 ms    35 ms  fr2-border4.ix.uol.com.br [200.221.30.33]

  9     *       45 ms    35 ms  home.uol.com.br [200.221.2.45]

Rastreamento concluído.

C:\Documents and Settings\Nataniel>

               E o segundo teste saindo pela interface eth1 (link1) e indo para o terra.com.br:

C:\Documents and Settings\Nataniel>tracert www.terra.com.br

Rastreando a rota para www.terra.com.br [200.176.3.142]

com no máximo 30 saltos:

  1    <1 ms    <1 ms    <1 ms  172.30.0.1

  2    <1 ms    <1 ms    <1 ms  172.35.0.1

  3     *        2 ms     3 ms  200.163.208.1

  4   205 ms   182 ms   165 ms  200.181.225.25

  5     *       20 ms     8 ms  BrT-G7-0-0-cta-border.brasiltelecom.net.br [201.10.217.54]

  6    71 ms    58 ms     *     200.163.207.142

  7    76 ms    88 ms    71 ms  terra-v-102-dsw2-poa.tc.terra.com.br [200.176.0.129]

  8    59 ms     *       80 ms  www.terra.com.br [200.176.3.142]

Rastreamento concluído.

C:\Documents and Settings\Nataniel>

               PERFEITO!

               Funciona... Eu sabia que funcionava...


<a name="_Toc126167771"><![if !supportLists]>4.           <![endif]>software: cache (squid)</a>

<o:p> </o:p>


<a name="_Toc126167772"><![if !supportLists]>5.           <![endif]>software: email / spamassasin / anti vírus</a>

               O servidor de email é um MTA que será necessário para o bom andamento dos serviços de entrega de mensagens aos clientes. O sevidor que faremos usa o Postfix como MTA e o Clamav como antivírus. Além disso ele terá proteção de autenticação para envio de mensagens e também o SpamAssasin para bloquear conteúdos duvidosos.

               Inicialmente iremos baixar os itens a serem utilizados:

#wget http://easynews.dl.sourceforge.net/sourceforge/clamav/clamav-0.87.1.tar.gz

#wget http://www.unitednerds.org/projects/mail/clamav-filter.sh.gz

#apt-get install perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-Net-DNS perl-Time-HiRes postfix procmail spamassassin

#apt-get clean

               Após instalados os pacotes necessários para rodar o sistema iremos então configurar o básico do Postfix. O arquivo de configuração do Postfix é o /etc/postfix/main.cf.

               A maior parte das configurações são auto-explicáveis e por isso não me manterei nelas. Apenas colocarei aqui as regras adicionais que uso para outros fins que não os default do programa.

               Os campos que devem ser alterados:

myhostname = [nome do servidor mx que esse mta irá gerenciar]

mydomain = [domínio que esse mta irá gerenciar]

myorigin = $mydomain

inet_interfaces = all

mydestination = [adicionar os itens $mydomain, www.$mydomain e o servidor mx]

alias_maps = /etc/postfix/aliases

alias_database = /etc/postfix/aliases

mail_spool_directory = /var/mail

header_checks = regexp:/etc/postfix/maps/header_checks

mime_header_checks = regexp:/etc/postfix/maps/mime_header_checks

               Precisamos copier os aliases do sistema para os aliases do postfix:

#cp /etc/aliases /etc/postfix/aliases

#postalias /etc/postfix/aliases

               Além desses itens que devem ser alterados eu adiciono os seguintes:

mailbox_size_limit = 20000000

maximal_queue_lifetime = 1d

smtpd_helo_required = yes

<o:p> </o:p>

# Regras para restricoes de SPAM e outros problemas menores

smtpd_client_restrictions =

             reject_non_fqdn_sender,

             reject_non_fqdn_recipient,

             reject_unknown_sender_domain,

             reject_unknown_recipient_domain,

             permit_mynetworks,

             reject_unauth_destination,

             reject_invalid_hostname,

             reject_rbl_client cn-kr.blackholes.us,

             reject_rbl_client singapore.blackholes.us,

             reject_rbl_client malaysia.blackholes.us,

             reject_rbl_client nigeria.blackholes.us,

             reject_rhsbl_sender dsn.rfc-ignorant.org,

             reject_rbl_client ipwhois.rfc-ignorant.org,

               Agora vamos criar os arquivos /etc/postfix/maps que são para verificação de conteúdo nas mensagens enviadas pelo servidor. Nesse procedimento proibimos o envio de mensagens com a extensão .BAT, .EXE e outras noscivas. Para isso baixaremos os arquivos atualizados do site SecuritySage:

#cd /etc/postfix/

#mkdir maps

#cd maps

#wget http://www.securitysage.com/files/header_checks.short

#wget http://www.securitysage.com/files/body_checks.short

#wget http://www.securitysage.com/files/mime_header_checks

#mv header_checks.short header_checks

#mv body_checks.short body_checks

               Eu deixo o body_checks desabilitado porque ele consome muito processamento para ser realizado. Pronto, a rotirna de verificação de cabeçalhos noscivos está habilitada. Assim é menos difícil que seus clientes enviem mensagens de SPAM com vírus ou traquitanas desse modo.

               Agora vamos passar a configuração do Clamav e do SpamAssassin.

<a name="_Toc126167773"><![if !supportLists]>a.            <![endif]>Clamav Antivírus</a>

               Os arquivos do Clamav já foram baixados, por isso pularemos essa etapa e iremos diretamente a sua compilação e configuração:

#tar –xzvf clamav-0.87.1.tar.gz

#groupadd clamav

#adduser -g clamav -s /bin/false -c "Clamav Antivirus" clamav

               Vamos a configuração para compilarmos:

#cd clamav-0.87.1

#apt-get install cpp gcc glibc-devel glibc-headers glibc-kernheaders zlib-devel make

#./configure --prefix=/usr --sysconfdir=/etc --disable-zlib-vcheck

#make

#make install

#rpm -e cpp gcc glibc-devel glibc-headers glibc-kernheaders make

#apt-get clean

               Pronto, agora o Clamav está devidamente instalado no sistema. Devemos configurar o arquivo /etc/clamav.conf. Vou colocar aqui as linhas que modifiquei no meu arquivo de configuração:

#Example

LogFile /var/log/clamd.log

LogFileMaxSize 10M

LogTime

PidFile /var/run/clamav/clamd.pid

LocalSocket /var/run/clamav/clamd

MaxThreads 20

FollowFileSymlinks

SelfCheck 600

User clamav

ScanMail

ScanArchive

               Precisamos criar o diretorio de gravação do socket e do pid do clamav:

#mkdir /var/run/clamav

#chown clamav.clamav /var/run/clamav

               Para ajudar no LOG eu criei uma rotina no /etc/logrotate.d/clamd que está escrita assim:

/var/log/clamd.log {

    daily

    rotate 30

    compress

}

               Agora colocaremos o filtro do Clamav para rodar junto ao Postfix. Para isso precisamos do arquivo clamav-filter que já baixamos:

#mv clamav-filter.sh.gz /usr/libexec/postfix

#gzip –d clamav-filter.sh.gz

#chmod 0755 clamav-filter.sh

               Agora vamos criar o diretório de spool para o Clamav:

#mkdir /var/spool/filter

#chown clamav.clamav /var/spool/filter

               Agora iremos editar o arquivo /etc/postfix/máster.cf que diz respeito aos modos e caminhos que percorrerão os emails quando chegarem ao servidor. Apenas colocarei as linhas como devem ficar (lembre-se que não se deve ter mais de uma linha com o mesmo serviço, portanto a linha smtp deve ser editada e não adicionada como a linha do serviço clamav):

smtp      inet  n       -       n       -       -       smtpd

  -o content_filter=clamav:clamav

clamav    unix  -       n       n       -       -       pipe

  flags=Rq user=clamav argv=/usr/libexec/postfix/clamav-filter.sh -f ${sender}  --  ${recipient}

               Agora vamos executar o clamav:

#/usr/sbin/clamd

               Vamos ainda ter que manter a base de dados de vírus atualizada, para isso o Clamav vem com um software interno que verifica a situação. Para usar esse software precisamos editar o arquivo de configuração dele que fica em /etc/freshclam.conf:

#Example

UpdateLogFile /var/log/freshclam.log

LogVerbose

PidFile /var/run/clamav/freshclam.pid

DatabaseOwner clamav

DatabaseMirro db.BR.clamav.net

NotifyClamd

               Após isso feito crie o arquivo de log dele:

#touch /var/log/freshclam.log

#chown clamav.clamav /var/log/freshclam.log

               Agora vamos iniciar o freshclam para vermos como funciona a atualização:

#freshclam

ClamAV update process started at Thu Jan 12 14:16:21 2006

SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES

See the FAQ at http://www.clamav.net/faq.html for an explanation.

WARNING: Your ClamAV installation is OUTDATED!

WARNING: Local version: 0.87.1 Recommended version: 0.88

DON'T PANIC! Read http://www.clamav.net/faq.html

Downloading main.cvd [*]

main.cvd updated (version: 35, sigs: 41649, f-level: 6, builder: tkojm)

Downloading daily.cvd [*]

daily.cvd updated (version: 1239, sigs: 474, f-level: 7, builder: diego)

WARNING: Your ClamAV installation is OUTDATED!

WARNING: Current functionality level = 6, recommended = 7

DON'T PANIC! Read http://www.clamav.net/faq.html

Database updated (42123 signatures) from db.BR.clamav.net (IP: 205.139.192.213)

Clamd successfully notified about the update.

               Vejam que todo o processo de atualização foi um sucesso. Mas notem que existe um aviso dizendo que a versão instalada está desatualizada. Você deve estar se perguntando: MAS PORQUE DIABOS ELE INSTALOU UMA VERSÃO DESATUALIZADA? Simples, para poder colocar nesse tutorial como é que se faz o upgrade, ué!

               Vamos ao procedimento de upgrade.

<a name="_Toc126167774"><![if !supportLists]>i.               <![endif]>Fazendo Upgrade do Clamav</a>

               O local onde você sempre poderá encontrar novas informações sobre como fazer o upgrade do Clamav é:

<a href="http://wiki.clamav.net/index.php/UpgradeInstructions">http://wiki.clamav.net/index.php/UpgradeInstructions</a>

               Vamos ao que interessa: como fazer o upgrade para a versão 0.88.

               Primeira coisa que precisamos fazer é o backup das configurações do Clamav:

#mv /etc/clamd.conf /root/clamd.conf

#mv /etc/freshclam.conf /root/freshclam.conf

               Agora iremos baixar a versão mais nova do Clamav que pode ser encontrada em no site <a href="http://www.clamav.net/stable.php#pagestart">http://www.clamav.net/stable.php#pagestart</a>. Eu utilizei a versão 0.88 que era a última versão estável até o momento:

               Agora vamos configurar o novo clamav para que seja compilado:

#cd clamav-0.88/

#apt-get install cpp gcc glibc-devel glibc-headers glibc-kernheaders make

#./configure --prefix=/usr --sysconfdir=/etc --disable-zlib-vcheck

               Se você quiser dar uma conferida nas novas opções os arquivos default de configuração estão no diretório clamav-0.88/etc/. Nessa versão eu não editei nada. Agora iremos parar o processo do clamav e remover as bibliotecas antigas:

#kill -15 `cat /var/run/clamav/clamd.pid`

#rm –f /usr/lib/*clam*

#rm -f /usr/local/lib/*clam*

               Agora compilaremos os itens do clamav e faremos sua instalação:

#make

#make install

#rpm -e cpp gcc glibc-devel glibc-headers glibc-kernheaders make

#apt-get clean

               Eu apenas sobre-escrevi os arquivos de configuração, ou seja, copiei eles do diretório /root/. Novamente para o diretório /etc/. Agora vamos iniciar o clamav novamente e executar o comando de verificação:

#/usr/sbin/clamd

#freshclam –v

Current working dir is /usr/share/clamav

Max retries == 3

ClamAV update process started at Thu Jan 12 14:46:36 2006

SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES

See the FAQ at http://www.clamav.net/faq.html for an explanation.

Querying current.cvd.clamav.net

TTL: 427

Software version from DNS: 0.88

main.cvd version from DNS: 35

main.cvd is up to date (version: 35, sigs: 41649, f-level: 6, builder: tkojm)

daily.cvd version from DNS: 1239

daily.cvd is up to date (version: 1239, sigs: 474, f-level: 7, builder: diego)

Freeing option list...done

               Agora o sistema afirma que a versão é a 0.88. Pronto. Execute o freshclam mais uma vez em modo verbose e verifique o log para ter certeza de que nada ocorreu errado:

# freshclam

ClamAV update process started at Thu Jan 12 14:47:36 2006

SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES

See the FAQ at http://www.clamav.net/faq.html for an explanation.

main.cvd is up to date (version: 35, sigs: 41649, f-level: 6, builder: tkojm)

daily.cvd is up to date (version: 1239, sigs: 474, f-level: 7, builder: diego)

               Se você já está satisfeito podemos retirar a opção verbose do /etc/freshclam.conf para que os logs dele sejam menores.

               Pronto o Clamav está instalado. Passaremos ao SpamAssassin.

<a name="_Toc126167775"><![if !supportLists]>b.            <![endif]>SpamAssassin</a>

               O pacote do SpamAssasin já está devidamente instalado no sistema. A configuração do programa fica toda em apenas um arquivo /etc/mail/spamassassin/local.cf.

               Eu sempre deixo a configuração como está por padrão e funciona perfeitamente bem.

               Precisamos apenas editar o arquivo /usr/libexec/postfix/clamav-filter.sh para que este mande as mensagens ao SpamAssassin antes de serem entregues a caixa postal do cliente.

               A linha que contem a variável SENDMAIL deve ficar assim:

SENDMAIL="/usr/bin/spamc -f -e /usr/sbin/sendmail -i "

               Com esta alteração toda mensagem que chegar ao servidor e for considerada SPAM pelo SpamAssassin sera taggeada, no campo assunto, com a palavra [SPAM]. Se quiser que as mensagens que são SPAM sejam apagadas do servidor, ainda no arquivo clamav-filter.sh, logo antes do item viruscan coloque os itens:

# SpamAssassin

#

spamc -c < $nome_arquivo >/dev/null ; RETVAL=$?

if [ $RETVAL -ne 0 ]; then

           sed -e "s/^Subject: /Subject: --- SPAM (SpamAssassin): $from -> $@ --- /i" $nome_arquivo | $SENDMAIL -f postmaster@$MYHOSTNAME -- postmaster@$MYHOSTNAME

           rm -f $nome_arquivo

           exit 0

fi

               Assim as mensagens marcadas como SPAM serão enviadas para postmaster da máquina.

               Você deve iniciar o processo do SpamAssasin e pode coloca-lo na inicialização (pelo ntsysv ou chklist):

#/etc/rc.d/init.d/spamassassin start

<a name="_Toc126167776"><![if !supportLists]>c.             <![endif]>IMAP e POP</a>

               Eu não sei se sou eu que sou meio burro mas nunca consegui fazer o Cyrus-IMAP funcionar por isso eu uso o antigo imapd-2002d-3. Vamos baixar e instalar ele. Ele roda junto com o xinetd.

               Para que o service seja iniciado você deve editar o arquivo /etc/xinetd.d/ipop3 e alterar a linha que disable colocando ela como “no”.

               Se você usa IMAP deve fazer isso no protocolo IMAP também. Após isso reinicie o xinetd:

#/etc/rc.d/init.d/xinetd restart

               Para ter certeza de que está funcionando verifique com o comando:

#netstat –at

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State

tcp        0      0

  • pop3          
           *:*                         LISTEN

tcp        0      0 localhost.localdomain:783   *:*                         LISTEN

tcp        0      0

  • ssh                      
*:*                         LISTEN

tcp        0      0

  • smtp                 
    *:*                         LISTEN

tcp        0      0 172.30.0.13:ssh             172.30.0.14:2506            ESTABLISHED

               Não se assuste com a porta 783 aberta, ela é usada pelo SpamAssasin.

<a name="_Toc126167777"><![if !supportLists]>d.            <![endif]>Inicializando os serviços</a>

               Os serviços SpamAssasin e POP/IMAP serão iniciados pelo runtime do linux. Já o Clamav (e seu atualizador freshclam) e o Postfix (que deve ser inicializado após o Clamav) serão inicializados pelo script abaixo (/etc/rc.d/mail):

#!/bin/sh

echo "Iniciando Clamav..........................."

/usr/sbin/clamd

echo "                                            [ OK ]"

echo "Iniciando FreshClam........................"

/usr/bin/freshclam --daemon

echo "                                            [ OK ]"

/etc/rc.d/init.d/postfix start

               Você precisa dar permissão de execução ao arquivo:

#chmod +x /etc/rc.d/mail

               E agora adicione ele dentro do arquivo /etc/rc.d/rc.local. PRONTO!


<a name="_Toc126167778"><![if !supportLists]>6.           <![endif]>software: servidor web (apache) / php / MYSQL</a>

               Vamos fazer a instalação e configuração do servidor de páginas Apache com suporte a PHP.

               Vamos baixar os pacotes necessários e depois passaremos a configuração dos mesmos:

#apt-get apr apr-util aspell aspell-en curl httpd httpd-suexec libidn mailcap php php-pear

#apt-get clean

<a name="_Toc126167779"><![if !supportLists]>a.            <![endif]>Configurando o Apache</a>

<a name="_Toc126167780"><![if !supportLists]>i.               <![endif]>Arquivo /etc/httpd/conf/httpd.conf</a>

               Alguns campos que devem ser alterados estão listados abaixo com o formato como eu fiz. Existem muitos outros que podem ser alterados, para maiores informações leia os manuais do Apache.

ServerAdmin webmaster@cnett.com.br

ServerName ns2.cnett.com.br

DefaultLanguage pt-BR

LanguagePriority pt-BR en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt ru sv zh-CN zh-TW

AddDefaultCharset ISO-8859-1

NameVirtualHost * # No caso de usar domínios virtuais

<a name="_Toc126167781"><![if !supportLists]>ii.             <![endif]>Arquivo /etc/httpd/conf.d/welcome.conf</a>

               Se você quiser mudar sua página de boas vindas ao servidor esse é o local indicado. Aqui você pode setar o local onde está a página padrão do seu servidor.

<a name="_Toc126167782"><![if !supportLists]>iii.            <![endif]>Arquivo /etc/httpd/conf.d/virtuais.conf</a>

               Se você quiser usar domínios virtuais é interessante criar um arquivo apenas para isso. Vou dar um exemplo que uso em meu servidor:

<VirtualHost *>

        DocumentRoot /var/www/html/cnett.com.br

        ServerName www.cnett.com.br

        ErrorLog logs/cnett.com.br_error_log

        CustomLog logs/cnett.com.br_access_log common

</VirtualHost>

<VirtualHost *>

        DocumentRoot /var/www/html/dominios/webmail.cnett.com.br

        ServerName webmail.cnett.com.br

</VirtualHost>

<a name="_Toc126167783"><![if !supportLists]>b.            <![endif]>Configurando o PHP</a>

               O único arquivo que pode ter alterações necessárias no PHP é o /etc/php.ini. O único item que eu altero nele é a quantidade de memória usada para que alguns sites possam ter seu conteúdo utilizado:

memory_limit = 32M

Iniciando o Apache

               Agora você já pode iniciar o seu Apache.

[root@ns2 sysconfig]# service httpd start

Starting httpd:                                            [  OK  ]

               Não esqueça de colocar o Apache para iniciar com o sistema.

<a name="_Toc126167784"><![if !supportLists]>c.             <![endif]>Instalando e configurando o MySQL Server</a>

               O MySQL Server é um banco de dados extremamente poderoso que pode ser usado para “n” situações. A instalação dele é extremamente simples:

#apt-get install mysql mysql-server perl-DBD-MySQL perl-DBI

#apt-get clean

               Neste momento apenas irei ensinar como colocar senha de root para o MySQL:

#mysqladmin password <senha que você quer colocar>

               Após isso para logar como root ao MySQL você deve executar o comando:

[root@ns2 ~]# mysql -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4 to server version: 3.23.58

<o:p> </o:p>


<![if !supportLists]>7.           <![endif]>Configurando um Webmail (Uebimiau)

               Nem sempre a gente está com um computador na frente com seu leitor de emails preferido para ver as correspondências. Para isso existem vários modelos de webmail. O que eu mais gosto de usar é o Uebimiau pois ele é freeware e foi criado por um brasileiro que, como eu, não desiste nunca.

               Infelizmente hoje, dia 28 de janeiro de 2006, o site oficial (<a href="http://www.uebimiau.org/">www.uebimiau.org</a>) está fora do ar e não sei explicar o motivo, por isso irei colocar um link de espelhamento para a versão mais nova do Uebimiau.

<a href="http://phpbrasil.com/scripts/download.php/id/4131">http://phpbrasil.com/scripts/download.php/id/4131</a>

<a href="http://www.uebimiau.org/downloads/uebimiau-2.7.9-any.zip">http://www.uebimiau.org/downloads/uebimiau-2.7.9-any.zip</a>

               Vamos então baixar e descompactar os arquivos:

#apt-get install unzip

#wget http://phpbrasil.com/scripts/download.php/id/4131

#unzip uebimiau-2.7.9-any.zip

#apt-get clean

#rpm –e unzip

               O arquivo irá descompactar o diretório webmail. Vamos então mover esse diretório para uma área de visão do Apache.

#mv webmail/ /var/www/html/

               Agora vamos criar um alias para o serviço de webmail dentro do Apache.

<o:p> </o:p>


<a name="_Toc126167785"><![if !supportLists]>8.           <![endif]>software: dns (bind)</a>

               O servidor de nomes é um item essencial para o bom funcionamento de uma rede com grande número de computadores. Ele irá primeiramente fazer um cachê das principais requisições para agilizar o processo e, posteriormente, poderá resolver nomes para a sua rede interna ou externa. Farei apenas a configuração da resolução de nomes para a rede externa com reverso para uma classe C de IPs roteáveis.

               Vamos começar pela instalação dos pacotes necessários:

#apt-get install bind bind-libs bind-utils caching-nameserver

#apt-get clean

               Agora vamos a configuração do servidor (já que o cachê está pré-configurado com a instalação do pacote caching-nameserver).

<a name="_Toc126167786"><![if !supportLists]>a.            <![endif]>Arquivo /etc/named.conf</a>

               Este arquivo já está configurado para servir como cachê para a rede de pesquisa de nomes. No final do arquivo adicionaremos as linhas com relação ao servidor, primeiro a linha dos reversos de IPs roteáveis, adicione as seguintes linhas ao final do arquivo:

zone "208.163.200.in-addr.arpa" IN {

        type slave;

        file "200.163.208.local";

        masters { 172.20.0.1; };

};

<o:p> </o:p>

zone "cnett.com.br" IN {

        type slave;

        file "cnett.com.br.zone";

        masters { 172.20.0.1; };

};

               A primeira parte “zone” diz respeito ao reverso para a classe de IPs que eu usarei na minha rede interna. A segunda parte diz respeito ao domínio que irei configurar. Esse exemplo é para um servidor “slave”. Se você quiser pode usar o mesmo servidor tanto para “slave” quanto para “master” (assim só precisa de uma máquina para poder cumprir as necessidades dos domínios junto ao registro.br). Quando quisermos colocar um servidor master deveremos adicionar as seguintes linhas:

zone "208.163.200.in-addr.arpa" IN {

        type master;

        file "200.163.208.local";

        allow-update { 172.20.0.2; };

};

<o:p> </o:p>

zone "cnett.com.br" IN {

        type master;

        file "cnett.com.br.zone";

        allow-update { 172.20.0.2; };

};

               Os campos masters (na configuração de slave) identifica quem é o servidor responsável pelo domínio. Os campos allow-update (na configuração de master) identifica quais os servidores podem registrar alterações nos domínios, sem isso apenas quando o domínio for alterado no servidor master ele será replicado aos slave.

<a name="_Toc126167787"><![if !supportLists]>b.            <![endif]>Arquivo /var/named/named.ca</a>

               Esse arquivo é o responsável pela pesquisa aos root servers mundiais. Para que ele fique atualizado podemos usar o comando:

#dig > /var/named/named.ca

               Se você digitar apenas o comando “dig” terá a lista dos servidores root:

; <<>> DiG 9.2.5 <<>>

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4467

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 8

<o:p> </o:p>

;; QUESTION SECTION:

;.                              IN      NS

<o:p> </o:p>

;; ANSWER SECTION:

.                       295400  IN      NS      j.root-servers.net.

.                       295400  IN      NS      k.root-servers.net.

.                       295400  IN      NS      l.root-servers.net.

.                       295400  IN      NS      m.root-servers.net.

.                       295400  IN      NS      a.root-servers.net.

.                       295400  IN      NS      b.root-servers.net.

.                       295400  IN      NS      c.root-servers.net.

.                       295400  IN      NS      d.root-servers.net.

.                       295400  IN      NS      e.root-servers.net.

.                       295400  IN      NS      f.root-servers.net.

.                       295400  IN      NS      g.root-servers.net.

.                       295400  IN      NS      h.root-servers.net.

.                       295400  IN      NS      i.root-servers.net.

<o:p> </o:p>

;; ADDITIONAL SECTION:

c.root-servers.net.     385437  IN      A       192.33.4.12

d.root-servers.net.     385437  IN      A       128.8.10.90

f.root-servers.net.     385437  IN      A       192.5.5.241

i.root-servers.net.     385437  IN      A       192.36.148.17

j.root-servers.net.     381800  IN      A       192.58.128.30

k.root-servers.net.     385437  IN      A       193.0.14.129

l.root-servers.net.     385437  IN      A       198.32.64.12

m.root-servers.net.     385437  IN      A       202.12.27.33

<o:p> </o:p>

;; Query time: 3 msec

;; SERVER: 200.163.208.3#53(200.163.208.3)

;; WHEN: Fri Jan 20 18:36:58 2006

;; MSG SIZE  rcvd: 356

               Com isso seu arquivo de servidores ficará atualizado para pesquisas mundiais.

<a name="_Toc126167788"><![if !supportLists]>c.             <![endif]>Arquivo /var/named/200.163.208.local</a>

               Agora iremos configurar a primeira zona de reversos para a classe C que tenho <st1:PersonName ProductID="em m ̄os. A" w:st="on">em mãos. A</st1:PersonName> configuração ficou dessa forma:

$TTL    345600

@       IN      SOA     dns.cnett.com.br.    hostmaster.dns.cnett.com.br. (

                        01      ; serial

                        86400   ; refresh

                        7200    ; retry

                        2592000 ; expire

                        345600  ; minimum

)

<o:p> </o:p>

        NS      ns1.cnett.com.br.

        NS      ns2.cnett.com.br.

        NS      ns3.cnett.com.br.

<o:p> </o:p>

2       PTR     ns1.cnett.com.br.

4       PTR     ns2.cnett.com.br.

65      PTR     ns3.cnett.com.br.

<o:p> </o:p>

5       PTR     web.cnett.com.br.

4       PTR     mail.cnett.com.br.

2       PTR     dns.cnett.com.br.

<o:p> </o:p>

               Essa é a estrutura que tenho em meus servidores. Qualquer dúvida é só procurar nos documentos do site relacioando ao BIND nameserver.

<a name="_Toc126167789"><![if !supportLists]>d.            <![endif]>Arquivo /var/named/cnett.com.br.zone</a>

               Agora vamos a configuração do domínio e de seus aliases.

$TTL    345600

@       IN      SOA     dns.cnett.com.br.    hostmaster.dns.cnett.com.br. (

                        01      ; serial

                        86400   ; refresh

                        7200    ; retry

                        2592000 ; expire

                        345600  ; minimum

)

<o:p> </o:p>

        NS      ns1.cnett.com.br.

        NS      ns2.cnett.com.br.

        NS      ns3.cnett.com.br.

<o:p> </o:p>

        MX      0       mail.cnett.com.br.

<o:p> </o:p>

ns1     IN      A       200.163.208.2

ns2     IN      A       200.163.208.4

ns3     IN     A      200.163.208.65

<o:p> </o:p>

web     IN      A       200.163.208.5

mail    IN      A       200.163.208.4

dns     IN      A       200.163.208.2

<o:p> </o:p>

www             CNAME   web.cnett.com.br.

ftp             CNAME   web.cnett.com.br.

<o:p> </o:p>

pop             CNAME   mail.cnett.com.br.

smtp            CNAME   mail.cnett.com.br.

<o:p> </o:p>

               Agora que já terminamos as configurações podemos iniciar o processo do bind com o comando:

#service named start

               Mas como eu posso testar se está funcionando meu DNS?! Primeiro saberemos se ele está resolvendo nomes, para isso altere o arquivo /etc/resolv.conf e coloque como nameserver primário o seu IP do localhost assim:

nameserver localhost

domain cnett.com.br

               Faça um teste de ping simples para um domínio qualquer:

[root@ns2 named]# ping www.uol.com.br

<st1:place w:st="on">PING</st1:place> www.uol.com.br (200.221.2.45) 56(84) bytes of data.

64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=0 ttl=58 time=19.2 ms

64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=1 ttl=58 time=13.2 ms

64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=2 ttl=58 time=13.2 ms

<o:p> </o:p>

--- www.uol.com.br ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2006ms

rtt min/avg/max/mdev = 13.233/15.243/19.246/2.832 ms, pipe 2

               Se ainda continua em dúvida use o commando “dig” e verifique o registro de DNS de um site conhecido:

[root@ns2 named]# dig www.terra.com.br

<o:p> </o:p>

; <<>> DiG 9.2.5 <<>> www.terra.com.br

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55042

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

<o:p> </o:p>

;; QUESTION SECTION:

;www.terra.com.br.              IN      A

<o:p> </o:p>

;; ANSWER SECTION:

www.terra.com.br.       7200    IN      A       200.176.3.142

<o:p> </o:p>

;; AUTHORITY SECTION:

terra.com.br.           7200    IN      NS      ns2.terra.com.br.

terra.com.br.           7200    IN      NS      ns1.terra.com.br.

<o:p> </o:p>

;; Query time: 68 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Jan 20 19:03:57 2006

;; MSG SIZE  rcvd: 86

               AHHHH! Mas e como eu sei se meu domínio, recém criado para esse servidor, está sendo direcionado corretamente?! Simples, vamos usar o “dig” novamente:

[root@ns2 named]# dig www.cnett.com.br

<o:p> </o:p>

; <<>> DiG 9.2.5 <<>> www.cnett.com.br

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21079

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 3

<o:p> </o:p>

;; QUESTION SECTION:

;www.cnett.com.br.              IN      A

<o:p> </o:p>

;; ANSWER SECTION:

www.cnett.com.br.       345600  IN      CNAME   web.cnett.com.br.

web.cnett.com.br.       345600  IN      A       200.163.208.5

<o:p> </o:p>

;; AUTHORITY SECTION:

cnett.com.br.           345600  IN      NS      ns1.cnett.com.br.

cnett.com.br.           345600  IN      NS      ns2.cnett.com.br.

cnett.com.br.           345600  IN      NS      ns3.cnett.com.br.

<o:p> </o:p>

;; ADDITIONAL SECTION:

ns1.cnett.com.br.       345600  IN      A       200.163.208.2

ns2.cnett.com.br.       345600  IN      A       200.163.208.4

ns3.cnett.com.br.       345600  IN      A       200.163.208.65

<o:p> </o:p>

;; Query time: 2 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Jan 20 19:05:20 2006

;; MSG SIZE  rcvd: 170

               O que achou?! Agora sim você têm o seu próprio DNS!

               Não esqueça de colocar o named para inicializar com o sistema usando o chkconfig ou ntsysv.

PS.: O arquivo /etc/host.conf diz ao sistema em quem ele deve procurar os nomes primeiro, se no DNS ou no arquivo /etc/hosts. É interessante que todas as máquinas conhecidas da sua rede e seus respectivos hostnames (principal e não secundário como por exemplo ns2.cnett.com.br/principal e web.cnett.com.br/secundário) estejam listados aqui. Assim não tem como a máquina se perder na localização de seus domínios e IPs.


<a name="_Toc126167790"><![if !supportLists]>9.           <![endif]>script: firewall / controle de banda</a>

<o:p> </o:p>


<a name="_Toc126167791"><![if !supportLists]>10.     <![endif]>software: pppoe server / autenticação radius</a>

               Para fazermos a instalação desse modelo de autenticador é indicado o uso de duas ou mais máquinas na rede interna do provedor. Eu utilizei dois servidores, sendo um dentro de uma DMZ e outro como gateway e autenticador PPPoE. Começarei instalando o servidor de autenticação FreeRadius.

<a name="_Toc126167792"><![if !supportLists]>a.            <![endif]>Freeradius</a>

               Primeiro façamos a instalação dos sistemas do FreeRadius.

#apt-get install freeradius libtool-libs lm_sensors net-snmp net-snmp-libs net-snmp-utils

               Após instalado o servidor de autenticação deveremos configurar o mesmo. As configurações dele ficam em /etc/raddb.

<a name="_Toc126167793"><![if !supportLists]>i.               <![endif]>Arquivo /etc/raddb/radiusd.conf</a>

               Para que o FreeRadius possa autenticar os clientes usando o shadow do linux o usuário radiusd deve ter permissão de leitura no arquivo shadow. Para isso edite a linha group, ela está assim:

user radiusd

group radiusd

               Mude para:

user radiusd

group root

               Agora só sete o modo de leitura para o grupo root no arquivo /etc/shadow:

#chmod g+r /etc/shadow

<a name="_Toc126167794"><![if !supportLists]>ii.             <![endif]>Arquivo /etc/raddb/clients.conf</a>

               Neste arquivo colocaremos todas as configurações dos servidores que deverão conectar a este radius para pedir nomes e senhas de usuário ao sistema, a sintaxe é simples. Vou apenas configurar um client que é o meu servidor PPPoE, adicionando estas linhas ao final do arquivo e comentando todas as outras:

client 172.30.0.91 {

        secret          = teste

        shortname       = ns3

        nastype         = other

}

<a name="_Toc126167795"><![if !supportLists]>iii.            <![endif]>Arquivo /etc/raddb/dictionary</a>

               Neste arquivos iremos adicionar as bibliotecas de indexação para a configuração correta dos controles de velocidade nos servidores PPPoE. Adicione estas linhas no final do arquivo:

ATTRIBUTE Download 64 integer

ATTRIBUTE Upload 65 integer

ATTRIBUTE Cliente 66 string

<a name="_Toc126167796"><![if !supportLists]>iv.           <![endif]>Arquivo /etc/raddb/naslist</a>

               Aqui está a lista dos servidores e seus apelidos, comente todas as linhas e adicione a linha referente ao seu servidor PPPoE:

172.30.0.91                ns3                 other

<a name="_Toc126167797"><![if !supportLists]>v.            <![endif]>Arquivo /etc/raddb/naspasswd</a>

               Neste arquivo devem ser colocados todos os servidores e colocar a exceção do login para o root, um exemplo para o servidor localhost (127.0.0.1):

localhost           !root               teste

<a name="_Toc126167798"><![if !supportLists]>vi.           <![endif]>Arquivo /etc/raddb/users</a>

               Neste arquivo configuraremos os grupos que terão permissões para acesso e suas configurações de velocidade, eu adicionei apenas um grupo como teste:

DEFAULT Group == "cliente200", Simultaneous-Use := 1

        Fall-Through = No,

        Download = 200,

        Upload = 100,

        Cliente = cliente

               Além disso comente todos os outros protocolos deixando apenas as linhas abaixo descomentadas:

DEFAULT Auth-Type = System

        Fall-Through = 1

               Agora adicione um usuário ao sistema para que você possa testar. Esse usuário deve estar em um dos grupos que você cadastrou no arquivo users. Ahhhhh! Você não criou o grupo?! O que está esperando então?!

#groupadd cliente200

               Pronto agora vamos criar um usuário. Saiba que para o usuário poder logar ele precisa ter uma shell válida (/bin/bash ou outra qualquer) então, assim sendo, teremos problemas sérios de segurança que devem ser contidos com um diretório de usuário (home) direcionado para /dev/null. Criemos então o usuário:

#useradd -d /dev/null -s /bin/bash -g cliente200 nata

               Agora dê uma senha a esse usuário:

[root@ns2 etc]# passwd nata

Changing password for user nata.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

               Pronto, nosso servidor radius está configurado apenas esperando as conexões de nosso PPPoE. Você pode colocar ele para iniciar com o sistema pelo ntsysv, mas para ter certeza de que a autenticação está ok você deve verificar os LOGs em /var/log/radius e também pode executar o radius em modo debug, assim:

[root@ns2 radius]# radiusd -x

Starting - reading configuration files ...

Using deprecated naslist file.  Support for this will go away soon.

Module: Loaded exec

rlm_exec: Wait=yes but no output defined. Did you mean output=none?

Module: Instantiated exec (exec)

Module: Loaded expr

Module: Instantiated expr (expr)

Module: Loaded PAP

Module: Instantiated pap (pap)

Module: Loaded CHAP

Module: Instantiated chap (chap)

Module: Loaded MS-CHAP

Module: Instantiated mschap (mschap)

Module: Loaded System

Module: Instantiated unix (unix)

Module: Loaded eap

rlm_eap: Loaded and initialized type md5

rlm_eap: Loaded and initialized type leap

rlm_eap: Loaded and initialized type gtc

rlm_eap: Loaded and initialized type mschapv2

Module: Instantiated eap (eap)

Module: Loaded preprocess

Module: Instantiated preprocess (preprocess)

Module: Loaded realm

Module: Instantiated realm (suffix)

Module: Loaded files

Module: Instantiated files (files)

Module: Loaded Acct-Unique-Session-Id

Module: Instantiated acct_unique (acct_unique)

Module: Loaded detail

Module: Instantiated detail (detail)

Module: Loaded radutmp

Module: Instantiated radutmp (radutmp)

Initializing the thread pool...

Listening on authentication *:1812

Listening on accounting *:1813

Listening on proxy *:1814

Ready to process requests.

               Vamos agora configurar o servidor PPPoE.

<a name="_Toc126167799"><![if !supportLists]>b.            <![endif]>PPPoE Server</a>

               Essa instalação é baseada no tutorial do Scorpion:

<a href="http://underlinux.com.br/noticia4447.html">http://underlinux.com.br/noticia4447.html</a>

               Primeiro iremos instalar os pacotes necessários para o bom funcionamento do sistema:

#apt-get install libpcap ppp rp-pppoe

               Agora iremos baixar os arquivos modificados do PPP para compilarmos:

#wget http://www.underlinux.com.br/downloads/ppp/ppp.tar.gz

#tar -xzvf ppp.tar.gz

#cd ppp/

#apt-get install make binutils cpp gcc glibc-devel glibc-headers glibc-kernheaders

#./configure

#make

#make install

#apt-get clean

#rpm -e make binutils cpp gcc glibc-devel glibc-headers glibc-kernheaders

               Agora vamos editar as configurações do servidor PPPoE. Primeiro adicione as linhas no final do arquivo /etc/ppp/pppoe-server-options:

ms-dns <IP do DNS Primário>

ms-dns <IP do DNS Secundário>

plugin radius.so

plugin radattr.so

               Agora edite o arquivo /etc/radiusclient/servers e adicione seu servidor radius:

#Server Name or Client/Server pair              Key

#----------------                               ---------------

172.20.0.90                                     teste

               Edite o arquivo /etc/radiusclient/radiusclient.conf e altere as linhas abaixo:<o:p></o:p>

login_tries                3

authserver          172.30.0.90:1812

acctserver          172.30.0.90:1813

nas_identifier             ns3

               Agora vamos criar o arquivo de IPs que serão usados pelo servidor PPPoE para atribuir aos clientes (não esqueça que essa classe de IP deve estar listada no seu NAT, se for o caso, senão seus clientes não irão ter acesso a nada). O arquivo a ser criado deve ser /etc/ppp/ips e tem a seguinte sintaxe:

192.168.0.5-100

               Isso indica que o servidor pode usar, sequencialmente, os IPs da subrede 192.168.0.0/24 entre o 192.168.0.5 e o 192.168.0.100.

               Agora você deve substituir o arquivo /etc/ppp/ip-up pelo modificado para ter o controle de banda:

#!/bin/bash

#

#---

# Variaveis

#---

IPTABLES="/usr/local/sbin/iptables"

TC="/sbin/tc"

<o:p> </o:p>

interface=$1

remoteIP=$5

download=`grep Download /var/run/radattr.$interface | awk '{ print $2; }'`

upload=`grep Upload  /var/run/radattr.$interface | awk '{ print $2; }'`

cliente=`grep Cliente /var/run/radattr.$interface | awk '{ print $2; }'`

contamark=`echo $interface | cut -c 4-99`

mark=`expr $contamark + 500`

<o:p> </o:p>

echo "$download" > /tmp/$interface.download

echo "$upload" > /tmp/$interface.upload

echo "$cliente" > /tmp/$interface.cliente

<o:p> </o:p>

#----

# Bloqueio de portas para clientes do grupo clientes

#----

#if [ $cliente == "cliente" ]

#then

#$IPTABLES -I FORWARD -d $remoteIP -p tcp --dport 1:1024 -j DROP

#$IPTABLES -I FORWARD -d $remoteIP -p tcp --dport 6000:9000 -j DROP

#fi

<o:p> </o:p>

$TC qdisc add dev $interface root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8

$TC class add dev $interface parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$download"Kbit weight `expr $download / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

$TC qdisc add dev $interface parent 1:$mark handle $mark sfq perturb 10

$TC filter add dev $interface parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark

$IPTABLES -t mangle -A POSTROUTING -d $remoteIP -j MARK --set-mark $mark

<o:p> </o:p>

$TC qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8

$TC class add dev eth0 parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$upload"Kbit weight `expr $upload / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

$TC qdisc add dev eth0 parent 1:$mark handle $mark  sfq perturb 10

$TC filter add dev eth0 parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark

$IPTABLES -t mangle -A FORWARD -s $remoteIP -j MARK --set-mark $mark

<o:p> </o:p>

echo "PPP started at $(date):

interface = $interface

Remote IP = $remoteIP

download = $download

upload = $upload

mark = $mark

" >/tmp/$interface

               E também o arquivo /etc/ppp/ip-down:

#!/bin/bash

#

#---

# Variaveis

#---

IPTABLES="/usr/local/sbin/iptables"

TC="/sbin/tc"

<o:p> </o:p>

interface=$1

remoteIP=$5

download=`cat  /tmp/$interface.download`

upload=`cat  /tmp/$interface.upload`

cliente=`cat  /tmp/$interface.cliente`

<o:p> </o:p>

contamark=`echo $interface | cut -c 4-99`

mark=`expr $contamark + 500`

<o:p> </o:p>

#----

# Bloqueio de portas para clientes do grupo clientes

#----

#if [ $cliente == "cliente" ]

#then

#$IPTABLES -D FORWARD -d $remoteIP -p tcp --dport 1:1024 -j DROP

#$IPTABLES -D FORWARD -d $remoteIP -p tcp --dport 6000:9000 -j DROP

#fi

<o:p> </o:p>

$TC qdisc <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev $interface root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8

$TC class <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev $interface parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$download"Kbit weight `expr $download / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

$TC qdisc <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev $interface parent 1:$mark handle $mark sfq perturb 10

$TC filter <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev $interface parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark

$IPTABLES -t mangle -D POSTROUTING -d $remoteIP -j MARK --set-mark $mark

<o:p> </o:p>

$TC qdisc <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev eth0 parent 1:$mark handle $mark  sfq perturb 10

$TC filter <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev eth0 parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark

$IPTABLES -t mangle -D FORWARD -s $remoteIP -j MARK --set-mark $mark

$TC class <st1:place w:st="on"><st1:State w:st="on">del</st1:State></st1:place> dev eth0 parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$upload"Kbit weight `expr $upload / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

<o:p> </o:p>

echo "PPP started at $(date):

interface = $interface

Remote IP = $remoteIP

download = $download

upload = $upload

mark = $mark

" >/tmp/$interface

               Agora edite o arquivo /etc/radiusclient/dictionary para adicionar os grupos de bibliotecas iguais ao do seu servidor radius:

ATTRIBUTE Download 64 integer

ATTRIBUTE Upload 65 integer

ATTRIBUTE Cliente 66 string

               Depois de tudo configurado teremos que iniciar o servidor PPPoE, o comando para iniciar o servidor é:

#pppoe-server -C <NOME DO PROVEDOR> -L <ENDEREÇO LOCAL> -p /etc/ppp/ips -I <INTERFACE>

               Você pode adicionar esse comando ao seu arquivo /etc/rc.d/rc.local para que seja inicializado sempre ao iniciar a máquina.


<a name="_Toc126167800"><![if !supportLists]>11.     <![endif]>monitoramento: cacti / mrtg / snmp / ntop</a>

<o:p> </o:p>


<a name="_Toc126167801"><![if !supportLists]>12.     <![endif]>finalmente</a>

<a name="_Toc126167802"><![if !supportLists]>a.            <![endif]>pacotes que podem ser removidos</a>

#rpm -e rpm-build make gcc redhat-rpm-config cpp glibc-devel glibc-headers glibc-kernheaders gnupg m4 binutils file patch ncurses-devel

               Além de todos estes pacotes você pode apagar todos os sources baixados para que fique com mais espaço em disco.


<a name="_Toc126167803"><![if !supportLists]>13.     <![endif]>Bibliografia e webografia</a>

MAURIAT MIRANDA, Personal Fedora Core 3 Installation Guide. Disponível em <http://www.mjmwired.net/resources/mjm-kernel-fc3.html>. Acessado em 17 de outubro de 2005.

RED HAT INC, Fedora Core 3 Release Notes. Disponível em <http://download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/RELEASE-NOTES-en.html>. Acessado em 17 de outubro de 2005.

Ethan Sommer; Matthew Strait, Application Layer Packet Classifier for Linux. Disponível em <http://l7-filter.sourceforge.net/>. Acessado em 17 de outubro de 2005.

Julian Anastasov, Linux Advanced Routing. Disponível em <http://www.ssi.bg/~ja/>. Acessado em 17 de outubro de 2005.

ZAGO.ETI.BR, FAQ e links pra medir trafego da rede. Disponível em <http://www.zago.eti.br/trafego.txt>. Acessado em 18 de outubro de 2005.

LARTC.ORG, Linux Advanced Routing & Traffic Control. Disponível em <http://www.lartc.org/>. Acessado em 18 de outubro de 2005.

SOARES, GLEYDSON, Integrando O Postfix com o ClamAV e SpamAssassin. Disponível em <http://www.unitednerds.org/thefallen/docs/index.php?area=Postfix&tuto=Clamav-SA-Bogo>. Acessado em 19 de dezembro de 2005.

ORTIZ, RODRIGO, Postfix+Auth no FEDORA. Disponível em <http://underlinux.com.br/noticia4466.html>. Acessado em 12 de janeiro de 2006.

SOARES, GLEYDSON e MICHELLIS, DEIVES, Integrando o Postfix com o Clamav e SpamAssassin/BogoFilter. Disponível em <http://www.unitednerds.org/thefallen/docs/index.php?area=Postfix&tuto=Clamav-SA-Bogo>. Acessado em 12 de janeiro de 2006.

MACIEL, MARCUS, PPPoE + Radius + Bandlimit. Disponível em <http://underlinux.com.br/noticia4447.html>. Acessado em 20 de janeiro de 2006.

GENOME SCIENCES, NTP Configurator. Disponível em <http://cfm.gs.washington.edu/network/ntp/ntp/>. Acessado em 25 de janeiro de 2006.

</body>

</html>