Menu Principal

domingo, 29 de abril de 2012

EXERCÍCIO INTERVALADO DE ALTA INTENSIDADE E DIMINUIÇÃO DA GORDURA CORPORAL

Fonte:http://www.alexandrelevangelista.com.br/2011/07/27/exercicio-intervalado-de-alta-intensidade-e-diminuicao-da-gordura-corporal/

Os efeitos crônicos do treinamento aeróbio através do método contínuo na perda de gordura são bastante conhecidos. Entretanto, outras formas de exercícios também oferecem impacto significativo na composição corporal. Podemos tomar como exemplo, novas pesquisas envolvendo o treinamento intervalado de alta intensidade indicam que este método de treinamento apresenta melhores efeitos na redução tanto da gordura subcutânea como na abdominal. Além disso, quando comparado com o método contínuo, o método intervalado apresentou resultados bastante superiores em relação ao emagrecimento.
Além disso, o treinamento aeróbio tem demonstrado aprimorar tanto o condicionamento aeróbio quanto anaeróbio. Ente outras vantagens do método intervalado sobre o contínuo, ainda podemos citar:
- Diminuição da resistência a insulina;
- Aumento de participação do metabolismo oxidativo no fornecimento de energia para o exercício;
- Aumento e economia dos estoques de glicogênio muscular;
- Melhora da tolerância ao lactato
Na estudo de TRAPP et al. (2008), os autores compararam os efeitos de 3 grupos (controle x intervalado de alta intensidade x contínuo/ steady state) na gordura subcutânea e visceral após 15 semanas de treinamento.
Os protocolos foram realizados 3x durante a semana e seguiram as seguintes diretrizes:
GRUPO CONTROLE: Sem treino durante as 15 semanas
GRUPO INTERVALADO DE ALTA INTENSIDADE: 20 minutos pedalando (8” em vel. Max com 12” de pausa em baixa intensidade);
GRUPO CONTÍNUO/ STEADY STATE: 40 minutos pedalando a 60% do VO2MÁX.
Os resultados podem ser vistos na figura abaixo
INFORMAÇÕES RETIRADAS DOS ARTIGOS
E. G. Trapp, D. J. Chisholm, J. Freund, and S. H. Boutcher,“The effects of high-intensity intermittent exercise training on fat loss and fasting insulin levels of young women,” International Journal of Obesity, vol. 32, no. 4, pp. 684–691, 2008.

Efeito do treinamento de endurance sobre os fatores de risco de doenças cardiovasculares em indivíduos idosos saudáveis

Fonte: http://www.alexandrelevangelista.com.br/blog/
Devido as doenças cardiovasculares serem a maior causa de morte em homens e mulheres idosas, o efeito do treinamento de endurance sobre os fatores de risco para doenças cardiovasculares é de fundamental importância. Estudos transversais e de intervenção em indivíduos idosos consistentemente indicam que o treinamento de endurance é associado com menores níveis no jejum e insulina plasmática estimulada pela glicose, assim como uma melhora da tolerância a glicose (se inicialmente reduzida) e sensibilidade a insulina. Pessoas idosas não obtêm as mesmas melhoras nos níveis de insulina e sensibilidade a insulina após o exercício agudo como o adulto jovem.
Embora , isto possa ser devido a sua reduzida capacidade de exercício, resultando num menor dispêndio calórico durante o exercício agudo, como vários dias consecutivos deste mesmo exercício melhoram os níveis e a sensibilidade da insulina em indivíduos idosos. As melhoras no metabolismo da insulina e da glicose são evidentes nas pessoas idosas antes mesmo de ocorrerem alterações no peso ou na composição corporal.
O treinamento de endurance parece reduzir a pressão arterial da mesma maneira no idoso hipertenso como no adulto jovem hipertenso, embora nenhum estudo tenha verificado diretamente esta questão. Um estudo realizado com idosos hipertensos registrou que o treinamento a 50% do VO2máx promove diminuição na pressão arterial igual ou maior que o treinamento a 70%.
Em um segundo estudo com idosos hipertensos, o treinamento a 40-50% do VO2máx reduziu a pressão arterial, contudo em subsequente treinamento a 50-60% do VO2máx a pressão arterial reduziu pouco. Portanto, parece que o treinamento de intensidade leve a moderada é efetivo para reduzir a pressão arterialem indivíduos idosos hipertensos.
Os poucos dados disponíveis geralmente suportam a conclusão que indivíduos idosos melhoram o perfil das lipoproteínas lípidicas plasmáticas com o treinamento. Entretanto, estas alterações são secundárias as reduções induzidas pelo treinamento nos estoques de gordura corporal. As melhoras são geralmente similares à aquelas verificadas no adulto jovem e incluem incremento nos níveis de colesterol plasmático de HDL e HDL-2 e decréscimo nos níveis plasmáticos de triglicerídeos e na relação colesterol: HDL.
A composição corporal também melhora com o treinamento de endurance de modo similar no indivíduo idoso e no adulto jovem. A alteração mais consistente é uma redução de 1 a 4% na porcentagem de gordura corporal total com o exercício em sujeitos idosos, mesmo se o peso corporal é mantido. Além disso, um estudo registrou que a gordura intra-abdominal decresceu 25% no homem idoso que perdeu apenas 2,5kg de peso corporal com o exercício. Esta descoberta é especialmente importante para o homem idoso pelo fato da gordura intra-abdominal ser o depósito de gordura corporal que mais incrementa com o avanço da idade e estar associada com outros fatores de risco para doenças cardiovasculares.
REFERENCIAS BIBLIOGRÁFICAS
American College of Sports Medicine. Guidelines for Exercise Testing and Prescription,
6th, Ed. Baltimore: Wilkins and Wilkins, 1-373, 2000

MANUTENÇÃO DA MASSA MAGRA ATRAVÉS DA PRÁTICA REGULAR DE EXERCÍCIOS RESISTIDOS APÓS DIETA DE RESTRIÇÃO CALÓRICA

NORMALMENTE, QUANDO UM INDIVÍDUO PERDE PESO, NA MAIORIA DOS CASOS HÁ TAMBÉM DIMINUIÇÃO CONSIDERÁVEL DA MASSA MUSCULAR. ESSA PERDA, POR SUA VEZ, GERA REDUÇÃO CONCOMITANTE NO METABOLISMO DE REPOUSO (O QUE PREJUDICA O GASTO CALÓRICO DIÁRIO).
ESSA PERDA AINDA PODE SER ACENTUADA QUANDO SE COMBINA DIETAS DE RESTRIÇÃO CALÓRICA E VOLUMES ALTOS DE EXERCÍCIOS AERÓBIOS. DIANTE DISSO, UMA FORMA PLAUSÍVEL DE EVITARMOS A PERDA DA MASSA MUSCULAR SERIA A PRÁTICA DE EXERCÍCIOS RESISTIDOS.
PENSANDO NISSO, HUNTER et al.(2008), EM ESTUDO LONGITUDINAL, CUJO OBJETIVO ERA A PERDA DE PESO CLÍNICAAPÓS 12 SEMANAS DE TREINO, DIVIDIU DE FORMA RANDOMIZADA OS 94 INDIVÍDUOS DA PESQUISA EM 3 GRUPOS:
- TREINAMENTO AERÓBIO – FREQUENCIA DE 3X POR SEMANA DURANTE 5 SEMANAS COM CONSUMO DE 800 CALORIAS POR DIA. TINHA POR INTENÇÃO DE DIMINUIR O ÍNDICE DE MASSA CORPORAL – IMC PARA ABAIXO DE 25
- PROTOCOLO DE TREINAMENTO:
- PRIMEIRA SEMANA 20 MINTUOS DE ESTEIRA A 67% DA FCMáx;
- AUMENTO GRADATIVO DE 5’ POR SEMANA ATÉ A 5 SEMANA;
- 6ª. E 7ª. SEMANA – 30’ DE ESTERIA A 71% DA FCMáx;
- 8ª. A 10ª. SEMANA – 30’ DE ESTEIRA A 80% DA FCMáx;
- 11ª. E 12ª.SEMANA  - 40’ DE ESTEIRA A 80% DA FCMáx.
- TREINAMENTO RESISITDO - FREQUENCIA DE 3X POR SEMANA DURANTE 5 SEMANAS COM CONSUMO DE 800 CALORIAS POR DIA. TINHA POR INTENÇÃO DE DIMINUIR O ÍNDICE DE MASSA CORPORAL – IMC PARA ABAIXO DE 25.
- PROTOCOLO DE TREINAMENTO:
- PRIMEIRAS 4 SEMANAS 1X10 REPETIÇÕES A 65% DE 1RM;
- ÚLTIMAS 8 SEMANAS 2X10 REPETIÇÕES ENTRE 65% A 80% DE 1RM COM 2’ DE PAUSA.
- CONTROLE – APENAS DIETA DE 880 CALORIAS.
AO FINAL DO ESTUDO TODOS OS 3 GRUPOS PERDERAM PESO (AERÓBIO – REDUÇÃO DE 13KG / TREINAMENTO RESISTIDO – REDUÇÃO DE 11.6KG / CONTROLE – REDUÇÃO DE 12.5KG). PORÉM, OS GRUPOS DE TREINAMENTO AERÓBIO E O CONTROLE PERDERAM QUANTIDADE SIGNIFICVATIVA DE MASSA MUSCULAR ENQUANTO QUE O GRUPO DE EXERCÍCIOS RESISTIDOS A MANTEVE. PARA MAIORES DETALHES BASTA VIZUALIZAR OS GRÁFICOS ABAIXO
BASEADO NESSES FATOS PODE CONCLUIR QUE A PRÁTICA REGULAR DE EXERCÍCIOS COM PESOS É UMA EXCELENTE INTERVENÇÃO PARA AUXILIAR NO EMAGRECIMENTO SEM REDUÇÃO SIGNIFICATIVA DA MASSA MUSCULAR.
INFORMAÇÕES RETIRADAS DO ARTIGO
HUNTER, GR, et al. RESISTANCE TRAINING CONSERVES FAT-FREE MASS AND RESTING ENERGY EXPENDITURE FOLLOWING WEIGHT LOSS. OBESITY 16(5):1045 – 51. 2008.

