Como instalar Nobody Check

Utilizar boas regras no mod_security é indispensável, porém infelizmente só isso não resolve o problema de processos maliciosos no apache devido a falhas de segurança de scripts/sistemas de clientes.

Abaixo, abordarei a instalação e configuração do nobody check, que irá ajudar bastante a manter a segurança do Apache e kilar o processo quando encontrado.

1- Efetue login em seu servidor pelo SSH.

2- Baixe o instalador

wget http://www.webhostgear.com/projects/nobodycheck/install.sh

3- Transformando install em executável

chmod +x install.sh

4 – Instalando e removendo o instalador

./install.sh
rm -f install.sh

Neste tempo, o nobody check já está instalado , agora vamos configurá-lo.

5- Editando as configurações:

pico /usr/local/nobody_check/nc.conf

Digite entre as aspas a conta de e-mail que irá receber os alertas:

to= "email@dominiodousuario.com"

em killproc mude para 1, desta forma o processo malicioso será interrompido.

Em loglvl deixe 1 para que seja enviado o relatório quando o nobody check encontrar algo de errado.

Após a instalação, será criado uma referencia no cron para rodar o nobody check de hora em hora. Na minha opinião é uma boa solução mudar o tempo para no máximo 30 em 30 minutos.

Para isso edite o cron

crontab -e

onde está

0 */1 * * * /usr/local/nobody_check/nobody_check >/dev/null 2>&1

mude para

*/30 * * * *  /usr/local/nobody_check/nobody_check >/dev/null 2>&1

a seguir salve e saia do cron (se estiver utilizando o pico – ctrl+x e y)

Dica: quando o processo malicioso for detectado veja a data e hora no e-mail do Nobody Check e investigue no mod_security se existe alguma referência neste mesmo horário.

Nem sempre funciona mas poderá ajudá-lo com algumas pistas para descobrir qual domínio gerou o problema.

Germano Pires Ferreira
Administrador Linux

Como desabilitar Shell Script ( Windows Host Script )

O windows Host Script, conhecido também como shell script, permite a execução de scripts na máquina que interagem como o sistema operacional Windows. São muito úteis para manutenção e automatização de tarefas, no entanto, o uso desta ferramenta por pessoas não autorizadas podem causar sérios problemas, uma vez que ele terá controle total sobre o sistema operacional.

É claro, num servidor com as devidas permissões, um usuário comum não deverá conseguir executar nenhum script que possa causar algum estrago. De qualquer maneira, é muito difícil verificar o servidor a ponto de se afirmar com certeza que não existe nenhuma brecha na segurança. O melhor a ser feito é desabilitar a execução.

Existem duas formas básicas de resolver este problema. Na primeira delas, iremos desabilitar a execução para todos os usuários da máquina. O procedimento é:
1. Abra o prompt de comando e digite:
Digite regsvr32.exe -u wshom.ocx

Desta maneira, você estará removendo o registro do wshom.ocx, responsável pela execução do shell script.

Para registrar novamente, faça:

Abra o prompt de comando e digite:
regsvr32.exe wshom.ocx

A segunda maneira, é alterar a permissão de execução do shell script diretamente no registro do windows. O procedimento é:

1. Clique em iniciar -> executar -> digite regedit <ENTER>
2. Vá para a chave [HKEY_CLASSES_ROOT\WScript.Shell] com o botão direito do mouse nesta chave, vá em permissão (permission) e altere as permissões para permitir a execução do shell script somente para os usuários e grupos que você sabe que devem realmente utilizá-lo.

Como instalar apf firewall

Abaixo segue uma abordagem de como instalar e configurar o APF Firewall utilizando as configurações padrões em servidores com WHM/cPanel.

*Importante: Eu não sugiro a instalação do APF Firewall em servidores VPS.
Efetue login como root no SSH de seu servidor linux:

Digite os comandos abaixo para baixar e instalar o APF:

cd /root/
wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz
tar -xvzf apf-current.tar.gz
rm -f apf-current.tar.gz
cd apf-0.9.6-2
./install.sh

Depois de instalado vamos configurar editando o arquivo de configuração:.

cd /etc/apf
pico -w conf.apf

Localize:

USE_DS=”0″

e mude para:

USE_DS=”1″

Abaixo segue como deverá ficar cada uma das entradas(e saídas) no arquivo de configuração e a seguir uma descrição de cada uma das portas:

Localize e mude as configurações a seguir :
**Nota: digite nas mesma linha

Common ingress (inbound) TCP ports
IG_TCP_CPORTS="21,22,25,53,80,110,143,465,953,993,995,2082,2083,2084,2086,2087,2095,2096,3306,6666,7786,3000_3500"

