Arquivo

Textos com Etiquetas ‘Apache’

CentOS: Instalando mod_security

15, dezembro, 2009 2 comentários

Opa,

Nesse post iremos instalar e ativar o suporte a mod_security no CentOS 5.4, o mod_security é útil para proteger o Apache contra diversos tipos de ataques a aplicações web, agindo como uma camada de proteção.

Para realizar a instalação do mod_security no CentOS existem duas formas, compilar o código-fonte ou instalar o pacote binário do repositório EPEL (Extra Packages for Enterprise Linux). Como já possuo o repositório EPEL (e por preguiça também lógico) escolhi instalar o pacote binário, segue abaixo os procedimentos utilizados.

Caso não possua o repositório EPEL ativado no seu sistema, instale-o com o comando abaixo:

Versão 32 bits
# rpm −Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel−release−5−3.noarch.rpm

Versão 64 bits
# rpm −Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel−release−5−3.noarch.rpm

Antes de instalar o pacote do mod_security no meu ambiente, CentOS 5.4 64 bits, foi necessário instalar o pacote lua (dica que encontrei no comentário do Zigzacom na fonte), portanto, caso encontre erros de dependência da biblioteca liblua-5.1.so durante a instalação execute o comando abaixo:

# rpm −ivh http://mirrors.kernel.org/fedora−epel/5Server/x86_64/lua−5.1.2−1.el5.x86_64.rpm

Instale o pacote do mod_security com o comando abaixo:

# yum install mod_security

O arquivo de configuração principal do mod_security encontra-se em /etc/httpd/conf.d/mod_security.conf, no diretório /etc/httpd/modsecurity.d/ encontram-se todos os outros arquivos de configuração do mod_security incluindo o arquivo /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf que deve ser ajustado de acordo com as suas necessidades. Os arquivos de log encontram-se em /var/log/httpd/modsec_debug.log e em /var/log/httpd/modsec_audit.log.

Após a instalação verifique no arquivo /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf se a opção SecRuleEngine está configurada para On:

# vim /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

SecRuleEngine On

Agora basta reiniciar o serviço com o comando abaixo:

# service httpd restart

Nos logs do Apache pode ser verificado se o módulo foi devidamente carregado:

# tail -f /var/log/httpd/error_log

