quinta-feira, 25 de novembro de 2010

Dicas para salvar a vida do Administrador de Redes

Como Administrador de Redes, especialmente em ambientes Linux, estamos constantemente nos deparando com situações em que o conhecimento do comando certo e a maneira correta de sua utilização pode salvar nosso dia e agilizar tarefas que antes seriam bem mais demorada sem a ferramenta e o conhecimento adequado.

Este é um post que constantemente estará atualizado, nele estarei colocando os comandos mais usados no dia a dia na administração e gerenciamento de máquinas rodando principalmente o sistema Linux, podendo haver também alguns comandos em Windows. Aqui você vai encontrar desde comandos simples como complexos, linha de comando simples e complexas, o que realmente importa é termos o conhecimento necessário para quando for preciso saber usar a ferramenta certa. Vou chamar este post de “Dicas Rápidas”, porque a idéia é justamente essa.

1) Este comando serve para filtrar as mensagens de erros dos logs. Customize conforme as mensagens do log que são geradas pelo serviço.

# egrep -i '(REJECT|WARNING|ERROR|FATAL|FAILURE|PANIC)' /var/log/auth.log

Nov 24 10:09:15 dunga su[22616]: pam_unix(su:auth): authentication failure; logname=ffsantos uid=1004 euid=0 tty=pts/0 ruser=ffsantos rhost=  user=root

2) Para resetar a senha do MySQL

- Pare o MySQL caso esteja sendo executado
- Inicie o daemon mysqld com o parâmetro --skip-grant-tables
- Inicie o cliente do MySQL  com os parâmetros “-u root”
- Execute o comando: UPDATE mysql.user SET PASSWORD=PASSWORD('novopassword') WHERE User='root';
- Execute o comando: FLUSH PRIVILEGES
- Pare o daemon mysqld e o inicie normalmente.

3) String para criar um dicionário para força bruta
Este comando pega um arquivo como entrada e cria um arquivo contendo uma palavra em cada linha

#cat arquivo_fonte.txt | awk '{FS= " "}{for(i=1;i dicionario.txt

4) Escalando privilégios no Windows XP

Abra um terminal (Iniciar > Executar > cmd > [ENTER])
c:\at
“access denied” error (não vai funcionar se der esse erro)

c:\at 21:01 /interactive “cmd.exe”  (mudar a hora)
depois da data setada vai surgir um shell

CTRL+ALT+DELETE depois kill explorer.exe

c:\explorer.exe

5) Usando o comando find

Encontrar os arquivos com SUID:
#find / -user root -perm -4000 -print 
ou
# find / ! -fstype proc -perm -4000 ! -type l -ls > saida_suid.log

Encontrar diretórios com SGID
#find / -group root -perm -2000 -print 
ou
#find / ! -fstype proc -perm -2000 ! -type l -ls > saida_sgid.log

Encontrar SUID e SGID
#find / -perm -4000 -o -perm -2000 -print

Encontrar arquivos e diretórios com permissão global de escrita
#find / ! -fstype proc -perm -2 ! -type l -ls > saida.log
ou
#find / -type f -perm -002 (para arquivo)
#find / -type d -perm -2 (para diretório)

Encontrar arquivos que não pertence a nenhum usuário e nem grupo
#find / \( -nouser -o -nogroup \)

Se você encontrar um SUID ou SGID não delete, crie um diretório dentro dos locais onde você encontrou o SUID ou SGID e mova os mesmos para lá, faça o procedimento abaixo:

#cd /usr/bin
#mkdir sguid
#chmod 700 sguid
#mv rcp rsh rlogin sperl5.6.1 off/.

6) Na distro Debian, você quer descobrir os serviços que estão sendo carregados no run level 2 com o boot do sistema
# ls -l /etc/rc2.d/S* | cut -d/ -f6

7) Deletando usuários suspeitos

Encontra todos os usuários válidos para o sistema
#egrep -v '.*:\*|:!' /etc/shadow |awk -F: '{print $1}'

Se você não reconhece o usuário, veja os arquivos que pertence a ele
#  find / -path /proc -prune -o -user -ls

Delete o usuário
#userdel -r nome_usuario

8) Mudando algumas flags de TCP/IP

#vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1  (TCP SYN Cookie Protection)
net.ipv4.conf.all.accept_source_router = 0   (Disable IP Source Routing)
net.ipv4.conf.all.accept_redirects = 0  (Disable ICMP Redirect Acceptance)
net.ipv4.conf.all.rp_filter = 1  (IP Spoofing Protection)
net.ipv4.icmp_echo_ignore_broadcasts=1 (Ignoring Broadcasts Request)
net.ipv4.icmp_ignore_bogus_error_response = 1 (Bad Error Message Protection)