quarta-feira, 25 de abril de 2012

Participial Adjectives – Você entende os dois tipos deles?

Fonte: http://www.mindsidiomas.com.br/blog/2011/12/participial-adjective-voce-entende-os-dois-tipos-deles/

Adjectives modifiers ou também chamados participial adjectives são divididos em dois tipos: past participle (-ed) e presente participles (-ing).
Past Participle (-ed) descreve alguma sensação sobre algo, como pessoas se sentem em relação a algo.
Present Participle (-ing) fala sobre a causa da sensação, ou seja, descreve coisas ou pessoas que causam sentimento/sensação.
Exemplos:
It was a boring movie. Era um filmetedioso.
The bored viewers left. Os telespectadores entediados sairam.
Na primeira situação o adjetivo está ligado ao sujeito: filme, que era causador de alguma emoção, no caso, tédio. Já na segunda frase o adjetivo está ligado aos telespectadores que sentiram a emoção.
Melhorando? Mais exemplos:
The movie bored Doug. O filme entediou Doug.
Doug was bored by the movie. Doug foi entediado pelo filme.
Doug did’nt enjoy the movie, because it was boring. Doug não gostou do filme porque era tedioso.

Então lembre-se –ing (Present Participle) é o adjetivo ligado ao objeto, o “causador” da emoção e –ed (Past Participle) é o adjetivo referente aquele que sofreu a emoção.

segunda-feira, 23 de abril de 2012

Inglês

A ordem dos adjetivos serve para que você não escreva mais de um adjetivo de forma aleatória numa frase. Essa ordem precisa ser seguida de acordo com o tipo de cada adjetivo. Veja abaixo o exemplo:
Algumas vezes nós podemos usar mais de um adjetivo na frase:
Ex: It´s a beautiful round wooden table.
(É uma mesa bonita, redonda e feita de madeira.)
Mas há uma maneira correta, ou seja, uma ordem em que esses adjetivos são escritos antes do substantivo. Para isso devemos saber quais são os tipos de adjetivos e suas ordens:
• Tipos de Adjetivos:
OPINION= indica o que você pensa a respeito, ou seja, OPINIÃO!
1- Opinion: indica opinião.
Exemplos: horrible, difficult, fun, etc.
FACT= indica o que é verdade, ou seja, o FATO!
2-Size: indica tamanho.
Exemplos: large, little, short, tall, etc.
3-Age: indica idade.
Exemplos: new, old, adolescent, a year, etc.
4-Shape: indica forma.
Exemplos: round, flat, square, irregular, etc.
5-Color: indica cor.
Exemplos: red, blue, etc.
6-Origin: indica a origem.
Exemplos: Brazilian, American, etc.
7-Religion: indica religião.
Exemplos: Buddhist, Taoist, Pagan, etc.
8-Material: indica o tipo de material que é feito.
exemplos: wooden, paper, metal, etc.
9-Purpose: indica o propósito de seu uso.
Exemplos: sleeping bag, computer table, football field, etc.
• Ordem dos Adjetivos:
Agora que você já sabe quais são os tipos de adjetivos, precisa saber qual a ordem correta ao escrevê-los. Para ficar mais fácil, divida a frase desta maneira:
Ex: A beautiful large round wooden table.
(uma mesa bonita, larga, redonda e feita de madeira.)
1º - divida a frase separando os adjetivos do substantivo;
2º - separe os adjetivos em: opinion ou fact;
3º- ordene corretamente.
Adjectives Noun

Opnion Fact Noun

  size age shape color origin religion material purpose
Noun

beautiful large   round       wooden   table
Outros exemplos:
* A big round pink plastic ball. (Uma grande, redonda, rosa, bola de plástico.)
* An interesting young woman. (Uma mulher interessante e jovem.)
* Small blue eyes. (Pequenos olhos azuis.)
* An old American song. (Uma velha música Americana.)
* A nice big new red plastic sleeping bag. (Uma boa, nova, vermelha, bolsa plástica de dormir.)
Adjectives Noun

Opinion Fact Noun

  size age shape color origin religion material purpose Noun

  big   round pink     plastic   ball
interesting   young             woman
  small     blue         eyes
    old     American       song
nice big new   red     plastic sleeping bag
Veja mais:
Adjectives -
Conheça as formas de comparação dos adjetivos;
Degree of Adjectives (Grau dos Adjetivos) - Conheça o grau dos adjetivos;
Adriana Petriccione
Colaboradora Brasil Escola
Graduada em Letras pela Universidade de Santo Amaro – UNISA
Graduada em Pedagogia pela Universidade Bandeirante de São Paulo – UNIBAN

quarta-feira, 18 de abril de 2012

Proxy reverso com Squid

FONTE:http://wiki.squid-cache.org/ConfigExamples/Reverse/SslWithWildcardCertifiate


Introdução

Proxy reverso é um termo utilizado para proxies que fazem o serviço contrário de um proxy normal.

A maioria dos administradores de redes usam o Squid como proxy de acesso de uma LAN para a internet, podendo controlar acesso, etc e etc.

Neste artigo iremos tratar de um proxy que atua de modo inverso, recebendo requisições EXTERNAS e repassando para os servidores INTERNOS, sendo possível fazer balanceamento de carga TRANSPARENTE entre vários servidores WEB.

No caso de balanceamento de carga, o Squid reversamente falando, atua muito bem, se um dos servidores cair, o Squid automaticamente NÃO passa requisições mais à ele, deixando seu sistema redundante.

Interessante e seguro, é que os servidores WEB não ficam diretamente com "a cara" na internet, aumentando ainda mais a segurança. :)

Veremos uma configuração básica no seguinte cenário:
  • 1 servidor Squid - 200.200.200.1 e 192.168.0.1 (interface externa e interna);
  • 2 servidores web (com os mesmos arquivos e configuração, mudando apenas o ip), 192.168.0.2 e 192.168.0.3 (1 ip para cada servidor);
  • Domínio: dns www.meusite.com.br devidamente configurado para 200.200.200.1.

Let´s Rock...

Pacotes necessários

Este artigo pode ser executado em QUALQUER sistema operacional, estou utilizando Red Hat Enterprise 5 como exemplo.

Relação dos pacotes utilizados:
  • httpd-devel-2.2.3-11.el5
  • httpd-2.2.3-11.el5
  • squid-2.6.STABLE6-4.el5
  • php-5.1.6-15.el5
  • mysql-server-5.0.22-2.1.0.1

Os pacotes php e mysql-server são apenas "ilustrativos", não veremos suas configurações, apenas listei para mostrar a funcionalidade dos servidores web.

Arquivos de configurações

Os arquivos que vão ser alterados são:

Configuração do apache:

/etc/httpd/conf/httpd.conf

Configuração do Squid:

/etc/squid/squid.conf

O Squid vai fazer o cache na pasta /var/spool/squid.

A pasta do Squid recomendo deixar num HD separado, pois o Squid gera muito I/O no HD, podendo prejudicar os outros serviços que dependem do acesso a disco.

Configurando o Apache



A configuração dos servidores Apache é simples, basta colocar para listar a porta 80 no ip da interface. Por padrão o apache vem com a linha:

Listen 80

Trocar a linha padrão do primeiro servidor Apache por esta:

Listen 192.168.0.2:80

E no segundo servidor Apache por:

Listen 192.168.0.3:80

Configurar o domínio www.meusite.com.br:

DocumentRoot /var/www/html
ServerName www.meusite.com.br:80
ServerAdmin hostmaster@meusite.com.br

ServerTokens Prod
ServerSignature Off

KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15

Salve o httpd.conf.

Adicione o httpd para iniciar automaticamente:

# chkconfig --add httpd
# chkconfig httpd on


Agora iniciar o serviço:

# service httpd start

Em cada servidor crie um arquivo index.html e dentro identifique cada servidor (apenas para detectar em qual servidor estamos acessando). Por exemplo:

index.html

<html>
<head><title>Servidor 1</title></head>
<body>
Acesso via servidor 1
</body>
</html>

E no servidor 2:

index.html

<html>
<head><title>Servidor 2</title></head>
<body>
Acesso via servidor 2
</body>
</html>

OK. Acesse os endereços de cada servidor para confirmar o funcionamento do Apache.

Nossos 2 servidores webs estão prontos, vamos ao servidor Squid! :)

Configurando o Squid



O Squid vai fazer o papel de "servidor web", recebendo as requisições da internet na porta 80 e repassando-as para os servidores web REAIS. Caso o Squid tenha a página solicitada em CACHE, os servidores WEB REAIS não recebem a requisição, simplesmente o SQUID que responde. :)

O /etc/squid/squid.conf fica assim:

#Lista na porta 80 e o site padrão sera www.meusite.com.br caso a requisição não tenha um header Host especificado.
http_port 200.200.200.1:80 vhost defaultsite=www.meusite.com.br
#Lista porta 3401 para requisições SNMP, caso não queira obter informações do squid via SNMP, coloque 0 no lugar da porta, você pode usar cacti, mrtg, rrdtool para gerar estatísticas do Squid, são gerados gráficos bem interessantes.
snmp_port 3401
#Não usaremos este protocolo de comunicação entre proxies, pois temos apenas 1 proxy.
icp_port 0
#Configurando a pasta de cache, 20GB, primeiro nível com 32 pastas e cada pasta terá 256 sub-pastas.
cache_dir aufs /var/spool/squid 20000 32 256
#Mantendo objetos recentes e pequenos na memoria
memory_replacement_policy heap GDSF
#Mantendo objetos recentes no disco (independente do tamanho)
cache_replacement_policy heap LFUDA
#Ativando pools de memoria, evitando o Squid ficar realocando memoria toda hora que precisar, manterá pools de 32MB
memory_pools on
memory_pools_limit 32 MB