Nota: Lembre-se , o padrão para a porta ssh é 22, porém se você modificou para outra porta, substitua 22 em “IG_TCP_CPORTS” .

Descrição de portas:
—–
21 FTP (TCP)
22 SSH (TCP)
25 SMTP (TCP)
53 DNS – Domain Name Server (TCP)
80 HTTP (TCP)
110 POP3 (TCP)
143 IMAP (TCP)
443 HTTPS (TCP)
465 sSMTP (TCP)
953 ??BIND??
993 IMAP4 – TLS/SSL (TCP)
995 POP3 – TLS/SSL (was spop3) (TCP)
2082 CPANEL (TCP)
2083 CPANEL SSL (TCP)
2084 entropychat server (não habilite esta porta se você não utilizar este serviço) (TCP)
2086 WHM (TCP)
2087 WHM SSL (TCP)
2095 WebMail (TCP)
2096 WebMail SSL
3306 mySQL acesso remoto (TCP)
6666 Melange chat Server (não habilite esta porta se você não utilizar este serviço) (TCP)
7786 Interchange (TCP)
3000_3500
5100 for ASP,
8080 and 8443 for JSP (não habilite esta porta se você não utilizar este serviço).

Common ingress (inbound) UDP ports
IG_UDP_CPORTS=”53,6277″
53 DNS – Domain Name Server
6277 SpamAssassin / DCC (email scanning)

Common ICMP (inbound)

IG_ICMP_TYPES=”3,5,11,0,30,8″
0 Echo Reply
3 Destination Unreachable
5 Destination Unreachable
8 Echo
11 Time Exceeded
30 Traceroute
—–

Common egress (outbound) TCP ports

EG_TCP_CPORTS=”21,25,37,53,80,110,113,#123,443,43,873,953,2089,2703,3306″

21 FTP
25 SMTP
37 Required for CPANEL Licensing
53 DNS – Domain Name Server
80 HTTP
110 POP3
113 Authentication Protocol (AUTH)
123 NTP (Network Time)
443 HTTPS
43 WHOIS
873 rsync (CPanel updates)
953 BIND ??
2089 Necessária para validar a licença do cPanel
2703 Razor (email scanning)
3306 mySQL acesso remoto
—–

Common egress (outbound) UDP ports
EG_UDP_CPORTS=”20,21,53,873,953,6277″
20 ftp-data
21 FTP
53 DNS – Domain Name Server
873 rsync
953 BIND ??
6277 SpamAssassin / DCC (email scanning)
—–

Common ICMP (outbound) typesEG_ICMP_TYPES=”all”==

Agora salve e saia do arquivo de configuração (ctrl+x) y

Para iniciar o APF

/usr/local/sbin/apf -s

ou simplesmente

apf -s

Os comandos para o APF são

-s start
-r restart
-f flush – stop
-l list
-st status
-a HOST allow HOST
-d HOST deny HOST

Com o APF iniciado efetue um novo login no SSH para se certificar que as configurações estão corretas. Se por algum motivo algo não funcione em seu servidor devido as configurações, não se preocupe, inicialmente o APF funciona em Devel_Mode e ficará off dentro de 5 minutos.

Se tudo está funcionando perfeitamente agora vamos desabilitar o Devel_mode para que o APF não fique off depois dos 5 minutos.

No ssh:

cd /etc/apf
pico -w conf.apf

localize:

DEVEL_MODE=”1″

e mude para

DEVEL_MODE=”0″

Salve e saia do arquivo de configuração (ctrl+x) y

Vamos agora finalmente reiniciar o APF

apf -r

Germano Pires Ferreira
Administrador Linux

Alterando a porta de conexão no Terminal Server (terminal services)

Alterando a porta de conexão no terminal server (Remote desktop)

O terminal services é o software padrão para conexão em servidores remotos (Windows). Ele utiliza a porta 3389 para receber as conexões. Como alternativa, podemos mudar esta porta, desviando a atenção de hackers.

ATENÇÃO: Este artigo contém informações sobre alterações no registro do Windows. Antes de qualquer alteração, é importante fazer um backup, e saber como proceder para restaurá-lo caso haja necessidade.

Voltando ao artigo…

Para alterar a porta de conexão padrão no Terminal Server

1. Execute regedt32 e encontre a seguinte chave:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

2. Encontre a subkey “PortNumber”. Observe que o valor padrão está “00000D3D” (hexadecimal para 3389). Modifique o valor padrão e salve.

Para se conectar do lado do cliente, no remote desktop, basta digitar o o hostname ou ip, e a nova porta de conexão.

Ex.: você alterou a porta de conexão para 3388, digite no remote desktop:

seudominio.com:3388

Como resetar a senha do mysql no Windows Server?

