MAL - Memória Auxiliar do Lutieri

segunda-feira, março 16, 2009

service script on FreeBSD e Gentoo[updated]

Se tem uma coisa que eu simpatizo no CentOS, Red Hat e outros dessa ninhada eh um binario ou script chamada service. No FreeBSD pra reinicar, parar, iniciar, etc os servicos, o caminho pode ser longo como: /usr/loca/etc/rc.d/dovecot start

Jah no CentOS e amigos: service dovecot start

Isso se torna muito mais pratico, ainda mais quando se tah implementando algum servico que pode exigir reinicar varias vezes. Sendo assim resolvi montar minha versao do script. Simples, beeem simples mas funcional:

#!/bin/sh

LOCAL_SC='/usr/local/etc/rc.d/'
SYS_SC='/etc/rc.d/'


if [ $# -lt 2 ]
then
echo "USE:"
echo "$0 servicename start|restart|stop"
exit 3
fi

#Most of start/stop commands I issued are in LOCAL_SC
if [ -x $LOCAL_SC$1 ]
then
$LOCAL_SC$1 $2
exit 0
else
#Look in the system scripts
if [ -x $SYS_SC$1 ]
then
$SYS_SC$1 $2
exit 0
fi
fi

echo "$1 - not found"
exit 3


Criado em /usr/loca/sbin/service

[update]
Versao para Gentoo

#!/bin/sh

SYS_SC='/etc/init.d/'


if [ $# -lt 2 ]
then
echo "USE:"
echo "$0 servicename start|restart|stop"
exit 3
fi

#Most of start/stop commands I issued are in LOCAL_SC
#Look in the system scripts
if [ -x $SYS_SC$1 ]
then
$SYS_SC$1 $2
exit 0
fi

echo "$1 - not found"
exit 3

Marcadores: ,

quarta-feira, fevereiro 11, 2009

FreeBSD Hacks

Estou lendo "BSD Hacks - 100 Industrial-Strength tips & tools" como eh da biblioteca do estado vou ter que devolver algum dia. Sendo assim resolvi colocar aqui algumas das coisas que sei que voce precisar e, como sempre, esquecer!!

Informacoes sobre swap:
systat -swap
swapinfo
swapctl -lh


________________

Single user mode:

  • Escape to loader prompt
  • boot -s

Password protecting Single-User mode:

________________

  • Edit /etc/ttys
  • Find this line:

# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none unknown off secure
#
  • Now change "secure" to "insecure".

You're saying the system is consider to be insecure.

________________

Connect to serial port(headless systems):

cu -l /dev/cuaa1 -s 9600


To disconnect ~. Enter

________________

To suppress the MOTD banner create a file called ~/.hushlogin

________________

linux: netstat -anp
FreeBSD: sockstat


________________

Expect scripting language can be used to interact with any binary.

________________

Create a Package:

mkdir /usr/ports/packages


List all make options for a package:

grep WITH /usr/ports/mail/exim/Makefile


List all dependencies for package:

grep DEP /usr/ports/mail/exim/Makefile


cd /usr/ports/mail/exim
make package -DWITHOUT_IPV6 DEPENDS_TARGET=package


If you are building a package that contains dependencies set the DEPENDS_TARGET option

Now make is going to create the package AND install it. If you don't want it installed run make deinstall

Another solution: http://lutierigb.blogspot.com/2007/09/backup-de-pacotes-instalados-no-freebsd.html
________________

pkg_info tips

Messages showed after the installation of a package:

pkg_info -xD xmms


List of files of an installed app:

pkg_info -xL lynx


Check dependencies before uninstall a supposed unknown package. This command will return a list of all other apps that require, in this case ORBit.

pkg_info -xR ORBit



________________

Marcadores:

domingo, abril 13, 2008

PF com problemas no boot[atualizado]

Logo após ter instalado e configurado um firewall em BSD usando PF me deparei com um simples, comum e impactante problema. O rc no bsd é o cara que carrega e lê os scripts de inicialização do sistema. Existem um ordem para carregá-los e essa ordem normalmente tem lógica. Por exemplo, não adianta carregar um serviço como NTP antes de ter acesso a internet.

Mas é exatamente essa ordem de carregamento do serviços que estava errada para a minha necessidade. O meu firewall estava sendo carregado antes das configurações de rede. Tudo bem.. beleza. Entretanto, eu tenho algumas regras baseadas em hosts e não IP's. Exemplo:

block quick from any to chatenabled.mail.google.com


Uma vez que a rede é "levantada" depois do firewall eu pergunto: Como o pobre firewall vai conseguir traduzir chatenabled.mail.google.com em IP?! Coisas do mundo moderno DNS. :-)

Para solucionar pode-se fazer uso da POG ou:

chmod o+w /etc/rc.d/pf
vi /etc/rc.d/pf

# REQUIRE: root mountcritlocal netif pflog pfsync networking

inserir na linha acima a palavra "networking"

:x
chmod o-w /etc/rc.d/pf


Isso diz que o serviço de networking é necessário para carregar o pf. Vale pra quem tem o mesmo problema com VPN's.

Pronto!!!

Mentira. Aquilo ali em cima acho que não funcionou.. mas enfim. Peço perdão e todos vivem felizes.

Consegui solucionar esse problema alterando a ordem dos scripts na inicialização. O trecho abaixo mostra a comparação entre os arquivos originais e a modificação que é necessária fazer.

----snip------
upmefirewall# diff -ruN /etc/rc.d/ /home/lutierib/etc/rc.d/
diff -ruN /etc/rc.d/NETWORKING /home/lutierib/etc/rc.d/NETWORKING
--- /etc/rc.d/NETWORKING Fri Jan 12 04:13:15 2007
+++ /home/lutierib/etc/rc.d/NETWORKING Mon Mar 24 17:28:13 2008
@@ -7,6 +7,7 @@
# PROVIDE: NETWORKING NETWORK
# REQUIRE: netif routing network_ipv6 isdnd ppp
# REQUIRE: routed mrouted route6d mroute6d
+# BEFORE: pf

# This is a dummy dependency, for services which require networking
# to be operational before starting.
diff -ruN /etc/rc.d/pf /home/lutierib/etc/rc.d/pf
--- /etc/rc.d/pf Mon Mar 24 17:51:16 2008
+++ /home/lutierib/etc/rc.d/pf Mon Mar 24 17:27:05 2008
@@ -5,7 +5,6 @@

# PROVIDE: pf
# REQUIRE: root mountcritlocal netif pflog pfsync
-# BEFORE: routing
# KEYWORD: nojail

. /etc/rc.subr
upmefirewall#

----snip------

Resumindo a saída do diff acima:

Dois arquivos são alterados. São eles: NETWORKING e pf.
No arquivo NETWORKING adiciona-se a linha: # BEFORE: pf
E no arquivo pf remove-se a linha: # BEFORE: routing



Para verificar a ordem que os scripts serão carregados:

rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

Marcadores: ,

terça-feira, abril 01, 2008

Atualizando o ports e preservado as opções anteriores

O freebsd utiliza um ferramenta pra atualizar os pacotes(ports) instalados que é o portupgrade. Ele é inteligentizinho, mas nem tanto quanto eu queria que fosse.

portupgrade squid, por exemplo, baixa o fonte do squid, baixas patches(caso existam), aplica os patches, compila utilizando as últimas opções usadas(na última compilação), remove a versão anterior, instala e registra essa versão recém-compilada. Muito bem!

Quando eu disse que ele, compila utilizando as últimas opções usadas, me refiro a um arquivo em /var/db/ports/<nome>/options.

Esse arquivo é criado quando é executado o make config. Que exibe um tela ncurses com algumas opções pra compilação. Aí depende de cada ports. Alguns trabalham com essa forma de selecionar o que vai ser habilitado/desabilitado outros não. Caso o ports use OPTIONS no Makefile e exista esse arquivo citado acima, toda vez que for executado o make ou make install, inclusive a partir do portupgrade, essas opções serão utilizadas para compilação sem exibir a tela para selecionar. Caso o ports use OPTIONS no Makefile e NÃO exista esse arquivo citado, a tela será exibida, o arquivo então será criado com as opções selecionadas, e a compilação ocorrerá normalmente. E todas as futuras compilações utilizarão essas mesmas opções.

Um problema comum é o Makefile não fazer uso do OPTIONS ou mesmo fazer uso e não ter todas as opções inclusas. Uma vez que apenas escolhe-se se quer ou se não quer uma determinada opção, opções que o valor é string, exemplo:

SQUID_DEFAULT_LANG=Portuguese

Não são exibidas nessa tela ncurses. Pois lá só existe um checkbox e ponto.

O portuprgade utiliza um arquivo de configuração que nos diz que pode ser especificado argumentos de compilação em /usr/local/etc/pkgtools.conf da seguinte maneira:

MAKE_ARGS = {
# a) Separate them with the space
'databases/mysql41-*' => 'WITH_LINUXTHREADS=1 SKIP_DNS_CHECK=1',

# b) Specify them using an array
'databases/mysql41-*' => [
'WITH_LINUXTHREADS=1',
'SKIP_DNS_CHECK=1',
],
}

Muito bom, resolve meu problema, massssssss.... se um dia eu for atualizar diretamente pela árvore do ports, sem utilizar o portupgrade, aí ferrou!! As opções não serão utilizadas. Uma vez que quem lê esse arquivo é o aplicativo portupgrade.

Cansei... de escrever... mais opções leia esse artigo.
http://blog.innerewut.de/2006/1/14/upgrading-ports-and-preserve-make-options

Resumindo, pra compilar o mesmo ports sempre, forever and ever, com as mesmas opções, independente do modo de atualização/instalação. Adicione o seguinte no /etc/make.conf:

.if ${.CURDIR:M*www/squid}
NO_KERBEROS=yes
SQUID_CONFIGURE_ARGS=--enable-dlmalloc --enable-async-io --with-pthreads --with-aio --enable-ntlm-fail-open
SQUID_LANGUAGES=English Portuguese
SQUID_DEFAULT_LANG=Portuguese
.endif

Quando a compilação ocorre, independente do método usado, o make entra no diretório do ports.

O que o código acima faz é ver se o make está dentro de algum diretório que termine com www/squid. Caso esteja ele setará aquelas variáveis dentro bloco do if.

Como eu sou pior que São Tomé. Precisei testar pra ver se realmente funcionava antes de compilar. No caso do código acima é simples:

# cd ~
# make -V SQUID_CONFIGURE_ARGS
# cd /usr/ports/www/squid
# make -V SQUID_CONFIGURE_ARGS
--enable-dlmalloc --enable-async-io --with-pthreads --with-aio --enable-ntlm-fail-open

Viu! Funcionou!
'make -V VARIAVEL' retorna o valor da variável especificada.


Bye...

Marcadores:

sábado, março 29, 2008

csup ou cvsup - O mais rápido

Bom, meu próximo post vai mostrar minha horas extras em um sábado a tarde dedicadas a atualização do FreeBSD 6.2 Stable para o 7 Stable.

Como é necessário baixar os docs, sources do sistema e uma nova árvore do ports é interessante perder o menor tempo possível nisso. Uma vez que não se tem nada pra fazer além de esperar.

Podem ser usados 3 aplicativos pra esse fim: rsync, CVSup ou Csup.
O rsync todos devem conhecer. Se não de uma olhada aqui no blog do Marcelo Terres.

Já o CVSup é um aplicativo escrito em ezm3, seja lá qual for essa linguagem, que é, também, utilizado pra atualizar os sources e a árvore do ports no FreeBSD a partir de um servidor CVS.

Ele, o CVSup, não é um aplicativo que faz parte da base do FreeBSD exatamente pelo motivo de ter sido escrito nessa linguagem aí. Sendo assim, alguma boa alma resolveu reescrever esse mesmo aplicativo porém em C. Eis que nasce o Csup. Que agora sim faz parte da base do sistema. Acho que a partir da versão 6.2. Não tenho certeza... mas enfim...

Bom, voltando ao foco desse post que é descobrir o servidor mais rápido para fazer as atualizações.

Pra essa empreitada pode ser usado um script em Perl chamado fastest_cvsup.
Ele acessa os servidores através de sockets e determina os mais rápidos. Retorna os 3 mais rápidos de um país ou O mais rápido.

Instalação pra lá de trivial:

cd /usr/ports/sysutils/fastest_cvsup
make install clean; rehash
Para descobrir os 3 mais rápidos do Brasil, por exemplo:

fastest_cvsup -c br


Ele também retorna o mais rápido de todos que pode ser usado diretamente em um comando:

cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile -h `fastest_cvsup -c br -Q`


Já que estamos falando disso seguem alguns links.

http://www.freebsd.org/doc/en/books/handbook/cvsup.html#CVSUP-MIRRORS

http://www.freebsd.org/doc/en/books/handbook/cvs-tags.html

Para acelerar o processo de compilação pode ser montado o /tmp na ram.

http://alexsm.blogspot.com/2008/02/freebsd-tmp-em-ramdisk.html

Marcadores:

quarta-feira, março 26, 2008

Bash buscando no histórico estilo CSH

Uma das coisas boas do shell padrão do FreeBSD(csh) é a forma de consultar comandos passados. Ao invés do ctrl-r que busca em qualquer parte dos comandos digitados é possível buscar por comandos que iniciam por algo. Um exemplo facilita a vida.

um trecho do meu histórico:

321 cd ..
322 cp Prison_Break-2006--_Great_Dragon_.part1.rar.part lala.part
323 unrar x lala.part
324 unrar x Prison_Break-2006--_Great_Dragon_.part1.rar
325 vi Prison_Break-2006--\(Great\ Dragon\)/My\ Special\ Programmes.txt
326 cd Desktop/
327 ccorreio

Caso eu queira reutilizar o comando número 325 bastaria eu digitar v ou vi e pressionar a seta para cima. E caso tivessem comandos anteriores a esse iniciados com v ou vi, respectivamente, eles iriam também ser sugeridos.

Como foi dito, no CSH isso já é padrão. Para o Bash fazer o mesmo deve-se fazer ou:

Adicione no arquivo ~/.inputrc:

"\e[A~": history-search-backward
"\e[B~": history-search-forward

Ou

os mesmos comandos em /etc/inputrc que vai refletir para todos usuários.

Uma outra dica que encontrei, no arquivo citado acima, no meu gentoo, foi é a que segue. Usada para descobrir o código das teclas para ser usado no bind.

# Quick dirty little note:
# To get the key sequence for binding, you can abuse bash.
# While running bash, hit CTRL+V, and then type the key sequence.
# So, typing 'ALT + left arrow' in Konsole gets you back:
# ^[[1;3D
# The readline entry to make this skip back a word will then be:
# "\e[1;3D" backward-word
#

Marcadores: ,

terça-feira, março 11, 2008

mysqlhotcopy faltando no FreeBSD

Recentemente, após algumas migrações, precisei do script mysqlhotcopy pra "backupear" algumas bases de dados e eis que não encontrei-o na instalação que fiz no FreeBSD.

Por algum motivo qualquer ele não é instalado. Mas para resolver é simples:


You could go back into the ports directory and extract the sources, then go into them and locate the script.
Like:

cd /usr/ports/databases/mysql50-server ;
make extract ;
cd work/mysql-5.0.51a/

it should be in the scripts/ folder.
Copy it to a location of choice.

Then just go back to /usr/ports/databases/mysql50-server and either

make clean (remove what you buildt/extracted)
or
make distclean (remove downloaded sources and the above including related software).


Fonte:
http://www.freebsdforums.org/forums/showthread.php?t=39319

Fui testar e:

/usr/local/sbin/mysqlhotcopy: Command not found.

A primeira linha do arquivo é:

#!@PERL@ -w

Não sei se é pra ser um variável que aponta pro binário do perl ou não... Mas sei que não funcionou. Logo, troquei por:

#!/usr/bin/perl -w

Aí rodou!!! Mas faltou um módulo chamado BDI. Logo apareceu a mensagem:

Can't locate DBI.pm

Fui instalar:

perl -MCPAN -e shell
install DBI

Beleza.
Funcionou novamente! Porém no momento em que ia ser executada a cópia eis que surge o seguinte:

install_driver(mysql) failed: Can't locate DBD/mysql.pm

Óbvio faltava o suporte ao driver mysql.
Fui instalar:

perl -MCPAN -e shell
install DBD::mysql
Porém, como diz a documentação do site do Mysql sobre instalar os módulos perl, no momento da instalação do módulo ele vai tentar conectar ao mysql usando usuário root e senha em branco. Mas como eu já tinha alterado a senha do root pode-se ver várias linhas de acesso negado na tentativa de conexão ao banco. Devemos forçar a instalação de qualquer maneira. Para isso ao invés de install DBD::mysql usa-se force install DBD::mysql.

This is the end!

Marcadores: ,

sexta-feira, fevereiro 22, 2008

knock & PF

Estranho não ter encontrado esse assunto nas minhas buscas. Por isso coloco aqui. Acredito que vai ser útil pra mais alguém.

Chovem resultados se você quiser implementar essa solução no Linux com Iptables. Logo não vou falar dela aqui e nem vou explicar o funcionamento do knock. Pra isso existe o nome querido amigo Google. Google é uma velha expressão usada no interior da África que quer dizer: Pau pra toda obra!

heuahea não sei de onde eu tirei a bobagem acima! :-)