#Não fazer cache de paginas dinâmicas
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
#Fazer cache dos headers 'vary'
cache_vary on
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#memoria alocada para objetos em TRANSITO
cache_mem 128 MB
#Manutenção do cache
cache_swap_low 90
cache_swap_high 95
#Tamanho máximo de objetos que serão gravados em disco/memoria, este valor varia de acordo com cada tipo de conteúdo servido pelos servidores WWW, se você servir arquivos muito grandes, aumente de acordo com a necessidade.
maximum_object_size 4 MB
#Tamanho minimo de objetos gravados, aqui ele vai gravar TUDO
minimum_object_size 0 KB
#Tamanho máximo de objetos mantidos na memoria
maximum_object_size_in_memory 64 KB
#Manter 1024 registros de DNS na memoria
fqdncache_size 1024

#Arquivos de logs
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
emulate_httpd_log on
log_ip_on_direct on

#Configurações extras
mime_table /etc/squid/mime.conf
log_mime_hdrs off
log_fqdn off
ftp_user anonymous@aonze.com.br
ftp_passive on
ftp_sanitycheck on
ftp_telnet_protocol on
check_hostnames on
allow_underscore on
dns_timeout 1 minutes
request_header_max_size 16 KB

#Estas 'refresh_pattern' fazem com que o squid mantenha o máximo possível um objeto em cache, aumentando o cache HIT e byte HIT
refresh_pattern -i \.jpg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.gif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.png$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.jpeg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.bmp$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tiff$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.swf$ 0 50% 21600 reload-into-ims

refresh_pattern -i \.html$ 0 20% 1440
refresh_pattern -i \.htm$ 0 20% 1440
refresh_pattern -i \.shtml$ 0 20% 1440
refresh_pattern -i \.shtm$ 0 20% 1440

refresh_pattern -i \.mov$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.avi$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpeg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.qtm$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.flv$ 2880 80% 21600 reload-into-ims

refresh_pattern -i \.wav$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.au$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mid$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mp3$ 2880 100% 21600 reload-into-ims

refresh_pattern -i \.zip$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.gz$ 0 50% 10080 reload-into-ims
refresh_pattern -i \.arj$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lha$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lzh$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.rar$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.tgz$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tar$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.Z$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.sit$ 0 50% 4320 reload-into-ims

refresh_pattern -i \.pdf$ 7200 50% 10080 reload-into-ims

#O que não bater nas regras acima, recebem valores padrões, NÃO aconselho alterar estas 3 abaixo, e estas devem ser as ULTIMAS regras..
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

#Objetos em transito que forem interrompidos, terminar o download se a porcentagem do download for maior que 85%
quick_abort_min 50 KB
quick_abort_max 50 KB
quick_abort_pct 85

#caches de respostas
negative_ttl 3 minutes
positive_dns_ttl 5 hours
negative_dns_ttl 2 minute

#Servidor de DNS, recomendo rodar um servidor dns cache-only na MESMA maquina do Squid, e também colocar forwarders para outros servidores de dns próximos fazendo com que o tempo de resposta dns fique bem baixo..
dns_nameservers 127.0.0.1

#timeouts
refresh_stale_hit 30 seconds
connect_timeout 1 minute
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minutes
persistent_request_timeout 1 minute
client_lifetime 1 day
pconn_timeout 30 seconds
ident_timeout 10 seconds
half_closed_clients off
forward_timeout 3 minutes


#tempo de espera antes de matar o processo
shutdown_lifetime 30 seconds

#Regras para acesso, vamos proteger nosso Squid de acessos indevidos, fazendo com que não temos um PROXY OPEN RELAY.

#ip localhost
acl localhost src 127.0.0.1
#ips dos servidores
acl hosted dst 200.200.200.1 192.168.0.1 192.168.0.2 192.168.0.3
#protocolo cache_object, utilizado pelo cache manager
acl manager proto cache_object
acl all src 0.0.0.0/0.0.0.0

#Permitir protocolo para localhost
http_access allow manager localhost
#ninguém mais alem do próprio servidor acessa o cache_object
http_access deny manager
#permite o localhost acesso ao proxy
http_access allow localhost
#permite acesso aos ips dos servidores
http_access allow hosted
#ninguém mais acessa nada que não bater nas regras acima.. deve ser SEMPRE a ultima regra

#CASO for gerar estatísticas snmp, adicionar estas regras

acl snmppublic snmp_community public
snmp_access allow snmppublic localhost

snmp_access deny all
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 255.255.255.255
#### fim do snmp

#respostas http, permitidas todas para todos
http_reply_access allow all
#tamanho máximo do cabeçalho de resposta
reply_header_max_size 10 KB

#informações
cache_mgr hostmaster@meusite.com.br
cache_effective_user squid
cache_effective_user squid

#esconde versão do squid
httpd_suppress_version_string on
#seta o host para www.meusite.com.br caso contrario o squid anexa o hostname da maquina, podendo causar problemas na respostas.
visible_hostname www.meusite.com.br

#manter 10 arquivos de logs
logfile_rotate 10

#usar buffer do sistema, o squid não controla o buffer tcp neste caso..
tcp_recv_bufsize 0 bytes

#mantem ip de origem no header
forwarded_for on
#mantem uma lista de clientes acessando o cache
client_db on
buffered_logs off
#Aplica o header If-modified-since em todos os objetos
reload_into_ims on

#permite conexões persistentes
client_persistent_connections on
server_persistent_connections on
#não permite manter a conexão ativa quando esta for um erro, (404, 500, etc etc).
persistent_connection_after_error off

#detectar conexões permanentes com erro
detect_broken_pconn on
pipeline_prefetch on
ie_refresh on
relaxed_header_parser on


#fazer a entrega aos servidores WEB, aqui que acontece a 'magica'

cache_peer 192.168.0.2 parent 80 0 no-query originserver round-robin
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin

#EOF

Salve o squid.conf.

Execute o comando:

# squid -k parse

para validar o squid.conf.

Agora é necessário que o Squid crie a estrutura do cache, execute o comando:

# squid -z

O Squid vai criar a estrutura das pastas no /var/spool/squid.

Adicione o Squid na inicialização do sistema:

# chkconfig --add squid
# chkconfig squid on


Agora inicie o Squid:

# service squid start

Pronto! O Squid vai receber as requisições e repassar (aleatoriamente) para os servidores web.

Uma dica interessante, caso o servidor web 1 seja melhor do que o servidor web 2, você pode definir um PESO na opção cache_dir para que o melhor servidor atenda mais requisições e o servidor 2 atenda um número MENOR. Vamos supor que o www1 suporte 4 vezes mais do que o www2, então ficaria assim:

cache_peer 192.168.0.2 parent 80 0 no-query originserver round-robin weight=4
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin weight=1

A cada 4 requisições para o www1, ele manda a 1 para o www2. :)

Final

Basicamente este é o processo, vale lembrar que as configurações possuem bastante opções, principalmente a parte do cache_peer, recomendo a leitura do wiki do Squid no endereço:

Onde há uma fonte de exemplos de configurações testadas pelo pessoal que já utiliza.

Quem quiser ver um exemplo de um proxy que acabei de configurar basta acessar os sites:

Proxy reverso com Apache

FONTE: http://linuxnatyworking.wordpress.com/2011/10/01/proxy-reverso-com-apache/