1. Pare o serviço MySql

2. Execute:

C:\mysql\bin\mysqld-nt --skip-grant-tables

e então abra outro prompt de comando.

3. Execute

C:\mysql\mysql

4. Digite o seguinte comando:

update mysql.user set password=('COLOQUE-SUA_SENHA-AQUI') where User='root';

5. Em seguida, dê o seguinte comando:

flush privileges;

6. Digite:

quit

7. Mate todos os processos mysqld-nt

8. Reinicie o serviço mysql

Otimizando sysctl

Utilizar algumas regras no sysctl.conf é uma boa solução para tentar prevenir ataques do tipo spoofing e alguns tipos de DOS.

NOTA: Verifique se eth0 é sua interface primária, caso não seja, mude eth0 para eth1

no SSH, edite o sysctl:

pico -w /etc/sysctl.conf

Você pode simplesmente copiar e subsituir pelo código abaixo :

#Kernel sysctl configuration file for Red Hat Linux
#
# Para valores binarios 0 desabilita e 1 habilitar.
#
#

# Disables packet forwarding
net.ipv4.ip_forward=0

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.lo.log_martians = 0
net.ipv4.conf.eth0.log_martians = 0

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# Disables the magic-sysrq key
kernel.sysrq = 0

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15

# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800

# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0

# Turn off the tcp_sack
net.ipv4.tcp_sack = 0

# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1

# Increases the size of the socket queue (effectively, q0).
net.ipv4.tcp_max_syn_backlog = 1024

# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000

# Allowed local port range
net.ipv4.ip_local_port_range = 16384 65536

Agora, salve as alterações e saia do pico:

Para ativar:

/sbin/sysctl -p
sysctl -w net.ipv4.route.flush=1

Leitura sugerida:
http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html

Germano Pires Ferreira
Administrador Linux

Awstats em português no plesk

Por padrão, o plesk gera as estatísticas awstats de acesso a sites em inglês.
O procedimento para a troca de idiomas é simples.

Abra o arquivo %plesk_dir%\Additional\AWStats\wwwroot\cgi-bin\awstats.model.conf e altere a linha:

Lang="auto"

para

Lang="br"

Faça o mesmo para todos os arquivos awstats.conf dos domínios já criados no servidor:
%plesk_dir%\Additional\AWStats\wwwroot\cgi-bin\awstats.DOMINIO_name.conf

Como instalar rkhunter

O RKhunter é uma excelente ferramenta, muito útil para detectar trojans, rootkits e outros possíveis problemas de segurança em servidores linux.

Neste tutorial vamos abordar a instalação e a seguir, criar um relatório que será enviado para sua conta de e-mail diariamente.

Instalando:

wget http://ufpr.dl.sourceforge.net/sourceforge/rkhunter/rkhunter-1.3.0.tar.gz
tar -zxvf rkhunter-1.3.0.tar.gz
cd rkhunter-1.3.0
./installer.sh --layout default --install

Agora, vamos executar o Rkhunter:

/usr/local/bin/rkhunter -c

Para finalizar, vamos configurar o Rkhunter para ser attualizado e executado uma vez ao dia e enviar um relatório ao Administrador:

pico /etc/cron.daily/rkhunter.sh

Adicione as linhas abaixo modificando sua conta de e-mail:

#!/bin/sh
(
/usr/local/bin/rkhunter --versioncheck
/usr/local/bin/rkhunter --update
/usr/local/bin/rkhunter --cronjob --report-warnings-only
) | /bin/mail -s 'rkhunter Relatorio Diario (Nomedoseuservidor)' voce@seudominio

Feche o editor pico e salve as modificações (ctrl+x e y)

Agora vamos transformar o arquivo rhkunter.sh em executável:

chmod +x /etc/cron.daily/rkhunter.sh

Germano Pires Ferreira
Administrador Linux

Como instalar o chkrootkit

ChkrootKit é mais uma boa ferramenta para detectar sistemas de Rootkits, Worms Trojans e outros.

Neste passo a passo vamos abordar a instalação e a seguir criar uma instrução no cron para a execução diária do chkrootkit e envio de um relatório ao administrador.

– Efetue login no SSH de seu servidor como root e a seguir execute os comandos abaixo para baixar, descompactar e instalar o chkrootkit:

wget --passive-ftp ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar xvfz chkrootkit.tar.gz
cd chkrootkit-0.48/

Como opção, para deixarmos um pouco mais organizado seu servidor, vamos mover o diretório para “/usr/local/chkrootkit”

cd..
mv chkrootkit-0.48/ /usr/local/chkrootkit

Para executar manualmente :

cd /usr/local/chkrootkit
./chkrootkit