A instalação é feita normalmente através do ports.

No linux é usado o comando "iptables -A" para criar a regra de acesso no momento em que o camarada acerta as batidas para entrar. Porém pra fazer a mesma coisa no FreeBSD utilizando PF seria necessária um pequena enjambraçãozinha. Prefire partir por um caminho mais fácil.

Criei uma tabela qualquer:

table <knock>

E na seção de filtros criei uma regra liberando os endereços dessa tabela para acessar o SSH.

pass in on $ext_if proto tcp from <knock> to $ext_ip port 22 keep state

Bom, a tabela está vazia mas pode ser alterada usando o comando pfctl. Para isso o arquivo knock.conf ficou com os seguintes parâmetros command:

command = /sbin/pfctl -t knock -T add %IP%

O comando acima obviamente adiciona o IP do ser humano a tabela knock.

command = /sbin/pfctl -t knock -T delete %IP%

E o comando acima mais do que obviamente remove esse IP da tabela knock.

Caso tenha preguiça de executar a seqüencia para remover o IP, é o meu caso, crie uma entrada no crontab algo assim:

#Limpar tabela knock
0 3 * * * root pfctl -t knock -T flush 2>&1


Todo dia as 3 da manhã ele limpa a tabela knock e não preciso me preocupar.

É simples. Talvez seja esse o motivo de não ter encontrado nada a respeito. Se bem que em linux também é fácil e tem um monte de artigos sobre isso... bom.. vai saber..