Muita gente enxerga o proxy apenas como um servidor que intermedia as requisições entre a rede local e a internet, fazendo cache de páginas e controle de acesso. Sem dúvidas, o serviço mais conhecido e utilizado para este fim é o Squid (http://www.squid-cache.org/). Mas o Proxy tem outra característica/função, pouco conhecida mas muito útil: o Proxy Reverso.
Proxy Web x Proxy Reverso
O Proxy Web corresponde à ‘função’ conhecida pela maioria das pessoas. Nesta configuração, o proxy tem a função de compartilhar a internet com a rede local, receber as requisições feitas pelos clientes e buscar o que foi solicitado nos servidores Web. Além disso, o Proxy oferece mais algumas vantagens a um administrador de redes, como:
  • Controle de acesso: O acesso à internet pode ser controlado com base no horário, endereço IP do cliente, login e sites com conteúdo indesejado;
  • Cache de páginas: o Proxy guarda informações das páginas acessadas. Quando alguém acessa um endereço, o servidor procura primeiro nos seus arquivos armazenados, caso já possua a página, não precisa buscá-la novamente. O que acaba tornando a navegação mais rápida e evitando acessos desnecessários à Web;
  • Relatórios de acesso: Todos os logs de acesso são armazenados, o que permite que possam ser criados relatórios dos acessos realizados pelos clientes através do servidor;
O Proxy Web possui tanto função de servidor quanto de cliente. É servidor quando possui os objetos solicitados pelos navegadores e lhe envia as respostas. É cliente quando não possui algum objeto solicitado e precisa requisitá-lo ao servidor Web. Os proxies vêm sendo muito usados nas empresas, com o intuito de acelerar o acesso à Internet e evitar investimentos em ampliação de largura de banda.
O Proxy Reverso é um servidor instalado entre a internet e os servidores Web internos de uma empresa. As requisições externas, são direcionadas a um servidor interno por meio de um roteamento feito pelo Proxy Reverso. Dessa forma, ele é a única interface para as requisições externas.
Fonte: http://www.codeproject.com
Imagine a situação: Sua empresa possui o domínio xyz.com.br registrado, seu site (www.xyz.com.br) está em um servidor dentro da sua rede e, além do portal há outras aplicações que precisam ser disponibilizadas externamente. Para cada aplicação é necessário possuir um domínio ou subdomínio registrados? Não! Neste caso, pode ser usado o Proxy Reverso. Como?! É o que vou explicar daqui a pouco.
Além do roteamento de requisições externas, são vantagens do Proxy Reverso:
  • Segurança: Como o Proxy é a única interface externa da rede, ele “esconde” os demais servidores;
  • Criptografia: a criptografia SSL pode ser delegada o Proxy ao invés dos servidores internos;
  • Balanceamento de carga: o servidor pode distribuir a carga para vários servidores da rede;
  • Cache: assim como o Web Proxy, o Proxy Reverso pode manter em cache o conteúdo estático das requisições realizadas, ajudando assim a diminuir a carga dos servidores Web.
  • Compressão: o Proxy Reverso pode tornar o acesso mais rápido através da compressão do conteúdo acessado;
Configuração do Proxy Reverso
Além do Proxy Web, o Squid também pode se comportar como Proxy Reverso, mas neste artigo, teremos como base o Apache 2.2 para esta função. As configurações apresentadas funcionam tanto no Windows quanto no Linux. Então, vamos colocar as mãos na massa…
No arquivo de configuração do Apache, vamos fazer as seguintes alterações:
Nota: no linux geralmente o httpd.conf está nos diretórios /etc/http/conf ou /usr/local/http/conf, dependendo da distro utilizada.
    • Habilitar os módulos do Proxy. Para isso, descomente as linhas:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
    • Incluir vhosts na configuração. Para isso acrescente ou descomente a linha abaixo:
Nota: Os vhosts podem ser configurados no httpd.conf, optei pelo uso de um arquivo separado para organizar melhor o servidor.
Nota2:
 Os vhosts não são necessários na configuração do Proxy Reverso. São utilizados quando há mais de um nome para o mesmo servidor, e cada nome será direcionado para uma aplicação diferente.
Include conf/extra/httpd-vhosts.conf
    • Incluir o arquivo de mod-proxy. Para isso acrescente ou descomente a linha abaixo:
Include conf/extra/mod_proxy.conf
Nota: Caso os dois arquivos citados acima não existam no servidor, os mesmos devem ser criados.
Para fazer o roteamento das requisições direcionadas aos servidores internos é utilizado o ProxyPass, a sintaxe é simples, basicamente temos a estrutura:
ProxyPass                /destino       http://servidor.da.app:porta/destino
ProxyPassReverse         /destino       http://servidor.da.app:porta/destino
Para trabalhar com vhosts, crie ou edite o arquivo conf/extra/httpd-vhosts.conf e crie os vhosts com as seguintes configurações:
Nota: Sempre o contexto informado deve ser igual ao contexto da aplicação.
Nota2: Todos os diretórios referenciados pela aplicação no servidor de hospedagem devem ser configurados no Proxy, a não ser que eles sejam subdiretórios de algum que já tenha sido configurado.

<VirtualHost *:80>
 ServerName app1.xyz.com.br
 ErrorLog "logs/app1.xyz.com.br-error.log"
 CustomLog "logs/app1.xyz..com.br-access.log" common
 ProxyPass               /              http://app1.xyz.com.br:8040/
 ProxyPassReverse        /              http://app1.xyz.com.br:8040/

 ProxyPass              /contexto1      http://app1.xyz.com.br:8040/contexto1
 ProxyPassReverse       /contexto1      http://app1.xyz.com.br:8040/contexto1
</VirtualHost>
Para trabalhar somente com o roteamento das requisições, apontando as requisições recebidas para outros servidores da rede, crie ou edite o arquivo conf/extra/mod_proxy.conf e insira as linhas de acordo com as aplicações e servidores da sua rede:
ProxyPass           /aplicacao      http://servidor.xyz.com.br:8040/aplicacao
 ProxyPassReverse    /aplicacao      http://servidor.xyz.com.br:8040/aplicacao

 ProxyPass           /teste          http://servidor2.xyz.com.br/teste
 ProxyPassReverse    /teste          http://servidor2.xyz.com.br/teste
 ProxyPass           /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa
 ProxyPassReverse    /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa
Sempre que uma alteração no apache for efetuada o mesmo deve ser reiniciado.

terça-feira, 17 de abril de 2012

Combinando os comandos head e tail

FONTE: http://www.vivaolinux.com.br/dica/Combinando-os-comandos-head-e-tail
A diversidade de comandos via shell no Linux é espantosa, sendoassim, com um pipe (|) e uma pitada de criatividade, umadministrador de sistemas vai longe.

Na dica de hoje vamos aprender a combinar os comandos head etail para exibir determinadas partes de um arquivo texto. Vamosa um exemplo prático para ver como funcionará nossa combinação. Suponhaque temos o arquivo lista_nomes.txt com o seguinte conteúdo:

01. Aline Tavares Silva
02. Bruno Delgado Bonfim
03. Carla Garantizado Bela
04. Danilo Servantes
05. Eliane Costa Pinheiro
06. Elivaldo Pereira
07. Fábio Berbert de Paula
08. Felipe Azambuja
09. Gardineu Marques
10. Romário Belleza
Em nosso estudo de caso, quero exibir na tela somente o intervaloentre as linhas 5 e 8. Vamos às contas:
  • O intervalo de linhas de 5 à 8 contém 4 linhas (5, 6, 7 e 8)
  • Vamos usar o comando head para exibir as primeiras 8 linhas
  • Vamos usar o comando tail para exibir as últimas 4 das 8 linhas

Assim sendo, podemos construir o comando:
$ head -n 8 lista_nomes.txt | tail -n 4
Logo, se considerarmos a primeira linha quista como L1 e a última L2, podemosmontar o comando da seguinte forma:

$ head -n L2 <arquivo> | tail -n ((L2- L1) + 1)

Para simplificar ainda mais, vamos a um simples shell script:

#!/bin/bash
# linhas.sh
# Sintaxe: ./linhas.sh arquivo L1 L2

ARQ=$1
L1=`expr $2 + 1`
L2=$3

head -n $L2 $ARQ | tail -n $L1

LDAP

Fonte: http://sites.google.com/site/brenosobral/linux/ldap


- slapd: este é daemon isolado do LDAP. Ele escuta por conexões LDAP na porta 389 (636 para SSL)
- slurpd: este prorroga as alterações de um banco de dados LDAP para outra topologia mestre/escrava em uso.

Arquivo de configuração
/etc/openldap/slapd.conf ou /etc/ldap/sldapd.conf

LDAP significa Lightweight Directory Access Protocol, ou seja, Protocolo de Leve Acesso a Diretórios. Como o nome sugere, é um protocolo leve para acessar serviços de diretório. O LDAP roda em cima do protocolo TCP/IP ou outras conexões de transferência de serviços.
A forma de armazenamento dos dados em um servidor de Diretórios segue a hierarquia dos objetos a que pertence a entrada. No exemplo abaixo, para identificarmos o usuário, teremos algo como:
cn=Joao Maria,ou=People,o=empresa,st=para,c=br
Este tipo de entrada é chamada de DN (Distinguished Name) ou nome único. O DN deve sempre indicar todos os ramos da árvore LDAP, desde a base (dc=br) até a parte final, a identificação do usuário propriamente dita.

OBS: o DN deve ser único em todo o Diretório LDAP.
OBS: DIT é o topo da árvore de direorio (exemplo: dc=exemplo,dc=com,dc=br)
OBS: o serviço de LDAP pode ser acesso via LDAP URL's. Exemplo: ldap(s)://host:port/dn?attributes?scope?filter?extensions.

Uma outra forma de construir sua árvore de Diretórios é utilizando componentes de dominio Internet (dc).  Desta forma o LDAP fica que nem o DNS, exemplo:
uid=joao.maria,ou=People,dc=exemplo,dc=com,dc=br

ObjectClass
O LDAP permiti que você controle quais atributos são necessários ou quais são permitidos para uma entrada, por meio de um atributo especial chamado objectClass. Por exemplo, para cadastrarmos o topo da árvore do Diretório (dc=exemplo,dc=com,dc=br), devemos utilizar uma objectClass do tipo dcObject (Objetos Componentes de Dominios); cara criação de uma unidade organizacional (ou=People,dc=exemplo,dc=com,dc=br), utilizamos organizationaUnit; e de modo geral, para usuários, utilizamos inetOrgPerson.

Criação de arquivo LDIF

Criando o DIT
#arquivo empresa.ldif
dn: dc=exemplo,dc=com,dc=br
objectClass: dcObject
objectClass: organization
o: Exemplo Ltda
dc: exemplo

# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f empresa.ldif –W
Onde:
-x : autenticação simples
-h : servidor ldap
-D : usuário que fará a operação
-f : indica o nome do arquivo ldif
-W : solicita a senha para ser executa (poderia usar -w <senha>)


Criando as Unidades  Organizacionais
#arquivo unidades.ldif
dn: ou=People,dc=exemplo,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=exemplo,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: Group

# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f unidades.ldif –W


Criando um Usuário
#arquivo usuario.ldif
dn: uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br
cn: Joao Maria
sn: Silva
givenName: Joao
uid: joao.maria
uidNumber: 10000
gidNumber: 1000
homeDirectory: /home/joao.maria
loginShell: /bin/bash
gecos: Joao Maria
mail: joao.maria@exemplo.com.br
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: dsdsadasdasdasdsa

# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f unidades.ldif –W



Removendo um DN de uma Base de LDAP
Exemplo, neste caso vamos remover o DN uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br

# ldapdelete -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -v "uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br"



Modificando um DN de uma Base de LDAP
changetype - indica o tipo de ação a ser realizada que é modificar um registro existente, sendo as ações possíveis:
  -add: um atributo será acrescentado à entrada; caso este atributo já exista, será acrescentado mais um valor ao atributo.
  -delete: remove o valor daquele atributo e, caso este valor seja único, remove o atributo.
  -replace: substitui o valor do atributo pelo valor indicado.

Exemplo (changetype add)
#arquivo mudanca.ldif
dn: cn=Internet,ou=Group,dc=exemplo,dc=com,dc=br
changetype: modify                    ---> Estou dizendo que vou modificar o atributo do DN
add: memberUid                        ---> Estou dizendo que irei acrescentar um atributo
memberUid: joa.maria                    ---> O atributo que estou adicionando

OBS: Nesta entrada (DN), existe vários atributos memberUid, os quais seriam os usuários que pertencem ao grupo Internet.

# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif

Exemplo (changetype replace)
#arquivo mudanca.ldif
dn: uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br"   
changetype: modify                    --> Estou dizendo que vou modificar o atributo do DN
replace: userPassword                    ---> Estou dizendo que irei alterar o valor de um atributo
userPassword: senhanova                    --> O atributo que estou alterando

# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif

Exemplo (changetype delete)
#arquivo mudanca.ldif
dn: cn=Internet,ou=Group,dc=exemplo,dc=com,dc=br
changetype: modify                    ---> Estou dizendo que vou modificar o atributo do DN
delete: memberUid                    ---> Estou dizendo que irei deletar um atributo
memberUid: joao.maria                    ---> O atributo que estou deletando

OBS: Nesta entrada (DN), existe vários atributos memberUid, os quais seriam os usuários que pertencem ao grupo Internet.

# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif


Pesquisando uma Base Ldap
Sintaxe
ldasearch [opções] [filtros] [atributos ...]
-x :        autenticação simples
-h :        servidor ldap
-b :        base de pesquisa
-L :        formato da saída do LDIF. Se omitido é utilizado o formato estendido, pode ser -LL (suprime comentários) e -LLL (suprime versão)
[filtros] :    condição de pesquisa, se omitido assume '(objectClass)'
[atributos] :    atributos que devem ser retornados na pesquisa

Exemplos:
# ldapsearch -x '(objectClass)'
# ldapsearch -x '(cn=br*)'
# ldapsearch -x -LLL



Comandos úteis
* Para criar uma copia de segurança da base do servidor OpenLDAP execute:
# slapcat -l copia.ldif

* Para restaurar uma copia de segurança da base do servidor OpenLDAP execute:
# slapadd -l copia.ldif

* Para reindexar a base do servidor OpenLDAP execute:
# slapindex

* Testa os arquivos de configurações
# slaptest

* ara alterar a senha de uma entrada LDAP
# ldappasswd

* Gerar um senha SSHA
# slappasswd -h {SSHA}

* Para recuperar a base do servidor OpenLDAP, dentro da pasta /var/lib/ldap execute:
# db4.2_recover


PAM - LDAP
OBS:  To control the ldap based authentication through the PAM, Auth is not a required test.

[root@caete pam.d]# cat login
#%PAM-1.0
auth       required    pam_securetty.so
auth       required    pam_stack.so service=system-auth
auth       required    pam_nologin.so
account    required    pam_stack.so service=system-auth
password   required    pam_stack.so service=system-auth
session    required    pam_stack.so service=system-auth
session    optional    pam_console.so
[root@caete pam.d]# cat system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok        ---> Local autenticação
auth        sufficient    /lib/security/$ISA/pam_ldap.so use_first_pass            ---> LDAP autenticação
auth        required      /lib/security/$ISA/pam_deny.so

account     required      /lib/security/$ISA/pam_unix.so
account     sufficient    /lib/security/$ISA/pam_localuser.so

password    required      /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    sufficient    /lib/security/$ISA/pam_ldap.so use_authtok
password    required      /lib/security/$ISA/pam_deny.so

session optional /lib/security/$ISA/pam_mkhomedir.so silent umask=0027
session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
session     optional      /lib/security/$ISA/pam_ldap.so




Exemplo de LDAP com SAMBA
/etc/ldap/slapd.conf

#######################################################################
# Secção Global
#######################################################################

# Permite LDAPv2
allow bind_v2

# Definições de Schema e objectClass
include        /etc/ldap/schema/core.schema
include        /etc/ldap/schema/cosine.schema
include        /etc/ldap/schema/nis.schema
include        /etc/ldap/schema/misc.schema
include        /etc/ldap/schema/inetorgperson.schema
include        /etc/ldap/schema/samba.schema

# Permite a checagem dos "schemas" forçando entradas serem verificadas
# através de seus respectivos objectclass
schemacheck    on

# Onde o arquivo .pid está. O script /e/tc/init.d/slapd
# não conseguirá parar o serviço se você alterar isso.
pidfile        /var/run/slapd/slapd.pid

# Lista dos argumentos que são passados ao servidor
argsfile        /var/run/slapd/slapd.args

# ===== Habilita a geracao de log's =====
# Quando em producao colocar 0 se nao precisar de log
loglevel    256

# Diretorio dos modulos dinamicos
modulepath    /usr/lib/ldap
moduleload    back_bdb

#======================================================================
# Descomente as seguintes linhas para habilitar o SSL e usar o 
# certificado default snakeoil.
#TLSCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
#TLSCertificateKeyFile   /etc/ssl/private/ssl-cert-snakeoil.key
#======================================================================


########################################################################
## Secção Específica para Backend,
##                 do tipo bdb:
########################################################################
backend        bdb

########################################################################
### Secção Específica para:
###             Database #1 dc=teste:
#########################################################################
database    bdb

## A base de diretório
suffix        "dc=teste"

## Usuario LDAP_ROOT_DN
rootdn        cn=admin,dc=teste

## Senha do LDAP_ROOT_DN criptografada com
##  slappasswd -h {SSHA} -s testesenha
rootpw        {SSHA}jHhKoD6nS4yHSkJyS9qkoyPYuSMzsZwS

## Checkpoint do dtabase bdb após 256kb escritos ou 5 minutos terem passado
## desde o último checkpoint
checkpoint 256 5

## Onde os arquivos do database são fisicamente armazenados
directory    "/var/lib/ldap"

## Estruturas de Indices
index    cn,sn,uid,displayName                pres,sub,eq
index    memberUID,mail,givenname            eq,subinitial
index    objectClass,uidNumber,gidNumber            eq
index    sambaSID,sambaPrimaryGroupSID,sambaDomainName    eq
index    uniqueMember,entryCSN,entryUUID            eq

## Armazenar a data/hora que os registros forem modificados
lastmod on

## Os campos sambaLMPassword,sambaNTPassword,userPassword,
## sambaPasswordHistory e sambaPwdLastSet podem ser alterados
## pelos prórios usuários - se iverem se autenticado.
## Outros usuários não podem Ver estes campos.
access to attrs=sambaLMPassword,sambaNTPassword,userPassword,sambaPasswordHistory,sambaPwdLastSet
    by dn="cn=admin,dc=teste" write
    by anonymous auth
    by self write
    by * none


## Note that this is covered by the 'access to *'
## ACL below too but if you change that as people
## are wont to do you'll still need this if you
## want SASL (and possible other things) to work 
## happily.
access to dn.base="" by * read

## O dn administrador tem acesso completo, o restante 
## podem apenas Ler.
access to *
    by dn="cn=admin,dc=teste" write
    by * read



Exemplo do LDAP SLAVE:
/etc/ldap/slapd.conf

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
# Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile         /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile        /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
loglevel        none

# Where the dynamically loaded modules are stored
modulepath      /usr/lib/ldap
moduleload      back_hdb

# The maximum number of entries that is returned for a search operation
sizelimit 500

# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1

#######################################################################
# Specific Backend Directives for hdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend         hdb

#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend                <other>

#######################################################################
# Specific Directives for database #1, of type hdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        hdb

# The base of your directory in database #1
#suffix          "dc=dg,dc=teste"
suffix          "dc=teste"
rootdn          "uid=admin,ou=Usuarios,dc=teste"
rootpw          {SSHA}V+UUol0tJnPQdnRMinAwYxaoB/kVaD8u



# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
# rootdn          "uid=admin,ou=Usuarios,dc=teste"

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# The dbconfig settings are used to generate a DB_CONFIG file the first
# time slapd starts.  They do NOT override existing an existing DB_CONFIG
# file.  You should therefore change these settings in DB_CONFIG directly
# or remove DB_CONFIG and restart slapd for changes to take effect.

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0

# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057 for more
# information.

# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500

# Indexing options for database #1
index           objectClass eq
index           cn,sn eq
###########
index           entryCSN eq
index           entryUUID eq
##########
syncrepl        rid=001
                provider=ldap://10.10.48.2
                binddn="uid=admin,ou=Usuarios,dc=teste"
                bindmethod=simple
                credentials=@testesenha
                searchbase="dc=teste"
                filter="(objectClass=*)"
                attrs="*,+"
                type=refreshOnly
                interval=00:00:05:00
                retry="60 10 300 3"
                scope=sub
updateref ldap://10.10.48.2
############
###########
#index   cn,sn,uid,displayName                           pres,sub,eq
#index   memberUID,mail,givenname                        eq,subinitial
#index   objectClass,uidNumber,gidNumber                 eq
##########

# Save the time that the entry gets modified, for database #1
lastmod         on

# Checkpoint the BerkeleyDB database periodically in case of system
# failure and to speed slapd shutdown.
checkpoint      512 30

# Where to store the replica logs for database #1
# replogfile    /var/lib/ldap/replog

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange
        by dn="uid=admin,ou=Usuarios,dc=teste" write
        by anonymous auth
        by self write
        by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="uid=admin,ou=Usuarios,dc=teste" write
        by * read

# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
#        by dn="uid=admin,ou=Usuarios,dc=teste" write
#        by dnattr=owner write

#######################################################################
# Specific Directives for database #2, of type 'other' (can be hdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database        <other>

# The base of your directory for database #2
#suffix         "dc=debian,dc=org"



OBS:

No servidor master acrescente as seguintes linhas no /etc/ldap/slapd.conf

moduleload syncprov
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
#mais os indexes
index           entryCSN eq
index           entryUUID eq

Como estamos acrescentando novos índices:
# /etc/init.d/slapd stop
# slapindex -v
# chown openldap: /var/lib/ldap/*
# /etc/init.d/slapd start

Configuração do Apache

Fonte: http://web.ribafs.org/seguranca/91-seguranca-em-sites-com-o-cms-joomla/136-configuracoes-do-apache


.htaccess
O arquivo .htaccess ou "arquivo de configurração distribuído" oferece uma forma de alterar configurações sendo um arquivo por diretório. Um arquivo, contendo uma ou mais diretivas de configuração, é adicionado em um diretório particular e as diretivas se aplicam ao diretório e recursivamente a todos os seus subdiretórios.

Diretivas
É uma terminologia que o Apache usa para os comandos nos arquivos de configuração do Apache. São geralmente relativamente comanndos curtos, tipicamente um par chave valor que modificam o comportamento do Apache.
Os programadores podem executaar algumas dessas diretivas sem precisar mexer no core das configurações do Apache, httpd.conf.

Habilitando o .htaccess no Apache
httpd.conf:
AllowOverride All

Testar se .htaccess está habilitado:
-Criar dois arquivos em um diretório: index_bom.html e index.php
-Criar um arquivo .htaccess no diretório com o conteúdo:
# Esta diretiva faz com que o Apache primeiro procure index_good.html para abrir e somente não existindo abre index.php.
DirectoryIndex index_good.html index.html

Se ele abrir index_good.html então o .htaccess está habilitado.
index_good.html:
Suporte ao .htaccess habilitado.

index.php
Suporte ao .htaccess não habilitado.
Outra forma de testar é entrar algum erro de sintaxe no .htaccess.
Caso ele acuse um erro Internal Server Error, então está habilitado.
Caso simplesmente mostre a index, então está desabilitado.

.htaccess
ESTÁ HABILITADO
index.php
Não está habilitado o .htaccess

Diretivas diretamente no httpd.conf:
<Directory /www/supercool/test>
# Entre as Directivas aqui
</Directory>

O .htaccess é um arquivo oculto no Linux e muito útil para melhorar a segurança de sites entre outras funções.

Negar acesso a determinado diretório via web:
Crie um arquivo chamado .htaccess com estas duas linhas:
order deny,allow
deny from all

Impedindo a Listagem de diretórios
Por padrão a listagem dos diretórios está habilitada.
Para ocultar a listagem de um diretório para os visitantes e para os instrumentos de busca basta criar um .htaccess com a seguinte linha:
Options -Indexes

Alterando diretivas do php.ini via .htaccess
php_value memory_limit 64M
php_value max_execution_time 120
php_value max_input_time 120
php_value output_buffering off
php_flag display_errors off
php_flag session.auto_start off
php_flag register_globals off
php_flag magic_quotes_runtime off

.htaccess do Joomla personalizado para reforçar a segurança
# Revisão 10
# Versão atualizada http://forum.joomla.org/index.php/topic,124708.msg613819.html#msg613819
# Legenda: [1] - Exlusivo para PHP como módulo / [2] - Exlusivo para PHP como CGI
# Otimizado para usar com OpenSEF e joomla na raiz do site.com.br
# ALTERE para suas necessidades - para descomentar retire APENAS um #
##1. Comente se causar erros
Options +FollowSymLinks
##2. mod_rewrite em uso ( preferencialmente deve estar ativo para SEO funcionar)
RewriteEngine On
##3. se o joomla estiver em um subidiretorio, altere para ' RewriteBase /subdiretorio '
RewriteBase /

##4. Nega acesso público a arquivos terminados com '~' - ótimos para esconder backups
#RewriteRule ~$ - [F]

##5. Adiciona 'www' no link caso acessem direto *** site.com.br ***
##5. ( Melhora a ***SEO*** e evita problemas com javascripts )
##5. MODIFIQUE *6* e *7* para o seu site antes de usar
#RewriteCond %{REQUEST_FILENAME} !-s
#RewriteCond %{HTTP_HOST} !^www\.site\.com\.br
#RewriteRule (.*) http://www.site.com.br/$1 [R=301,L]

##***************** Início - Descomente qual SEF vai usar
##### Inicio - CASO USE O SEF DO CORE DO JOOMLA =P
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
##RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes#
#RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
#RewriteRule ^(content/|component/) index.php
##### Fim - - CASO USE O SEF DO CORE DO JOOMLA =P
#### Incício - CASO USE O SEF DE COMPONENTES DE TERCEIROS [OpenSEF =]
#RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes##
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php
#### Fim - CASO USE O SEF DE COMPONENTES DE TERCEIROS [OpenSEF =]
##***************** Fim - Descomente qual SEF vai usar
##***************** Início - Questões puramente de segurança
####### Usar .htaccess para alterar configurações do PHP caso não sejam padrões
## Previne ataques de variáveis globais
## Altere no arquivo /globals.php o '1' para '0' no ' define( 'RG_EMULATION', 0 ); '
##8. [1]Forçar Register globals = off
#php_flag register_globals off
##9. [1]Forçar Register globals = off
#php_value register_globals 0
## Previne ataques de injeção de código
##10. Forçar Magic Quotes = on
#php_flag magic_quotes_gpc on
## Previne Cross Site Scripting (XSS)
##11. Forçar Allow URL Fopen = off
#php_flag allow_url_fopen off
## Mudar para PHP5 com htaccess, vide: http://forum.joomla.org/index.php/topic,100045.0.html

########## Inicio - REWRITE RULES PARA EVITAR ATAQUES DE EXPLOIDS COMUNS
## Se tiver problemas no seu site, comente as linhas abaixo
## estas linhas evitam alguns dos ataques mais comuns ao joomla.

## Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
## Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
## Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
## Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
## Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
## Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]

######### Inicio - BOAS PRÁTICAS DE SEGURANÇA
## 1º Autere o nome do Superadministrador para outro diferente de 'admin' - Vai dificultar quebras de senha
## Área administrativa > Site > Administrar usuários > Administrator > Detalhes do Usuário > Nome de Usuário: > **mude**
## 2º Não crie nem permaneça com senhas ***fracas*** para usuários, ftp e banco de dados.
## 4º Use senhas diferentes para sites diferentes.em especial se você exibe publicamente lista com todos os seus sites
######### Inicio - BOAS PRÁTICAS DE SEGURANÇA

########## Fim - REWRITE RULES PARA EVITAR ATAQUES DE EXPLOIDS COMUNS
##***************** Fim - Questões puramente de segurança
##***************** Fim - Em caso de erro

#### SE HOUVER ERRO DO TIPO "500 - Internal Error"
## 1º Rewrite pode não estar habilitado em seu servidor
## 2º Você descomentou algo errado ou adiciou alguma diretiva que o servidor não permite
## por exemplo a *Options +FollowSymLinks* ou *RewriteBase*##
#### SE HOUVER ERRO DO TIPO " 404 - File or directory not found"
## 1º Você trocou de servidor, ou fez alterações diverças e deletou arquivos ou artigos
## 2º O rewrite está habilitado no servidor ( por isso não da erro 500 ) mas ainda assim não funciona direito e da erro 404##
##### CHECAR SE REWRITE ESTÁ HABILITADO
## PHP CGI: Administrador >Sistema > Info do sistema > Php Info > standard >Directive > **url_rewriter.tags** aparece habilitado?
## PHP Módulo: Administrador >Sistema > Info do sistema > Php Info > apache2handler > mod_rewrite > Loaded Modules > **mod_rewrite** aparece habilitado?
#### TESTAR NA ***PRÁTICA*** SE REWRITE ESTÁ HABILITADO NO SERVIDOR##
## 1° Vá em administrator> SEO > enable > save
## 2° Coloque um .htaccess na raiz do sei site ***SOMENTE*** com as seguintes linhas##
# Options +FollowSymLinks
# Redirect /joomla.html http://www.joomla.org##
## 3° Vá na página www.seusite.com/joomla.html, e, se foi redirecionado para 'http://www.joomla.org'
## o mod_rewrite está ativado. Caso não esteja, as URLs amigáveis normalmente não funcionam##
##### SOLUÇÕES PARA REWRITE DESABILITADO ("500") OU COM ERROS ("404")
## 1º Solicite a habilitação da diretiva pelo host, ou troque de host =]
## 2º Descomente a próxima linha ( vai fazer com que a index do joomla adminisstre a URL, em vez do servidor )
#ErrorDocument 404 /index.php # caso joomla esteja em subdiretório /subdiretorio/index.php
## e, se necessário, comente *Options +FollowSymLinks* ou *RewriteEngine On*
########################## EM CASO DE ERRO #########################
##***************** Fim - Em caso de erro

##Também dá para adicionar as linhas abaixo.
##Porém, isso vai consumir um pouco mais de recurso de processamento do servidor. Por isso, é bom estar atento.
##***************** Início - Bloquear acesso a Bots de email e de bots que BAIXAM o site todo
## Se você quer evitar que certos sites que capturam emails na sua página ou que fazem o download completo de seu site
## pode tentar usar as linhas abaixo para negar acesso e dar-lhes erro 403. Se não quiser delete todas as linhas.
## Há VÁRIOS links na internet falando disso. Porém, veja o link http://forum.joomla.org/index.php/topic,79398.0.html##
## *** AINDA não testei mas farei em BREVE **##
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto: craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
##***************** Fim - Bloquear acesso a Bots de email e de bots que BAIXAM o site todo

Autenticação Básica
-Criar um arquivo com login e senha encriptados
-Adicionar algumas linhas ao .htaccess para usar este arquivo
Criar um arquivo .htpasswd para o usuário jose com senha senhajose
.htpasswd
jose:7fd0af4aa9342b6afdb2ca7573555cc3
.htaccess
# Enable Basic Authentication
AuthType Basic
# This is what will be displayed to the user on the login dialog.
AuthName "Access to the Hidden Files"
# This you must edit. It is the absolute path to the .htpasswd file.
AuthUserFile /path/to/.htpasswd
# This allows any user from inside the .htpasswd file to access the
# content if they provide the proper username and password.
Require valid-user

Agora execute o comando:
htpasswd -nbm jose josesenha

Veja o help do htpasswd para detalhes
htpasswd --help
jose:$apr1$nX9Dg9r/$37gNIEnEt1ahv/IWfugBh0

Header
Podemos usar o Apache para sobrescrever ou adicionar um novo header para a página.
Header add X-HeaderName "Header Value"

Redirect Everyone Except IP address to alternate page

ErrorDocument 403 http://www.yahoo.com/
Order deny,allow
Deny from all
Allow from 208.113.134.190
Para sites
This lets google crawl the page, lets me access without a password, and lets my client access the page WITH a password. It also allows for XHTML and CSS validation! (w3.org)
AuthName "Under Development"
AuthUserFile /home/sitename.com/.htpasswd
AuthType basic
Require valid-user
Order deny,allow
Deny from all
Allow from 208.113.134.190 w3.org htmlhelp.com googlebot.com
Satisfy Any

Set Timezone of the Server (GMT)

SetEnv TZ America/Indianapolis

Administrator Email for ErrorDocument

SetEnv SERVER_ADMIN 
 webmaster@google.com

ServerSignature for ErrorDocument

ServerSignature off | on | email

Charset and Language headers

AddDefaultCharset UTF-8
DefaultLanguage en-US

Disallow Script Execution

Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

Deny Request Methods

RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|OPTIONS|POST|PUT)
RewriteRule .* - [F]