Pronto.
chkrootkit instalado.
Agora vamos criar uma instrução no cron job para que o chkrootkit seja executado diariamente em um determinado horário e a seguir enviar um relatório a sua conta de e-mail.

para acessar o cron execute:

crontab -e

na ultima linha cole o comando a seguir:

0 4 * * * (d /usr/local/chkrootkit; ./chkrootkit 2>&1 | mail -s " Relatorio do chkrootkit no servidor xx" voce@seudominio)

Salve e saia do cron job

A instrução acima irá executar o chkrootkit diariamente as 04:00 AM e enviar um relatório ao final para o e-mail informado.

Germano Pires Ferreira
Administrador Linux

Desabilitando login direto do root ao SSH e criando um super usuário

Como padrão é possível efetuar login no SSH como root. Porém, eu considero o login direto ao root uma grave falha de segurança.
Abaixo neste passo a passo vou abordar como desabilitar o login direto do root ao SSH e criar um usuário intermediário com permissão apenas para login no ssh, e a seguir efetuar login como root.

Importante: sugiro que a todo momento mantenha-se logado em uma janela de seu SSH como root e sempre faça testes em um novo terminal .

1 – Criando usuário com permissão de acesso ao ssh

Efetue login como root no ssh de seu servidor, a seguir digite(mude adminserver para outro nome que desejar) :

adduser adminserver

A seguir crie uma senha

passwd adminserver

Será solicitado que digite uma senha e a confirme após o “enter”.
**importante: para numeros , NÃO utilize o teclado numerico a esquerda de seu teclado.

Ok, agora vamos determinar que este usuário poderá efetuar login no ssh.

gpasswd -a adminserver wheel

Neste tempo você terá um novo usuário que poderá efetuar login no ssh , porém este usuário nao possui privilégios de root.

2 – Desabilitando o acesso direto ao root no SSH.
Edite o arquivo de configuração do SSH.

pico /etc/ssh/sshd_config

Mude as linhas:
De:

Protocol 2, 1

Para:

Protocol 2

e de:

PermitRootLogin yes

Para:

PermitRootLogin no

Salve as modificações(ctrl+x , y)

Reinicie o ssh:

service sshd restart

NÃO efetue logoff, tente efetuar login com o usuário e senha que criou anteriormente e a seguir, no prompt de comando digite :

su - root

(ou apenas su – , costuma funcionar em algumas distro linux)

informe a senha do root.

Se tudo correu bem , você deverá sempre efetuar login com o usuário criado e a seguir informar a senha do root.

Se algo saiu errado , edite novamente o arquivo de configuração do SSH , mude “PermitRootLogin no” para “PermitRootLogin yes” e reinicie novamente o ssh.

Germano Ferreira
Administrador Linux

instalando mytop

O Comando top no linux, mostra os processos que estão sendo executados no servidor, e sem duvida é um dos comandos mais utilizados por administradores linux, porém através do top fica mais dificil saber alguns detalhes importantes do MySQL.

Para este fim temos o MyTop que irá nos permitir mostrar os processos que estão sendo executados, ordenar por uso de memória, uso de cpu, tempo, etc .

Abaixo, vou abordar a instalação do MyTop incluindo dois módulos Perl necessários para que o Mytop funcione, a seguir segue os principais comandos do Mytop.

1 – Instalando os módulos perl

Instalando o TermReadKey:

cd /usr/local/src
wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz
tar -zxf TermReadKey-2.30.tar.gz
cd TermRead*
perl Makefile.PL
make test
make
make install
cd ..

Instalando DBI:

wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz
tar -zxf DBI-1.48.tar.gz
cd DBI*
perl Makefile.PL
make test
make
make install
cd ..

Finalmente, instalando o Mytop

wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.4.tar.gz
tar -zxf mytop-1.4.tar.gz
cd mytop*
perl Makefile.PL
make test
make
make install

Para executar :

mytop

Atalho

* ? Exibe ajuda
– d Exibe as conexoes a uma determinada base de dados
– f Mostra a constra completa de uma específico ID de processo (ativo)
– F Desabilita todos os filtros (host, user, e db).
– h Exibe apenas as consultas de um determinado host
– I Exibe o status do InnoDB
– k “Klila”(mata) um processo
– m Muda o modo de exiição de top para qps (Queries Per Second Mode). Desta forma será exibido na tela a quantidade de querys por segundo.
– o Inverte a ordem default de ordenação
-p Pausa a exibição
– q Sair do mytop
– r Reseta os contadores de “status” do servidor via comando
– s Muda o tempo de atualização dos refreshes (em segundos)
– u Mostra os porcessos de um determinado usuário

Germano P Ferreira
Administrador Linux