quarta-feira, 28 de setembro de 2011

Instalar NTOP no CentOS 6 (64bits)

Pré-requisitos de Pacotes:

yum install gcc
yum install python
yum install perl perl-dev
yum install openssl
yum install ruby ruby-devel
yum install readline.x86_64

yum install readline readline-devel -y
yum install zlib zlib-devel -y

yum install openssl-devel
yum install rrdtool
yum install libtool
yum install gdbm-devel perl-dev
yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel


Faz a instação do GeoIP:



E finalmente, a instalação do NTOP:

wget http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
yum install ntop

# Get yum ready
yum clean all
yum update
# Install Development Tools
yum groupinstall “Development Tools”
# Install more ntop Dependencies
yum install libpcap-devel libpcap
# Install RDD tools dependencies
yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel
# Download, compile and install RDDTools
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz
tar xvzf rrdtool-1.4.5.tar.gz
cd rrdtool-1.4.5
./configure
make
make install
# Download, compile and Install GeopIP
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar xvzf GeoIP.tar.gz
cd GeoIP-1.4.6/
./configure
./make
./make install
NOTE: config at: /usr/local/etc/GeoIP.conf
#Download, compile and install nTop 4.0.1
wget http://cdnetworks-us-1.dl.sourceforge.net/project/ntop/ntop/ntop-4.0.1/ntop-4.0.1.tar.gz
tar xvzf ntop4.0.1.tar.gz
cd ntop-4.0.1/
autoconf
./configure –with-rrd-home=/opt/rrdtool-1.4.4/
make
make install
# Add ntop user and directory permissions.
useradd -M -s /sbin/nologin -r ntop
chown -R ntop:root /usr/local/var/ntop/
chown -R ntop:ntop /usr/local/share/ntop/
# Set ntop password
ntop -A
# To start ntop on boot
nano /etc/rc.local # and add: /usr/local/bin/ntop -i “eth0,eth1″ -d -L -u ntop -P /usr/local/
you have multiple interface (eth0, eth1 and so on), start ntop as follows:
# To start ntop
/usr/bin/ntop -i “eth0″ -d -L -u ntop -P /var/ntop –skip-version-check –use-syslog=daemon
htpasswd -c /etc/httpd/.htpasswd segredes
Where,
* -i “eth0,eth1″ : Specifies the network interface or interfaces to be used by ntop for network monitoring. Here you are monitoring eth0 and eth1.
* -d : Run ntop as a daemon.
* -L : Send all log messages to the system log (/var/log/messages) instead of screen.
* -u ntop : Start ntop as ntop user
* -P /usr/local/var/ntop : Specify where ntop stores database files. You may need to backup database as part of your disaster recovery program.
* –skip-version-check : By default, ntop accesses a remote file to periodically check if the most current version is running. This option disables that check.
* –use-syslog=daemon : Use syslog daemon.
By default ntop listen on 3000 port. You can view ntop stats by visiting following url:
http://localhost:3000/

quinta-feira, 22 de setembro de 2011

Customizando os arquivos de log do Squid


Com a liberação do Squid 2.6 surgiram várias novas funcionalidades e uma delas é o logformat que serve para manipular a forma em que o log será gerado. Funciona da seguinte forma:
  logformat < nome> < especificação do formato>  
O nome nada mais é do que um nome para manipulação do formato.
A especificação do formato pode ser customizada como o administrador achar melhor, sempre adicionando o prefixo %. Segue a lista de especificações:
>a IP de origem da requisição (cliente)
>A FQDN do cliente
>p Porta de origem no cliente
< A IP do servidor de destino
la IP local do servidor Squid
lp Porta local do servidor Squid
ts Segundos passados desde a requisição
tu Subsegundos
tl Horário do servidor. Strings opcionais utilizadas como padrão. %d/%b/%Y:%H:%M:%S %z
tg Horário GMT. Strings opcionais utilizadas como padrão. %d/%b/%Y:%H:%M:%S %z
tr Tempo de resposta, em milisegundos)
>h Cabeçalho de requisição.
< h Cabeçalho de retorno.
un Nome do usuário
ul Login do usuário
ui Ident do usuário
us SSL
ue ACL externa
Hs Status do código HTTP
Ss Status da requisição (TCP_MISS/TCP_REFRESH/TCP_DENIED etc)
Sh Status da hierarquia do Squid (DEFAULT_PARENT etc)
mt MIME type do conteúdo
rm Método requisitado na conexão(GET/POST/CONNECT etc)
ru URL requisitada
rv Versão do protocolo requisitado
ea String retornada por uma ACL externa
< st Tamanho da resposta, incluindo cabeçalho HTTP
% % literal

