quinta-feira, 24 de outubro de 2013

Monitorando Trafego com tcpdump

tcpdump: Monitorando conexões

tcpdump é um dos mais, se não o mais "famoso"sniffer para sistemas GNU/Linux. Com ele podemos realizar análises de redes e solucionar problemas. Sua utilização é simples e sem mistérios, bastando apenas ter os conhecimentos básicos de redesTCP/IP. Esta dica é apenas uma introdução deste sniffer, maiores informações e documentação à seu respeito podem ser encontradas em seu site oficial:

A instalação do tcpdump em sistemas Debian é super simples, bastando executar o comando abaixo como super usuário (root):

# apt-get install tcpdump

Para iniciarmos a utilização do tcpdump precisamos especificar a interface de rede que queremos analisar com o parâmetro -i seguido da interface desejada, por exemplo, se quisermos analisar todo o tráfego que passa pela interface eth0, executaríamos a seguinte linha de comando:

# tcpdump -i eth0

Conexões de origem podem ser monitoradas utilizando o parâmetro src host, um exemplo simples seria monitorarmos o tráfego que vem de 192.168.0.9 para nosso computador, com o ip 192.168.0.2. A linha de comando ficaria da seguinte forma:

# tcpdump -i eth0 src host 192.168.0.9

Se quisermos monitorar as conexões especificando um host de destino, poderíamos fazê-lo com o parâmetro dst host, o exemplo abaixo mostra todo o tráfego do host 192.168.0.2 com 192.168.0.1, no caso, 192.168.0.1 é nosso gateway.

# tcpdump -i eth0 dst host 192.168.0.1

Com tcpdump também podemos especificar exceções com o parâmetro not host, por exemplo, em nosso servidor queremos ver todo o tráfego que se passa em sua interface, exceto o de 192.168.0.8, faríamos da seguinte forma:

# tcpdump -i eth0 not host 192.168.0.9

No tcpdump podemos também especificar portas de origem e destino com os comandos src port e dst port, um exemplo seria monitorarmos o tráfego destinado à porta 80 (http), para isso utilizaríamos a linha de comandos abaixo e navegaríamos em um site qualquer:

# tcpdump -i eth0 dst port 80

Para verificarmos o tráfego da porta de origem 32881 por exemplo, faríamos da seguinte forma:

# tcpdump -i eth0 src port 32881

Muitas opções avançadas podem ser obtidas com o tcpdump, essas são algumas opções básicas, porém fundamentais para quem quer aprender sobre sniffers.

Fonte: http://pt.wikipedia.org/wiki/Tcpdump 
Fonte: 

segunda-feira, 9 de setembro de 2013


O que fazer quando o APT list esta travado... por causa de algum cancelamento inesperado do aptitude ou apt-get.

1º $sudo rm /var/lib/dpkg/lock

2º $sudo rm /var/lock/aptitude ou $
sudo rm /var/lock/apt-get

3º $sudo dpkg --configure -a

4º $sudo aptitude update



segunda-feira, 22 de julho de 2013

Debian - Criando RAID 1 (mirror)


Vamos supor que você esteja com o seu Debian instalado e rodando perfeitamente, mas surgiu a necessidade de adicionar mais 2 discos e colocá-los em RAID 1, lembrando que as duas partições que você irá criar o RAID, têm que ser de tamanhos iguais.

Se você tiver um disco de 1 TB e outro de 500 GB, no disco maior você vai ter que criar uma partição de até 500 GB, e o restante que sobrar do disco, você pode fazer o que quiser.

Discos:
  • /dev/sda :: Sistema instalado (80 GB)
  • /dev/sdb :: Disco novo 1 (320 GB)
  • /dev/sdc :: Disco novo 2 (320 GB)

Primeiro, vamos instalar o software para gerenciar os RAIDs:

# apt-get -y install mdadm

Agora, vamos criar as partições nos discos novos para a criação do RAID 1:

# cfdisk /dev/sdb

Como os discos são novos, apenas irei criar uma nova partição selecionando a opção "NEW" e depois "TYPE", e escolhendo "FDA (Linux Raid Autodetec) e por último, "WRITE". Saia do cfdisk e faça o mesmo para o "/dev/sdc".