[Tue Dec 15 20:34:35 2009] [notice] caught SIGTERM, shutting down
[Tue Dec 15 20:34:44 2009] [notice] SELinux policy enabled; httpd running as context root:system_r:httpd_t
[Tue Dec 15 20:34:45 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Dec 15 20:34:46 2009] [notice] ModSecurity for Apache/2.5.9 (http://www.modsecurity.org/) configured.
[Tue Dec 15 20:34:46 2009] [notice] Original server signature: Apache/2.2.3 (CentOS)
[Tue Dec 15 20:34:46 2009] [notice] Digest: generating secret for digest authentication ...
[Tue Dec 15 20:34:46 2009] [notice] Digest: done
[Tue Dec 15 20:34:47 2009] [notice] Apache/2.2.0 (Fedora) configured -- resuming normal operations

E após algumas tentativas segue um exemplo do mod_security em ação:

# tail -f /var/log/httpd/error_log

[Tue Dec 15 18:29:21 2009] [error] [client XX.XX.XX.XX] ModSecurity: Warning. Match of "rx ModSecurity" against "WEBSERVER_ERROR_LOG" required. [ile "/etc/httpd/modsecurity.d/modsecurity_crs_21_protocol_anomalies.conf"] [line "65"] [id "960913"] [msg "Invalid request"] [severity "CRITICAL"] [hostname "meu.site.com"]

Abraço!

Fonte: http://www.cyberciti.biz/faq/rhel-fedora-centos-httpd-mod_security-configuration/

Dica: Zend + PHP 5.2 + Firebird + CentOS 5.3 64bits

14, novembro, 2009 2 comentários

Opa,

Essa semana perdi passei um bom tempo lutando para colocar o módulo do Firebird para funcionar com o Zend + PHP 5.2 em um ambiente com CentOS 5.3 64 bits, mais precisamente ocorriam problemas com campos tipo BLOB. Após várias algumas tentativas sem sucesso, o Diego (vulgo Perebinhas) me mandou um comentário de um post, que ele ainda não me informou o link, falando algo sobre um problema para gerar o módulo com as versões do PHP superiores à 5.2.1, a versão que eu estava utilizando era 5.2.10 e já tinha testado com a última versão disponível também, após esse comentário resolvi testar!

# php -v

PHP 5.2.10 (cli) (built: Jun 22 2009 10:22:39)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Zend Extension Manager v5.1, Copyright (c) 2003-2009, by Zend Technologies
- with Zend Data Cache v4.0, Copyright (c) 2004-2009, by Zend Technologies [loaded] [licensed] [disabled]
- with Zend Utils v1.0, Copyright (c) 2004-2009, by Zend Technologies [loaded] [licensed] [enabled]
- with Zend Optimizer+ v4.0, Copyright (c) 1999-2009, by Zend Technologies [loaded] [licensed] [disabled]
- with Zend Debugger v5.2, Copyright (c) 1999-2009, by Zend Technologies [loaded] [licensed] [enabled]

Baixe os fontes do PHP versão 5.2.1:

# wget -c http://museum.php.net/php5/php-5.2.1.tar.bz2

Descompacte e execute os comandos configure e make para gerar o módulo:

# tar -xvjf php-5.2.1.tar.bz2
# cd php-5.2.1
# ./configure –with-interbase=shared
# make

Opcional: Caso deseje execute o make test para verificar se existem erros com o módulo:

# make test

Agora copie o módulo interbase.so criado para a pasta de módulos do php:

# cp modules/interbase.so /usr/lib64/php/modules/

OBS.: No caso do Zend a pasta utilizada foi /usr/local/zend/lib/php_extensions/.

Edite o arquivo php.ini para que o módulo seja carregado:

# vim /etc/php.ini

extension=interbase.so

Para finalizar reinicie o Apache para que o módulo seja carregado:

# /etc/init.d/httpd restart

Agora é só fazer os testes! Abraço!

Categories: Linux Tags: , , , ,

Fix DOCUMENT_ROOT no Apache usando mod_vhost_alias

10, setembro, 2009 Sem comentários

Opa,

Quem usa o módulo mod_vhost_alias do Apache (ver post sobre esse assunto) e utiliza a variável DOCUMENT_ROOT já deve ter sofrido um pouco (assim como eu) para tentar encontrar a solução para esse problema, uma das soluções é utilizando a opção “php_admin_value auto_prepend_file” para ajustar o DOCUMENT_ROOT, mas isso traz alguns problemas, primeiro é um modo “feio” e segundo só serve para projetos em PHP, quando usarmos Ruby on Rails por exemplo não irá funcionar, então como solucionar? Pesquisando no bugzilla do Apache encontrei a solução, um patch que ajusta a variável DOCUMENT_ROOT de acordo com a variável VirtualDocumentRoot definida no arquivo de configuração, vamos a solução!

Antes de iniciarmos, vamos instalar o pacote que para criar o rpm:

# yum install rpm-build

Agora verifique qual a versão do seu servidor Apache (no meu caso utilizei a versão do patch para 2.2.2):

# httpd -v
Server version: Apache/2.2.3

Faça o download do patch no bugzilla do Apache https://issues.apache.org/bugzilla/show_bug.cgi?id=26052

Faça também o download do pacote src referente a versão do seu Apache e instale-o:

# wget -c http://mirror.centos.org/centos/5/os/SRPMS/httpd-2.2.3-22.el5.centos.src.rpm
# rpm -Uvh /backup/packages/httpd-2.2.3-22.el5.centos.src.rpm

Acesse o diretório dos fontes e descompacte o arquivo httpd-2.2.3.tar.gz:

# cd /usr/src/redhat/SOURCES
# tar -xvzf httpd-2.2.3.tar.gz

Acesse o diretório onde encontra-se o módulo mod_vhost_alias.c:

# cd httpd-2.2.3/modules/mappers/

Aplique o patch informando o local onde fez o download do mesmo (acima):

# patch < /root/mod_vhost_alias.c.diff

Volte ao diretório dos fontes (SOURCES) e compacte o diretório httpd-2.2.3 conforme abaixo:

# cd /usr/src/redhat/SOURCES
# tar -cvzf httpd-2.2.3.tar.gz httpd-2.2.3

Acesse o diretório SPECS e gere o pacote:

OBS.: Na minha compilação o sistema solicitou as seguintes dependências xmlto pcre-devel distcache-devel, instale-as via yum antes de compilar (Ex.: # yum install xmlto pcre-devel distcache-devel)!

# cd /usr/src/redhat/SPECS
# rpmbuild -bb httpd.spec

Como não precisamos de todo o pacote, acesse o diretório tmp para descompactar o rpm criado e copiar somente o módulo que desejamos:

OBS.: No meu sistema utilizei o caminho /usr/lib64 por ser 64bits, use o padrão (/usr/lib) caso não seja o seu caso!

# cd /tmp/
# rpm2cpio /usr/src/redhat/RPMS/x86_64/httpd-2.2.3-22.x86_64.rpm | cpio -d -i
# mv /usr/lib64/httpd/modules/mod_vhost_alias.so /usr/lib64/httpd/modules/mod_vhost_alias.so.orig
# mv /tmp/usr/lib64/httpd/modules/mod_vhost_alias.so /usr/lib64/httpd/modules/mod_vhost_alias.so

Edite o arquivo com os hosts virtuais dinâmicos e adicione a opção SetVirtualDocumentRoot que faz a “mágica”:

# vim /etc/httpd/conf.d/00_vhost.conf

...
<IfModule mod_vhost_alias.c>
SetVirtualDocumentRoot on
...
</IfModule>
...

Reinicie o Apache e faça seus testes!

# /etc/init.d/httpd restart

Abraço!

Fonte: http://www.edula.com/blog/?m=200603
Patch: https://issues.apache.org/bugzilla/show_bug.cgi?id=26052

Categories: Linux Tags: , , ,

CentOS: Ativando SSL no Apache

1, setembro, 2009 10 comentários

Opa,

Esse post é sobre como gerar os certificados SSL no CentOS utilizando o OpenSSL e ativá-los no Apache para permitir conexões criptogradas ao seu servidor Web, para isso precisamos inicialmente instalar os pacotes necessários (caso ainda não estejam instalados):

# yum install mod_ssl openssl

Agora iremos gerar a chave privada:

# openssl genrsa -out ca.key 1024

Gere o arquivo CSR:

# openssl req -new -key ca.key -out ca.csr

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) [GB]:BR
State or Province Name (full name) [Berkshire]:Alagoas
Locality Name (eg, city) [Newbury]:Maceio
Organization Name (eg, company) [My Company Ltd]:Exemplo
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your servers hostname) []:www.exemplo.com
Email Address []:admin@exemplo.com

Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