Nova forma para o log

Para criar um novo template para o seu arquivo de log primeiro precisamos criar uma diretiva do tipo logformat que será usada mais a frente.
  logformat MEU_LOG IP do cliente: %>a - Username: %un - Horario: [%tl] - Metodo: %rm - URL: %ru - Status HTTP: %Hs - Status Squid: %Ss  
Logo em seguida definimos onde será utilizado o novo template. Estou separando em dois arquivos de logs (access.log e gerencia.log) para não atrapalhar o correto funcionamento do SARG.
O logformat com o nome squid é o padrão do Squid que estamos acostumados a ver e que o SARG necessita para que funcione corretamente.
O logformat com o nome MEU_LOG foi o template que criei para poder enviar, em um formato mais amigável, para a gerencia.
  access_log /var/log/squid/access.log squid    access_log /var/log/squid/gerencia.log MEU_LOG  
Nunca esquecer de dar um reload no Squid para que as novas configurações entrem em vigor.
  # squid -k reconfigure  

Log de acesso

Após a criação das regras meus dois logs de acesso, acessando o site http://www.integral.inf.br/, ficaram da seguinte forma
access.log
  1204121424.137     67 172.31.255.103 TCP_MISS/200 21384 GET http://www.integral.inf.br/home/index.php - DIRECT/172.31.254.2 text/html    1204121425.820     17 172.31.255.103 TCP_MISS/200 4116 GET http://www.integral.inf.br/inc/php/logo_casos.php? - DIRECT/172.31.254.2 image/png    1204121425.844     41 172.31.255.103 TCP_MISS/200 3522 GET http://www.integral.inf.br/inc/php/logo_casos.php? - DIRECT/172.31.254.2 image/png    1204121425.858     53 172.31.255.103 TCP_MISS/200 5263 GET http://www.integral.inf.br/inc/php/img_parceiro_banner.php? - DIRECT/172.31.254.2 image/png    1204121425.858     54 172.31.255.103 TCP_MISS/200 7240 GET http://www.integral.inf.br/inc/php/img_parceiro_banner.php? - DIRECT/172.31.254.2 image/png  
gerencia.log
  IP do cliente: 172.31.255.103 - Username: moraes - Horario: [27/Feb/2008:11:10:24 -0300] - Metodo: GET - URL: http://www.integral.inf.br/home/index.php - Status HTTP: 200 - Status Squid: TCP_MISS    IP do cliente: 172.31.255.103 - Username: moraes - Horario: [27/Feb/2008:11:10:25 -0300] - Metodo: GET - URL: http://www.integral.inf.br/inc/php/logo_casos.php? - Status HTTP: 200 - Status Squid: TCP_MISS    IP do cliente: 172.31.255.103 - Username: moraes - Horario: [27/Feb/2008:11:10:25 -0300] - Metodo: GET - URL: http://www.integral.inf.br/inc/php/logo_casos.php? - Status HTTP: 200 - Status Squid: TCP_MISS    IP do cliente: 172.31.255.103 - Username: moraes - Horario: [27/Feb/2008:11:10:25 -0300] - Metodo: GET - URL: http://www.integral.inf.br/inc/php/img_parceiro_banner.php? - Status HTTP: 200 - Status Squid: TCP_MISS    IP do cliente: 172.31.255.103 - Username: moraes - Horario: [27/Feb/2008:11:10:25 -0300] - Metodo: GET - URL: http://www.integral.inf.br/inc/php/img_parceiro_banner.php? - Status HTTP: 200 - Status Squid: TCP_MISS  

Tratando ACL

Com essa nova funcionalidade podemos atrelar um arquivo de log para cada acl como abaixo.
  logformat LOG_DOMINIOS_LIBERADOS IP do cliente: %>a - Username: %un - Horario: [%tl] - Metodo: %rm - URL: %ru - Status HTTP: %Hs - Status Squid: %Ss       acl DOMINIOS_LIBERADOS dstdomain "/etc/squid/DOMINIOS_LIBERADOS.rules"       access_log /var/log/squid/dominios_liberados.log LOG_DOMINIOS_LIBERADOS DOMINIOS_LIBERADOS