Force “File Save As” Prompt

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

Show CGI Source Code

RemoveHandler cgi-script .pl .py .cgi
AddType text/plain .pl .py .cgi

Serve all .pdf files on your site using .htaccess and mod_rewrite with the php script.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.pdf$  /cgi-bin/pdf.php?file=$1 [L,NC,QSA]

Rewrite to www

RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^www\.askapache\.com$ [NC]
RewriteRule ^(.*)$ http://www.askapache.com/$1 [R=301,L]

Rewrite to www dynamically

RewriteCond %{REQUEST_URI} !^/robots\.txt$ [NC]
RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$   [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]

301 Redirect Old File

Redirect 301 /old/file.html http://www.askapache.com/new/file.html

301 Redirect Entire Directory

RedirectMatch 301 /blog(.*) http://www.askapache.com/$1

Protecting your php.cgi

<FilesMatch "^php5?\.(ini|cgi)$">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</FilesMatch>

Set Cookie based on Request

This code sends the Set-Cookie header to create a cookie on the client with the value of a matching item in 2nd parantheses.
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)(de|es|fr|it|ja|ru|en)/$ - [co=lang:$2:.askapache.com:7200:/]

Set Cookie with env variable

Header set Set-Cookie "language=%{lang}e; path=/;" env=lang