OBS.: Common Name deverá ser a URL do serviço, nesse exemplo www.exemplo.com.

Assine o arquivo CSR utilizando a chave privada para gerar o certificado:

# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Mova os arquivos para a localização correta:

# mv ca.crt /etc/pki/tls/certs
# mv ca.key /etc/pki/tls/private/ca.key
# mv ca.csr /etc/pki/tls/private/ca.csr

Caso não utilize Virtual Host no seu servidor Apache, basta alterar as linhas abaixo no arquivo de configuração do SSL:

# vim /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

E reinicie o serviço:

# /etc/init.d/httpd restart

Caso utilize Virtual Host será necessário alterar o arquivo de configuração do Virtual Host ao invés do arquivo de configuração do SSL, abra o arquivo e adicione no início do arquivo:

# vim /etc/httpd/conf.d/meu_vhost.conf

NameVirtualHost *:443

E após a configuração do <VirtualHost *:80> adicione a entrada referente ao SSL:

# vim /etc/httpd/conf.d/meu_vhost.conf


SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

AllowOverride All

DocumentRoot /var/www/vhosts/exemplo.com/htdocs
ServerName www.exemplo.com

Feito isso reinicie o serviço:

# /etc/init.d/httpd restart

Pronto! Basta acessar seu servidor ou Virtual Host pelo seu navegador/browser preferido utilizando https para verificar o certificado criado!