Agora vamos criar o RAID 1 somente com o primeiro disco, o segundo, vamos adicionar depois:

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 

Onde:
  • --create :: cria o dispositivo /dev/md0
  • /dev/md0 :: ele cria um dispositivo MD, que significa Multiple Device, ou seja, pode-se ter múltiplos dispositivos neste array
  • --level=1 :: é o nível do RAID, estamos usando RAID 1, que é o RAID de espelhamento
  • --raid-devices=2 :: número de discos do RAID. No nosso caso são 2 HDs
  • missing :: uma partição está faltando no array (nesse caso é o /dev/sdc1 que será adicionado logo mais)
  • /dev/sdb1 :: Partição que será adicionada ao array /dev/md0

Vamos formatar o novo dispositivo MD no sistema de arquivos ext4:

# mke2fs -t ext4 /dev/md0

Agora vamos adicionar o segundo disco ao array:

# mdadm /dev/md0 -a /dev/sdc1

Finalizamos a criação do array, agora vamos ver o andamento da sincronização dos 2 discos:

# cat /proc/mdstat
ou
# watch -n 1 cat /proc/mdstat 

ou criar a raid de uma vez só para uma Futura LVM

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/hdc1

Vamos configurar o RAID para toda vez que ligar a máquina, ele já automontar a partição para utilizar: 

Primeiro, vamos criar a pasta:

# mkdir -p /mnt/raid1 

Agora vamos ver o UUID do array para configurar na inicialização (/etc/fstab):

# blkid /dev/md0

O resultado vai ser alguma coisa parecida com isso:
/dev/md0: UUID="f600331d-8f52-49eb-ae69-ea5f85fbbd2b" TYPE="ext4"

Agora vamos abrir o "/etc/fstab" e inserir esse dispositivo na inicialização do servidor:

UUID=f600331d-8f52-49eb-ae69-ea5f85fbbd2b /mnt/raid1 auto defaults,errors=remount-ro 0 1


para ver o status da raid use esse comando:

mdadm -D /dev/md0

Pronto. Agora temos um RAID 1 configurado e funcionando. 

Se a Raid ficar pendente.... force a execucao da mesma...

resync=PENDING

Ative com comando a baixo.

mdadm --readwrite /dev/mdX



------------------------------- por algum erro ou sei lah o que a Raid nao inicializar apos o boot... ------------

Execute esses passo!

# adicione o raid1 em \etc\modules
raid1

execute comando: $sudo modprobe raid1


Lista as Raid criadas com mdadm: $sudo mdadm -Es  

ARRAY /dev/md/0  metadata=1.2 UUID=a744dc3f:845bbae0:a423e748:9ee7f5b9 name=pve:0
ARRAY /dev/md/1  metadata=1.2 UUID=306c729d:0f0e1604:5cddb912:08b6569d name=pve:1


copia essa informacao para /etc/mdadm/mdadm.conf  final do arquivo.


Execute: sudo dpkg-reconfigure mdadm 


$sudo service mdadm-raid restart

Removendo Raid completamente com mdadm



RAID device --> /dev/md1 --> Created of 2 Disks /dev/sda & /dev/sdb
mdadm --detail /dev/md1 --> This will give detail information on /dev/md1


cat /proc/mdstat  --> This will give information of md device

mdadm --stop /dev/md1  --> This will stop md1 device

mdadm --zero-superblock /dev/sda
mdadm --zero-superblock /dev/sdb


Also Remove entry of /dev/md1 from /etc/mdadm.conf and restart mdadm





quinta-feira, 28 de fevereiro de 2013

Alteração de encoding (locale) em sistemas Debian

Alteração de encoding em sistemas Debian


Essa dica é muito útil para sistemas Debian/Ubuntu mais novos que, por padrão, instalam o sistema em UTF-8.

Adicionar a entrada pt_BR ao arquivo /var/lib/locales/supported.d/local:

# echo "pt_BR ISO-8859-1" >> /var/lib/locales/supported.d/local

Adicionar o alias pt_BR em /etc/locale.alias:

# echo "pt_BR pt_BR.ISO-8859-1" >> /etc/locale.alias