Custom ErrorDocuments

ErrorDocument 100 /100_CONTINUE
ErrorDocument 101 /101_SWITCHING_PROTOCOLS
ErrorDocument 102 /102_PROCESSING
ErrorDocument 200 /200_OK
ErrorDocument 201 /201_CREATED
ErrorDocument 202 /202_ACCEPTED
ErrorDocument 203 /203_NON_AUTHORITATIVE
ErrorDocument 204 /204_NO_CONTENT
ErrorDocument 205 /205_RESET_CONTENT
ErrorDocument 206 /206_PARTIAL_CONTENT
ErrorDocument 207 /207_MULTI_STATUS
ErrorDocument 300 /300_MULTIPLE_CHOICES
ErrorDocument 301 /301_MOVED_PERMANENTLY
ErrorDocument 302 /302_MOVED_TEMPORARILY
ErrorDocument 303 /303_SEE_OTHER
ErrorDocument 304 /304_NOT_MODIFIED
ErrorDocument 305 /305_USE_PROXY
ErrorDocument 307 /307_TEMPORARY_REDIRECT
ErrorDocument 400 /400_BAD_REQUEST
ErrorDocument 401 /401_UNAUTHORIZED
ErrorDocument 402 /402_PAYMENT_REQUIRED
ErrorDocument 403 /403_FORBIDDEN
ErrorDocument 404 /404_NOT_FOUND
ErrorDocument 405 /405_METHOD_NOT_ALLOWED
ErrorDocument 406 /406_NOT_ACCEPTABLE
ErrorDocument 407 /407_PROXY_AUTHENTICATION_REQUIRED
ErrorDocument 408 /408_REQUEST_TIME_OUT
ErrorDocument 409 /409_CONFLICT
ErrorDocument 410 /410_GONE
ErrorDocument 411 /411_LENGTH_REQUIRED
ErrorDocument 412 /412_PRECONDITION_FAILED
ErrorDocument 413 /413_REQUEST_ENTITY_TOO_LARGE
ErrorDocument 414 /414_REQUEST_URI_TOO_LARGE
ErrorDocument 415 /415_UNSUPPORTED_MEDIA_TYPE
ErrorDocument 416 /416_RANGE_NOT_SATISFIABLE
ErrorDocument 417 /417_EXPECTATION_FAILED
ErrorDocument 422 /422_UNPROCESSABLE_ENTITY
ErrorDocument 423 /423_LOCKED
ErrorDocument 424 /424_FAILED_DEPENDENCY
ErrorDocument 426 /426_UPGRADE_REQUIRED
ErrorDocument 500 /500_INTERNAL_SERVER_ERROR
ErrorDocument 501 /501_NOT_IMPLEMENTED
ErrorDocument 502 /502_BAD_GATEWAY
ErrorDocument 503 /503_SERVICE_UNAVAILABLE
ErrorDocument 504 /504_GATEWAY_TIME_OUT
ErrorDocument 505 /505_VERSION_NOT_SUPPORTED
ErrorDocument 506 /506_VARIANT_ALSO_VARIES
ErrorDocument 507 /507_INSUFFICIENT_STORAGE
ErrorDocument 510 /510_NOT_EXTENDED