Abraço!

Fonte: http://wiki.centos.org/HowTos/Https

Categories: Linux Tags: , , ,

WPAD auto proxy com Dnsmasq no CentOS

Opa,

Hoje vamos configurar nosso servidor dnsmasq para enviar a informação do endereço do servidor proxy automaticamente para os nossos navegadores (browsers). Para isso será necessário um servidor Web, nesse post utilizei o apache, para servir o arquivo wpad.dat para as máquinas da sua rede local, vamos a instalação:

# yum install httpd

Agora criamos um arquivo de configuração para associar a extensão .dat ao mime type do script de autoconfiguração no apache:

# vim /etc/httpd/conf.d/proxy_autoconfig.conf

AddType application/x-ns-proxy-autoconfig .dat

Feito isso execute um reload no serviço:

# /etc/init.d/httpd reload

OBS.: Caso utilize virtual host no apache (minha situação) configure o wpad para ser o virtual host default ou disponibilize o arquivo wpad.dat no diretório raiz do virtual host default, caso contrário irá perder tanto tempo quanto eu perdi até descobrir isso! :-)

Agora iremos criar o arquivo wpad.dat na raiz do seu servidor Web, nesse arquivo definimos que a rede local não deverá passar pelo proxy (DIRECT) e outros tipos de conexão deverão usar o proxy (PROXY 192.168.100.250:3128):

# vim /var/www/html/wpad.dat

function FindProxyForURL(url, host) {
    if (isInNet(host, "192.168.100.0", "255.255.255.0"))
        return "DIRECT";
    else
        return "PROXY 192.168.100.250:3128";
}

Adicione uma entrada no seu arquivo hosts apontando para o endereço IP do servidor Web:

# vim /etc/hosts

192.168.100.250     wpad.local.com

E adicione uma entrada no seu servidor dnsmasq referente ao endereço do seu arquivo wpad.dat (opção 252):

# vim /etc/dnsmasq.conf

# Proxy (Com um espaço após o .dat para que algumas versões do IE funcionem)
dhcp-option=252,"http://wpad.local.com/wpad.dat "

OBS.: WPAD com DHCP só funcionou com o IE, a solução com DNS funcionou tanto para o IE quanto para o Firefox.

Recarregue seu servidor dnsmasq:

# /etc/init.d/dnsmasq reload

Acesse uma máquina, configure a conexão do navegador para utilizar proxy automático (detectar automaticamente o proxy), reinicie (restaure) sua interface de rede para obter as novas informações e pronto, no log do servidor web já deve ser possível visualizar o acesso ao wpad.dat:

# tail -f /var/log/httpd/access.log

