Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1) 2) 3) 4)
A) I) B) C) I)
SUMRIO
SUMRIO ................................................................................................... 1 INSTALAO A PARTIR DO CD .................................................................. 3 REMOO DE PACOTES .............................................................................. 4 ATUALIZANDO E AJUSTANDO O SISTEMA .................................................. 5
AJUSTES INICIAIS ................................................................................................................. 5 INTERFACE DE REDE .............................................................................................................. 5 YUM........................................................................................................................................ 5 INSTALANDO PROGRAMAS ESSENCIAIS AO SISTEMA ............................................................ 6 VIM-ENHANCED ..................................................................................................................... 6 NTP CLIENT ........................................................................................................................... 6 SISTEMA DE QUOTAS ......................................................................................................... 7
II) III) D) E)
5)
A) I) II) B) I) C) I)
KERNEL ..................................................................................................... 9
PATCHS PARA O KERNEL ........................................................................................................ 9 LAYER 7 FILTER ..................................................................................................................... 9 BALABIT TRANSPARENT PROXY (TPROXY) ................................................................................. 9 COMPILANDO O KERNEL......................................................................................................... 9 HABILITANDO O LAYER 7 FILTER ............................................................................................. 9 COMPILANDO OUTROS PROGRAMAS NECESSRIOS APS MUDAR O KERNEL....................... 10 IPTABLES ............................................................................................................................ 10
6)
A)
MYSQL 5 .................................................................................................. 11
ARQUIVOS PARA BACKUP .................................................................................................... 11
7)
A) I) II)
FREERADIUS ............................................................................................ 12
CONFIGURANDO O FREERADIUS .......................................................................................... 12 USR/LOCAL/ETC/RADDB/CLIENTS.CONF ................................................................................. 12 USR/LOCAL/ETC/RADDB/RADIUSD.CONF ................................................................................ 12 USR/LOCAL/ETC/RADDB/SQL.CONF .................................................................................... 12 USR/LOCAL/ETC/RADDB/SITES-ENABLED ............................................................................... 13 COLOCANDO O FREERADIUS NA INICIALIZAO DO SISTEMA ............................................ 14 USANDO MIKROTIK .............................................................................................................. 16 HABILITANDO O SIMULTANEOUS-USE ................................................................................. 16 ARQUIVOS PARA SERVIDORES VIRTUAIS ............................................................................ 17 I) II) III) RADIUSD.CONF .................................................................................................................... 17 SQL.CONF ........................................................................................................................... 17 DIRETRIO SITES-ENABLE ................................................................................................ 18
III) IV) B) C) D) E)
F)
8)
A) B)
VSFTPD ............................................................................................................................... 20 INSTALANDO O PHP 5.2 ....................................................................................................... 21 CONFIGURANDO O PHPMYADMIN (NECESSITA PHP 5.2) ..................................................... 21 CONFIGURAO AVANADA DO APACHE.............................................................................. 21 CRIANDO O ARQUIVO /ETC/HTTPD/CONF.D/VIRTUAIS.CONF ..................................................... 22 USANDO O USERDIR ............................................................................................................ 22 INSTALANDO O MRTG/RRDTOOL.......................................................................................... 22 INSTALANDO O MRTG VIA RPM .............................................................................................. 22 COMPILANDO E INSTALANDO O RRDTOOL .............................................................................. 23 EXECUTANDO ARQUIVOS CGI ............................................................................................ 23
9)
A) B) I) II) C) D) E)
10)
A) B) C) D) E) F) G) I) II) H)
11)
A) I) B) C) I)
2)
INSTALAO A PARTIR DO CD
A instalao dever ser feita de acordo com as necessidades de cada empresa no quesito parties. No quesito seleo de pacotes deve-se retirar a seleo de todos os pacotes que so instalados por padro. A instalao final fica com +/- 904 Mb (partio master) e 11 Mb (partio de boot).
3)
REMOO DE PACOTES
Aps a instalao necessria a remoo dos pacotes desnecessrio, utilize o
comando:
rpm -e anacron-2.3-45.el5.centos apmd-3.2.2-5 at-3.1.8-82.fc6 audit-1.5.5-7.el5 autofs5.0.1-0.rc2.55 conman-0.1.9.2-8.el5 cups-1.2.4-11.14.el5 dhcdbd-2.2-1.el5 bluez-utils3.7-2.el5.centos firstboot-tui-1.4.27.3-1.el5.centos bluez-utils-3.7-2.el5.centos ibmasm-3.0-9 iptables-ipv6-1.3.5-1.2.1 irda-utils-0.9.17-2.fc6 krb5-workstation-1.6.117.el5 mdadm-2.5.4-3.el5 microcode_ctl-1.17-1.42.el5 NetworkManager-0.6.4-6.el5 nfsutils-1.0.9-24.el5 nscd-2.5-18 oddjob-0.27-7 bluez-utils-3.7-2.el5.centos pcsc-lite1.3.1-7 psacct-6.3.2-41.1 readahead-1.3-7.el5 policycoreutils-1.33.12-12.el5 nfs-utils1.0.9-24.el5 sendmail-8.13.8-2.el5 wpa_supplicant-0.4.8-10.1.fc6 ypbind-1.19-8.el5 yumupdatesd-3.0.5-1.el5.centos.5 redhat-lsb-3.1-12.3.EL.el5.centos redhat-lsb-3.112.3.EL.el5.centos system-config-securitylevel-tui-1.6.29.1-1.el5 amtu-1.0.4-4 oddjoblibs-0.27-7 selinux-policy-2.4.6-104.el5 selinux-policy-targeted-2.4.6-104.el5 setools3.0-3.el5 yp-tools-2.9-0.1 ifd-egate-0.05-15 ccid-1.0.1-6.el5 coolkey-1.1.0-5.el5 nss_ldap-253-5.el5 fontconfig-2.4.1-6.el5 cairo-1.2.4-2.el5 libXft-2.1.10-1.1 pango1.14.9-3.el5.centos gtk2-2.10.4-19.el5 GConf2-2.14.0-9.el5 bluez-gnome-0.5-5.fc6 libwnck-2.16.0-4.fc6 notification-daemon-0.3.5-8.el5 libnotify-0.4.2-6.el5 paps-0.6.617.el5 libgssapi-0.10-2 nfs-utils-lib-1.0.8-7.2.z2 lftp-3.5.1-2.fc6 pcmciautils-014-5 pinfo-0.6.9-1.fc6 ppp-2.4.4-1.el5 rp-pppoe-3.5-32.1.i386 ipsec-tools-0.6.5-8.el5 setuptool-1.19.2-1.el5.centos
Tambm devemos remover antigas configuraes e arquivos desnecessrios dos programas removidos:
rm -rf /etc/pcmcia /etc/ppp/*.rpmsave /etc/readahead.d/
Aps todas as remoes apresentadas seu sistema continuar funcionando perfeitamente e teremos muito menos pacotes a serem atualizados, fora a baixa probabilidade de existirem sploits que poderiam ser usados contra voc. O consumo de memria fsica diminui consideravelmente para +/- 800 Mb.
4)
Iremos ajustar alguns arquivos que no sero usados j no comeo de nossos trabalhos, mas daro melhor fora no decorrer das instalaes. I) INTERFACE DE REDE Vamos configurar uma interface de rede lan para que possamos conectar ao box via SSH:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
Depois disso tudo feito vamos reiniciar a mquina para as configuraes tomarem efeito:
reboot
B)
cd wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt rpm --import RPM-GPG-KEY.dag.txt rm -rf RPM-GPG-KEY.dag.txt wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm rm -rf rpmforge-release-0.3.6-1.el5.rf.i386.rpm yum -y update mv -f /etc/pam.d/system-auth.rpmnew /etc/pam.d/system-auth
C)
O VI um editor de texto poderoso e simples. A verso mais completa dele muda as cores dos scripts e arquivos facilitando sua edio e leitura. Para instalarmos essa nova verso usamos o comando:
yum -y install vim-enhanced
Aps a instalao do mesmo vamos renomear o arquivo vi para que ele use o novo programa:
rm -rf /bin/vi ln -s /usr/bin/vim /bin/vi
II)
NTP CLIENT
O NTP serve para atualizar o sistema de hora do computador. Esse atualizador deixar toda a rede em perfeita harmonia, sempre sincronizada, facilitando a analise de logs pois teremos as datas sempre atualizadas.
yum -y install ntp
Como estamos no Brasil vamos sincronizar o sistema usando o NTP.br. Para isso precisamos criar um arquivo e editar outro:
touch /etc/ntp.drift rm -rf /etc/ntp.conf vi /etc/ntp.conf
Vamos editar outro arquivo para que o relgio do hardware da mquina tambm seja sincronizado:
chown ntp.ntp /etc/ntp vi /etc/sysconfig/ntpd
Mude a linha:
SYNC_HWCLOCK=no
Para
SYNC_HWCLOCK=yes
Agora podemos ver o horrio devidamente ajustado. III) SISTEMA DE QUOTAS Para quem quer ter um sistema de quotas setado na mquina sempre interessante que haja o pacote j devidamente instalado e o sistema configurado. Para isso executaremos os seguintes comandos:
yum -y install quota
Aps instalado edite o seu /etc/fstab e adicione as seguintes clausulas as parties que voc quer habilitar as cotas:
,usrquota,grpquota
Depois disso execute (as 3 primeiras linhas devem ser executadas para CADA uma das parties em que voc habilitou as cotas de usurios):
touch /aquota.user /aquota.group chmod 600 /aquota.* mount -o remount / quotacheck -avugm quotaon avug
Aps isso crie um arquivo no cron para que as quotas sejam verificadas regularmente. Use o vi e crie um arquivo quotacheck no cron.daily com o seguinte contedo:
#!/bin/bash /sbin/quotaoff -avug /sbin/quotacheck -v -a /sbin/quotaon -avug
D)
Para que possamos remover os programas da inicializao do sistema utilizaremos o utilitrio ntsysv:
ntsysv
Remova todos os servios que no tero utilidade ao seu servidor. Em geral os servios necessrios so: crond, network, sshd, syslog e xinetd. E) ARQUIVOS PARA BACKUP Os arquivos que devem ser feitos backup na guia sistema so:
7
/etc/sysconfig/network-scripts/ifcfg-* /etc/sysconfig/network /etc/sysctl.conf /etc/resolv.conf /etc/ntp.conf /etc/host* /etc/fstab /aquota* /bk/aquota* /etc/logrotate.d/* /var/log/* /etc/passwd* /etc/shadow* /etc/cron.* /etc/crontab
5)
KERNEL
Vamos primeiro criar o source do kernel.
yum groupinstall "Development Tools" yum -y install ncurses-devel rpm-build redhat-rpm-config unifdef su <usuario sem privigelios> cd mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} echo '%_topdir %(echo $HOME)/rpmbuild' > .rpmmacros wget http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.18-92.1.22.el5.src.rpm rpm -i kernel-2.6.18-92.1.22.el5.src.rpm 2> /dev/null cd rpmbuild/SPECS rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m` cp configs/kernel-2.6.18-`uname -m`.config .config make oldconfig
A)
cd wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.21.tar.gz tar -xzvf netfilter-layer7-v2.21.tar.gz rm -rf netfilter-layer7-v2.21.tar.gz cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/ patch -p1 < ~/netfilter-layer7-v2.21/for_older_kernels/kernel-2.6.18-2.6.19-layer72.9.patch cd cp netfilter-layer7-v2.21/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch ~/rpmbuild/SOURCES/custom-l7filter-01.patch
II)
[ Referncia: http://www.balabit.com/downloads/files/tproxy/ ] cd wget http://www.balabit.com/downloads/files/tproxy/obsolete/linux-2.6/cttproxy-2.6.182.0.6.tar.gz tar -xzvf cttproxy-2.6.18-2.0.6.tar.gz cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/ patch -p1 < ~/cttproxy-2.6.18-2.0.6/patch_tree/01-nat_reservations.patch patch -p1 < ~/cttproxy-2.6.18-2.0.6/patch_tree/02-tproxy.patch patch -p1 < ~/cttproxy-2.6.18-2.0.6/patch_tree/03-nat_delete.patch cd cp cttproxy-2.6.18-2.0.6/patch_tree/01-nat_reservations.patch ~/rpmbuild/SOURCES/customtproxy-01.patch cp cttproxy-2.6.18-2.0.6/patch_tree/02-tproxy.patch ~/rpmbuild/SOURCES/custom-tproxy02.patch cp cttproxy-2.6.18-2.0.6/patch_tree/03-nat_delete.patch ~/rpmbuild/SOURCES/customtproxy-03.patch
B)
make menuconfig
Agora devemos fazer as escolhas do que deve ou no ser instalado. I) HABILITANDO O LAYER 7 FILTER
Networking > Networking Options > Network packet filtering (replaces ipchains) > IP: Netfilter Configuration
Antes de continuar iremos editar o arquivo .config e adicionar o tipo de sistema que ser rodado (i386 ou x86_64):
vi ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/.config
Agora precisa editar o menu do Grub para que inicialize a partio correta. C) COMPILANDO OUTROS PROGRAMAS NECESSRIOS APS MUDAR O KERNEL I) IPTABLES
TODAS AS COMPILAES DEVEM SER FEITAS COM UM USURIO SEM PRIVILGIOS. Aps colocarmos o sistema layer7 e tproxy ativos precisaremos compilar o iptables para aceitar esse novo padro. Vamos baixar os componentes:
wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2 tar xjf iptables-1.3.7.tar.bz2 rm -rf iptables-1.3.7.tar.bz2 cd iptables-1.3.7/
10
6)
MYSQL 5
Vamos a instalao do MySQL:
yum -y install mysql mysql-server
Ao menos um pouco de segurana interessante para o login root do MySQL, assim sendo colocaremos uma senha no MySQL e deixaremos ele para iniciar automaticamente com o sistema:
/etc/rc.d/init.d/mysqld start mysqladmin password <senha que voc quer aqui> ntsysv
Adicione o mysqld a lista dos programas a serem iniciados com o sistema. A) ARQUIVOS PARA BACKUP
/var/lib/mysql/mysql/*
11
7)
FREERADIUS
Para compilar o FreeRadius:
cd wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.3.tar.gz tar -xzvf freeradius-server-2.1.3.tar.gz rm -rf freeradius-server-2.1.3.tar.gz cd freeradius-server-2.1.3 yum y install gcc net-snmpd-utils mysql-devel ./configure --with-snmp make make install rpm -e gcc cpp glibc-devel glibc-headers kernel-headers libgomp
A)
Este arquivo contem as informaes referentes aos seus concentradores que iro utilizar esse servidor Radius para autenticar seus usurios. Alm disso configuraremos este arquivo para que ele possa ser executado tambm pelo prprio servidor (como no caso de uma desconexo que venha a ser necessria).
# clients.conf client 127.0.0.1 { secret = shortname nastype = } testing123 = localhost other
Esta a configurao bsica apenas para um modelo de autenticao local. II) /USR/LOCAL/ETC/RADDB/RADIUSD.CONF Alguns itens que devem ser alterados no arquivo:
logdir = /var/log/radius user = radiusd group = radiusd stripped_names = yes auth = yes auth_badpass = yes status_server = no
Nesta verso do FreeRadius possvel setar em que interface ou IP o servio estar disponvel. Se for seu caso procure informaes de como fazer isso no radiusd.conf. Vamos criar o usurio e os diretrios necessrios e dar permisso ao radius:
useradd -d /bin/false -s /bin/false radiusd mkdir /var/log/radius chown radiusd.radiusd -R /var/log/radius chown radiusd.radiusd -R /usr/local/var/run/radiusd
III)
/USR/LOCAL/ETC/RADDB/SQL.CONF
Aqui haver a configurao geral do MySQL. As linhas abaixo so as linhas que editei no arquivo:
# Connection info: server = "localhost" #port = 3306 login = "radius" password = "cnett"
Agora precisamos criar as tabelas do MySQL e o usurio. Para isso pode-se usar o sistema pr-configurado:
12
mysql -u root -p(sua senha aqui) < /usr/local/etc/raddb/sql/mysql/admin.sql mysql -u root -p(sua senha aqui) < /usr/local/etc/raddb/sql/mysql/schema.sql
No esquea de editar o arquivo admin e colocar sua senha e nome de usurio requerido. No meu caso mudei o nome de usurio para radiusd. IV) /USR/LOCAL/ETC/RADDB/SITES-ENABLED Este o diretrio onde iremos configurar nosso primeiro servidor (podem haver vrios em um mesmo computador usar a virtualizao do FreeRadius). O nome dele ser cnett.
cd /usr/local/etc/raddb/sites-enabled rm -rf cp ../sites-available/default cnett
Agora vamos editar o arquivo para se adequar a nossa necessidade. Apenas as linhas modificadas esto listadas (as linhas comentadas esto na ordem em que aparecem no arquivo):
authorize { # chap # mschap # eap { # ok = return # } # unix # files sql } accounting { # detail # unix # radutmp sql } session { # radutmp sql } post-auth { # exec # Post-Auth-Type REJECT { # attr_filter.access_reject # } } post-proxy { # eap }
Teoricamente seu FreeRadius est pronto para rodar. Vamos testar criando um usurio para que possamos logar no sistema:
mysql -uroot p<seu password do root>
Agora iniciaremos o radius em modo debug (-X) e abriremos um novo terminal SSH para o teste:
[root@ns2 ~]# radtest teste 2525 localhost 1812 testing123 Sending Access-Request of id 150 to 127.0.0.1:1812 User-Name = "teste" User-Password = "2525" 13
NAS-IP-Address = ns2.cnett.com.br NAS-Port = 1812 rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=150, length=20
Como podemos ver o pacote foi devidamente aceito e o retorno do modo debug do FreeRadius foi:
rad_recv: Access-Request packet from host 127.0.0.1:32768, id=150, length=57 User-Name = "teste" User-Password = "2525" NAS-IP-Address = 255.255.255.255 NAS-Port = 1812 Processing the authorize section of radiusd.conf modcall: entering group authorize for request 1 modcall[authorize]: module "preprocess" returns ok for request 1 modcall[authorize]: module "chap" returns noop for request 1 modcall[authorize]: module "mschap" returns noop for request 1 rlm_realm: No '@' in User-Name = "teste", looking up realm NULL rlm_realm: No such realm "NULL" modcall[authorize]: module "suffix" returns noop for request 1 rlm_eap: No EAP-Message, not doing EAP modcall[authorize]: module "eap" returns noop for request 1 radius_xlat: 'teste' rlm_sql (sql): sql_set_user escaped user --> 'teste' radius_xlat: 'SELECT id,UserName,Attribute,Value,op FROM radcheck WHERE Username = 'teste' ORDER BY id' rlm_sql (sql): Reserving sql socket id: 3 radius_xlat: 'SELECT radgroupcheck.id,radgroupcheck.GroupName,radgroupcheck.Attribute,radgroupcheck.Value,rad groupcheck.op FROM radgroupcheck,usergroup WHERE usergroup.Username = 'teste' AND usergroup.GroupName = radgroupcheck.GroupName ORDER BY radgroupcheck.id' radius_xlat: 'SELECT id,UserName,Attribute,Value,op FROM radreply WHERE Username = 'teste' ORDER BY id' radius_xlat: 'SELECT radgroupreply.id,radgroupreply.GroupName,radgroupreply.Attribute,radgroupreply.Value,rad groupreply.op FROM radgroupreply,usergroup WHERE usergroup.Username = 'teste' AND usergroup.GroupName = radgroupreply.GroupName ORDER BY radgroupreply.id' rlm_sql (sql): Released sql socket id: 3 modcall[authorize]: module "sql" returns ok for request 1 modcall: group authorize returns ok for request 1 rad_check_password: Found Auth-Type Local auth: type Local auth: user supplied User-Password matches local User-Password Login OK: [teste] (from client localhost port 1812) Sending Access-Accept of id 150 to 127.0.0.1:32768 Finished request 1
Ou seja, tudo certo... Parabns! Seu FreeRadius est configurado em modo MySQL! Agora apenas coloque o radius para iniciar com o sistema usando o ntsysv. B) COLOCANDO O FREERADIUS NA INICIALIZAO DO SISTEMA Para isso deve-se criar um arquivo dentro do init.d. Vamos criar o arquivo /etc/init.d/radiusd com o seguinte contedo:
#!/bin/sh # # chkconfig: - 88 10 # description: Start/Stop the RADIUS server daemon # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software 14
# # # #
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Copyright (C) 2001 The FreeRADIUS Project
02111-1307
USA
http://www.freeradius.org
# Source function library. . /etc/rc.d/init.d/functions RADIUSD=/usr/local/sbin/radiusd LOCKF=/var/lock/subsys/radiusd CONFIG=/usr/local/etc/raddb/radiusd.conf [ -f $RADIUSD ] || exit 0 [ -f $CONFIG ] || exit 0 RETVAL=0 case "$1" in start) echo -n $"Starting RADIUS server: " daemon $RADIUSD RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $LOCKF && ln -s /var/run/radiusd/radiusd.pid /var/run/radiusd.pid 2>/dev/null ;; stop) echo -n $"Stopping RADIUS server: " killproc $RADIUSD RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $LOCKF ;; status) status radiusd RETVAL=$? ;; reload) echo -n $"Reloading RADIUS server: " killproc $RADIUSD -HUP RETVAL=$? echo ;; restart) $0 stop sleep 3 $0 start RETVAL=$? ;; condrestart) if [ -f $LOCKF ]; then $0 stop sleep 3 $0 start RETVAL=$? fi ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" exit 1 esac exit $RETVAL
Habilitando a rotao do log Vamos criar o arquivo /etc/logrotate.d/radiusd com o seguinte contedo:
15
# There are different detail-rotating strategies you can use. One is # to write to a single detail file per IP and use the rotate config # below. Another is to write to a daily detail file per IP with: # detailfile = ${radacctdir}/%{Client-IP-Address}/%Y%m%d-detail # (or similar) in radiusd.conf, without rotation. If you go with the # second technique, you will need another cron job that removes old # detail files. You do not need to comment out the below for method #2. /var/log/radius/radacct/*/detail { monthly rotate 4 nocreate missingok compress } /var/log/radius/checkrad.log { monthly rotate 4 create missingok compress } /var/log/radius/radius.log { weekly rotate 8 create missingok compress } /var/log/radius/radutmp { monthly rotate 4 create compress missingok } /var/log/radius/radwtmp { monthly rotate 4 create compress missingok } /var/log/radius/sqltrace.sql { monthly rotate 4 create compress missingok }
C)
USANDO MIKROTIK
Caso voc queira usar Mikrotik para autenticar em cima do FreeRadius necessrio a colocao de sua biblioteca, vamos aos passos:
cd /usr/local/share/freeradius/ rm -rf dictionary.mikrotik wget http://www.mikrotik.com/Documentation/manual_2.9/dictionary.mikrotik
D)
HABILITANDO O SIMULTANEOUS-USE
Para que possamos ter o controle sobre o nmero de conexes dos clients preciso usar o comando de login simultneo. Para isso devemos cadastrar em uma das tabelas de check o Simultaneous-Use := 1 (ou o valor que quiser), aps isso descomente, no arquivo /etc/raddb/sql.conf a linha:
simul_count_query = "SELECT COUNT(*) FROM ${acct_table1} WHERE UserName='%{SQL-UserName}' AND AcctStopTime = 0"
16
E)
Aps tentar algumas alternativas resolvi fazer testes com servidores virtuais que cheguei a seguinte estrutura de arquivos: I) RADIUSD.CONF
prefix = /usr/local exec_prefix = ${prefix} sysconfdir = ${prefix}/etc localstatedir = ${prefix}/var sbindir = ${exec_prefix}/sbin logdir = /var/log/radius raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct name = radiusd confdir = ${raddbdir} run_dir = ${localstatedir}/run/radiusd db_dir = ${raddbdir} libdir = ${exec_prefix}/lib pidfile = ${run_dir}/${name}.pid user = radiusd group = radiusd max_request_time = 30 cleanup_delay = 5 max_requests = 1024 hostname_lookups = no allow_core_dumps = no regular_expressions = yes extended_expressions = yes checkrad = ${sbindir}/checkrad log { destination = files file = ${logdir}/radius.log syslog_facility = daemon stripped_names = yes auth = yes auth_badpass = yes auth_goodpass = no } security { max_attributes = 200 reject_delay = 1 status_server = no } proxy_requests = no thread pool { start_servers = 4 max_servers = 16 min_spare_servers = 2 max_spare_servers = 8 max_requests_per_server = 0 } modules { $INCLUDE ${confdir}/modules/ $INCLUDE sql.conf $INCLUDE sql/mysql/counter.conf } instantiate { exec expr expiration logintime } $INCLUDE policy.conf $INCLUDE sites-enabled/
II)
SQL.CONF
sql sql_pppoe { database = "mysql" driver = "rlm_sql_${database}" server = "localhost" login = "radiusd" password = "3dg7ce" 17
radius_db = "mikrotik" acct_table1 = "radacct" acct_table2 = "radacct" postauth_table = "radpostauth" authcheck_table = "radcheck" authreply_table = "radreply" groupcheck_table = "radgroupcheck" groupreply_table = "radgroupreply" usergroup_table = "usergroup" deletestalesessions = yes sqltrace = no sqltracefile = ${logdir}/sqltrace.sql num_sql_socks = 5 connect_failure_retry_delay = 60 nas_table = "nas" $INCLUDE sql/${database}/pppoe.conf }
Criar cpia do arquivo dialup.conf para pppoe.conf para se adequar a nova configurao. III) DIRETRIO SITES-ENABLE Dentro deste diretrio eu criei um arquivo para o servio radius do um provedor assim:
################################### # Paths e afins # ################################### prefix = /usr/local exec_prefix = ${prefix} sysconfdir = ${prefix}/etc localstatedir = ${prefix}/var sbindir = ${exec_prefix}/sbin logdir = /var/log/radius raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct ################################### # Configuracoes de servidores # ################################### client 172.30.0.166 { shortname secret virtual_server } = pppoe = cnett1298 = ppp
#-#-#-#-# # Servidor virtual para auth/acct # Servico: PPPoE/HotSpot #-#-#-#-# server ppp { # Auth listen { type = auth ipaddr = 172.30.0.27 port = 1812 } # Accounting listen { type = acct ipaddr = 172.30.0.27 port = 1813 } client 172.30.0.166 { shortname = pppoe secret = cnett1298 type = other } authorize { preprocess suffix sql_pppoe expiration 18
logintime pap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } } preacct { preprocess acct_unique suffix files } accounting { sql_pppoe attr_filter.accounting_response } session { sql_pppoe } }
F)
19
8)
A)
Para que possamos usar o Apache mais rapidamente apenas editaremos algumas configuraes do mesmo. Edite o arquivo /etc/httpd/conf/httpd.conf e mude as linhas abaixo:
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl 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
Caso queira coloque o Apache na inicializao pelo ntsysv. B) SERVIOS DE FTP I) VSFTPD
O VerySecure FTP Daemon o servidor FTP oficial do Fedora. Vamos instalar ele usando o Yum:
yum -y install vsftpd
20
Para que os clientes possam conectar eles devem estar cadastrados no sistema (usando o useradd) e precisam ter uma Shell vlida. Caso queira que o usurio no seja ENJAULADO (chroot) coloque o login dele dentro do arquivo chroot_list. C) INSTALANDO O PHP 5.2 Caso queira remover alguns bugs e problemas de segurana vamos fazer o upgrade do PHP. Primeiro vamos instalar o repositrio do Yum:
rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka vi /etc/yum.repos.d/utterramblings.repo
Prontinho... Seu PHP est na verso mais atualizada possvel. D) CONFIGURANDO O PHPMYADMIN (NECESSITA PHP 5.2) O PHPMyAdmin um administrador para o banco de dados MySQL muito simples de usar. Para instalar ele devemos proceder da seguinte maneira:
wget http://ufpr.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-3.1.1-alllanguages.tar.bz2 tar --bzip2 -xf phpMyAdmin-3.1.1-all-languages.tar.bz2 mv phpMyAdmin-3.1.1-all-languages /var/www/html/phpmyadmin chown apache.apache -R /var/www/html/phpmyadmin
Vamos configurar o PHPMyAdmin pelo Wizard. Para isso precisamos dos comandos:
cd /var/www/html/phpmyadmin mkdir config chmod o+rw config cp config.inc.php config/
Agora entre pelo navegador no endereo http://ip.do.seu.servidor/phpmyadmin/setup e siga os passos. Feito isso vamos copiar o arquivo para o diretrio raiz e apagar o diretrio de configurao.
mv config/config.inc.php config.inc.php chmod o-rw config.inc.php
Pronto! E) CONFIGURAO AVANADA DO APACHE O Apache pode ser configurado mais a fundo quando precisamos ter mais de um domnio rodando no mesmo servidor (neste tutorial no est incluso tutorial sobre como coordenar emails destes outros domnios). Primeiro vamos editar o arquivo base de configurao do sistema (alm das edies feitas no item A deste captulo, adicionaremos as abaixo listadas):
ServerAdmin webmaster@cnett.com.br ServerName ns2.cnett.com.br:80 NameVirtualHost *
21
I)
Neste arquivo teremos todos os domnios que sero hospedados nesta mquina. Farei apenas um exemplo de arquivo, o restante apenas adio.
<VirtualHost *> DocumentRoot /var/www/html/dominios/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/mrtg ServerName mrtg.cnett.com.br </VirtualHost>
No primeiro exemplo coloco a opo de gravar os logs deste domnio em arquivo separado do geral do servidor. No segundo os logs sero armazenados junto com o restante do servidor. NO ESQUEA DE CRIAR OS DIRETRIOS DE CADA UM DOS DOMNIOS! Caso contrrio o Apache no iniciar. II) USANDO O USERDIR Para usar o sistema de UserDir (www.exemplo.com/~usuario) muito simples basta descomentar as linhas:
UserDir public_html . . . <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory>
Agora dentro do diretrio raiz do usurio (/home/usuario) voc deve criar um diretrio public_html assim esse diretrio sera visto pelo servidor web. Para que funcione voc deve dar permiso de leitura e execuo para o usurio do Apache. Na minha opinio crie o usurio dentro do grupo do apache que sera suficiente. F) INSTALANDO O MRTG/RRDTOOL Para monitorar o trfego na rede o MRTG uma importante ferramenta e, para que possamos ter melhor desempenho na elaborao e montagem dos grficos utilizaremos o RRDTOOL. Abaixo explicarei como instalar um e outro. I) INSTALANDO O MRTG VIA RPM O MRTG pode ser instalado via pacote do sistema usando o YUM:
yum y install mrtg
Como no queremos o diretrio do MRTG no local onde colocado moveremos o mesmo e apagaremos o arquivo de configurao do Apache:
mv /var/www/mrtg/ /var/www/html/ rm -rf /etc/httpd/conf.d/mrtg.conf chown apache.apache -R /var/www/html/mrtg/
Aps isso vamos editar o arquivo que criado no cron e adicionarmos um # para comentar a linha existente. Terminado reiniciaremos o apache:
22
Aps o final da instalao podemos testar o funcionamento do MRTG tentando conectar a um servidor que tenha SNMP habilitado (vamos usar o cfgmaker):
cfgmaker <comunidade>@<ip do servidor>
II)
Infelizmente no h um pacote RPM da verso mais atual do RRDTool disponvel para o CentOS v5.1. Por este motivo compilaremos o sistema:
cd /root wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.27.tar.gz tar -xzvf rrdtool-1.2.27.tar.gz cd rrdtool-1.2.27 yum y install libpng-devel libart_lgpl-devel freetype-devel python-devel tcl-devel ./configure make make install
Aps feitos todos estes processos seu RRDTool estar instalado no diretrio /usr/local/rrdtool-1.2.27. III) EXECUTANDO ARQUIVOS CGI Para executar arquivos CGI devemos atender para dois fatos: teremos que liberar o acesso CGI a alguns diretrios e devemos adicionar o handler de CGI. Para isso faremos o seguinte:
vi /etc/httpd/conf/httpd.conf
Descomente a linha:
AddHandler cgi-script .cgi
Aps isso criaremos um arquivo com as configuraes dos diretrios com scripts CGI:
vi /etc/httpd/conf.d/cgi.conf
Este contedo deve ser repetido para todos os diretrios que precisarem de execuo CGI. G) INSTALANDO O IPERF O iPerf um programa (socket) para teste de velocidade e desempenho de rede que pode rodar em diversas portas, imitando os programas que sero usados. Para instalar usaremos:
cd wget http://ufpr.dl.sourceforge.net/sourceforge/iperf/iperf-2.0.4.tar.gz tar -xzvf iperf-2.0.4.tar.gz cd iperf-2.0.4.tar.gz ./configure make make install
Para instalar preciso que o GCC-C++ esteja instalado. Aps isso, para rodar o programa usa-se o comando:
ipserf -s
23
Este comando ir executar o sistema em modo servidor. Para que o teste seja feito necessrio uma mquina Windows com o jPerf instalado ou uma mquina Linux com o iPerf instalado e rodando como cliente. H) ARQUIVOS PARA BACKUP
24
9)
Um servidor DNS em modo recursivo far o cache dos nomes pesquisados a partir dele para agilizar a resoluo dos mesmos aos clientes desse servidor. Edite ou crie o arquivo /etc/named.conf com as seguintes informaes:
options { // Para pesquisar usando o OpenDNS forwarders { 208.67.222.222; 208.67.220.220; }; } controls { inet 127.0.0.1 allow { localhost; } keys { rndc-key; }; }; include "/etc/rndc.key"; acl local { localhost; 127.0.0.1/32; <COLOQUE SUAS OUTRAS REDES AQUI> }; view "local" { match-clients { local; }; recursion yes; }; view "externa" { match-clients { any; }; recursion no; additional-from-auth no; additional-from-cache no; };
Caso queira faa a criao do inicializador SYSTEM V do bind (parte C deste captulo) e inicie o sistema:
/etc/rc.d/init.d/named start
Aps iniciado vamos configurar o servidor para que procure por domnios no localhost para isso editaremos o arquivo /etc/resolv.conf e deixaremos ele com apenas uma linha:
nameserver 127.0.0.1
Veja que o servico est em perfeito funcionamento j que na pesquisa realizada pelo nslookup ao google.com.br este retornou que a resposta veio do servidor 127.0.0.1 (caso voc mude o recursion para no dentro do arquivo named.conf essa resposta no seria expressada).
25
B)
cd wget http://ftp.isc.org/isc/bind9/9.4.3/bind-9.4.3.tar.gz tar -xzvf bind-9.4.3.tar.gz wget http://ufpr.dl.sourceforge.net/sourceforge/mysql-bind/mysql-bind.tar.gz tar -xzvf mysql-bind.tar.gz cp mysql-bind/mysqldb.c bind-9.4.3/bin/named/ cp mysql-bind/mysqldb.h bind-9.4.3/bin/named/include/named/ cd bind-9.4.3/bin/named/ mysql_config --cflags mysql_config --libs vi Makefile.in
Vamos criar o banco de dados. Para isso eu usei o PHPMyAdmin mas pode ser feito por um arquivo com o seguinte modelo (vi bind.sql):
CREATE USER 'bind'@'localhost'; SET PASSWORD FOR 'bind'@'localhost' = PASSWORD('SENHA QUE VOCE QUER'); CREATE DATABASE bind; GRANT ALL ON bind.* TO 'bind'@'localhost'; FLUSH PRIVILEGES; use bind; #--# Aqui vo os dados ja para funcionar depois edite como queira #--26
--- Estrutura da tabela `cnett` -CREATE TABLE IF NOT EXISTS `cnett` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; --- Extraindo dados da tabela `cnett` -INSERT INTO `cnett` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('cnett.com.br', 3600, 'NS', 'ns1.cnett.com.br'), ('cnett.com.br', 3600, 'SOA', 'cnett.com.br. dns.cnett.com.br. 2008121701 2H 2M 1W 1H'), ('www.cnett.com.br', 3600, 'CNAME', 'ns1.cnett.com.br.'), ('ns1.cnett.com.br', 3600, 'A', '200.163.208.2');
I)
Vamos /etc/named.conf):
options { // Para pesquisar usando o OpenDNS forwarders { 208.67.222.222; 208.67.220.220; }; }; controls { inet 127.0.0.1 allow { localhost; } keys { rndc-key; }; }; include "/etc/rndc.key"; acl local { localhost; 127.0.0.1/32; }; view "local" { match-clients { local; }; recursion yes; zone "cnett.com.br" { type master; notify no; database "mysqldb bind cnett localhost bind SENHA"; }; }; view "externa" { match-clients { any; }; recursion no; additional-from-auth no; additional-from-cache no; zone "cnett.com.br" { type master; notify no; database "mysqldb bind cnett localhost bind SENHA"; }; };
Depois de feito isso vamos checar a configurao para a criao dos arquivos:
mkdir /var/named rndc-confgen -a 27
phpMyAdmin SQL Dump version 3.1.1 http://www.phpmyadmin.net Servidor: localhost Tempo de Gerao: Dez 30, 2008 as 04:43 PM Verso do Servidor: 5.0.45 Verso do PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; --- Banco de Dados: `bind` --- ---------------------------------------------------------- Estrutura da tabela `200_101_166` -CREATE TABLE IF NOT EXISTS `200_101_166` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; --- Extraindo dados da tabela `200_101_166` -INSERT INTO `200_101_166` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('0-127.166.101.200.in-addr.arpa', 3600, 'SOA', 'cnett.com.br. 2008121701 2H 2M 1W 1H'), ('0-127.166.101.200.in-addr.arpa', 3600, 'NS', 'ns1.cnett.com.br'), ('0-127.166.101.200.in-addr.arpa', 3600, 'NS', 'ns2.cnett.com.br'); -- ---------------------------------------------------------- Estrutura da tabela `200_140_222_128` -CREATE TABLE IF NOT EXISTS `200_140_222_128` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; --- Extraindo dados da tabela `200_140_222_128` -INSERT INTO `200_140_222_128` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('128-255.222.140.200.in-addr.arpa', 3600, 'SOA', 'cnett.com.br. dns.cnett.com.br. 2008121701 2H 2M 1W 1H'), ('128-255.222.140.200.in-addr.arpa', 3600, 'NS', 'ns1.cnett.com.br'), ('128-255.222.140.200.in-addr.arpa', 3600, 'NS', 'ns2.cnett.com.br'); -- ---------------------------------------------------------- Estrutura da tabela `200_163_208_0` -CREATE TABLE IF NOT EXISTS `200_163_208_0` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' 28 dns.cnett.com.br.
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; --- Extraindo dados da tabela `200_163_208_0` -INSERT INTO `200_163_208_0` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('0-127.208.163.200.in-addr.arpa', 3600, 'SOA', 'cnett.com.br. dns.cnett.com.br. 2008121701 2H 2M 1W 1H'), ('0-127.208.163.200.in-addr.arpa', 3600, 'NS', 'ns1.cnett.com.br'), ('0-127.208.163.200.in-addr.arpa', 3600, 'NS', 'ns2.cnett.com.br'), ('2.0-127.208.163.200.in-addr.arpa', 3600, 'PTR', 'ns1.cnett.com.br.'), ('6.0-127.208.163.200.in-addr.arpa', 3600, 'PTR', 'ns2.cnett.com.br.'), ('10.0-127.208.163.200.in-addr.arpa', 3600, 'PTR', 'loja.cnett.com.br.'); -- ---------------------------------------------------------- Estrutura da tabela `201_35_16_0` -CREATE TABLE IF NOT EXISTS `201_35_16_0` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; --- Extraindo dados da tabela `201_35_16_0` -INSERT INTO `201_35_16_0` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('0-255.16.35.201.in-addr.arpa', 3600, 'SOA', 'cnett.com.br. 2008121701 2H 2M 1W 1H'), ('0-255.16.35.201.in-addr.arpa', 3600, 'NS', 'ns1.cnett.com.br'), ('0-255.16.35.201.in-addr.arpa', 3600, 'NS', 'ns2.cnett.com.br'); -- ---------------------------------------------------------- Estrutura da tabela `clickdanoite` -CREATE TABLE IF NOT EXISTS `clickdanoite` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; --- Extraindo dados da tabela `clickdanoite` -INSERT INTO `clickdanoite` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('web.clickdanoite.com.br', 3600, 'CNAME', 'web.cnett.com.br.'), ('www.clickdanoite.com.br', 3600, 'CNAME', 'web.clickdanoite.com.br.'), ('clickdanoite.com.br', 3600, 'NS', 'ns1.cnett.com.br'), ('clickdanoite.com.br', 3600, 'NS', 'ns2.cnett.com.br'), ('clickdanoite.com.br', 3600, 'SOA', 'cnett.com.br. dns.cnett.com.br. 2008121701 2H 2M 1W 1H'); -- ---------------------------------------------------------- Estrutura da tabela `cnett` -CREATE TABLE IF NOT EXISTS `cnett` ( `name` varchar(128) default NULL, `ttl` bigint(20) unsigned default '3600', `rdtype` varchar(128) NOT NULL default '', `rdata` varchar(128) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; 29 dns.cnett.com.br.
--- Extraindo dados da tabela `cnett` -INSERT INTO `cnett` (`name`, `ttl`, `rdtype`, `rdata`) VALUES ('ns1.cnett.com.br', 3600, 'A', '200.163.208.2'), ('', 3600, 'MX', '10 aspmx.google.com.'), ('', 3600, 'MX', '20 alt1.aspmx.google.com.'), ('', 3600, 'MX', '20 alt2.aspmx.google.com.'), (' ', 3600, 'MX', '30 aspmx2.googlemail.com.'), ('', 3600, 'MX', '30 aspmx3.googlemail.com.'), ('', 3600, 'MX', '30 aspmx4.googlemail.com.'), ('', 3600, 'MX', '30 aspmx5.googlemail.com.'), ('cnett.com.br', 3600, 'NS', 'ns1.cnett.com.br'), ('cnett.com.br', 3600, 'NS', 'ns2.cnett.com.br'), ('cnett.com.br', 3600, 'SOA', 'cnett.com.br. dns.cnett.com.br. 2008121701 2H 2M 1W 1H'), ('ns2.cnett.com.br', 3600, 'A', '200.163.208.6'), ('dns.cnett.com.br', 3600, 'A', '200.163.208.6'), ('qos.cnett.com.br', 3600, 'CNAME', 'ns1.cnett.com.br.'), ('web.cnett.com.br', 3600, 'CNAME', 'ns2.cnett.com.br.'), ('webmail.cnett.com.br', 3600, 'CNAME', 'ghs.google.com.'), ('docs.cnett.com.br', 3600, 'CNAME', 'ghs.google.com.'), ('www.cnett.com.br', 3600, 'CNAME', 'web.cnett.com.br.'), ('ftp.cnett.com.br', 3600, 'CNAME', 'web.cnett.com.br.'), ('speed.cnett.com.br', 3600, 'CNAME', 'web.cnett.com.br.'), ('apae.cnett.com.br', 3600, 'CNAME', 'web.cnett.com.br.'), ('loja.cnett.com.br', 3600, 'A', '200.163.208.10');
C)
[ -x /usr/local/sbin/$named ] || exit 1 nmdcOption() { let i=0; for a in $*; do ((++i)); if [ $a = -c ]; then ((++i)); eval 'echo $'$i; elif [[ $a = -c* ]]; then echo ${a#-c}; fi; done; } named_c_option=`nmdcOption $OPTIONS`; named_conf=${named_c_option:-/etc/named.conf}; start() { # Start daemons. echo -n $"Starting named: " if [ -n "`/sbin/pidof -o %PPID $named`" ]; then echo -n $"named: already running" failure echo return 1 fi conf_ok=0; if [ -x /usr/local/sbin/named-checkconf ] && [ -x /usr/local/sbin/namedcheckzone ] && /usr/local/sbin/named-checkconf $ckcf_options ${named_conf} >/dev/null 2>&1; then conf_ok=1; else RETVAL=$?; fi if [ $conf_ok -eq 1 ]; then daemon /usr/local/sbin/named ${OPTIONS}; RETVAL=$?; if [ $RETVAL -eq 0 ]; then rm -f /var/run/named.pid rm -f /var/run/named_sdb.pid 2>/dev/null fi; if [ -n "`/sbin/pidof -o %PPID $named`" ]; then # Verify that named actually started (JM 2006-10-04) if [ ! -e /var/run/named.pid ]; then # If there is not a file containing the PID of the now running named daemon then create it (JM 2006-10-04) echo `/sbin/pidof -o %PPID $named` > /var/run/named.pid; fi; fi; else named_err="`/usr/local/sbin/named-checkconf $ckcf_options $named_conf 2>&1`"; echo echo $"Error in named configuration"':'; echo "$named_err"; failure echo if [ -x /usr/bin/logger ]; then echo "$named_err" | /usr/bin/logger -pdaemon.error -tnamed fi; return $RETVAL; fi; [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named echo return $RETVAL } stop() { # Stop daemons. echo -n $"Stopping $named: " /usr/local/sbin/rndc stop >/dev/null 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ]; then timeout=0 while : ; do if /sbin/pidof -o %PPID $named >/dev/null; then 31
if [ $timeout -ge $NAMED_SHUTDOWN_TIMEOUT ]; then killproc $named -TERM >/dev/null 2>&1 RETVAL=$? break else sleep 2 && echo -n "." timeout=$((timeout+2)) fi; else break fi; done fi; if [ $RETVAL -eq 0 ]; then rm -f /var/lock/subsys/named rm -f /var/run/named.pid fi; if [ $RETVAL -eq 0 ]; then success else failure fi; echo return $RETVAL } rhstatus() { /usr/local/sbin/rndc status return $? } restart() { stop # wait a couple of seconds for the named to finish closing down sleep 5 start } reload() { echo -n $"Reloading $named: " p=`/sbin/pidof -o %PPID $named` RETVAL=$? if [ "$RETVAL" -eq 0 ]; then /usr/local/sbin/rndc reload >/dev/null 2>&1 || /bin/kill -HUP $p; RETVAL=$? fi [ "$RETVAL" -eq 0 ] && success $"$named reload" || failure $"$named reload" echo return $? } probe() { # named knows how to reload intelligently; we don't want linuxconf # to offer to restart every time /usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start return $? } checkconfig() { ckcf_options='-z'; # enable named-checkzone for each zone (9.3.1+) ! if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then OPTIONS="${OPTIONS} -t ${ROOTDIR}" ckcf_options="$ckcf_options -t ${ROOTDIR}"; fi; if [ -x /usr/local/sbin/named-checkconf ] && [ -x /usr/local/sbin/namedcheckzone ] && /usr/local/sbin/named-checkconf $ckcf_options ${named_conf} | cat ; then return 0; else return 1; fi } # See how we were called. case "$1" in start) start ;; stop) stop ;; 32
status) rhstatus ;; restart) restart ;; condrestart) if [ -e /var/lock/subsys/named ]; then restart; fi ;; reload) reload ;; probe) probe ;; checkconfig|configtest|check|test) checkconfig ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|probe}" exit 1 esac exit $?
D)
Caso queira ter melhores controles e estatsticas de phising e uso de servios DNS na sua rede abara uma conta no OpenDNS: https://www.opendns.com/enterprise/start/device/bind s seguir os 3 passos e depois cadastrar suas redes. E) ARQUIVOS PARA BACKUP
/etc/named.* /var/lib/mysql/bind/*
33
Nas opes habilitamos o nmero de FILEDESCRIPTORS para 16384. um nmero grande mas deve ser feito isso para que no tenhamos problemas de falta de FDs no Squid. Para garantirmos o seu funcionamento devemos adicionar o seguinte contedo ao arquivo vi /etc/security/limits.conf:
* * soft hard nofile nofile 17408 17408
Aps isso REINICIE o servidor e continue o processo. A) CONFIGURANDO O SISTEMA DE CACHE Vamos comear pelo ponto principal que criar um atalho para a configurao do squid:
ln -s /usr/local/squid/etc/ /etc/squid
Com isso j teremos a segurana de achar os arquivos de configurao dentro do /etc/squid. Tambm precisamos garantir que o box ir transportar os dados para frente. Para isso usaremos o arquivo rc.local (/etc/rc.d/rc.local) e adicionaremos as seguintes linhas:
echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
REINICIE A MQUINA ANTES DE TESTAR O PROXY! O arquivo principal de configurao o /etc/squid/squid.conf que ter o contedo abaixo:
http_port 3128 tproxy transparent tcp_outgoing_address 172.30.0.17 icp_port 0 cache_mem 128 MB cache_swap_low 92 cache_swap_high 96 maximum_object_size 1000000 KB cache_replacement_policy heap LFUDA memory_replacement_policy heap LFUDA cache_dir cache_dir cache_dir cache_dir aufs aufs aufs aufs /cache/00/00 /cache/00/01 /cache/01/00 /cache/01/01 45500 45500 45500 45500 16 16 16 16 256 256 256 256
client_netmask 255.255.255.255 ftp_user squid@cnett.com.br diskd_program /usr/local/squid/libexec/diskd unlinkd_program /usr/local/squid/libexec/unlinkd error_directory /usr/local/squid/share/errors/Portuguese dns_nameservers 200.163.208.6 200.163.208.2 dns_testnames www.uol.com.br www.terra.com.br www.cnett.com.br #acl manager proto cache_object #acl google dstdomain .google.com .orkut.com #acl youtube dstdomain .youtube.com acl acl acl acl acl acl acl acl acl acl acl all src 0.0.0.0/0 localhost src 127.0.0.1/32 to_localhost dst 127.0.0.0/8 QUERY urlpath_regex cgi-bin \? SSL_ports port 443 Safe_ports port 80 21 443 70 210 280 488 591 777 1025-65535 CONNECT method CONNECT PPP_01 src 200.101.166.0/24 PPP_02 src 201.35.16.0/24 EMS_NRT_01 src 192.168.40.0/24 V01 src 200.163.208.0/25 src 10.200.200.0/24 src 172.30.0.0/24 allow TESTE_0 allow TESTE_1 allow allow allow allow PPP_01 PPP_02 V01 EMS_NRT_01
acl TESTE_0 acl TESTE_1 http_access http_access http_access http_access http_access http_access
#http_access allow manager localhost #http_access deny manager http_access allow localhost http_access allow to_localhost #cache allow google #cache allow youtube cache deny QUERY http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all icp_access deny all cache_mgr suporte@cnett.com.br cache_effective_user squid cache_effective_group squid visible_hostname cache.cnett.com.br unique_hostname cache.cnett.com.br
Caso no queira usar o TPROXY tire a opo do lado do HTTP_port e coloque a normal transparent.
35
B)
Como o Squid no tem um script de inicializao precisaremos criar um. Vamos criar o atalho do squid:
ln -s /usr/local/squid/sbin/squid /usr/sbin/squid
if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then RETVAL=1 break fi sleep 1 && echo -n "." timeout=$((timeout+1)) done fi [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID [ $RETVAL -eq 0 ] && echo_success [ $RETVAL -ne 0 ] && echo_failure echo return $RETVAL } stop() { echo -n $"Stopping $prog: " $SQUID -k check >> /var/log/squid/squid.out 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ] ; then $SQUID -k shutdown & rm -f /var/lock/subsys/$SQUID timeout=0 while : ; do [ -f /var/log/squid/squid.pid ] || break if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then echo return 1 fi sleep 2 && echo -n "." timeout=$((timeout+2)) done echo_success echo else echo_failure echo fi return $RETVAL } reload() { $SQUID $SQUID_OPTS -k reconfigure } restart() { stop start } condrestart() { [ -e /var/lock/subsys/squid ] && restart || : } rhstatus() { status $SQUID $SQUID -k check } probe() { return 0 } case "$1" in start) start ;; stop) stop ;; reload) reload ;; 37
restart) restart ;; condrestart) condrestart ;; status) rhstatus ;; probe) exit 0 ;; *) echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}" exit 1 esac exit $?
Assim ele ir iniciar e parar quando o sistema der um reboot, poweroff ou poweron. C) CRIAR O ARQUIVO DE ROTAO DE LOGS NO LOGROTATE O arquivo deve ser criado em /etc/logrotate.d/squid e ter este contedo:
/var/log/squid/access.log { daily rotate 14 copytruncate compress notifempty missingok } /var/log/squid/cache.log { weekly rotate 8 copytruncate compress notifempty missingok }
D)
CRIAR O ARQUIVO DE CONFIGURACAO DO SQUID NO SYSCONFIG Criar o arquivo no diretrio /etc/sysconfig/squid com o contedo:
# default squid options # -D disables initial dns checks. If you most likely will not to have an # internet connection when you start squid, uncomment this SQUID_OPTS="-D" # Time to wait for Squid to shut down when asked. Should not be necessary # most of the time. SQUID_SHUTDOWN_TIMEOUT=100
E)
O objetivo do TPROXY fazer com que o cliente final no saiba que est passando por um proxy, ou seja, ele ter o cache mas ele no saber desse detalhe. Para isso usaremos um mludo do xtables que j est compilado junto ao kernel e ao iptables (COMPILE O KERNEL E O IPTABLES!).
38
Vamos criar um script que dever rodar depois das regras de firewall (tipo redirecionamento da Conectividade Social) mas antes do NAT (que no poder ser feito nesta mquina!). Para tal vamos criar o arquivo /etc/firewall/squid:
#!/bin/bash IP="/sbin/ip" IPT="/sbin/iptables" $IPT -t tproxy -F #---------# Redes que no devem passar pelo SQUID #---------$IPT t tproxy A PREROUTING d (REDE) j ACCEPT #---------# Regras para o funcionamento TCP do SQUID #---------$IPT -t tproxy -A PREROUTING -s (REDE QUE PASSA PELO PROXY, PODE TER MAIS DE UMA) -p tcp --dport 80 -j TPROXY --on-port 3128
Agora vamos dar permisso de execuo para o arquivo e setar as permisses de usurio:
chmod go-rwx /etc/firewall/squid chmod u+x /etc/firewall/squid
F)
DO
CACHE
PASSAREM
LOTADO
PELO
[Referncia: http://www.site.ondainternet.com.br/tutorial/mikrotik/]
De acordo com o amigo Alexandre Correa (Onda Internet) possvel marcar os pacotes provenientes do cache dentro do Mikrotik (apenas os pacotes que esto taggeados como HIT). Sendo assim, dentro do Mikrotik o processo simples. O script abaixo pode ser colado diretamente no console (caso haja alguma regra de marcao de pacotes no mangle e no queue simple do Mikrotik mova as regras recem criadas para o topo da lista).
/ip firewall mangle add action=mark-connection chain=forward comment="(cache_full)SQUID:HIT_con" content="XCache: HIT" disabled=no new-connection-mark=squid-conn-HIT passthrough=yes protocol=tcp src-port=80 add action=mark-packet chain=forward comment="(cache_full)SQUID:HIT_pkg" connectionmark=squid-conn-HIT disabled=no new-packet-mark=squid-pkg-HIT passthrough=yes /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=squid-download packet-mark=squid-pkg-HIT parent=global-out priority=1 queue=default
G)
Para fazermos essa parte funcionar precisamores do Apache instalado e mais algumas outras coisas. Primeiro instale o apache conforme o item 8, captulo A e depois siga os passos abaixo. Adicione ao final do arquivo /etc/httpd/conf/httpd.conf o seguinte contedo:
NameVirtualHost *:80 <VirtualHost *:80> Alias /YOUTUBE /var/www/html/YOUTUBE <Directory "/var/www/html/YOUTUBE"> AllowOverride All Allow from all </Directory> </VirtualHost>
mkdir /var/www/html/YOUTUBE
Agora inicie o apache e verifique se rodou. Coloque ele na inicializao do sistema pelo ntsysv. Agora vamos configurar o squid. Editar o squid.conf e adicionar as linhas em nregito:
APS AS ACLS!!!! url_rewrite_children 70 acl store_rewrite_list dstdomain .orkut.com .windowsupdate.com .youtube.com url_rewrite_access allow store_rewrite_list url_rewrite_access deny all url_rewrite_program /etc/squid/biazus.sh acl youtubecache dstdomain .youtube.com cache deny youtubecache
Vamos agorar criar as pastas de acesso e dar as devidas permisses ao squid. Depois iremos baixar os scripts necessrios:
mkdir /var/www/html/YOUTUBE/SCRIPTS mkdir /var/www/html/YOUTUBE/PLAYER chown -R squid.squid /var/www/html/YOUTUBE/ cd /var/www/html/YOUTUBE/PLAYER/ wget http://www.biazus.com/html/rewriter/PLAYER.tar tar -xf PLAYER.tar cd PLAYER mv * ../ cd .. rm -rf PLAYER PLAYER.tar cd .. cd SCRIPTS/ wget http://www.biazus.com/html/rewriter/biazuspart2.sh cd .. cd .. chmod 775 YOUTUBE -R
Agora precisamos editar, a mo, o arquivo biazuspart2.sh que est dentro da pasta SCRIPTS e modificar as linhas:
diretorio="/var/www/html/YOUTUBE" youtubewww="http://200.163.208.14/YOUTUBE" player="http://200.163.208.14/YOUTUBE/PLAYER"
OBSERVAO 1: Mude o caminho para o touch de /usr/bin/touch para /bin/touch em todos os locais em que ele aparece. OBSERVAO 2: Coloque um -q em todos os locais onde o wget usado. Com isso ele no colocar dados do download no cache.log. Agora vamos baixar o script que ser executado pelo squid:
cd /etc/squid/ wget http://www.biazus.com/html/rewriter/biazus.sh
40
DE
$url
Para
APAGADO
do
cache."
>>
Diretorios
apagados:
$num."
>>
DESCOMENTE FUNCIONAMENTO.
LINHA
RM
RF
QUANDO
ESTIVER
CONFIANTE
DO
Este commando indicar ao Cron que execute todos os domingos s 5h33m00s o script youdel.sh e o script apagar todos os diretrios que tenham sido vistos menos de 5 vezes naquela semana. Agora os comandos finais:
chmod +x biazus.sh youdel.sh stats.sh chown squid.squid biazus.sh youdel.sh stats.sh echo > /tmp/debug_url_redirect.log chmod 777 /tmp/debug_url_redirect.log echo > /tmp/youdebug chmod 777 /tmp/youdebug echo > /tmp/youdeldebug chmod 777 /tmp/youdeldebug
Agora reiniciar o Squid e rezar pra tudo funcionar direitinho. I) ARQUIVO COMPLETO: /ETC/SQUID/BIAZUS.SH
#!/usr/bin/perl ########################################################################## # Script de Cache do Youtube Desenvolvido por Luiz Biazus ## # Msn e email luiz@biazus.com ## ########################################################################## #X[0]-> URL EX: IMG1.ORKUT.COM #X[1]-> CLIENT IP: 189.10.203.13/ANGEL.GINET.COM.BR #X[2]-> #X[3]-> GET ou POST 41
#X[4]-> #X[5]-> MYIP : 189.10.203.1 OU 127.0.0.1 #X[6]-> MYPORT EX: 8012 au.download.windowsupdate.com $|=1; $YOUTUBE = "/var/www/html/YOUTUBE"; $SERVERIP = "200.163.208.14"; while (<>) { open $fh, ">>/tmp/debug_url_redirect.log"; @X = split; $url = $X[0]; $metodo = $X[3]; print $fh "entrada: $url\n"; #YOUTUBE if (($url =~ /^http:\/\/br.youtube.com\/watch\?v=/) /^http:\/\/www.youtube.com\/watch\?v=/ )) { @achar = split(/\//, $url); $arquivoachar = $achar[$#achar]; $resultado = `/bin/ls $YOUTUBE`; @array = split(/\n/, $resultado); $flagy = 0; $arquivoachar2 = $arquivoachar; $arquivoachar =~ s/\?/__/; @achar2 = split(/\&/, $arquivoachar); $arquivoachar = $achar2[0]; || ($url =~
for $i (0 .. $#array){ if($array[$i] eq "$arquivoachar") { $baixando=`ls $YOUTUBE/$arquivoachar/2 | wc -l`; if($baixando == 1) { print "$url\n"; print $fh "YOUTUBE AINDA ESTA BAIXANDO $arquivoachar nao redirecionado\n"; $flagy = 1; goto Fora; } else { system("/bin/bash $arquivoachar");
VIDEO
/etc/squid/stats.sh
print $fh "YOUTUBE REDIRECIONADO DE $url Para http://$SERVERIP/YOUTUBE/$arquivoachar/pagina.html\n"; $url = "http://$SERVERIP/YOUTUBE/$arquivoachar/pagina.html"; print $fh "saida: $url\n"; print "http://$SERVERIP/YOUTUBE/$arquivoachar/pagina.html\n"; $flagy = 1; goto Fora; } } $i++; } Fora: if($flagy == 0 ) { print "$url\n"; system("/bin/bash $YOUTUBE/SCRIPTS/biazuspart2.sh $url"); print $fh "YOUTUBE NAO REDIRECIONADO DESTA VEZ A PROXIMA SERAH: arquivoachar $arquivoachar urllllll $url\n"; } } #FIM DO YOUTUBE else { print $fh "nao redirecionado\n"; print "$url\n"; } close $fh; }
II)
#!/bin/bash
ARQUIVO /VAR/WWW/HTML/YOUTUBE/SCRIPTS/BIAZUSPART2.SH
COMPLETO:
42
################################################################################ #Script de cache do youtube parte 2 desenvolvido por Luiz Biazus e Andre Chiodi# #6/09/2008 # ################################################################################ PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH umask 022 [ -z "${1}" ] && { echo 'Error! Missing url or video_id!' >> /tmp/youdebug ; exit 1 ; } diretorio="/var/www/html/YOUTUBE" swap="$1" ; swap2=`echo $swap | cut -d"/" -f4 | cut -d"&" -f1` ; swap3=`echo $swap2 | sed s/?/__/` arquivoachar=$swap3 youtubewww="http://200.163.208.14/YOUTUBE" player="http://200.163.208.14/YOUTUBE/PLAYER" URL="http://br.youtube.com" /bin/mkdir /bin/touch /bin/touch echo "1" > $diretorio/$arquivoachar && $diretorio/$arquivoachar/2 && $diretorio/$arquivoachar/stats && $diretorio/$arquivoachar/stats &&
#PEGA PAGINA chmod +rx $diretorio/$arquivoachar -R && wget -q -p -k -F -nd --no-cookies --output-document=$diretorio/$arquivoachar/pagina.html $1 && chmod +rx $diretorio/$arquivoachar/pagina.html && #TROCA PLAYERS sed '/<div id="watch-this-vid">/,/<div id="watch-ratings-views">/c \ <div id="watch-this-vid"><div id="watch-player-div" class="flash-player"><embed type="application/x-shockwave-flash" src="'$player'/player.swf" style="" id="bannerswf" name="bannerswf" bgcolor="#ffffff" quality="high" allowfullscreen="true" allowscriptaccess="always" wmode="opaque" flashvars="file='$youtubewww'/'$arquivoachar'/video.flv&fullscreen=true&autostart=true&" width="480" height="350"></div><div id="watch-main-area" > <div id="watch-ratingsviews">' $diretorio/$arquivoachar/pagina.html > $diretorio/$arquivoachar/swap.html && mv $diretorio/$arquivoachar/swap.html $diretorio/$arquivoachar/pagina.html && chmod +rx $diretorio/$arquivoachar/pagina.html && #sed '/<div id="watch-this-vid">/,/<div id="watch-ratings-views">/c \ #<div id="watch-this-vid"> <embed type="application/x-shockwave-flash" src="'$player'/player.swf" style="" id="bannerswf" name="bannerswf" bgcolor="#ffffff" quality="high" allowfullscreen="true" allowscriptaccess="always" wmode="opaque" flashvars="file='$youtubewww'/'$arquivoachar'/video.flv&fullscreen=true&autostart=true&" width="480" height="350"><div id="watch-ratings-views">' $diretorio/$arquivoachar/pagina.html > $diretorio/$arquivoachar/swap.html && #mv $diretorio/$arquivoachar/swap.html $diretorio/$arquivoachar/pagina.html && #chmod +rx $diretorio/$arquivoachar/pagina.html && #BAIXA VIDEO #[ -z "${1}" ] && { echo 'Error! Missing url or video_id!' ; exit 1 ; } DOWNLOAD=`wget -q -O - "${URL}/watch?v=${1/*=}" | grep -oE 'video_id=.*&t=[^\"&]*' | head -1` wget -q -O "$diretorio/$arquivoachar/video.flv" "${URL}/get_video?${DOWNLOAD}" && chmod +rx $diretorio/$arquivoachar -R && chown squid.squid $diretorio/$arquivoachar -R && echo "[[[ ACELERADOR DO YOUTUBE by Luiz Biazus ]]]" >> $diretorio/$arquivoachar/pagina.html && rm $diretorio/$arquivoachar/2 && echo "COPIADO $1 em $diretorio/$arquivoachar !!! O Script Executou com Sucesso!" >> /tmp/youdebug
H)
PARA
YOUTUBE,
UOL
VIDEOS,
[Referncia: http://cachevideos.com/installation]
Primeiro instale o Apache conforme o item 8, captulo A e depois siga os passos abaixo.
yum install squid python python-iniparse python-urlgrabber
Agora iremos configurar o arquivo do VideoCache (apenas as variveis alteradas e seu contedo):
cache_host = 200.163.208.14 proxy = http://200.163.208.14:3128/ hit_threshold = 1 base_dir = /cache/YOUTUBE/ rpc_host = 200.163.208.14
Agora vamos editar o arquivo do squid para o redirecionamento das pginas no arquivo /etc/squid/squid.conf adicionando as seguintes linhas DEPOIS do registro das ACLs:
# --BEGIN-- videocache config for squid url_rewrite_program /usr/bin/python /usr/share/videocache/videocache.py url_rewrite_children 5 acl videocache_allow_url url_regex -i \.youtube\.com\/get_video\? acl videocache_allow_url url_regex -i \.googlevideo\.com\/videoplayback \.googlevideo\.com\/get_video\? acl videocache_allow_url url_regex -i \.google\.com\/videoplayback \.google\.com\/get_video\? acl videocache_allow_url url_regex -i \.google\.[a-z][a-z]\/videoplayback \.google\.[az][a-z]\/get_video\? acl videocache_allow_url url_regex -i proxy[a-z0-9\-][a-z0-9][a-z0-9][a-z09]?\.dailymotion\.com\/ acl videocache_allow_url url_regex -i vid\.akm\.dailymotion\.com\/ acl videocache_allow_url url_regex -i [a-z0-9][0-9a-z][0-9a-z]?[0-9a-z]?[0-9az]?\.xtube\.com\/(.*)flv 44
acl videocache_allow_url url_regex -i bitcast\.vimeo\.com\/vimeo\/videos\/ acl videocache_allow_url url_regex -i va\.wrzuta\.pl\/wa[0-9][0-9][0-9][0-9]? acl videocache_allow_url url_regex -i \.files\.youporn\.com\/(.*)\/flv\/ acl videocache_allow_url url_regex -i \.msn\.com\.edgesuite\.net\/(.*)\.flv acl videocache_allow_url url_regex -i media[a-z0-9]?[a-z0-9]?[a-z0-9]?\.tube8\.com\/ acl videocache_allow_url url_regex -i \.mais\.uol\.com\.br\/(.*)\.flv acl videocache_allow_url url_regex -i \.video[a-z0-9]?[a-z09]?\.blip\.tv\/(.*)\.(flv|avi|mov|mp3|m4v|mp4|wmv|rm|ram) acl videocache_allow_url url_regex -i video\.break\.com\/(.*)\.(flv|mp4) acl videocache_allow_dom dstdomain v.mccont.com dl.redtube.com .cdn.dailymotion.com acl videocache_deny_url url_regex -i http:\/\/[a-z][a-z]\.youtube\.com http:\/\/www\.youtube\.com url_rewrite_access deny videocache_deny_url url_rewrite_access allow videocache_allow_url url_rewrite_access allow videocache_allow_dom redirector_bypass on # --END-- videocache config for squid
Ainda deve-se alterar as permisses do localhost acessar a mquina no squid.conf. As minhas configuraes ficaram assim:
acl localhost src 127.0.0.1/32 200.163.208.14/32 acl to_localhost dst 127.0.0.0/8 200.163.208.14/32
Agora voc deve saber onde ir colocar seus vdeos. Crie a pasta e d as permisses:
mkdir /cache/YOUTUBE mv /var/spool/videocache/* /cache/YOUTUBE/ chmod a+rw -R /cache/YOUTUBE/ chown squid.squid -R /cache/YOUTUBE
Agora vamos configurar o diretrio do YOUTUBE para receber conexes WEB. Para isso edite o arquivo /etc/httpd/conf.d/videocache.conf mude seu contedo para se adequar a sua necessidade, o meu ficou assim:
Alias /videocache /cache/YOUTUBE <Directory "/cache/YOUTUBE"> Options +Indexes Order Allow,Deny Allow from all </Directory>
Agora teste para ver se esse local visto pela internet e depois inicie o Squid para testar os downloads.
45
provedor
V02="200.163.208.4/30" V03="200.163.208.8/30" V04="200.163.208.12/30" V05="200.163.208.16/28" V06="200.163.208.32/27" V07="200.163.208.64/26" V08="200.140.222.128/25" V09="201.35.16.0/24" V10="200.101.166.0/24" I01="172.31.0.4/30" I02="172.31.0.8/30" HS1="192.168.254.0/24" PTP="172.16.0.0/24" ptp.mk.elj) APS="10.0.0.0/8" #--------# Redes com NAT #--------EMS_LOCAL="192.168.40.0/24"
# # # # # # # # # # # # #
rede rede rede rede rede rede rede rede rede rede rede rede rede
qos/mail CNett - Escritorio qos/cache RESERVADA RESERVADA CLIENTES IP/FIXO (subnets no ptp.mk.elj) RESERVADA PPPoE PPPoE BACKBONE cache > auth BACKBONE auth > ptp HOTSPOT PTP CNett (ELJ>EMA/ELJ>EMS/ELJ>CNETT) (subnets no
#---------# Declara rotas para redes distantes #---------$RT add -net $V03 gw $CACHE $RT add -net $V07 gw $CACHE $RT add -net $V09 gw $CACHE $RT add -net $V10 gw $CACHE $RT add -net $I01 gw $CACHE $RT add -net $I02 gw $CACHE $RT add -net $PTP gw $CACHE $RT add -net $HS1 gw $CACHE $RT add -net $APS gw $CACHE $RT add -net $EMS_LOCAL gw $CACHE #---------# DMZ #---------#/etc/firewall/dmz #---------# Regras para o funcionamento #---------$IPT -t tproxy -A PREROUTING 3128 $IPT -t tproxy -A PREROUTING 3128 $IPT -t tproxy -A PREROUTING 3128 $IPT -t tproxy -A PREROUTING port 3128 TCP do SQUID -s $V03 -d ! $V02 -p tcp --dport 80 -j TPROXY --on-port -s $V09 -d ! $V02 -p tcp --dport 80 -j TPROXY --on-port -s $V10 -d ! $V02 -p tcp --dport 80 -j TPROXY --on-port -s $EMS_LOCAL -d ! $V02 -p tcp --dport 80 -j TPROXY --on-
#--------# Mascara todas as redes nao roteaveis # que passam por este servidor #--------#$IPT -t nat -A POSTROUTING -s $NS2_DMZ -j MASQUERADE
I)
/ETC/FIREWALL/DMZ
Uma DMZ uma zona desmilitarizada dentro da rede. Ela s ser til caso voc queira acessar mquinas da sua rede interna atravs de um IP rotevel. Caso deseje usar um modelo do arquivo este (deve descomentar a linha que inicializa a DMZ no firewall):
#!/bin/bash IPT="/usr/sbin/iptables" DMZ_PRI="172.20.0.2" DMZ_PUB="200.252.138.2" #--# Regras para redirecionamento SSH #--SSH_PORT_PUB="2203" 47
SSH_PORT_PRI="2202" $IPT -t nat -A PREROUTING -d $DMZ_PUB -p tcp -m tcp --dport $SSH_PORT_PUB -j DNAT --todestination $DMZ_PRI:$SSH_PORT_PRI #--# Regras para direcionamento VIGO #--#VG_01="3306" # MySQL Server #VG_02="21" # FTP Server #VG_03="25" # SMTP Server #VG_04="80" # WEB Server #VG_05="110" # POP Server #VG_06="7412" # VIGO Socket #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_01 #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_02 #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_03 #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_04 #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_05 #$IPT -t nat -A PREROUTING destination $DMZ_PRI:$VG_06 -d $DMZ_PUB -p tcp -m tcp --dport $VG_01 -j DNAT --to-d $DMZ_PUB -p tcp -m tcp --dport $VG_02 -j DNAT --to-d $DMZ_PUB -p tcp -m tcp --dport $VG_03 -j DNAT --to-d $DMZ_PUB -p tcp -m tcp --dport $VG_04 -j DNAT --to-d $DMZ_PUB -p tcp -m tcp --dport $VG_05 -j DNAT --to-d $DMZ_PUB -p tcp -m tcp --dport $VG_06 -j DNAT --to-
#--# Regras para redirecionamento WINBOX #--WB_PORT="8291" WB_IP="172.20.0.2" $IPT -t nat -A PREROUTING -d $DMZ_PUB -p tcp -m tcp --dport $WB_PORT -j DNAT --todestination $WB_IP:$WB_PORT $IPT -t nat -A PREROUTING -d $DMZ_PUB -p udp -m udp --dport $WB_PORT -j DNAT --todestination $WB_IP:$WB_PORT #--# Regras para redirecionamento VNC #--#VNC_PORT="5900" #VNC_PORT_80="5800" #VNC_IP="10.1.10.2" #$IPT -t nat -A PREROUTING -d $DMZ_PUB -p tcp -m tcp --dport $VNC_PORT destination $VNC_IP:$VNC_PORT #$IPT -t nat -A PREROUTING -d $DMZ_PUB -p udp -m udp --dport $VNC_PORT destination $VNC_IP:$VNC_PORT #$IPT -t nat -A PREROUTING -d $DMZ_PUB -p tcp -m tcp --dport $VNC_PORT_80 destination $VNC_IP:$VNC_PORT_80 #$IPT -t nat -A PREROUTING -d $DMZ_PUB -p udp -m udp --dport $VNC_PORT_80 destination $VNC_IP:$VNC_PORT_80 -j DNAT --to-j DNAT --to-j DNAT --to-j DNAT --to-
B)
TERMINANDO O FIREWALL Terminado o servio dentro do firewall vamos dar permisso de execuo:
Por fim deveremos editar o arquivo /etc/rc.d/rc.local para que o firewall inicialize junto com a mquina. C) ELBORANDO UM QOS Para simplificar o processo de um QoS eu separei o sistema em um arquivo completo com as regras e scripts e outros arquivos com portas e IPs. I) arquivos:
48
/ETC/FIREWALL/QOS/QOS
O arquivo principal o /etc/firewall/qos/qos que ter um contedo desta maneira (atente que deve-se ter o MARK e o CONNMARK compilados junto com o Kernel, bem como o Layer7):
#!/bin/sh #-----# Script de QoS Cyber Nett #-----# Nataniel Klug # suporte@cnett.com.br #-----TC="/sbin/tc" IPT="/usr/sbin/iptables" DIR="/etc/firewall/qos" UP="eth0" DL="eth1" # upload # clientes
#----# Limpando iptables # Aplicando save as marcas (final de cada INTERFACE) #----$IPT -t mangle -F $IPT -t mangle -X $IPT -t mangle -A POSTROUTING -p tcp -j CONNMARK --restore-mark $IPT -t mangle -A POSTROUTING -p tcp -m mark ! --mark 0 -j ACCEPT # marcando pacotes # referente ao P2P P2PMARK="20" $IPT -t mangle -A POSTROUTING $IPT -t mangle -A POSTROUTING $IPT -t mangle -A POSTROUTING $IPT -t mangle -A POSTROUTING $IPT -t mangle -A POSTROUTING $IPT -t mangle -A POSTROUTING # referente ao MSN="22" $IPT -t mangle # referente ao SSH="23" $IPT -t mangle msn -A POSTROUTING -m layer7 --l7proto msnmessenger -j MARK --set-mark $MSN ssh -A POSTROUTING -m layer7 --l7proto ssh -j MARK --set-mark $SSH
-m -m -m -m -m -m
ares -j MARK --set-mark $P2PMARK bittorrent -j MARK --set-mark $P2PMARK edonkey -j MARK --set-mark $P2PMARK fasttrack -j MARK --set-mark $P2PMARK gnutella -j MARK --set-mark $P2PMARK imesh -j MARK --set-mark $P2PMARK
$IPT -t mangle -A POSTROUTING -j CONNMARK --save-mark #-----# Apagando regras #-----$TC qdisc del dev $TC qdisc del dev $TC qdisc del dev $TC qdisc del dev antigas de QoS $DL $DL $UP $UP root ingress root ingress 2> 2> 2> 2> /dev/null /dev/null /dev/null /dev/null > > > > /dev/null /dev/null /dev/null /dev/null
#-----# CRIANDRO REGRAS DE DOWNLOAD #-----#=========# # $DL # #=========# $TC qdisc add dev $DL root handle 1: htb default 40 # criandro classes CLASS="/sbin/tc class add dev $DL parent" # classe de comunicacao com a rede interna $CLASS 1: classid 1:1 htb rate 100Mbit $CLASS 1:1 classid 1:5 htb rate 100Mbit ceil 100Mbit # classe de redes externas $CLASS 1: classid 1:2 htb rate 992Kbit 49
16Kbit ceil 512Kbit prio 0 512Kbit ceil 960Kbit prio 0 32Kbit ceil 512Kbit prio 1 176Kbit ceil 256Kbit
# criandro a fair queue QDISC="/sbin/tc qdisc add dev $DL parent" $QDISC 1:10 handle 10: sfq perturb 10 $QDISC 1:20 handle 20: sfq perturb 10 $QDISC 1:30 handle 30: sfq perturb 10 # criandro filtros FILTER="/sbin/tc filter add dev $DL parent 1:0 protocol ip" # regras para servidores e redes internas for i in `cat $DIR/network | awk '{print $2}'` do $FILTER prio 1 u32 match ip src $i flowid 1:5 done # regras para a classe 1:10 # trafego interativo # PROTOCOLOS $FILTER prio 1 u32 match ip protocol 1 0xff flowid 1:10 # IPS for i in `cat $DIR/prio0.ips | awk '{print $2}'` do $FILTER prio 0 u32 match ip src $i flowid 1:10 done # PORTAS for i in `cat $DIR/prio0.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip sport $i 0xffff flowid 1:10 done # MARCACAO DE PACOTES $IPT -t mangle -A POSTROUTING -o $DL -m mark --mark $MSN -j CLASSIFY --set-class 1:10 $IPT -t mangle -A POSTROUTING -o $DL -m mark --mark $SSH -j CLASSIFY --set-class 1:10 # regras para a classe 1:20 # trafego de disponibilidade # IPS for i in `cat $DIR/prio1.ips | awk '{print $2}'` do $FILTER prio 0 u32 match ip src $i flowid 1:20 done # PORTAS for i in `cat $DIR/prio1.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip sport $i 0xffff flowid 1:20 done # regras para a classe 1:30 # trafego de disponibilidade # PORTAS for i in `cat $DIR/prio2.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip sport $i 0xffff flowid 1:30 done #=========# # $UP # #=========# $TC qdisc add dev $UP root handle 1: htb default 40 # criandro classes CLASS="/sbin/tc class add dev $UP parent" # classe de comunicacao com a rede interna $CLASS 1: classid 1:1 htb rate 100Mbit $CLASS 1:1 classid 1:5 htb rate 100Mbit ceil 100Mbit # classe de redes externas $CLASS 1: classid 1:2 htb rate 992Kbit $CLASS 1:2 classid 1:10 htb rate 16Kbit ceil 512Kbit prio 0 $CLASS 1:2 classid 1:20 htb rate 512Kbit ceil 960Kbit prio 0 50
$CLASS 1:2 classid 1:30 htb rate 32Kbit ceil 512Kbit prio 1 $CLASS 1:2 classid 1:40 htb rate 176Kbit ceil 256Kbit # criandro a fair queue QDISC="/sbin/tc qdisc add dev $UP parent" $QDISC 1:10 handle 10: sfq perturb 10 $QDISC 1:20 handle 20: sfq perturb 10 $QDISC 1:30 handle 30: sfq perturb 10 # criandro filtros FILTER="/sbin/tc filter add dev $UP parent 1:0 protocol ip" # regras para servidores e redes internas for i in `cat $DIR/network | awk '{print $2}'` do $FILTER prio 1 u32 match ip dst $i flowid 1:5 done # regras para a classe 1:10 # trafego interativo # PROTOCOLOS $FILTER prio 1 u32 match ip protocol 1 0xff flowid 1:10 # IPS for i in `cat $DIR/prio0.ips | awk '{print $2}'` do $FILTER prio 0 u32 match ip dst $i flowid 1:10 done # PORTAS for i in `cat $DIR/prio0.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip dport $i 0xffff flowid 1:10 done # MARCACAO DE PACOTES $IPT -t mangle -A POSTROUTING -o $UP -m mark --mark $MSN -j CLASSIFY --set-class 1:10 $IPT -t mangle -A POSTROUTING -o $UP -m mark --mark $SSH -j CLASSIFY --set-class 1:10 # regras para a classe 1:20 # trafego de disponibilidade # IPS for i in `cat $DIR/prio1.ips | awk '{print $2}'` do $FILTER prio 0 u32 match ip dst $i flowid 1:20 done # PORTAS for i in `cat $DIR/prio1.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip dport $i 0xffff flowid 1:20 done # regras para a classe 1:30 # trafego de disponibilidade # PORTAS for i in `cat $DIR/prio2.ports | awk '{print $2}'` do $FILTER prio 1 u32 match ip dport $i 0xffff flowid 1:30 done
52