Algo que me deixou um pouco triste foi que deve ser escolhida a interface ao invés do IP ao qual fazer o bind. Comento a minha tristeza pois tenho mais de um IP na mesma interface. Aí não é possível escolher qual IP será usado.

Marcadores: ,

terça-feira, janeiro 15, 2008

"Command not found" para scripts no FreeBSD

# vi /usr/local/sbin/syncsquid

!/bin/sh
/usr/local/bin/rsync -avx --delete serverA::squid/ /usr/local/etc/squid/confs/

:x

# chmod 755 /usr/local/sbin/syncsquid

# syncsquid
syncsquid: Command not found.

# whereis syncsquid
syncsquid: /usr/local/sbin/syncsquid

# rehash

# syncsquid
receiving file list ... done

sent 73 bytes received 424 bytes 142.00 bytes/sec
total size is 103885 speedup is 209.02

# echo ":-D"
:-D

Marcadores: ,

segunda-feira, janeiro 14, 2008

Mysql 5: Bind on unix socket: Permission denied

Tem alguns momentos da vida que eu acho que o cara não consegue raciocinar direito. Se bem que voltei de férias hoje pela manhã depois de quase 30 dias longe dos meus queridos servidores. Tomara que esse seja o motivo pra mim achar a solução, pra essa mensagem de erro do título, depois de uma hora e tanto.

Fui colocar algumas coisas em dia. Isso inclui um server novo que tinha que ter mysql. Pois bem, eis que quando tento iniciar o server mysql tenho isso:

/usr/local/etc/rc.d/mysql-server start ; tail -f /var/db/mysql/host.xyz.com.br.err


080114 10:28:56 mysqld started
080114 10:28:56 InnoDB: Started; log sequence number 0 43655
080114 10:28:56 [ERROR] Can't start server : Bind on unix socket: Permission denied
080114 10:28:56 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
080114 10:28:56 [ERROR] Aborting

080114 10:28:56 InnoDB: Starting shutdown...
080114 10:28:58 InnoDB: Shutdown completed; log sequence number 0 43655
080114 10:28:58 [Note] /usr/local/libexec/mysqld: Shutdown complete

080114 10:28:58 mysqld ended

Olhando agora é a coisa mais simples do mundo. Mas sei lá porque cargas d'água eu não me dei conta da solução antes e fui pelo caminho mais difícil.

Primeiro recompilei o mysql com a opção --with-debug. Agora quando rodo:


# /usr/local/libexec/mysqld --help


Me retorna:

/usr/local/libexec/mysqld Ver 5.0.51-debug for portbld-freebsd6.2 on amd64 (FreeBSD port: mysql-server-5.0.51)


O que significa que posso rodar o seguinte comando para debugar o servidor mysql:

/usr/local/libexec/mysqld --debug --user=mysql


Que vai criar um arquivo /tmp/mysqld.trace contendo o debug da inicialização do servidor. Se bem que não encontrei nada de muito interessante dentro dele.

Foi aí então que resolvi pensar um pouquinho só antes de seguir fazendo coisas. Pensei cá com os meus botõezinhos: "Parece não ter permissão pra criar o socket. Porém é no diretório /tmp".
Acho que por ser nesse diretório que eu descartei qualquer possibilidade de permissão e segui por outro caminho. Mas como eu já tinha chegado no fim desse caminho e não havia encontrado nada, resolvi voltar ao início.

As permissões do /tmp estavam assim:


drwxr-xr-x 7 root wheel 512 Jan 14 11:12 tmp


Estranho. Mas.. mudei pra ficar assim:

chmod 777 /tmp/

Mais informações sobre debug no Mysql. Aqui.
tcharã!! Pronto. Da próxima vez eu verifico o lógico primeiro.

Marcadores: ,

sexta-feira, dezembro 21, 2007

As máquinas estão tomando decisões :-)

E isso me preocupa!

Pra quem tem aquelas idéias maluca de que as canetas BIC são sondas alienígenas e que o mendigo na esquina do seu emprego na verdade é um agente da CIA disfarçado e mais do que isso: Acha que as máquinas vão dominar o mundo. Olha o que o FreeBSD me aprontou essa semana.

Como falei no post anterior tive problemas com o pftpx, bom na verdade ele não tinha nada de errado. Mas até eu descobrir isso eu já havia atualizado ele. Me surpreendi com a tomada de decisões do SO. Tive que reinstalar uma lib e quando fui remover ela:

# make deinstall
===> Deinstalling for devel/libevent
===> Deinstalling libevent-1.2
pkg_delete: package 'libevent-1.2' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
pftpx-0.8_1
#

Prestaram atenção no detalhe entre parênteses?!?!

Apesar de tudo é um SO decidido. :-)