Implementing a Caching Scheme with .htaccess

# year
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
Header set Cache-Control "public"
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
</FilesMatch>
#2 hours
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>

Password Protect single file

<Files login.php>
AuthName "Prompt"
AuthType Basic
AuthUserFile /home/askapache.com/.htpasswd
Require valid-user
</Files>

Password Protect multiple files

<FilesMatch "^(private|phpinfo)\.*$">
AuthName "Development"
AuthUserFile /.htpasswd
AuthType basic
Require valid-user
</FilesMatch>

Send Custom Headers

Header set P3P "policyref=\"http://www.askapache.com/w3c/p3p.xml\""
Header set X-Pingback "http://www.askapache.com/xmlrpc.php"
Header set Content-Language "en-US"
Header set Vary "Accept-Encoding"

Blocking based on User-Agent Header

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT

Blocking with RewriteCond

RewriteCond %{HTTP_USER_AGENT} ^.*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures).*$ [NC]
RewriteRule . - [F,L]

.htaccess for mod_php

SetEnv PHPRC /location/todir/containing/phpinifile

.htaccess for php as cgi

AddHandler php-cgi .php .htm
Action php-cgi /cgi-bin/php5.cgi

Shell wrapper for custom php.ini

#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec php5.cgi -c /abs/php5/php.ini

Add values from HTTP Headers

SetEnvIfNoCase ^If-Modified-Since$ "(.+)" HTTP_IF_MODIFIED_SINCE=$1
SetEnvIfNoCase ^If-None-Match$ "(.+)" HTTP_IF_NONE_MATCH=$1
SetEnvIfNoCase ^Cache-Control$ "(.+)" HTTP_CACHE_CONTROL=$1
SetEnvIfNoCase ^Connection$ "(.+)" HTTP_CONNECTION=$1
SetEnvIfNoCase ^Keep-Alive$ "(.+)" HTTP_KEEP_ALIVE=$1
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
SetEnvIfNoCase ^Cookie$ "(.+)" HTTP_MY_COOKIE=$1

Stop hotlinking

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?askapache.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ http://www.askapache.com/feed.gif [R=302,L]

Turn logging off for IP

SecFilterSelective REMOTE_ADDR "208\.113\.183\.103" "nolog,noauditlog,pass"

Turn logging on for IP

SecFilterSelective REMOTE_ADDR "!^208\.113\.183\.103" "nolog,noauditlog,pass"
SecFilterSelective REMOTE_ADDR "208\.113\.183\.103" "log,auditlog,pass"

Advanced Mod_Rewrite Examples

Here are some specific examples taken mostly from my WordPress Password Protection plugin, that also does alot more than password protection as you can see from the following mod_rewrite examples. These are a few of the mod_rewrite uses that BlogSecurity declared pushed the boundaries of Mod_Rewrite! Some of these snippets are quite exotic and unlike anything you may have seen before, also only for those who understand them as they can kill a website pretty quick.

Directory Protection

Enable the DirectoryIndex Protection, preventing directory index listings and defaulting. [Disable]
Options -Indexes
DirectoryIndex index.html index.php /index.php

Password Protect wp-login.php

Requires a valid user/pass to access the login page[401]
<Files wp-login.php>
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /home/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
</Files>

Password Protect wp-admin

Requires a valid user/pass to access any non-static (css, js, images) file in this directory.[401]
Options -ExecCGI -Indexes +FollowSymLinks -Includes
DirectoryIndex index.php /index.php
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /home/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$">
Allow from All
</FilesMatch>
<FilesMatch "(async-upload)\.php$">
<IfModule mod_security.c>
SecFilterEngine Off
</IfModule>
Allow from All
</FilesMatch>

Protect wp-content

Denies any Direct request for files ending in .php with a 403 Forbidden.. May break plugins/themes [401]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /wp-content/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !^.+flexible-upload-wp25js.php$
RewriteCond %{REQUEST_FILENAME} ^.+\.(php|html|htm|txt)$
RewriteRule .* - [F,NS,L]

Protect wp-includes

Denies any Direct request for files ending in .php with a 403 Forbidden.. May break plugins/themes [403]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /wp-includes/.*$ [NC]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /wp-includes/js/.+/.+\ HTTP/ [NC]
RewriteCond %{REQUEST_FILENAME} ^.+\.php$
RewriteRule .* - [F,NS,L]

Common Exploits

Block common exploit requests with 403 Forbidden. These can help alot, may break some plugins. [403]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ///.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\=?(http|ftp|ssl|https):/.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\?.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(asp|ini|dll).*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(htpasswd|htaccess|aahtpasswd).*\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]

Stop Hotlinking

Denies any request for static files (images, css, etc) if referrer is not local site or empty. [403]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_REFERER} !^http://www.askapache.com.*$ [NC]
RewriteRule \.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$ - [F,NS,L]

Safe Request Methods

Denies any request not using GET,PROPFIND,POST,OPTIONS,PUT,HEAD[403]
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|PROPFIND|OPTIONS|PUT)$ [NC]
RewriteRule .* - [F,NS,L]

Forbid Proxies

