Como instalar PRM (Process Resource Monitor)

O que é e como funciona PRM (Process Resource Monitor) ?

Em poucas palavras:

PRM monitora a tabela de processos ativos. Caso algum destes processos ultrapasse o recurso definido (memória, cpu ou numero de processos), um e-mail é enviado ao administrador e como opção o processo é interrompido.”Killado”.

As configurações do prm no arquivo “conf.prm” irão determinar algumas ações do PRM. Na pasta rules alguns processo são tratados separadamente com definições particulares aos mesmos.

O PRM (Process Resource Monitor) é  sem duvida alguma muito util para evitar alguns tipos de abusos e principalmente sobrecargas desnecessárias ao servidor.
Vamos a instalação:

No SSH root, faça o download do PRM:

 wget http://www.rfxnetworks.com/downloads/prm-current.tar.gz

Descompacte o arquivo:

 tar xvfz prm-current.tar.gz

Acesse a pasta e instale:

cd prm-0.5/
./install.sh

Neste ponto o PRM já estará instalado, agora vamos configurá-lo:

Edite o arquivo de configuração:

pico /usr/local/prm/conf.prm

Na opção:

# enable kernel logging [0=disabled,1=enabled]
USE_KLOG="0"

Mude para:

# enable kernel logging [0=disabled,1=enabled]
USE_KLOG="1"

Na opção:

# enable user e-mail alerts [0=disabled,1=enabled]
USR_ALERT="0"

Mude para:

# enable user e-mail alerts [0=disabled,1=enabled]
USR_ALERT="1"

**A função USR_ALERT “1” irá habilitar o envio de e-mails de alerta ao Administrador caso algum processo ultrapasse o recurso definido.

Em:

# e-mail address for alerts
USR_ADDR="root"

Mude para:

# e-mail address for alerts
USR_ADDR="seuemail@dominio.com.br"

Na maioria das situações não será necessário fazer nenhuma outra modificação, abaixo estarei apenas fazendo uma descrição das funções (apesar de algumas serem bastante óbvias)

# path to user e-mail message file
USR_MSG="$INSPATH/usr.msg"

Este é o caminho do template para o “corpo do e-mail” de alerta que será enviado ao administrador.

# subject of e-mail alerts
SUBJ="Process status report from $HOSTNAME"

Este será o assunto do e-mail de alerta enviado ao administrador.
(A variável $HOSTNAME irá retornar o hostname de seu servidor.)

# check 5,10,15 minute load average. [1,2,3 respective of 5,10,15]
LC="1"

Este será o tempo que o PRM irá verificar o numero de processos ativos. Sendo:
1 = 5 minutos
2 = 10 minutos
3 = 15 minutos

# min load level required to run (decimal values unsupported)
MIN_LOAD="1"

Esta opção define o load mínimo para que o PRM seja ativado.

# seconds to wait before rechecking a flaged pid (pid's noted resource
# intensive but not yet killed).
WAIT="12"

Segundos para aguardar uma nova “rechecagem” de pids dos processos ativos.

# counter limit that a process must reach prior to kill. the counter value
# increases for a process flaged resource intensive on rechecks.
KILL_TRIG="3"

Limite que um processo precisa ser executado para que as regras do PRM sejam checadas.

# argument to pass onto kill commands
KARG="9"

Qual o argumento para o comando kill (padrão e recomendado 9).

# Max CPU usage readout for a process - % of all cpu resources (decimal values unsupported)
MAXCPU="40"

Máximo de CPU (em percentual) para iniciar a leitura das regras

# Max MEM usage readout for a process - % of system total memory (decimal values unsupported)
MAXMEM="20"

Máximo de Memoria (em percentual) para iniciar a leitura das regras

# Max processes for a given command - this is not max processes for user but rather the executable
MAXPS="25"

Máximo de processos para iniciar a leitura das regras.

Para finalizar , salve (ctrl+x y ) e saia do pico.

Germano P Ferreira
Administrador Linux

Segurança do asp.net 2.0 e asp.net 3.5 em servidores compartilhados

O .NET v1.1 não vem configurado corretamente para servidores compartilhados, como já vimos em outro artigo. O mesmo vale para o asp.net 2.0 e também o seu framework 3.5.

Por padrão, .NET 2.0 vem instalado com “Full trust”. By default .NET 2.0 is installed with Full trust. Microsoft recomenda utilizar “Medium Trust” para servidores compartilhados.

Após instalar o .Net Framework 2.0 em seu servidor, você precisará modificar algumas configurações, assim como é feito no asp.net v1.1.