Mas se é pra falar sério mesmo eu digo que só vou acreditar que as máquinas vão dominar o mundo no dia que elas se acharem muito gordas e acharem que precisam de uma dieta.

Feliz Natal!!

Marcadores:

Pftpx: server refused connection


Dec 20 15:56:05 sdfirewall pftpx[38984]: #951 server refused connection
Dec 20 15:56:15 sdfirewall pftpx[38984]: #952 server refused connection
Dec 20 15:56:26 sdfirewall pftpx[38984]: #953 server refused connection
Dec 20 15:56:37 sdfirewall pftpx[38984]: #954 server refused connection
Dec 20 15:56:47 sdfirewall pftpx[38984]: #955 server refused connection
Dec 20 15:56:59 sdfirewall pftpx[38984]: #956 server refused connection
Dec 20 15:57:10 sdfirewall pftpx[38984]: #957 server refused connection

Essa é a mensagem que apareceu ontem várias e várias vezes no meu firewall. Pois bem, pensei que fosse uma mensagem do pftpx reportando algum erro. Mas depois descobri que não. Essa mensagem é do servidor ftp onde meu cliente estava tentando conectar. Que podemos ver, por sinal, que o servidor não estava aceitando conexões.

Como descobri de onde vinha essa mensagem:

Bom, quem me conhece sabe que eu gosto de ver o que está acontecendo por trás do panos. Tanto é que uso Unix/Linux :-) Cansei de viver na tentativa e erro com o Sr. Janelas.

Olhando o manual do pftpx vi alguns parâmetros que iriam me ajudar nessa empreitada. Resumindo, iniciei o pftpx com os seguintes parâmetros:

pftpx -D 7 -d


O "-D 7" é nível de debug máximo, mas não encontrei os logs detalhados em lugar algum. Portanto resolvi adicionar o "-d" que roda o processo em foreground e então voilá!

No freebsd para adicionar esse parâmetros é só setar o a seguinte variável no /etc/rc.conf

pftpx_flags="-D 7 -d"

E reiniciar o serviço:

/usr/local/etc/rc.d/pftpx restart


Consegui ver que tinha um cliente que tentava conectar a cada 10 segundos +- em um server ftp qualquer. Acredito que seja vírus, spyware ou alguém dessa família. Vejam o que tive no log.


Starting pftpx.
listening on 127.0.0.1 port 8021
#1 accepted connection from 172.16.21.17
#1 FTP session 1/100 started: client 172.16.21.17 to server 58.254.39.26 via proxy 201.42.xx.xx
#1 server refused connection
#1 ending session
#2 accepted connection from 172.16.21.17
#2 FTP session 1/100 started: client 172.16.21.17 to server 58.254.39.26 via proxy 201.42.xx.xx
#2 server refused connection
#2 ending session
#3 accepted connection from 172.16.21.17
#3 FTP session 1/100 started: client 172.16.21.17 to server 58.254.39.26 via proxy 201.42.xx.xx
#3 server refused connection
#3 ending session
#4 accepted connection from 172.16.21.17
#4 FTP session 1/100 started: client 172.16.21.17 to server 58.254.39.26 via proxy 201.42.xx.xx
#4 server refused connection
#4 ending session
#5 accepted connection from 172.16.21.17
#5 FTP session 1/100 started: client 172.16.21.17 to server 58.254.39.26 via proxy 201.42.xx.xx
#5 server refused connection
#5 ending session

Pode-se ver nesse log a mensagem que tava me enchendo e enchendo meus logs :-)
Quando o cliente tenta conectar nesse server 58.254.39.26 a conexão não é aceita. :-)

Marcadores: ,

quinta-feira, dezembro 20, 2007

Mensages de ARP repetitivas no FreeBSD


Dec 14 18:50:07 sdfirewall kernel: arp: 172.16.2.13 moved from 00:14:4f:45:41:b3 to 00:14:4f:45:41:b2 on em0


Essa mensagem ali aparece várias vezes no syslog. Portanto resolvi sumir com ela. No meu caso acredito não ser importante pois esses dois endereços de hardware(MAC's) são do mesmo servidor. Em um porta ethernet tenho um endereço classe C e na outra porta tenho esse endereço classe B. Bom de qualquer maneira, é o mesmo servidor e com certeza não é spoofing. Eu ficaria preocupado se um dos MAC's fosse de outra máquina.

Acredito que seja algo com o switch mas não estou disposto a procurar.

Pra solucionar temporariamente é só esconder as mensagens :-)
Achei em um fórum a ajuda.


Retorna a descrição da diretiva:

#sysctl -d net.link.ether.inet.log_arp_movements

Retorna:

net.link.ether.inet.log_arp_movements: log arp replies from MACs different than the one in the cache

Para ver o valor atual executa-se:

#sysctl net.link.ether.inet.log_arp_movements

Provavelmente estará setado em 1. Que ativa o log dos movimentos ARP.

Para alterar o valor:

sysctl net.link.ether.inet.log_arp_movements=0


Pronto! Sem mensagens de movimentos ARP

:-D

Fonte de pesquisa:
link:http://www.derkeiler.com/Mailing-Lists/FreeBSD-Security/2004-01/0071.html

Marcadores: ,

sábado, dezembro 01, 2007

Rapidinhas do pfctl [atualizado]

Por mim eu colocava todo o pfctl.man aqui. Mas por hora apenas o mais usado.

Ultimamente tive problemas ao carregar as regras. Como sempre gosto de saber o que está acontecendo nos bastidores. Portanto segue como ativar o modo versoso do pf:

pfctl -vvf /etc/pf.conf

Existem, ainda, algumas alternativas que podem ajudar a diagnosticar onde está o problema. Como por exemplo carregar primeiro as regras de NAT e redirecionamento e depois as de filtragem. Segue exemplos:

pfctl -f /etc/pf.conf Carrega o arquivo pf.conf
pfctl -nf /etc/pf.conf Analisa o arquivo, mas não o carrega
pfctl -Nf /etc/pf.conf Carrega apenas as regras NAT do arquivo
pfctl -Rf /etc/pf.conf Carrega apenas as regras de filtragem do arquivo

No momento que eu estava escrevendo essa nota, artigo ou seja lá como quiser chamar, eu estava tentando descobrir pra que raios servia a opcão -g do pfctl. No manual apenas diz que inclui na saída informacões úteis pra debug. Pois bem, achei uma utilidade.

Quando você está usando o tcpdump pra capturar o tráfego que passa pelo PF com o comando:

tcpdump -n -e -ttt -i pflog0
você vai ter informacões, da captura, como essa. Interrompendo nossa transmissão:
Essa interface eh padrão no openbsd no freebsd eh necessário compilar o kernel com ela ativa. Na versao 7.1-RELEASE e provavelmente apartir da 7?!?! a interface pflog0 jah estah compilada como modulo. Portanto para usar basta:

kldload pflog
E caso voce esteja capturando alguns pacotes que exibem o seguinte