Modificar o locale padrão nos arquivos /etc/environment e /etc/default/locale:

LANG="pt_BR"
LANGUAGE="pt_BR:pt:en"

Executar os comandos como root:

# locale-gen
# dpkg-reconfigure locales


OK.

Tutorial LVM (lvm)

Criando e removendo grupos


2.1) Criando grupo volumes

# vgscan

Com esse comando ele cria os arquivos:
  • /etc/lvmtab
  • /etc/lvmtab.d

Com esse comando estaremos atribuindo o volume físico (PV):

# pvcreate /dev/hda7

Agora sim vamos atribuí-lo a um grupo de volumes:

# vgcreate vg00 /dev/hda7

Atualize o arquivo /etc/lvmtab:

# vgscan

Ative o grupo de volumes e logo depois iremos adicionar volumes lógicos (LV) à ele:

# vgchange -a y vg00

2.2) Removendo grupo volumes:

Para você remover um grupo é necessário que não tenha nenhum volume lógico (LV) dentro do grupo de volumes lógicos:

# vgchange -a n vg00
# vgremove vg00
 


Criando e removendo volumes

3.1) Criando volumes

Vamos criar o volume denominado "lv00" com 9 gigas e 28 megas:

# lvcreate -L 9028 -n lv00 vg00

ou

para todo espaço do volume
# lvcreate -l 100%FREE  -n lv00 vg00

Agora ativamos:

# lvchange -a y /dev/vg00/lv00

Aqui aplicamos o filesystem com Journaling:

# mke2fs -j /dev/vg00/lv00

3.2) Removendo volumes

Desmonta o diretório:

# umount /dev/vg00/lv00
ou
# umount /mnt/vg00/lv00

Desativa o volume lógico:

# lvchange -a n /dev/vg00/lv00

Removendo o volume:

# lvremove /dev/vg00/lv00 

Aumentando e diminuindo o tamanho do volume lógico

5.1) Aumentando o tamanho

No meu caso o meu grupo de volumes em cima de um volume físico tinha acabado. Qual a solução? Montei mais uma partição chamada /dev/hda8:

# pvcreate /dev/hda8

e depois atribuí ela no grupo:

# vgextend vg00 /dev/hda8

Bom, depois desmonte onde se encontra montado o grupo de volume lógico:

# umount /dev/vg00/lv00

Aumente seu grupo de volume:

# lvextend -L +13090M /dev/vg00/lv00

Procurar por erro e reparação do mesmo:

# e2fsck -f /dev/vg00/lv00

Pronto, aqui sim redimensionamos:

# resize2fs /dev/vg00/lv00

Agora basta montar:

# mount /dev/vg00/lv00 /mnt/lvm/

Para termos certeza:

# df -h -T
Filesystem     Type    Size  Used Avail Use% Mounted on
/dev/hda1      ext3     28G  4.3G   22G  17% /
/dev/hda2      ext3     31M  4.2M   25M  15% /boot
/dev/hda3      ext3    4.6G   96M  4.2G   3% /var
/dev/hda5      ext3     19G  570M   17G   4% /usr/local
/dev/vg00/lv00 ext3     22G  8.7G   12G  43% /mnt/lvm

5.2) Diminuindo o tamanho

# umount /dev/vg00/lv00

Agora verificaremos o sistema de arquivos e reparemos o mesmo em caso de problemas, isso é muito importante pelo fato de caso obter blocos com problemas poderá atrapalhar nossos redimensionamentos:

# e2fsck -f /dev/vg00/lv00
# resize2fs /dev/vg00/lv00 524288
# lvreduce -L -50M /dev/vg00/lv00
# mount /dev/vg00/lv00 /mnt/lvm/ 

Dicas

No exemplo embaixo com uma barra no final ele não cria/remove e também não ativa/desativa o volume.

# vgchange -a y /dev/vg00/
vgchange -- invalid volume group name "vg00/"

# vgremove /dev/vg00/
vgremove -- ERROR: invalid volume group name "vg00/" 

Autor: Guilherme L. Stolfo

sábado, 2 de fevereiro de 2013

Conversão Watts para VA e vice versa