#sysctl -p

obs: alguns serviços sobre determinadas circunstancias recomendam não alterar algumas flags mencionadas acima

9) Se você não permite que os usuários do sistema monte (mount) e desmonte (umount) sistemas de arquivos, tire o SUID dos comandos mount e umount:

#chmod 755 /bin/mount /bin/umount


10) Descubra os serviços que estão sendo executados como root

# lsof -i | grep sshd
ou
#ps axl |grep httpd

Obs: somente o PPID 1 do serviço tem que rodar como root. Na saída do comando acima a segunda coluna é o UID do dono do processo, a terceira coluna o PID é o número de identificação do processo e a quarta coluna é o PPID que é o processo filho de um processo.

11) Comandos para testar open relay em servidores de email, também podem ser usados para depurar alguns problemas de envio de email

telnet www.organizacao.com.br
EHLO empresa.com.br
MAIL FROM: <fulano@empressa.com.br>
RCPT TO:<cliente@dominio.com.br>
DATA
.
QUIT

Para agilizar este processo crie um arquivo com o conteúdo acima
Salve o arquivo como teste_relay.txt

#type teste_relay.txt | nc -vv mail.openrelay.net 25

12) Encontre os arquivos que contenha uma palavra especifica

#find /etc -exec grep “root” {} -ls \;
#find / -type f -print0 | xargs -0 grep "palavra"
#grep -i palavra /diretorio/*
#find ./ -type f -print0 | xargs -0 grep "palavra"
#find /diretorio -type f -print0 | xargs -0 grep "palavra"

13) Mude uma palavra em vários arquivos de uma só vez, todo arquivo modificado será feito um backup

#for ARQ in *; do echo $ARQ; mv "$ARQ" "$ARQ.bak"; sed "s/textovelho/textonovo/g" "$ARQ.bak" > "$ARQ"; done
#find . -type f -exec bash -c 'echo "{}"; mv "{}" "{}.bak"; sed "s/textovelho/textonovo/g" "{}.bak" > "{}"' \;


14) Mude uma palavra dentro de um arquivo especifico

#sed "s/stringoriginal/stringtroca/g" arquivooriginal > arquivotroca

15) Mudando a data e hora no linux

#date -s 'mes/dia/ano 13:55'

16) Buscando por arquivos com base em seus tamanhos

#find . -size +1024 -exec ls -sh {} \; | sort -nr | head -n 20
#find . -size +1024k -print
#find . -size +1024 -print | xargs ls -lh
#find . -size +500M
#find . -size +1G
#find . -size +1G -exec ls -lh {} \;

17) Regra IPTABLES para barrar força bruta por sshd

#iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#iptables -A INPUT -p tcp --dport ssh -m recent --update --seconds 120 -j DROP
#iptables -A INPUT -p tcp --dport ssh --tcp-flags syn,ack,rst syn -m recent --set -j ACCEPT

18) Testando no DNS secundário transferência de zona (axfr) do DNS primário


#host -l -t any dominio.com.br
#dig @dns.dominio.com.br zonateste.com.br axfr

19) Comando netcat para pegar a versão do servidor web

#echo -e "GET / HTTP 1.0\r\n" | nc www.kernel.org 80 | egrep '^Server:'

20) Ver a versão do DNS bind

# dig @IP_SERVIDOR_DNS version.bind chaos txt

Obs: para que não apareça a versão do seu bind edite o arquivo /etc/bind/named.conf.options e adicione dento da sessão options a linha abaixo:

version "Nome da sua Empresa";

21) Fazer uma lista de serviços que estão rodando no sistema

#netstat -pn -l -A inet 
#lsof -i | grep LISTEN

22) Testando a blacklist e whitelist do SguidGuard

#echo "http://www.sitenalista.com 10.0.0.1/ - - GET" | squidGuard -c /etc/squid/squidGuard.conf -d


23) Monitorando qualquer serviço
este exemplo monitora o bind, colocar no cron para checar de tempos em tempos


service named status 2>&1 >> /dev/null || service named restart


24) Listar os IP´s conectados com o servidor com o número de conexões


netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
 
25) Editou um arquivo com o vi que não tem permissão de escrita, faça assim:
 
:w !sudo % tee 

by Osvaldo H Peixoto


Nenhum comentário:

Postar um comentário