192.168.100.144 – – [07/Jul/2009:14:00:58 -0300] “GET /wpad.dat HTTP/1.1″ 200 128 “-” “Mozilla/4.0 (compatible; MSIE 7.0; Win32

Fontes: http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol, http://users.telenet.be/mydotcom/library/network/pac.htm, http://www.howtoforge.net/squid-proxy-server-on-ubuntu-9.04-server-with-dansguardian-clamav-and-wpad-proxy-auto-detection

Categories: Linux Tags: , , , ,

Virtual Host Dinâmico no Apache

12, abril, 2007 1 comentário

Opa,

Segue mais uma dica técnica nesse blog, ou seja, serve o mesmo que falei na dica técnica postada anteriormente, quem não souber do que se trata pode pular esse post.

Vamos ao que interessa, já tinha ouvido falar (valeu Enderson) sobre a possibilidade de se usar Hosts Virtuais dinâmicos no Apache, mas na tentativa da mesma pessoa que me falou (pela “enorme” paciência que ele tem) não conseguiu concluir ou não conseguiu aplicar da maneira como queria na época, não lembro no momento. Meses se passaram e após ver algo parecido na Internet resolvi tentar fazê-lo.

Mas que diabos é Virtual Host Dinâmico no Apache???
Espero que os que continuaram a ler esse post saibam o que é um Virtual Host, portanto não vou falar sobre isso nesse post, se não souberem o que é procurem! :-P
O Dinâmico significa que toda vez que precisarmos criar um Virtual Host não seja necessário editar os arquivos do Apache, falando por alto ficaremos somente nessa definição.

Mas como assim??? Como funciona esse bagaça???
Bem, o Virtual Host Dinâmico funciona mais ou menos da seguinte maneira, criamos um arquivo de vhost e ao invés de usar a opção ServerName que definiria o nome do host virtual, trabalhamos com variáveis e deixamos o Apache se virar.

Dê exemplos oras!!!
Lógico, mas antes vamos configurar o apache para atender as nossas necessidades.
By Gentoo:
– Edite o arquivo /etc/conf.d/apache2 e na variável APACHE2_OPTS adicione:

APACHE2_OPTS="... D DYNAMIC_VHOSTS"

– Edite o arquivo /etc/apache2/httpd.conf, procure por vhost_alias_module e descomente a linha do mesmo, deverá ficar assim:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

By OpenSuSE 10.2:
– Edite o arquivo /etc/sysconfig/apache2 e na variável APACHE_MODULES adicione:

APACHE_MODULES="... vhost_alias"

Exemplos:
Crie um arquivo vhost (/etc/apache2/vhosts.d/00_vhost-dinamico.conf) e adicione o seguinte:

NameVirtualHost *:80
UseCanonicalName Off
LogFormat "%V %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" dynamic_vhosts
CustomLog /var/log/apache2/access_log dynamic_vhosts

<VirtualHost *:80>
<Directory "/srv/www/vhosts">
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<IfModule mod_vhost_alias.c>
# www.example.com --> /web/www.example.com
# a.www.example.com --> /web/a.www.example.com
# example.com --> /web/example.com
VirtualDocumentRoot /srv/www/vhosts/%0.0
VirtualScriptAlias /srv/www/vhosts/%0.0/cgi

<DirectoryMatch "^/srv/www/vhosts/[^/]+/cgi">
AllowOverride None
Options ExecCGI
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</DirectoryMatch>
</IfModule>
</VirtualHost>

Se estiver usando Gentoo lembre-se de adicionar no seu arquivo de configuração, logo após NameVirtualHost *:80 a opção IfDefine DYNAMIC_VHOSTS e no final do arquivo /IfDefine.

Feito isso basta reiniciar o apache e criar um diretório dentro de /srv/www/vhosts como os exemplos acima e deverá funcionar, por exemplo, se criarmos o diretório exemplo.com e o DNS estiver apontando para esse host, basta abrir o browser e digitar exemplo.com que deverá aparecer algo (lógico lembre-se de criar um index dentro do diretório), se criarmos outro diretório www.meusite.com.br e o DNS estiver apontando para esse host, basta abrir o browser e digitar www.meusite.com.br que deverá funcionar também, simples não?

Bem, para quem estiver curioso em saber outros exemplos de configuração segue o endereço do site do apache, onde achei o que precisava LINK

Categories: Linux Tags: ,