Primeiramente, abra o arquivo web.config, localizado em: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG por padrão. (Você pode utilizar o notepad para abrir e editar este arquivo).

Localize o seguinte bloco de texto:

<location allowOverride="true">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low"  policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy>
<trust level="Full" originUrl="" />
</system.web>
</location>

Nós precisaremos alterar a seguinte linha:

<location allowOverride="true">

para:

<location allowOverride="false">

isto certifica que os usuários não poderão alterar estas configurações em seus próprios web.config. Agora, mudaremos também a seguinte linha:

<trust level="Full" originUrl="" />

para

<trust level="Medium" originUrl=".*" />

Então, imediatamente após esta linha, adicione o seguinte:

<identity impersonate="true" userName="" password="" />

isto irá forçar o .NET 2.0 a rodar em “Medium Trust mode”, e ser executado sobre a conta anonima do IIS.
this is now forcing .NET 2.0 to run in Medium trust mode and to execute under the IIS anonomous user. Os principais inconvenientes de setar as configurações para Medium Trust são:

  • OleDbPermission não estará disponível. Significa que você não poderá utilizar ADO.NET e OLE DB data provider para acessar banco de dados. Entretanto, você poderá usar o SQL Server provider para acessar SQL Server databases.
  • EventLogPermission não estará disponível. Quer dizer que você não terá logs do asp.net no windows event.
  • ReflectionPermission não estará disponível. Você não poderá usar “reflection”.
  • RegistryPermission não estará disponível. Você não terá acesso ao registro.
  • WebPermission é restrita. Sua aplicação poderá se comunicar somente com a faixa de endereços que você definiu no elemento.
  • FileIOPermission é restrito. Só será possível acessar arquivos dentro da sua hierarquia da aplicação virtual.

Entretanto, ainda é possível criar um policy personalizado baseado no Medium trust, e permitir aplicações menos restritivas.Nós iremos cobrir alguns exemplos num próximo artigo.

Como desabilitar o botão desligar (shutdown) do windows server

Esta dica é importante para evitar acidentes. Algumas vezes, ao mandar reiniciar um servidor dedicado, você pode clicar no lugar errado e acabar desligado o mesmo.

Desabilite o botão shutdown (desligar). Assim você não correrá mais este risco.

1) Clique Start — > Run (iniciar -> executar)
2) Digite “gpedit.msc” e clique em  “OK”
3) Vá em: Local Computer Policy -> User Configuration -> Administrative Templates -> Start Menu and TaskBar
4) Dê um duplo click em “Remove and prevent access to the shut down command” e então selecione a opção Enable.  Clique em Ok.

Você não terá mais o botão desligar disponível.

Como criar um alerta por e-mail ao acessar o SSH como root ?

Abaixo vamos criar um alerta que será enviado a sua conta de e-mail toda vez que alguém efetuar login no SSH como root em seu servidor.

Efetue login no SSH de seu servidor como root.

Edite o arquivo .bashrc

pico /root/.bashrc

Após a ultima linha cole o texto abaixo modicando SeuServidor para Nome do Seu Servidor , e voce@seudominio
pelo seu e-mail :

echo 'ALERT - Acesso ao Root (SeuServidor) em:' `date` `who` | mail -s "Alerta: Acesso ao root por `who | cut -d"(" -f2 | cut -d")" -f1`" voce@seudominio

Salve e saia do pico( ctrl+x e y).

Feito. Quando alguém efetuar login em seu ssh como root, você receberá um e-mail informando o nome do servidor, IP de quem efetuou o login, hora e data.

Muito simples e sem duvida bastante util 🙂

Germano Pires Ferreira
Administrador Linux

Como instalar BFD (Brute Force Detection)

BFD é uma ótima excelente solução para detectar e bloquear ataques do tipo “Brutal Force”

**Importante: Certifique-se de ter instalado e configurado o APF Firewall antes de instalar o BFD.

Abaixo vamos abordar a instalação e configuração deste simples porém muito util sistema.

Conecte no SSH de seu servidor como root:

cd /root/
wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz
tar -xvzf bfd-current.tar.gz
cd bfd-0.9
./install.sh

Após a instalação, vamos ao arquivo de configuração:

pico /usr/local/bfd/conf.bfd

Localize:

ALERT_USR="0"

mude para:

ALERT_USR="1"

Localize:

EMAIL_USR="root"

mude para:

EMAIL_USR="voce@dominio.com"

Salve e saia do pico (ctrl+x e y)

Para iniciar o bfd:

bfd -s

Germano P Ferreira
Administrador Linux

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 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

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

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