tcp 40 [bad hdr length 0 - too short, <>


tente o comando:

tcpdump -s 1600 -n -e -ttt -i pflog0


Dica tirada daqui:
http://www.freebsd.org/cgi/man.cgi?query=pflogd&sektion=8


Continuamos com nossa transmissão normal:

Sep 17 17:07:37.443421 rule 14/0(match): pass in on fxp0: 55.66.77.88.14373 > 66.92.15.252.22: S 3920978973:3920978973(0) win 5840 (DF)

Isso diz que esse pacote coincidiu com a regra #14. Pois bem, é aí que entra o nosso amigo -g. Com o comando: pfctl -g -s rules. São exibidas as regras e os números que o PF alocou pra cada uma.


Existe também um modo de debug que pode ser usado. Ele é ativado através da opcão -x. E pode ter os seguintes valores:
none - Don't generate debug messages.
urgent - Generate debug messages only for serious errors.
misc - Generate debug messages for various errors.
loud - Generate debug messages for common conditions.

Exemplo:
pcftl -x urgent
Essas mensagens vão para /var/log/messages


Alguns comandos que você vai usar 90% do tempo:

































pfctl -d Diable the packet filter
pfctl -e Enable the packet filter
pfctl -Fa -f /etc/pf.conf Flush all (nat, filter, queue, state, info, table) rules and reload from
the file /etc/pf.conf
pfctl -s rules Report on the currently loaded filter ruleset.
pfctl -s nat Report on the currently loaded nat ruleset.
pfctl -s state Report on the currently running state table (very useful).
pfctl -v -n -f /etc/pf.conf This does not actually load any rules, but allows you to check for errors
in the file before you do load the ruleset. This is obviously good for testing.


Mais informacões acesse: http://www.openbsd.org/faq/pf/pt/index.html
e http://www.thedeepsky.com/howto/newbie_pf_guide.php

Marcadores: ,

quinta-feira, setembro 06, 2007

Simples Benchmark para discos

Como instalei um sistema operacional em uma máquina nova gostaria de testar a velocidade de escrita no HD. Para fazer isso é simples:

Commands:
512k: time dd if=/dev/zero of=./8gbfile bs=512k count=16384
1024k: time dd if=/dev/zero of=./8gbfile bs=1024k count=8192
4096k: time dd if=/dev/zero of=./8gbfile bs=4096k count=2048
with “rm -rf 8gbfile && sync” run after every instance

O teste é feito criando um arquivo de 8 Gigabytes no disco. Para isso são utilizados blocos de 512k, 1024k e 4096k e medindo o tempo que esse processo demorou. Paralelo a isso pode-se utilizar comandos como:

  • gstat -I 500ms
  • systat -v 1
  • iostat -c 100

Que irão mostrar a velocidade de transferência.
Existem ainda outras ferramentas que se encontram em /usr/ports/benchmarks/.

Fonte: http://pcburn.com/article-Linux_SATA_vs_IDE_Performance-pg2.php

Marcadores: ,

Compile kernel in FreeBSD

# cat /usr/local/etc/src-supfile
----INICIO----
*default host=cvsup16.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6
*default delete use-rel-suffix

*default compress

src-sys
src-sys-crypto
---- FIM ----



# cat /usr/src/sys/amd64/conf/LGB
---- INICIO ----
#
# GENERIC -- Generic kernel configuration file for FreeBSD/amd64
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.439.2.18 2007/03/27 02:33:00 yongari Exp $

machine amd64
cpu HAMMER
ident LGB

# To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.

#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols

options SCHED_4BSD # 4BSD scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
###options INET6 # IPv6 communications protocols
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options MD_ROOT # MD is a potential root device
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
options NFS_ROOT # NFS usable as /, requires NFSCLIENT
###options NTFS # NT File System
###options MSDOSFS # MSDOS Filesystem
options CD9660 # ISO 9660 Filesystem
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_GPT # GUID Partition Tables.
options COMPAT_43 # Needed by COMPAT_LINUX32
options COMPAT_IA32 # Compatible with i386 binaries
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_LINUX32 # Compatible with i386 linux binaries
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options ADAPTIVE_GIANT # Giant mutex is adaptive.

# Workarounds for some known-to-be-broken chipsets (nVidia nForce3-Pro150)
device atpic # 8259A compatability

# Linux 32-bit ABI support
options LINPROCFS # Cannot be a module yet.

# Bus support.
device acpi
device pci

# Floppy drives
###device fdc

# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
device atapist # ATAPI tape drives
options ATA_STATIC_ID # Static device numbering

# SCSI Controllers
device ahc # AHA2940 and onboard AIC7xxx devices
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
device ahd # AHA39320/29320 and onboard AIC79xx devices
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
#device ispfw # Firmware for QLogic HBAs- normally a module
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
device trm # Tekram DC395U/UW/F DC315U adapters

device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters


# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)

# RAID controllers interfaced to the SCSI subsystem
device amr # AMI MegaRAID
device arcmsr # Areca SATA II RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options
device hptmv # Highpoint RocketRAID 182x
device rr232x # Highpoint RocketRAID 232x
device iir # Intel Integrated RAID
device ips # IBM (Adaptec) ServeRAID
device mly # Mylex AcceleRAID/eXtremeRAID
device twa # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device mfi # LSI MegaRAID SAS
device mlx # Mylex DAC960 family
#XXX pointer/int warnings
#device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID

# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse

device kbdmux # keyboard multiplexer

device vga # VGA video card driver

device splash # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console
device sc

device agp # support several AGP chipsets

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
###device cbb # cardbus (yenta) bridge
###device pccard # PC Card (16-bit) bus
###device cardbus # CardBus (32-bit) bus

# Serial (COM) ports
device sio # 8250, 16[45]50 based serial ports

# Parallel port
###device ppc
###device ppbus # Parallel port bus (required)
###device lpt # Printer
###device plip # TCP/IP over parallel
###device ppi # Parallel port interface device
#device vpo # Requires scbus and da

# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to the sio and/or ppc drivers):
#device puc

# PCI Ethernet NICs.
###device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
###device ixgb # Intel PRO/10GbE Ethernet Card
###device le # AMD Am7900 LANCE and Am79C9xx PCnet
###device txp # 3Com 3cR990 (``Typhoon'')
###device vx # 3Com 3c590, 3c595 (``Vortex'')

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
###device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet
###device bfe # Broadcom BCM440x 10/100 Ethernet
###device bge # Broadcom BCM570xx Gigabit Ethernet
###device dc # DEC/Intel 21143 and various workalikes
###device fxp # Intel EtherExpress PRO/100B (82557, 82558)
###device lge # Level 1 LXT1001 gigabit Ethernet
###device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet
###device nge # NatSemi DP83820 gigabit Ethernet
###device nve # nVidia nForce MCP on-board Ethernet Networking
###device pcn # AMD Am79C97x PCI 10/100 (precedence over 'le')
###device re # RealTek 8139C+/8169/8169S/8110S
###device rl # RealTek 8129/8139
###device sf # Adaptec AIC-6915 (``Starfire'')
###device sis # Silicon Integrated Systems SiS 900/SiS 7016
###device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
###device ste # Sundance ST201 (D-Link DFE-550TX)
###device ti # Alteon Networks Tigon I/II gigabit Ethernet
###device tl # Texas Instruments ThunderLAN
###device tx # SMC EtherPower II (83c170 ``EPIC'')
###device vge # VIA VT612x gigabit Ethernet
###device vr # VIA Rhine, Rhine II
###device wb # Winbond W89C840F
###device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')

# ISA Ethernet NICs. pccard NICs included.
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet

# Wireless NIC cards
###device wlan # 802.11 support
###device wlan_wep # 802.11 WEP support
###device wlan_ccmp # 802.11 CCMP support
###device wlan_tkip # 802.11 TKIP support
###device an # Aironet 4500/4800 802.11 wireless NICs.
###device ath # Atheros pci/cardbus NIC's
###device ath_hal # Atheros HAL (Hardware Access Layer)
###device ath_rate_sample # SampleRate tx rate control for ath
###device awi # BayStack 660 and others
###device ral # Ralink Technology RT2500 wireless NICs.
###device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.

# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device sl # Kernel SLIP
device ppp # Kernel PPP
device tun # Packet tunnel.
device pty # Pseudo-ttys (telnet etc)
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter

# USB support
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
###device ulpt # Printer
###device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
###device ural # Ralink Technology RT2500USB wireless NICs
###device urio # Diamond Rio 500 MP3 player
###device uscanner # Scanners
# USB Ethernet, requires miibus
###device aue # ADMtek USB Ethernet
###device axe # ASIX Electronics USB Ethernet
###device cdce # Generic USB over Ethernet
###device cue # CATC USB Ethernet
###device kue # Kawasaki LSI USB Ethernet
###device rue # RealTek RTL8150 USB Ethernet

# FireWire support
###device firewire # FireWire bus code
###device sbp # SCSI over FireWire (Requires scbus and da)
###device fwe # Ethernet over FireWire (non-standard!)


############################################
# Custom Settings
############################################

##
# Performance Tunneup
# Multi-Processo conf
##
options SMP # Symmetric MultiProcessor Kernel
options HZ=2000
options DEVICE_POLLING # Soft intrrupt's

##
# Change the default Scheduler
##
###options SCHED_ULE # ULE scheduler

##
# Squid Tunneup
# pagesize of FreeBSD 6.1 --> 4096
##
options VFS_AIO

##
# System V Resources
##
options SYSVSHM #SYSV-style shared memory
options SYSVMSG #SYSV-style message queues
options SYSVSEM #SYSV-style semaphores

#
options MAXDSIZ=(4096UL*1024*1024) # Conf para 4Gb
options MAXSSIZ=(256UL*1024*1024) # E aqui vai pra 128
options DFLDSIZ=(4096UL*1024*1024) # 4096 tb!

##
# Message Queues [Based on Squid FAQ]
##
option MSGMNB=262144 # Number of bytes in a queue
option MSGMNI=128 # Need to be at least 2 times the number of cache_dir entries in the squid
option MSGSSZ=256 # Size of the message segment in a queue
option MSGTQL=16384 # Number of max queue identifiers versus 128 messages per queue (is the high mark of performance of messages per queue)
option MSGSEG=2048 # Number of messages segments
#
##

##
# Shared Memory [Based on Squid FAQ]
##
options SHMMNI=256 # The half of the message queues at least [1 for each cache_dir]
options SHMALL=65536 #
options SHMMAX=(128UL*1024*1024) #
options SHMSEG=128


##
# Firewall PF
##
device pf
device pflog
device pfsync


##
# ALTQ
##
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
---- FIM -----

# pciconf -lv
---- INICIO -----
pcib1@pci0:1:0: class=0x060400 card=0x00000000 chip=0x74501022 rev=0x13 hdr=0x01
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X Bridge'
class = bridge
subclass = PCI-PCI
ioapic0@pci0:1:1: class=0x080010 card=0x74511022 chip=0x74511022 rev=0x01 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X IOAPIC'
class = base peripheral
subclass = interrupt controller
pcib2@pci0:2:0: class=0x060400 card=0x00000000 chip=0x74501022 rev=0x13 hdr=0x01
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X Bridge'
class = bridge
subclass = PCI-PCI
ioapic1@pci0:2:1: class=0x080010 card=0x74511022 chip=0x74511022 rev=0x01 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X IOAPIC'
class = base peripheral
subclass = interrupt controller
pcib3@pci0:6:0: class=0x060400 card=0x00000000 chip=0x74601022 rev=0x07 hdr=0x01
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 PCI Bridge'
class = bridge
subclass = PCI-PCI
isab0@pci0:7:0: class=0x060100 card=0x74681022 chip=0x74681022 rev=0x05 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 LPC Bridge'
class = bridge
subclass = PCI-ISA
atapci0@pci0:7:1: class=0x01018a card=0x74691022 chip=0x74691022 rev=0x03 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 UltraATA/133 Controller'
class = mass storage
subclass = ATA
none0@pci0:7:2: class=0x0c0500 card=0x746a1022 chip=0x746a1022 rev=0x02 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 SMBus 2.0 Controller'
class = serial bus
subclass = SMBus
none1@pci0:7:3: class=0x068000 card=0x746b1022 chip=0x746b1022 rev=0x05 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 ACPI System Management Controller'
class = bridge
hostb0@pci0:24:0: class=0x060000 card=0x00000000 chip=0x11001022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron HyperTransport Technology Configuration'
class = bridge
subclass = HOST-PCI
hostb1@pci0:24:1: class=0x060000 card=0x00000000 chip=0x11011022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron Address Map'
class = bridge
subclass = HOST-PCI
hostb2@pci0:24:2: class=0x060000 card=0x00000000 chip=0x11021022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron DRAM Controller'
class = bridge
subclass = HOST-PCI
hostb3@pci0:24:3: class=0x060000 card=0x00000000 chip=0x11031022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron Miscellaneous Control'
class = bridge
subclass = HOST-PCI
hostb4@pci0:25:0: class=0x060000 card=0x00000000 chip=0x11001022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron HyperTransport Technology Configuration'
class = bridge
subclass = HOST-PCI
hostb5@pci0:25:1: class=0x060000 card=0x00000000 chip=0x11011022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron Address Map'
class = bridge
subclass = HOST-PCI
hostb6@pci0:25:2: class=0x060000 card=0x00000000 chip=0x11021022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron DRAM Controller'
class = bridge
subclass = HOST-PCI
hostb7@pci0:25:3: class=0x060000 card=0x00000000 chip=0x11031022 rev=0x00 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'Athlon 64 / Opteron Miscellaneous Control'
class = bridge
subclass = HOST-PCI
em0@pci1:1:0: class=0x020000 card=0x10118086 chip=0x10108086 rev=0x03 hdr=0x00
vendor = 'Intel Corporation'
device = '82546EB Dual Port Gigabit Ethernet Controller (Copper)'
class = network
subclass = ethernet
em1@pci1:1:1: class=0x020000 card=0x10118086 chip=0x10108086 rev=0x03 hdr=0x00
vendor = 'Intel Corporation'
device = '82546EB Dual Port Gigabit Ethernet Controller (Copper)'
class = network
subclass = ethernet
em2@pci1:2:0: class=0x020000 card=0x10118086 chip=0x10108086 rev=0x03 hdr=0x00
vendor = 'Intel Corporation'
device = '82546EB Dual Port Gigabit Ethernet Controller (Copper)'
class = network
subclass = ethernet
em3@pci1:2:1: class=0x020000 card=0x10118086 chip=0x10108086 rev=0x03 hdr=0x00
vendor = 'Intel Corporation'
device = '82546EB Dual Port Gigabit Ethernet Controller (Copper)'
class = network
subclass = ethernet
mpt0@pci2:3:0: class=0x010000 card=0x30601000 chip=0x00501000 rev=0x02 hdr=0x00
vendor = 'LSI Logic (Was: Symbios Logic, NCR)'
class = mass storage
subclass = SCSI
ohci0@pci3:0:0: class=0x0c0310 card=0x74641022 chip=0x74641022 rev=0x0b hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 USB OpenHCI Host Controller'
class = serial bus
subclass = USB
ohci1@pci3:0:1: class=0x0c0310 card=0x74641022 chip=0x74641022 rev=0x0b hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8111 USB OpenHCI Host Controller'
class = serial bus
subclass = USB
none2@pci3:3:0: class=0x030000 card=0x4732108e chip=0x47521002 rev=0x27 hdr=0x00
vendor = 'ATI Technologies Inc'
device = 'Rage XL PCI'
class = display
subclass = VGA
pcib5@pci4:1:0: class=0x060400 card=0x00000000 chip=0x74501022 rev=0x13 hdr=0x01
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X Bridge'
class = bridge
subclass = PCI-PCI
ioapic2@pci4:1:1: class=0x080010 card=0x74511022 chip=0x74511022 rev=0x01 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X IOAPIC'
class = base peripheral
subclass = interrupt controller
pcib6@pci4:2:0: class=0x060400 card=0x00000000 chip=0x74501022 rev=0x13 hdr=0x01
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X Bridge'
class = bridge
subclass = PCI-PCI
ioapic3@pci4:2:1: class=0x080010 card=0x74511022 chip=0x74511022 rev=0x01 hdr=0x00
vendor = 'Advanced Micro Devices (AMD)'
device = 'AMD-8131 PCI-X IOAPIC'
class = base peripheral
subclass = interrupt controller
---- FIM ----


Essa configuração roda em um servidor Sun Fire X4100.



Passos para compilar o kernel:

Para baixar a última versão stable do kernel:

csup -L 2 -g /usr/local/etc/src-supfile

Os passos que eu segui para compilar o kernel são descritos aqui:
http://www.bsdguides.org/guides/freebsd/kernel/custom_kernel.php

Quando fui executar o make depend me deparei com o seguinte erro:

make: don't know how to make /usr/src/sys/crypto/rijndael/rijndael-alg-fst.c. Stop
*** Error code 2

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

A solução encontrei aqui. Que foi simplesmente adicionar src-sys-crypto ao src-supfile. E executar o csup de novo.

Link que ajuda na hora de escolher as opções.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html

Marcadores: ,

quarta-feira, setembro 05, 2007

SQUID: Software caused connection abort

httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort
httpAccept: FD 47: accept failure: (53) Software caused connection abort

É assim que anda o cache.log do meu squid.

Procurei tanto as respostas pra isso e só via uma palavra que hoje ecoa dentro da minha cabeça:

harmless

Eu vou estar com 70 anos e não vou esquecer o significado: "que não causa danos".

Não causa danos... aham.. isso quando for lá de vez em quando que essa mensagem for vista. No meu caso essa desgraça aparece umas 40 vezes por minuto. Procurando mais próximo a fonte, leia-se squid-user mailing list, encontrei um dos desenvolvedores falando a mesmíssima coisa:
This is a harmless message.

Tá! o fato é que ela tava me causando danos sim. Estava criando arquivos de log com tamanhos desnecessários. Portanto resolvi apelar. Descobri que uma boa forma de ter um sistema rodando sem erros é indo lá e comentando a linha de código onde diz algo como: printf... echo... debug....

Pronto!!! Os erros não aparecem mais nos logs :-) Isso que é a real POG.

