Archive for the ‘Linux’ Category
Adicionando suporte a HP Smart Array B110i no Redhat 5.4
Há alguns dias atrás me deparei com um problema. Estava mexendo em uma blade HP e fiz o raid 1 via hardware, até ae tudo bem. Depois gravei o iso do Red Hat 5.4 e fui fazer a instalação. Quando a instalação começou, vi que os discos eram reconhecidos individualmente, ou seja, o SO reconheceu os 2 discos e não o volume que criei. Há princípio achei que era problema na controlada, pois todos os servidores que já mexi, quando a controladora não é reconhecida, os discos também não são.
Depois de muito apanhar, descobri que o problema era driver.
Com o problema em mãos, fui atrás de uma solução. Pesquisei no site da HP e vi que ela disponibiliza o driver em em formato .rpm. Só que o rpm neste momento não me ajuda pois preciso que a controladora seja reconhecida no boot e não depois da instalação. Eles até disponibilizam o disquete de boot com o driver, mas para RedHat 5.3, como o kernel do 5.4 é mais novo o driver não funciona.
Por este motivo resolvi criar este artigo. Os passos que irei mostrar servem para qualquer driver, e funcionam tanto em Red Hat quanto para CentOS, ajuste-o conforme sua necessidade.
Os itens que iremos utilizar são:
rhel-server-5.4-x86_64-dvd.iso hpahcisr-1.2.1-9.rhel5.x86_64.rpm
Primeiramente vamos montar o iso e copiar os arquivos para customizá-lo. Os comandos abaixo são responsáveis por criar os diretórios que iremos utilizar para montar o iso e copiar os arquivos:
mkdir -p /mnt/{driver,original,customizado}
mount -o loop /root/rhel-server-5.4-x86_64-dvd.iso /mnt/original/
cp -av /mnt/original/* /mnt/original/.discinfo /mnt/original/.treeinfo /mnt/customizado/
Dando continuidade, vamos descompactar o hpahcisr-1.2.1-9.rhel5.x86_64.rpm para pegar o driver e incluir no initrd:
cd /mnt/driver/ rpm2cpio /root/hpahcisr-1.2.1-9.rhel5.x86_64.rpm | cpio -idmv
Dentro do diretório /mnt/driver ele vai criar o opt/hp/storage_drivers/hpahcisr-1.2.1_2009_09_17.tar.gz, precisamos descompactar este arquivo e separar os módulos que iremos utilizar:
tar xzf ./opt/hp/storage_drivers/hpahcisr-1.2.1_2009_09_17.tar.gz cp -a hpahcisr-1.2.1_2009_09_17/lib/modules/2.6.18-164.el5/kernel/drivers/scsi/hpahcisr/hpahcisr.ko /mnt/driver/
Com o driver separado, vamos descompactar o initrd:
cd /mnt/customizado/isolinux/ mkdir initrd cd initrd gzip -dc ../initrd.img | cpio -ivd
Descompactando os modules:
cd modules gzip -dc modules.cgz | cpio -idumv
Agora precisamos copiar o driver para dentro do diretório que foi criado com o comando acima e adicionar o mesmo nos arquivos para serem lidos no boot:
cp -a /mnt/driver/hpahcisr.ko 2.6.18-164.el5/x86_64/ modinfo -F alias 2.6.18-164.el5/x86_64/hpahcisr.ko | sed -e 's/^/alias /' -e 's/$/ hpahcisr/' >> modules.alias sed -i '/^hptiop/ihpahcisr\n\tscsi\n\t\"Update HP HPAHCISR driver\"' module-info sed -i '/^hptiop/ihpahcisr: scsi_mod' modules.dep
Depois de adicionar o driver e incluir o mesmo nos arquivos necessário, precisamos compactar os modules:
rm -f modules.cgz find 2.6.18-164.el5 | cpio -o -H crc | gzip -9 > modules.cgz rm -rf 2.6.18-164.el5 cd ..
Com este passo finalizado, vamos recriar o initrd:
find . | cpio -o -H newc | gzip -9 > ../initrd.img cd .. rm -rf initrd
O initrd está pronto, ou seja, agora quando você gravar o .iso, a controladora será reconhecida no boot, só que se você instalar o SO e não instalar o driver vai dar problema pois no initrd do kernel que vem no iso não tem o driver, então adicione o hpahcisr-1.2.1-9.rhel5.x86_64.rpm a arvore de pacotes e recriar os .xml utilizados para a instalação dos pacotes:
cp -a /root/hpahcisr-1.2.1-9.rhel5.x86_64.rpm /mnt/customizado/Server/ cd /mnt/customizado/Server/ createrepo -u "media://`head -1 ../.discinfo`" -g repodata/comps-rhel5-server-core.xml .
No passo final, vamos recriar o .iso:
cd /mnt/customized64/ mkisofs -V "Custom Red Hat 5.4" -r -R -J -T -v -no-emul-boot \ -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin \ -c isolinux/boot.cat -o /root/RedHatLinux54-customized.iso .
Grave o .iso em um dvd e instale seu servidor, na hora do boot, digite:
linux text
Quando finalizar a instalação, vai apagar um botão para dar boot, NÃO FAÇA ISSO AINDA, aperte:
alt + f2
Vai abrir um terminal, digite:
cd /mnt/sysimage/ chroot . mount /dev/scd0 /media/ rpm -ivh /media/Server/hpahcisr-1.2.1-9.rhel5.x86_64.rpm umount /media/ exit
Aperte alt +f1 e agora pressione o OK que quando o servidor voltar do boot, seu sistema vai estar instalado com o driver da controladora. A última coisa a ser feita é excluir o kernel das atualizações do sistema pois se você atualizar, irá perder o suporte da controladora e irá ferrar todo o seu sistema pois vai quebrar o raid, então digite:
echo "" >> /etc/yum.conf echo "# Exclui o kernel da atualizacao, necessario para o modulo da hp." >> /etc/yum.conf echo "# Nao tente copiar o modulo para uma versao mais nova do kernel," >> /etc/yum.conf echo "# que alem de nao funcionar, vai foder o lvm." >> /etc/yum.conf echo "exclude=kernel*" >> /etc/yum.conf
Agora você sabe como customizar um dvd de Red Hat e CentOS, caso queira remover pacotes e/ou atualizá-los, basta remover os arquivos .rpm do diretório Server e depois rodar o comando createrpo como mostrado anteriormente.
Instalando e configurando o Pure-FTPD
Como prometido, estou migrando mais um artigo do meu antigo site e agora é a vez do Pure-FTPD.
O Pure-FTP usa a licença (BSD) e é baseado no Troll-FTPd. Seu foco está na eficiência e na facilidade de utilização. É um excelente servidor de ftp, tanto para pequenas aplicações, quanto para provedores de hospedagem. Ele tem suporte a quase todos os tipos de autenticação: LDAP, MySQL, PostgreSQL, unix users e também tem um sistema de autenticação próprio. Em nossa instalação vamos usá-lo com suporte a MySQL.
Vamos começar instalando o Pure-FTPD e o pwgen, este segundo será utilizado para gerar uma senha randômica, pois se você é como eu e tem dificuldade para gerar senhas complexas, sabe do que estou falando. Como esta instalação é baseada em Debian, vamos ao famoso apt:
apt-get install -y pure-ftpd-mysql pwgen
Altere o arquivo /etc/default/pure-ftpd-common pois iremos utilizar o servidor via daemon em vez de inetd, o sed abaixo resolve este problema:
sed -i.default 's/^\(STANDALONE_OR_INETD=\)\(.*\)/\1standalone/' /etc/default/pure-ftpd-common
Com o Pure-FTPD instalado, vamos as configurações. Não vou entrar em detalhes para que serve cada feature, caso precise, digite man pure-ftpd. Continuando, digite as seguintes linhas para configurar todas as opções que iremos utilizar:
for FILE in AllowAnonymousFXP AllowUserFXP AnonymousCanCreateDirs \
AnonymousOnly AutoRename BrokenClientsCompatibility DisplayDotFiles \
ProhibitDotFilesRead ProhibitDotFilesWrite VerboseLog; do
echo no > /etc/pure-ftpd/conf/${FILE}
done
for FILE in AnonymousCantUpload AntiWarez ChrootEveryone CreateHomeDir \
CustomerProof Daemonize DontResolve; do
echo yes > /etc/pure-ftpd/conf/${FILE}
done
echo "2000 8" > /etc/pure-ftpd/conf/LimitRecursion
echo 50 > /etc/pure-ftpd/conf/MaxClientsNumber
echo 20 > /etc/pure-ftpd/conf/MaxClientsPerIP
echo 95 > /etc/pure-ftpd/conf/MaxDiskUsage
echo 15 > /etc/pure-ftpd/conf/MaxIdleTime
echo 4 > /etc/pure-ftpd/conf/MaxLoad
echo ftp > /etc/pure-ftpd/conf/SyslogFacility
echo "133 022" > /etc/pure-ftpd/conf/Umask
Crie o usuário e grupo sob o qual todos os usuários virtuais irão rodar:
groupadd -g 2000 ftp useradd -u 2000 -g ftp -s /sbin/nologin ftp
Renomeie o arquivo /etc/pure-ftpd/db/mysql.conf para /etc/pure-ftpd/db/mysql.conf.default:
mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.default
Gere uma senha para ser utilizada no arquivo de configuração do mysql e também quando for dar o grant. Para gerar uma senha de 13 caracteres que contenha letras e números, utilize:
pwgen -n 13 1
Obs: Esta senha será utilizada no passo seguinte.
Antes de criar o arquivo /etc/pure-ftpd/db/mysql.conf você tem que saber se vai utilizar o MySQL local no servidor, se sim, recomendo utilizar socket, ou seja, deixe comentada as opções MYSQLServer e MYSQLPort, caso o Banco esteja em um servidor remoto, descomente-as e comente a opção MYSQLSocket. Não é possível utilizar as duas opções em conjunto. Também lembre de alterar a opção MYSQLPassword e colocar a senha que você criou no passo anterior:
# MySQL server name or IP. Don't define this for unix sockets.
#MYSQLServer 127.0.0.1
# MySQL port. Don't define this if a local unix socket is used.
#MYSQLPort 3306
# Define the location of mysql.sock if the server runs on this host.
MYSQLSocket /var/run/mysqld/mysqld.sock
# User to bind the server as.
MYSQLUser pureftpd
# User password. You must have a password.
MYSQLPassword SENHA GERADA PELO PWGEN
# Database to open.
MYSQLDatabase pureftpd
# How passwords are stored
# Valid values are : "cleartext", "crypt", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "md5" *and* "password"
MYSQLCrypt any
# Query to execute in order to fetch the password
MYSQLGetPW SELECT Password FROM users WHERE User="\L" and Status='1'
# Query to execute in order to fetch the system user name or uid
MYSQLGetUID SELECT Uid FROM users WHERE User="\L" and Status='1'
# Query to execute in order to fetch the system user group or gid
MYSQLGetGID SELECT Gid FROM users WHERE User="\L" and Status='1'
# Query to execute in order to fetch the home directory
MYSQLGetDir SELECT Dir FROM users WHERE User="\L" and Status='1'
# Query to get the maximal disk usage (virtual quotas)
# The number should be in Megabytes.
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" and Status='1'
# Bandwidth throttling. The server has to be compiled with throttling
# support. Values are in KB/s .
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" and Status='1'
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" and Status='1'
Mude a permissão do arquivo para 0600:
chmod 0600 /etc/pure-ftpd/db/mysql.conf
Conecte no MySQL e execute os comandos abaixo, lembrando de alterar a senha para a senha que foi gerada pelo pwgen:
CREATE DATABASE pureftpd;
USE pureftpd;
CREATE TABLE users (
id int(32) unsigned NOT NULL auto_increment,
User varchar(16) NOT NULL default '',
Password varchar(64) NOT NULL default '',
Uid varchar(11) default '2000',
Gid varchar(11) default '2000',
Dir varchar(128) NOT NULL default '',
QuotaSize smallint(5) NOT NULL default '0',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
Status enum('0','1') NOT NULL default '1',
Clearpass varchar(128) default '',
PRIMARY KEY (`id`,`User`),
UNIQUE KEY `User` (`User`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
GRANT ALL PRIVILEGES ON pureftpd.* to 'pureftpd'@'localhost' identified by 'SENHA GERADA PELO PWGEN';
FLUSH PRIVILEGES;
Antes de inserir algum usuário no banco de dados, veja os campos e cada opção que você pode utilizar:
User - Nome do usuário. Password - Password do usuário encriptado com MD5. Dir - Diretório home do usuário. QuotaSize - Quota do usuário em MB. 0 é ilimitado. ULBandwidth - Limita o Upload do usuário em KB, muito útil para preservar o link do servidor. 0 é ilimitado DLBandwidth - Similar ao anterior, só que este aqui é para download. 0 é ilimitado. Status - Os valores aqui dizem se a conta do usuário está ou não ativada. 1 = ativada e 0 = desativada. Clearpass - senha do usuario sem encriptar. Este campo muito útil, caso o usuário perca sua senha, você não precisa ficar alterando.
Para inserir um usuário de teste, conecte no MySQL e digite:
USE pureftpd;
INSERT INTO users VALUES (NULL, 'teste', MD5('teste123'), NULL, NULL, '/home/teste', 0, 0, 0, 1, 'teste123');
Com isto basta startar seu Pure-FTPD com o comando:
/etc/init.d/pure-ftpd-mysql start
Prontinho, seu servidor de FTP no ar com toda a segurança de não ter usuário no /etc/passwd.
Uma dica para ver quem está logado no seu FTP, é utilizar o comando pure-ftpwho, com ele você consegue ver quais usuários estão logados no sistema, qual o ip, etc.
Configurando um servidor de openvpn parte 2
Dando continuidade a parte 1 do artigo, vamos configurar o lado do cliente.
Chaves e certificados para a filial
server:~/easy-rsa# ./build-key filial1 Generating a 2048 bit RSA private key ......................+++ ..........+++ writing new private key to 'filial1.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [BR]: State or Province Name (full name) [SP]: Locality Name (eg, city) [Sao Paulo]:"Sao Paulo" Organization Name (eg, company) [Personal OpenVPN Client]: Organizational Unit Name (eg, section) []: POC Common Name (eg, your name or your server's hostname) []:filial1 Email Address [but3k4@gmail.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /root/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'BR' stateOrProvinceName : PRINTABLE:'SP' localityName : T61STRING:'"Sao Paulo"' organizationName : PRINTABLE:'Personal OpenVPN Client' organizationalUnitName: PRINTABLE:'POC' commonName : PRINTABLE:'filial1' emailAddress : IA5STRING:'but3k4@gmail.com' Certificate is to be certified until Aug 9 14:59:05 2018 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated server:~/easy-rsa#
Com os certificados criados, vamos copiá-los para o /etc/openvpn:
server:~/easy-rsa# mkdir /etc/openvpn/{certs,ccd,keys}
server:~/easy-rsa# cp keys/*.crt /etc/openvpn/certs/
server:~/easy-rsa# cp keys/*.key keys/dh2048.pem /etc/openvpn/keys/
Criando o arquivo de rotas
O arquivo /etc/openvpn/ccd/filial1 é responsável por definir rotas individuais para os clientes, ou seja, sem ele, o servidor nao vai saber que as maquinas de ambos os lados querem se comunicar e com isso a comunicação fica restrita apenas aos servidores.
server:~/easy-rsa# echo "iroute 192.168.1.0 255.255.255.0" > /etc/openvpn/ccd/filial1
Ajustando as permissões de arquivos / diretórios
server:~/easy-rsa# cd /etc/openvpn/ server:/etc/openvpn# chown -R nobody:nogroup keys certs ccd server:/etc/openvpn# chmod 0400 keys/* certs/* ccd/*
Criando o diretorio de log
Precisamos criar o diretório de log, pois nossa configuração salva estas informações em arquivos específicos
server:/etc/openvpn# mkdir /var/log/openvpn
Startando o openvpn do lado matriz
server:/etc/openvpn# /etc/init.d/openvpn start Starting virtual private network daemon: openvpn(OK). server:/etc/openvpn#
Com o lado do servidor ok, vamos criar os arquivos para a filial:
server:/etc/openvpn# mkdir -p filial1/{certs,keys}
server:/etc/openvpn# cp certs/{ca.crt,filial1.crt} filial1/certs/
server:/etc/openvpn# cp keys/{filial1.key,shared.key} filial1/keys/
Criando o arquivo /etc/openvpn/filial1/openvpn.conf:
# /etc/openvpn/openvpn.conf filial configuration file # diretorio onde esta os arquivos de configuracao / certificados cd /etc/openvpn # Especifica que este certificado eh de um cliente client # Define o ip do servidor para o cliente conectar remote 189.47.25.20 # porta usada para os clientes conectarem no servidor port 1194 # protocolo usado na conexao proto udp # device usado pelo openvpn dev tun # Diz que o certificado foi assinado pelo servidor ns-cert-type server # Habilita conexoes tls # Ajuda a bloquear ataques DoS e flooding na porta usada pelo openvpn tls-client # arquivo de chave compartilhada usado pelo tls-server # O mesmo adiciona uma camada a mais de seguranca, habilitando controle de conexoes tls tls-auth keys/shared.key 1 # Certificado de autoridade # Tem que ser o mesmo em todos os hosts # que conectarem a sua vpn ca certs/ca.crt # Certificado e chave privada do servidor # Cada maquina tem que ter seu certificado e chave cert certs/filial1.crt key keys/filial1.key # Habilita ping de 10 em 10 segundos para dizer ao lado da filial que a matriz # esta no ar, usado para manter a conexao ativa ping-timer-rem keepalive 10 120 # Tipo de criptografia usada cipher DES-EDE3-CBC # habilita compressão no link VPN comp-lzo # Ativa a opcao de se conectar, caso o cliente nao esteja na internet, ou # o mesmo tenha perdido a conexao. resolv-retry infinite # Nao especifica uma porta local para o cliente ouvir. nobind # usuário e grupo sob o qual o openvpn ira rodar user nobody group nogroup # Permite um restart sem fechar a conexão e re-ler as chaves persist-key persist-tun # Log de status das conexoes status /var/log/openvpn/openvpn-status.log # define um arquivo de log, pois o default é o /var/log/syslog log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log # Nivel de log # 0 silencioso, exceto para erros fatais # 4 razoavel para uso geral # 5 e 6 podem ajudar a debugar problemas de conexoes # 9 maximo debug, muito util para tentar descobrir erros caso a vpn nao suba verb 3 # desabilita mensagens repetitivas, ou seja, erros ou conexoes em sequencia # acima de 20, ele dropa. mute 20
Compactando os arquivos para a filial:
server:/etc/openvpn# tar -czpf filial1.tar.gz filial1
Envie o arquivo filial1.tar.gz para o /tmp/ da filial.
Agora do lado da filial, é necessário instalar o openvpn e descompactar os arquivos:
filial1:~# apt-get install -y openvpn
Com o openvpn instalado, edite o arquivo /etc/default/openvpn e descomente a linha #AUTOSTART=”all”. Agora descompacte o arquivo filial1.tar.gz que está no /tmp/:
filial1:~# cd /tmp/ filial1:~# tar xzf filial1.tar.gz filial1:~# mv filial1/* /etc/openvpn/ filial1:~# rm -rf /tmp/filial1*
Criando o diretorio /var/log/openvpn:
filial1:/etc/openvpn# mkdir /var/log/openvpn
Startando o openvpn do lado filial:
filial1:/etc/openvpn# /etc/init.d/openvpn start Starting virtual private network daemon: openvpn(OK). filial1:/etc/openvpn#
Pronto, seu openvpn esta instalado e matriz/filial estao se comunicando. Não esqueça de liberar no fw da matriz a porta 1194 udp de sua interface externa e tudo na interface da vpn que é tun0.
Caso necessite configurar um notebook para acessar o servidor, basta seguir os passos da criação das configurações para a filial, alterando é claro o nome de filial para notebook ou qualquer outro nome.
Abraços.