Os equipamentos elétricos / eletrônicos normalmente possuem a indicação de seu consumo, expresso em Watts ou em VA.
Ao dimensionarmos nossa rede elétrica e equipamentos de proteção, necessitamos saber qual será o consumo total de modo a podermos escolher o no-break apropriado.
Como proceder se alguns equipamentos possuem a indicação da potência consumida em Watts e outros em VA ?
Estas duas unidades são similares ou diferentes unidades de medida?
Watts e VA não são unidades similares. O valor em Watts será menor que o valor correspondente em VA, devido ao “Fator de Potência”, em poucos casos o valor em watts poderá ser igual ao valor em VA.
O Fator de Potência é um número entre 0 e 1 que representa a fração da corrente que provê energia disponível para a carga.
Apenas em poucos casos, como por exemplo em filamentos incandescentes, tipo uma lâmpada elétrica, o fator de potência é igual a 1 (um).
Em outros equipamentos, nem toda a corrente disponível consegue ser utilizada e uma parte é retornada ou perdida. Esta corrente retornada normalmente composta de distorções ou de correntes reativas, é gerada devida a natureza das cargas eletrônicas.
Para equipamentos do tipo computadores, o Fator de Potência normalmente está entre 0,6 e 0,7.
Em outras palavras a potência em Watts para computadores será um valor entre 60% e 70% do valor em VA.
Os computadores modernos usam capacitores na entrada de suas fontes de alimentação chaveadas, que por suas características de entrada exibem fator de potência entre 0,6 e 0,7, tendendo para 0,6.
Novas tecnologias de fontes de alimentação estão sendo desenvolvidas e introduzidas no mercado (denominadas fontes chaveadas com fator de potência corrigido) de modo a permitir um fator de potência de 1 ou próximo a um.
Um bom fator de potência a ser utilizado para nossos cálculos em computadores é o fator de 0,65.
Com o exemplo que coloco abaixo você entenderá bem o assunto:
Um No-Break de capacidade de 1000VA será capaz de alimentar uma lâmpada de 1000Watts, porém só terá a capacidade de alimentar um computador com consumo de 650Watts.
Porque isto? O fator de potência de uma lâmpada é de 1 e do computador 0,65.
Para converter Watts em VA, divida o valor em Watts por 0,65.
VA = Watts / 0,65 .
Em alguns casos encontraremos apenas a indicação da tensão (Volts – V) e da corrrente (Ampére – A) consumida. Como saber qual a potência consumida?
Neste caso teremos que calcular a potência, um cálculo simples e rápido:
Potência (VA) = Tensão (V) x Corrente (A)
(O resultado é expresso em VA)
Um exemplo:
Um computador que utiliza a rede elétrica de 120Volts e consome 5A terá o consumo de:
Potência = 120×5 = 600VA
Para convertermos este valor para Watts:
Watts = 600×0,65 = 390watts
Neste exemplo, nosso sistema consome 390Watts ou 600VA. Assumindo uma margem de segurança de 30% (ou superior), podemos comprar um no-break com capacidade superior a 507Watts ou 780VA .
Resumo:
____________________________________________________________________________
Unidades:
V = Volt
A = Ampére
VA = Volt Ampére
W = Watts
FP = Fator de Potência
Formulas:
– Conversão de Watts em VA:
VA = Watts / 0,65
– Conversão de Voltagem e Amperagem em VA
Potência (VA) = Tensão (V) x Corrente (A)
Bibliografia

Autor:  Miquéias Reale  do Site --->>  http://www.miqueiasreale.com.br/?p=6

segunda-feira, 28 de janeiro de 2013

Convertendo MySQL para Postgresql


http://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL


Dump your tables with
mysqldump --compatible=postgresql databasename > outputfile.sql



but even then you will have to change quote escaping:
sed -ri "s/([^\\])\\\'/\1\'\'/g" outputfile.sql
You also have to manually modify the data types etc. as discussed later.
After you convert your tables, import them the same way you were used to in MySQL, that is
psql -h server -d databasename -U username -f data.sql

[edit]


