Como saber o numero de conexões ao servidor por ip

Esta é uma dica muito simples, porém acredito ser muito útil quando desejamos saber o numero de conexões ativas no servidor e assim killar possíveis abusos.

Digite no prompt de comando :

netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Você verá uma lista como esta:

2 xx.xx.xxx.xxx.1
5 xx.xx.xxx.xxx.2
8 xx.xx.xxx.xxx.3
12 xx.xx.xxx.xxx.4
16 xx.xx.xxx.xxx.6
...

Sendo:
xxx. será o ip cliente e o numero antes do ip é referente ao numero de conexões em seu servidor.

Germano P Ferreira
Administrador Linux

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

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

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