Debian Webserver Howto

From Pruonckk.org

Autor: Pruonckk le Punk

Conteúdo

Prefacio

Este tutorial foi feito para pessoas que pretendem hospedar poucos sites em um servidor, porém, alterando alguns arquivos de configuração e adicionando algumas coisas extras, você tem um servidor web de grande porte, espero que seja proveitoso.

Dependencias

apt-get install apache2-mpm-prefork libapache2-mod-php4 bind9 mysql-server php4-mysql php4-gd mysql-client proftpd

Configurando o DNS

No diretorio /etc/bind, temos o arquivo named.conf.local, configure ele com o seguinte conteudo

zone "teste.br" {
        type master;
        file "/etc/bind/dominios/teste.br";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/dominios/reverso-192";
};

arquivo teste.br

Nos setamos como diretorio para os arquivos das zonas, o diretorio /etc/bind/dominios, crie este diretorio

mkdir /etc/bind/dominios

e entao crie o arquivo teste.br com o seguinte conteudo

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     teste.br. root.teste.br. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@                  IN      NS      ns.teste.br.
ns.teste.br.       IN      A       192.168.10.1
ns2.teste.br.      IN      A       192.168.10.1
teste.br.          IN      A       192.168.10.1
www.teste.br.      IN      A       192.168.10.1
smtp.teste.br.     IN      A       192.168.10.1
pop3.teste.br.     IN      A       192.168.10.1
teste.br.          IN      MX 10   smtp.teste.br.
ftp.teste.br.      IN      A       192.168.10.1

Arquivo reverso

Para cada faixa de ip, você ira precisar de uma nova zona, o arquvo reverso deve ter um conteudo semelhante ao abaixo

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     teste.br. root.teste.br. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.teste.br.
1       IN      PTR     ns.teste.br.
2       IN      PTR     ns2.teste.br.

Com isso ja temos um dns devidamente configurado, que ira suportar acesso ftp, www, email etc...


Vamos entao reiniciar o dns

invoke-rc.d bind9 restart

(nao esqueça de colocar no resolv.conf a opcao nameserver 127.0.0.1)

Configurando o apache

Nos aqui estamos imaginando um servidor com varios dominios, entao vamos criar um ambiente propicio a isso

O nosso diretorio principal, será o /var/www (padrao do debian), mas la dentro iremos criar varias extruturas de pastas por dominio

vamos fazer entao para o dominio teste.br

Criando os Diretorios

cd /var/www/
mkdir teste.br
mkdir teste.br/html
mkdir teste.br/cgi-bin
mkdir teste.br/logs

Aqui entao criamos uma pasta para o dominio, dentro temos a pasta html para as paginas temos a pasta cgi-bin para os scripts, e temos a pasta logs, para os logs do dominio

Criando um Virtual Host

Agora no diretorio do apache (/etc/apache2/) temos um diretorio chamado sites-available estes, sao os sites que temos configurados, depois criaremos um link para o nosso site, em sites-enabled, que sao os sites que estao ativos.

teste.br

crie dentro do sites-available o arquivo teste.br, com o seguinte conteudo

<VirtualHost 192.168.10.1:80>
        ServerName   teste.br:80
        ServerAlias  www.teste.br
        UseCanonicalName Off
        SuexecUserGroup         testebr dominios
        ServerAdmin  "postmaster@teste.br"
        DocumentRoot /var/www/teste.br/html
        CustomLog  /var/www/teste.br/logs/access_log combined
        ErrorLog   /var/www/teste.br/logs/error_log

        ScriptAlias  /cgi-bin/ /var/www/teste.br/cgi-bin/
        <Directory "/var/www/teste.br/cgi-bin/">
                AllowOverride None
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>


        <Directory /var/www/teste.br/html>


        <IfModule mod_php4.c>
                php_admin_flag engine on
                php_admin_flag safe_mode off
                php_admin_value open_basedir "/var/www/teste.br/html:/tmp"
        </IfModule>

        </Directory>
# Descomente as opcoes apabaixo, para usar paginas de erro customizadas
#       Alias "/error_docs" "/var/www.teste.br/error_docs"
#       ErrorDocument 400 /error_docs/bad_request.html
#       ErrorDocument 401 /error_docs/unauthorized.html
#       ErrorDocument 403 /error_docs/forbidden.html
#       ErrorDocument 404 /error_docs/not_found.html
#       ErrorDocument 500 /error_docs/internal_server_error.html
</VirtualHost>

Se você prestou atenção no arquivo, verá que acrescentamos a seguinte opção

  SuexecUserGroup         testebr dominios

isso significa que temos um usuario testebr e um grupo dominios entao precisamos criar o mesmo.

groupadd dominios
useradd -g dominios -d /var/www/teste.br -s /bin/bash testebr
passwd testebr

Consequentemente agora precisamos dar permissao para o usuario no seu diretorio

chown -R testebr.dominios /var/www/teste.br

Como vamos usar permissao controlada por usuarios e senha, entao precisamo habilitar o modo suexec do apache

ln -s /etc/apache2/mods-available/suexec.load /etc/apache2/mods-enabled/

Agora precisamos linkar o site para ser acessivel

ln -s /etc/apache2/sites-available/teste.br /etc/apache2/sites-enabled/

Agora podemos reiniciar o apache

invoke-rc.d apache2 restart

Configurando o Proftpd

Na configuração do proftpd (/etc/proftpd.conf), adicione ao fim do arquivo a seguinte opção.

DefaultRoot ~

Esta opção irá criar para o usuário um jail, onde ela nâo poderá subir na extrutura

Reinicie o proftpd e tente se conectar

invoke-rc.d proftpd restart
ftp ftp.teste.br

estando logado digite cd / que você verá que se mantém na extrutura do usuário.


Pronto, a configuração básica é esta, com isso você já tem um dns, um servidor web, e um servidor de ftp, caso queira saber como montar um servidor de email também, veja o tutorial Debian Qmail Howto, desta maneira, você terá a solução completa para hospedar páginas :)


Limites dos Dominios

Vamos usar aqui, um modulo para o apache chamado mod_cband, com este módulo, nós podemos limitar a banda que o site irá usar, e definir também o limite de trafego mensal do dominio

dependencias

apt-get install apache2-prefork-dev

baixando o cband

cd /usr/src/
wget -c http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz

Instalando

tar -xzvf mod-cband-0.9.7.5.tgz
cd cband-0.9.7.5
./configure
make
make install

Configurando o apache

Abra o arquivo /etc/apache2/apache2.conf, e ao fim do arquivo, adicione a seguinte entrada

CBandScoreFlushPeriod 1
CBandRandomPulse On

Configurando o Dominio

Abra o arquivo do dominio (ex: /etc/apache2/sites-enabled/teste.br) e adicione logo após o directory root a seguinte entrada

       CBandSpeed 1024 10 30
       CBandRemoteSpeed 20kb/s 3 3

Agora voce pode reiniciar o apache e testar, o largura da banda para o dominio será de 20kb/s com direito a 1 GB mensal de transferencia.


Voltar

Ferramentas pessoais
Inutilidades