List of available data types can be reached also by using psql's internal slash command \dT.
MySQLPostgreSQLANSI Standard SQLcomments
TINYINT
SMALLINT
MEDIUMINT
BIGINT
SMALLINT
SMALLINT
INTEGER
BIGINT
INTEGER
INTEGER
INTEGER
NUMERIC(20)
see [2]integer size in PostgreSQL is 4 Bytes signed (-2147483648 – +2147483647)
TINYINT UNSIGNED
SMALLINT UNSIGNED
MEDIUMINT UNSIGNED
INT UNSIGNED
BIGINT UNSIGNED
SMALLINT
INTEGER
INTEGER
BIGINT
NUMERIC(20)
INTEGER
INTEGER
INTEGER
NUMERIC(10)
NUMERIC(20)
SQL doesn't know UNSIGNED, all numbers are signed.
FLOAT
FLOAT UNSIGNED
REAL
REAL
FLOAT4
FLOAT4
DOUBLE
DOUBLE PRECISION
FLOAT8
BOOLEAN
BOOLEAN
BOOLEAN
MySQL Booleans are an alias for TINYINT(1); PostgreSQL doesn't auto-convert numbers into booleans.
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
BINARY(n)
VARBINARY(n)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
BYTEA
BYTEA
BYTEA
BYTEA
BYTEA
BYTEA
BIT(n)
BIT VARYING(n)
TEXT
TEXT
TEXT
TEXT
ZEROFILL
not available
not available
DATE
TIME
DATETIME
TIMESTAMP
DATE
TIME [WITHOUT TIME ZONE]
TIMESTAMP [WITHOUT TIME ZONE]
TIMESTAMP [WITHOUT TIME ZONE]
not available
TIME
TIMESTAMP
TIMESTAMP
column SERIAL
equals to:
column BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
or:
column INT DEFAULT SERIAL
equals to:
column INT NOT NULL AUTO_INCREMENT UNIQUE
column SERIAL
equals to:
CREATE SEQUENCE name;
CREATE TABLE table ( 
        column INTEGER NOT NULL
        DEFAULT nextval(name)
);
column SERIAL
Note for PostgresSQL:
SERIAL = 1 – 2147483647
BIGSERIAL = 1 – 9223372036854775807
SERIAL is in fact an entity named SEQUENCE. It exists independently on the rest of your table. If you want to cleanup your system after dropping a table, you also have to DROP SEQUENCE nameMore on that topic...

Note for MySQL:
column SERIAL PRIMARY KEY
or
column SERIAL,
PRIMARY KEY(column)
Will result in having 2 indexes forcolumn. One will be generated by thePRIMARY KEY constraint, and one by the implicit UNIQUE constraint present in the SERIAL alias. This has been reported as a bug and might be corrected.
column ENUM (value1, value2, [...])
column VARCHAR(255) NOT NULL,
CHECK (column IN (value1, value2, [...]))
or
CREATE TYPE mood AS ENUM ('sad','ok','happy');
CREATE TABLE person ( current_mood mood ... )
column VARCHAR(255) NOT NULL,
CHECK (column IN (value1, value2, [...]))
PostgreSQL doesn't have the ENUM types prior to 8.3, so you need to simulate it with contraints when using < 8.3.

[edit]


PostgreSQL com encoding LATIN1




Esta dica foi testada em Linux Debian Lenny, Squeeze e Ubuntu 9.10, com as versões 8.3 e 8.4 do PostgreSQL.

Primeiro, vamos mover tudo do diretório /var/lib/postgresql/8.4/main. Para isso faça o login com o usuário root:

$ su

Agora vamos navegar até o diretório:

# cd /var/lib/postgresql/8.4/main

Então vamos mover os arquivos para um diretório acima, ou anterior... como queiram falar:

# mkdir ../bkp
# mv * ../bkp


Faça o login com o usuário postgres:

# su postgres

E digite isso:

$ /usr/lib/postgresql/8.4/bin/initdb --pgdata=/var/lib/postgresql/8.4/main/ --encoding=LATIN1 --locale=C --username=postgres -W


Agora vamos precisar de apenas dois arquivos desses que movemos. Movi tudo, pois não sei o que cada um tem no diretório especificado, então fica mais fácil do que colar apenas o conteúdo do meu diretório. Então vamos voltar um diretório acima e mover dois arquivos:

# cd ../bkp
# mv server.* ../main
# cd ..
# chown postgres.postgres main

Agora você pode criar base de dados com encoding LATIN1.

Complementando... criar um banco em LATIN1 num cluster codificado em UTF-8:
CREATE DATABASE nome_do_banco ENCODING 'ISO8859-1' LC_CTYPE 'pt_BR.ISO8859-1' TEMPLATE template0;

segunda-feira, 14 de janeiro de 2013

Criando memória swap com a máquina em produção (ON-THE-FLY)


Muitas vezes o uso de memória de uma máquina se torna muito alto e pode ocorrer a necessidade de ter-se mais swap. O que fazer? Parar a máquina e todos os serviços que estão rodando e reparticionar o disco rígido com uma área de swap maior? Colocar mais pentes de memória?

Nessa dica veremos como criar um arquivo vazio e fazer o sistema operacional usá-lo como swap sem parar nenhum serviço, ou seja, com a máquina on-the-fly.

Configuração


Criar o path: /var/swap_area

# mkdir /var/swap_area

A linha de comando abaixo pega um espaço vazio do disco (/dev/zero) e cria em /var/swap_area um arquivo com o nome swap de 128 MB. Note que:
  • bs = Block Size, ou seja, tamanho do bloco, neste caso, 1k (1024 bytes);
  • count = número de blocos de 1k, que são 128.000 para criar 128 MB de swap, caso preciso de mais é so aumentar este número.

# dd if=/dev/zero of=/var/swap_area/swap bs=1024 count=128000

Verificando...

# ls -lh /var/swap_area

Dizendo para o sistema operacional usar o arquivo como swap:

# mkswap /var/swap_area/swap

Ativando:

# swapon /var/swap_area/swap

Tudo pronto! Confira:

# free -m

Para desativar:

# swapoff /var/swap_area/swap
# rm -rf /var/swap_area
 


Autor: Desconhecido.

quarta-feira, 2 de janeiro de 2013

Parametros Importante no OpenVPN



Um problema muito comum na utilização de VPNs é a utilização de conexões muito instáveis, como por exemplo, ADSLs ou 3G. Qualquer interrupção que ocorra na transmissão a VPN ficara off-line, sendo necessária uma intervenção de um administrador.
Para tratar este tipo de situação o OpenVPN possui uma série de configurações que permitem o reestabelecimento da conexão. A seguir uma descrição de cada um deles.

keepalive 10 60

A configuração keepalive permite que a conexão seja reiniciada caso não ocorra resposta dentro de um determinado período.
O primeiro número especifíca o intervalo, em segundos, de pings e o segundo o timeout. Após o timeout a VPN é automaticamente reiniciada. Caso a conexão não seja reestabelecida na primeira tentativa o OpenVPN tenta reconectar até tenha sucesso.

inactive 3600

A configuração inactive serve para especificar um tempo em segundos para que as tentativas de conexão sejam mantidas. No exemplo acima após 1 hora sem sucesso na conexão, o OpenVPN pára com as tentativas.

comp-lzo

A opção comp-lzo faz com que o OpenVPN passe a compactar os dados transmitidos através da VPN. O algoritmo utilizado é bastante leve, e portanto não será um grande empecilho com relação ao desempenho do processamento do servidor ou do cliente.

persist-key
persist-tun

As opções de configuração persist-key e persist-tun fazem com que o OpenVPN mantenha tanto a interface de tunelamento quanto as chaves carregadas em memória, tornando o reestabelecimento da conexão mais rápido nos casos de queda.

float

A opção float é bastante útil quando se utiliza conexões com IP dinâmico. Desta forma ao trocar o IP a conexão é reestabelecida da mesma forma. Essa situação é muito comum quando se utiliza serviços de DNS dinâmico como NoIP por exemplo.

# Security 1 and 2 and 3 
script-security 3

comp-lzo

keepalive 10 60
persist-key
persist-tun
inactive 3600
float
log-append /var/log/openvpn/openvpn-sm.log
status /var/log/openvpn/openvpn-sm-udp-status.log
fragment 1400

mssfix 1400