Denies any POST Request using a Proxy Server. Can still access site, but not comment. See Perishable Press [403]
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:VIA}%{HTTP:FORWARDED}%{HTTP:USERAGENT_VIA}%{HTTP:X_FORWARDED_FOR}%{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION}%{HTTP:HTTP_PC_REMOTE_ADDR}%{HTTP:HTTP_CLIENT_IP} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]

Real wp-comments-post.php

Denies any POST attempt made to a non-existing wp-comments-post.php[403]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*/wp-comments-post\.php.*\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]

HTTP PROTOCOL

Denies any badly formed HTTP PROTOCOL in the request, 0.9, 1.0, and 1.1 only[403]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ .+\ HTTP/(0\.9|1\.0|1\.1) [NC]
RewriteRule .* - [F,NS,L]

SPECIFY CHARACTERS

Denies any request for a url containing characters other than “a-zA-Z0-9.+/-?=&” – REALLY helps but may break your site depending on your links. [403]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]

BAD Content Length

Denies any POST request that doesnt have a Content-Length Header[403]
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Length} ^$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]

BAD Content Type

Denies any POST request with a content type other than application/x-www-form-urlencoded|multipart/form-data[403]
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Type} !^(application/x-www-form-urlencoded|multipart/form-data.*(boundary.*)?)$ [NC]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]

Missing HTTP_HOST

Denies requests that dont contain a HTTP HOST Header.[403]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_HOST} ^$
RewriteRule .* - [F,NS,L]

Bogus Graphics Exploit

Denies obvious exploit using bogus graphics[403]
RewriteCond %{HTTP:Content-Disposition} \.php [NC]
RewriteCond %{HTTP:Content-Type} image/.+ [NC]
RewriteRule .* - [F,NS,L]

No UserAgent, Not POST

Denies POST requests by blank user-agents. May prevent a small number of visitors from POSTING. [403]
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]

No Referer, No Comment

Denies any comment attempt with a blank HTTP_REFERER field, highly indicative of spam. May prevent some visitors from POSTING. [403]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*/wp-comments-post\.php.*\ HTTP/ [NC]
RewriteCond %{HTTP_REFERER} ^-?$
RewriteRule .* - [F,NS,L]

Trackback Spam

Denies obvious trackback spam. See Holy Shmoly! [403]
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^.*(opera|mozilla|firefox|msie|safari).*$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.+/trackback/?\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]

Map all URIs except those corresponding to existing files to a handler

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule . /script.php

Map any request to a handler

In the case where all URIs should be sent to the same place (including potentially requests for static content) the method to use depends on the type of the handler. For php scripts, use:
For other handlers such as php scripts, use:
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/script.php
RewriteRule .* /script.php

And for CGI scripts:

ScriptAliasMatch .* /var/www/script.cgi

Map URIs corresponding to existing files to a handler instead

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
RewriteCond %{REQUEST_URI} !=/script.php
RewriteRule .* /script.php
If the existing files you wish to have handled by your script have a common set of file extensions distinct from that of the hander, you can bypass mod_rewrite and use instead mod_actions. Let’s say you want all .html and .tpl files to be dealt with by your script:
Action foo-action /script.php
AddHandler foo-action html tpl

Deny access if var=val contains the string foo.

RewriteCond %{QUERY_STRING} foo
RewriteRule ^/url - [F]

Removing the Query String

RewriteRule ^/url /url?

Adding to the Query String

Keep the existing query string using the Query String Append flag, but add var=val to the end.
RewriteRule ^/url /url?var=val [QSA]

Rewriting For Certain Query Strings

Rewrite URLs like http://askapache.com/url1?var=val to http://askapache.com/url2?var=val but don’t rewrite if val isn’t present.
RewriteCond %{QUERY_STRING} val
RewriteRule ^/url1 /url2

Modifying the Query String

Change any single instance of val in the query string to other_val when accessing /path. Note that %1 and %2 are back-references to the matched part of the regular expression in the previous RewriteCond.
RewriteCond %{QUERY_STRING} ^(.*)val(.*)$
RewriteRule /path /path?%1other_val%2




O arquivo .htaccess, que no linux é um arquivo oculto (inicia com ponto), é um arquivo muito útil para a administração de segurança e vários outros recursos em sites. Em especial quando não temos acesso direto às configurações do Apache.
Usado para configurar o Apache e também o PHP (somente se instalado como módulo do Apache).
Veja alguns dos seus vários e úteis usos. Alguém já disse: "Use e abuse do .htaccess, pois ele é seu amigo."

Listar Arquivos de Diretório
Se por exemplo você quer que o diretório onde você colocou o .htaccess liste os arquivos caso não haja um index.html da vida, você adiciona o seguinte no .htaccess:
Options +Indexes

E para tirar essa opção:
Options -Indexes
Permitir acesso somente para uma faixa de IPs:
<Files pagina_erro_403.php>
Order Deny,Allow
Deny from all
Allow from 192.168.
</Files>

Como personalizar páginas de erro:
ErrorDocument 403 /acesso_negado.php
ErrorDocument 404 /nao_encontrado.php
ErrorDocument 500 /erro_interno_servidor.php

401 - Authorization Required
400 - Bad request
403 - Forbidden
500 - Internal Server Error
404 - Wrong page

Ativar mod_rewrite
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pagina=$1
Bloqueando visitante de certo IP:
deny from 000.000.000.000
Deixa a Intranet acessar
Order allow,deny
allow from 192.168.0.
deny from all
Permitir visitante de certo IP
allow from 000.000.000.000
Deixa todo mundo acessar, menos o IP 192.168.0.25
Order deny,allow
deny from 192.168.0.25
allow from all

Impedir todos de visitarem o site
deny from all
Obs.: no caso acima somente permite acesso pelo cpanel, ftp ou outro, nunca pela web.
Restringe o arquivo_secreto.html somente para o IP 192.168.0.30
<Files arquivo_secreto.html>
Order allow,Deny
Allow from 192.168.0.30
Deny from all
</Files>

Restringe o diretório admin para utilizar senhas
<Directory /admin>
AuthName "Acesso Restrito à Usuários"
AuthType Basic
AuthUserFile /etc/httpd/auth/acesso
AuthGroupFile /etc/httpd/auth/grupos
require group admin
</Directory>

Nega o acesso dos clientes ao .htaccess (bom colocar no httpd.conf)
Vem com a configuração padrão do Apache
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

Redirecionar todos os visitantes que chegarem em /antigo para o site http://www.novosite.com/novo
Redirect /antigo http://www.site.com/novo

Arquivo http://www.site.com/antigo/teste.png será redirecionado para http://www.site.com/novo/teste.png
Proteger Diretório com Login e Senha
Usar o comando htpasswd para criar a senha com a seguinte sintaxe:
htpasswd -c arquivodasenha login
htpasswd -c senha joao
O arquivo gerado conterá uma linha com login:senhacriptografada
Inserir no diretório um arquivo .htaccess com o conteúdo:
AuthName "Acesso Restrito"
AuthType Basic
AuthUserFile /backup/www/diretorio/senha
Require valid-user
/backup/www/diretorio/senha - é o caminho complato para o arquivo com a senha
Bloquear Perl
Muitos scripts de ataque são criados em Perl, portanto para bloquear perl e outros bots para que não acessem seu site, adicione o código abaixo em um .htaccess (no raiz do domínio):
SetEnvIfNoCase User-Agent libwww-perl bad_bots
order deny,allow
deny from env=bad_bots

bogus handler para perl
Caso não esteja usando scripts em Perl em seu site adicione um "bogus handler" para estes scripts no .htaccess:
##Deny access to all CGI, Perl, Python and text files
<FilesMatch "\.(cgi|pl|py|txt)">
Deny from all
</FilesMatch>
## Se não está usando um arquivo robots.txt, então comente
# as 3 linhas abaixo para evitar o acesso somente ao arquivo robots.txt
<FilesMatch robots.txt>
Allow from all
</FilesMatch>

Outros recursos importantes para o .htaccess:
#Enable mod_rewrite and insert some sample rules:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes##
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
RewriteRule ^(content/|component/) index.php
Enable security mod:
SecFilterEngine On
SecFilterScanPOST On
# SecAuditLog logs/audit_log # Not sure what my host would think of that...
SecFilterDefaultAction "deny,status:412"
# WEB-ATTACKS wget command attempt
SecFilterSelective THE_REQUEST "wget "
Set different handlers for scripts:
AddHandler nonworkig .cgi .pl .py

Protegendo o acesso direto ao .htaccess e ao configuration.php:
<Files .htaccess>
order allow,deny
deny from all
</Files>

<FilesMatch "configuration.php">
Order allow,deny
Deny from all
</FilesMatch>
E outros
<FilesMatch "\.(htaccess|htpasswd|ini|phps|log|sh|conf)$">
Order allow,deny
Deny from all
</FilesMatch>

Mudando recursivamente as permissões:
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod 707 images
chmod 707 images/stories
chown apache:apache cache

Protegendo o configuration.php do acesso públic
Adicionar ao .htaccess:
<FilesMatch "configuration.php">
Order allow,deny
Deny from all
</FilesMatch>
<Files .htaccess>
order allow,deny
deny from all
</Files>
Muito Importante

Adicione ao final do .htaccess

# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
Criando um sistema de detecção de intrusão com o .htaccess
URL encoding attacks such as SQL injection, white space, javascript, etc and redirects the URL to log.php. Log.php will then alert you via email.
http://www.hackosis.com/simple-htaccess-intrusion-detection-system/
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\"|%22).*(\>|%3E|<|%3C).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (javascript:).*(\;).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (\;|\’|\"|\%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteRule (,|;|<|>|’|`) /log.php [NC]
Criar o arquivo lop.php no raiz do site. Mudar o e-mail admin@site.com para receber a notificação:

<?php
$r= $_SERVER['REQUEST_URI'];
$q= $_SERVER['QUERY_STRING'];
$i= $_SERVER['REMOTE_ADDR'];
$u= $_SERVER['HTTP_USER_AGENT'];
$mess = $r . ' | ' . $q . ' | ' . $i . ' | ' .$u;
mail(" admin@site.com","bad request",$mess,"from: bot@site.com");
echo "Hot Damn!";
?>