Bom... mas claro que eu como um administrador não posso simplesmente ocultar o erro. Mas Henrik Nordstrom pode. Ele é o cara que recomendou fazer essa gambiarra. E ele não é nada mais nada menos que o cara que desenvolve o squid. Portanto se ele diz que pode eu acredito.

Vamos ao workaround, a.k.a, POG:


No código fonte do squid temos o seguinte arquivo: src/client_side.c
No meu caso, estou rodando a versão 2.6stable14. Sendo assim, encontro dentro desse arquivo, mais precisamente na linha 4513, o seguinte comando:

debug(50, 1) ("httpAccept: FD %d: accept failure: %s\n",


HA HA! tá aqui a fonte da minha cefaléia.

Henrik recomenda aumentar o nível do log que é o segundo parâmetro do comando debug. Está atualmente setado para 1, como se pode ver. 0 é crítico, 1 é nível importante e acima de 2 é para debug.

Sendo assim nossa linha 4513 fica assim:

debug(50, 2) ("httpAccept: FD %d: accept failure: %s\n",

Henrik disse isso aqui.

Para efetuar esse procedimento no FreeBSD através do ports deve-se proceder da seguinte maneira:

cd /usr/ports/www/squid
make fetch
make config
make patch
vi work/squid-2.6STABLE14/src/client_side.c
:4513


Coloca o cursor sobre o número 1 e pressione CTRL+a. Isso incrementa o número. E só por curiosidade CTRL+x decrementa.

:x
make install clean

E todos viveram felizes para sempre.

Marcadores: ,

Backup de pacotes instalados no FreeBSD

Como já visto tive um briga das feias com o squid+freebsd+ntlm. Pois bem, está funcionando perfeitamente hoje, ou melhor, quase perfeitamente. Tem uma mensagem que aparece nos logs que está só ocupando espaço. Falo dessa mensagem no próximo post.

Por hora gostaria de remover essa mensagem mas para isso tenho que recompilar o squid. Tenho o squid rodando e tenho que recompilar. Mas confesso: Estou receoso quanto a este processo. Na verdade é um trauma do passado(semana passada). Pensa comigo: passei uma semana brigando com o squid. Isso deve dar por cima umas 50 horas. Pedi ajuda em 3 lista diferentes, os resultados do google não ajudaram muito.. Bom depois disso tudo eu quero mais é mudar a senha do root desse servidor e nunca mais nem se quer acessá-lo.

Mas esse procedimento de recompilá-lo vai ser necessário. Ou isso ou aguento os logs com infinitas mensagens :

httpAccept: FD 47: accept failure: (53) Software caused connection abort

Só pra me certificar vou fazer um backup do squid atualmente instalado e aí sim, qualquer problema tenho uma cópia de segurança ;-D

Procurando aqui e acolá descobri que é possível fazer um pacote a partir de um ports instalado no FreeBSD. Sendo essa a minha solução escolhida.

Antes de tudo e mais nada é necessário saber qual o nome do ports instalado atualmente no sistema para aí sim proceder com o backup.

ls /var/db/pkg | grep squid

ou

pkg_info | grep squid

Ambos fazem a mesma coisa.

No meu caso os comandos acima retornaram o seguinte:

squid-2.6.14

Pronto. É essa a informação que precisamos. Agora vamos criar o nosso pacote de backup com o seguinte comando:

pkg_create -b squid-2.6.14

ou
pkg_create -xb squid


O -x considera 'squid' como uma expressão regular.

No diretório onde você se encontra será criado um arquivo tipo isso:

squid-2.6.14 .tbz

tbz é uma abreviação pra tar.bz2.

Esse é o nosso pacote contendo o squid atualmente rodando no sistema. :-D

Agora sim... pode-se trabalhar com esse arquivo como se fosse um pacote qualquer.

Pode-se usar o comando pkg_add, portupgrade -P.

No caso do portupgrade -P é necessário que o arquivo se encontre no diretório /usr/ports/packges/All


Essa mesma dica pode ser usada no caso de você precisar atualizar o mesmo software em várias máquinas rodando a mesma versão de FreeBSD. Você pode, por exemplo, compilar e aplicar patches instalar, montar um pacote e copiar esse pacote para as outras máquinas. Assim nessas outras máquinas não será necessário compilar, aplicar patches enfim... Será apenas necessário fazer uma atualização de pacote. O que poupa tempo e recursos.

Dica retirada daqui

Adios, arrivederte, sayonara, goodbye, hasta la vista, au revoir, tchau.

Marcadores:

segunda-feira, setembro 03, 2007

Lentidão no SQUID em FreeBSD

Pra quem quer acompanhar o sofrimento de um pobre admin unix acesse:

http://www.fug.com.br/historico/html/freebsd/2007-08/threads.html#00809

Acho que foi uma das threads mais longas da lista. Mas juro. Eu não queria.

Fui inventar de migrar o firewall e proxy que estão(avam) rodando com Debian para FreeBSD. Que vamos combinar: é muito melhor e mais fácil de usar. Isso mesmo. Eu sempre ouvi que o FreeBSD é casca grossa. Que tudo era difícil. Que difícil o que.. Em menos de um mês, bem folgado, fazendo outras coisas ao mesmo tempo, migrei o meu firewall de iptables para PF, migrei o serviço de DNS, HTTP, NTP, Nagios e migrei também o Squid. E é aí que começa meu problema.

Ouvi dizer por aí, que o squid tem problemas de I/O pra rodar no FreeBSD. Bom.. meu problema foi que quando fiz a migração dos clientes para esse proxy novo, no FreeBSD, após ter uns 45/50 usuários fazendo uso do mesmo, isso significa 10 minutos depois de mudar o IP do registro PROXY no servidor DSN, O acesso a internet ficava lentíssimo e cada vez piorava mais.

Aprendi que quando se instala um sistema operacional novo, antes de mais nada deve-se testar o hardware pra ter certeza de que tudo está em perfeita ordem. Do contrário, vai acontecer que você vai descobrir um problema como lentidão no squid e pode ser disco, memória, kernel, placa de rede, enfim... temos várias opções.

Então o melhor é testar todo o hardware antes de começar acusar um pobre software.

Faça algumas coisas como:
  • Teste a memória RAM;
  • Use ferramentas de benchmark;
  • Teste escrita/leitura de discos;
  • Teste a controladora SCSI;
  • Teste as placas de rede;
  • Obtenha velocidades máximas dos itens citados acima;
  • Instale ferramentas como o munin para acompanhar o status do servidor.

Eu descobri que isso deve ser feito de uma maneira não muito agradável. Comecei threads acusando o squid de lentidão quando lá pelas tantas descobri que podiam ser meus discos. Sorte que não foi.. senão eu ia passar vergonha...

Cheguei a entrar na lista de discussão freebsd-scsi para questionar sobre a velocidade da minha controladora. Sendo que eu achava que era baixa demais e me mostraram que era decente a velocidade que eu estava obtendo.

Portanto antes de sair por aí botando a culpa em alguma coisa, seja software, hardware, firmware tenha certeza disso. As pessoas vão se basear no que você fala para poder te ajudar.

Voltando ao problema:

A migração do squid, rodando em linux, para o novo, rodando em FreeBSD, era feita apenas mudando o IP de um registro DNS. Baixava o TTL do regsitro para 1 minuto e alterava-o para apontar para o servidor novo. No momento que batia a lentidão eu trocava o IP, de novo, para apontar para o servidor velho(linux).

Esse registro está configurado em todos os navegadores da empresa através de um GPO do windows.

É uma forma de fazer migração que eu considero bastante vantajosa. Uma vez que, se não funcionar de primeira é muito simples voltar para a situação anterior.

Acredite: troquei várias vezes esse IP. hehe

Iniciei meus testes recompilando o kernel. Fiz um artigo contendo os arquivos necessários e que devem ser modificados e os passos para compilar o kernel. Link aqui.

Bom alterei o cache do squid para diskd entre outras mudancas no squid.conf que coloco no final do artigo.

Bom as mudancas que fiz foram tantas e de uma vez soh que nao consegui saber exatamente o que solucionou o problema. Mas vamos analizando:

As alterações foram as seguintes:

  • Compilei o squid2.6stable14 com o gcc42
  • Utilizei os seguintes parâmetros para a compilação: make -DNO_KERBEROS SQUID_CONFIGURE_ARGS="--enable-dlmalloc --enable-async-io --with-pthreads --with-aio --enable-ntlm-fail-open" SQUID_LANGUAGES="English Portuguese" install
  • Atualizei o samba da versão que estava na versão 3.0.23 para a mais recente no ports a 3.0.25a. Com isso foi atualizado o /usr/local/bin/ntlm_auth também.

Apesar de ter feito todas as alterações, acima citadas, de uma só vez, acredito que a solução se deu por causa dos parâmetros passados ao squid.

Já havia compilado sem esses parâmetros com o gcc 4.2 e o problema persistia.
Já havia compilado com a opção --enable-async-io e também não havia resolvido.

Acredito ter sido por causa dos parâmetros restates: --enable-dlmalloc --with-pthreads --with-aio --enable-ntlm-fail-open

Na lista squid-users me indicaram setar a opção half_closed_clients para off. Também com ela sozinha não havia solucionado a lentidão.

Ou ainda a solução se deu por atualizar o samba. Uma vez que eu uso autenticação NTLM contra um AD W2k3.

Por fim, quando eu não usava autenticação o proxy funcionava extremamente bem, porém se eu ativasse apenas uma ACL se quer, que envolvesse autenticação, a lentidão dava sua cara.

Infelizmente testar opção por opção para descobrir qual foi a que solucionou o problema se torna inviável. Levando em consideração que esse proxy já deveria estar em produção há mais tempo não posso testar agora.

Lembre-se: São nessas horas de dificuldades que devemos honrar o saco no meio das pernas. Não desista, por mais difícil que esteja sendo. É apenas uma monte de linhas de código. Apenas instruções lógicas empilhadas. Tem que funcionar e ponto.

E vencendo as dificuldades você se sente melhor e se o seu chefe acompanhou seu sofrimento e viu que você venceu e dá crédito a você. E isso é bom... hehe






squid.conf:

grep -v "^#" /usr/local/etc/squid/squid.conf | grep -v "^\ " | grep -v ^$
http_port 1xxx.xxx.xxx.xxx:3128
http_port 127.0.0.1:3128
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 600 MB
maximum_object_size 64 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 2560 Kb
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
cache_dir diskd /cache/1 4520 16 256 Q1=128 Q2=100
cache_dir diskd /cache/2 4520 16 256 Q1=128 Q2=100
access_log /usr/local/squid/logs/access.log squid
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp -d 2
auth_param ntlm children 60
auth_param ntlm keep_alive on
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 10
auth_param basic realm Proxy server
auth_param basic credentialsttl 2 hours
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 900 # Sinercom
acl CONNECT method CONNECT
acl password proxy_auth REQUIRED
acl redelocal src 192.168.0.0/16
acl redelocal src 172.16.0.0/16
acl sitesemcache url_regex -i "/usr/local/etc/squid/semcache.txt"
always_direct allow sitesemcache redelocal
no_cache deny sitesemcache
acl paginapare dstdomain squidweb.xyz.gov.br
acl usuarioslib proxy_auth -i "/usr/local/etc/squid/usuarioslib.txt"
acl usuariosrestritos proxy_auth -i "/usr/local/etc/squid/usuariosrestritos.txt"
acl usuarios_chineses proxy_auth -i "/usr/local/etc/squid/chineses_msn.txt"
acl msn_chineses url_regex -i gateway.messenger.
acl msn_chineses url_regex -i login.live.com
acl msn_chineses url_regex -i gateway.dll
acl msn_chineses url_regex -i msn.com
acl bloqueados url_regex -i "/usr/local/etc/squid/bloqueados.txt"
acl liberados url_regex -i "/usr/local/etc/squid/liberados.txt"
acl servidores src "/usr/local/etc/squid/servidores.txt"
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
deny_info http://malware.hiperlinks.com.br/denied.shtml malwares
http_access allow servidores
http_access allow liberados password
http_access allow usuarioslib
http_access deny usuariosrestritos
http_access deny bloqueados all
deny_info http://squidweb.xyz.gov.br bloqueados
http_access allow localhost
http_access allow redelocal password
http_access deny all
http_reply_access allow all
icp_access allow all
visible_hostname proxy
logfile_rotate 5
forwarded_for off
header_access From deny all
header_access Server deny all
header_access Link deny all
error_directory /usr/local/etc/squid/errors/Portuguese
coredump_dir /usr/local/squid/cache

Marcadores: ,

Listar arquivos dos pacotes no FreeBSD

Dica simples. Mas como eu sei que vão se passar alguns dias e o Hunz(senhor de idade que vive na minha memória arquivando e acessando, de vez em quando, minhas informações) não vai saber onde ele colocou essa dica eu já estou me precavendo e colocando ela aqui:

$ pkg_info -xL unzip

Information for unzip-5.52_2:

Files:
/usr/local/man/man1/funzip.1.gz
/usr/local/man/man1/unzip.1.gz
/usr/local/man/man1/unzipsfx.1.gz
/usr/local/man/man1/zipgrep.1.gz
/usr/local/man/man1/zipinfo.1.gz
/usr/local/bin/unzip
/usr/local/bin/funzip
/usr/local/bin/unzipsfx
/usr/local/bin/zipgrep
/usr/local/bin/zipinfo
/usr/local/share/doc/unzip/README
/usr/local/share/doc/unzip/WHERE

Dica retirada daqui.



Busca um determinado pacote instalado:
pkg_info | grep -i cacti

Exibe a mensagem pós instalação desse pacote:
pkg_info -D cacti-0.8.7b

ou

pkg_info -xD cacti

O -x trata o parâmetro como uma expressão regular ao invés do nome do pacote exato.

Marcadores:



Chat with Lutieri G. B.

Subscribe in a reader