Verificar máquinas ligadas com shell script

Estava interessado em criar uma forma de scannear a rede para saber quantos micros estavam conectados a ela, saber nome, grupo, MAC ADDRESS.

Para que o script funcione será preciso instalar alguns softwares:

dialog:

# apt-get install dialog

nmap:

# apt-get install nmap

Copie o código e cole em um arquivo texto e salve com um nome de sua preferência, de permissão para executar (chmod +x nome_do_arquivo.sh) e em seguida execute-o (./nome_do_arquivo.sh):

 
#!/bin/bash

Principal ( ) { ## Inicio Primeiro Bloco
clear
# Loop que mostra o menu principal
while : ; do # Mostra o menu na tela, com as ações disponíveis
opcao=$(
dialog –stdout \
–title ‘Menu principal’ \
–menu ‘Escolha as opções:’ \
0 0 0 \
1 ‘Scannear IPs da Rede’ \
0 ‘Sair’)

[ $? -ne 0 ] && Sair # Se apertado CANCELAR ou ESC, então vamos Sair…

case $opcao in ## ## Inicio case
1)ipscan ;;
0)Sair ;;

esac ## Fim da verificação
done
}
## FIM MENU PRINCIPAL

## ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ##

ipscan ( ) {
clear
inicio=$(dialog –stdout –title ‘Firerock ipscan’ –inputbox ‘Inicio (Ex.192.168.0.1)’ 0 0 )

[ $? -ne 0 ] && Principal # Se apertado CANCELAR ou ESC, então vamos Sair…
final=$(dialog –stdout –title ‘Firerock ipscan’ –inputbox ‘Final (Ex.192.168.0.254)’ 0 0 )

[ $? -ne 0 ] && ipscan # Se apertado CANCELAR ou ESC, então vamos Sair…

#faixa_rede=`echo “$inicio” | cut -d ‘.’ -f 1-3`
inicio_host=`echo “$inicio” | cut -d ‘.’ -f 4`
final_host=`echo “$final” | cut -d ‘.’ -f 4`

inicio_host=$(expr $inicio_host – 1)
hosts_verificados=$(expr $final_host – $inicio_host)

dialog –yesno ‘O processo pode levar alguns minutos! Deseja Continuar?’ 6 45

if [ $? = 0 ]; then
continua

else
clear
ipscan
fi
}
continua ( ) {
echo ” ”
echo “STATUS ENDEREÇO IPv4 MAC ADDRESS NOME GRUPO ” > /tmp/hosts.txt
echo “——————————————————————————————” >> /tmp/hosts.txt

ips_on=$(nmap -sP “$inicio-$final_host” | awk ‘/^Host/ {print $2}’)
online=”0″
offline=”0″

for ip in $ips_on; do
$(nmblookup -A $ip > /tmp/nm_hosts.txt) ## Saída do comando é # entre clientes Windows e Unix (Linux)
mac_address_win2003=$(cat /tmp/nm_hosts.txt | awk ‘NR==9 {print $4}’)
mac_address_xp=$(cat /tmp/nm_hosts.txt | awk ‘NR==7 {print $4}’)
nm_pc=$(cat /tmp/nm_hosts.txt | awk ‘NR==2 {print $1}’)
nm_grupo=$(cat /tmp/nm_hosts.txt | awk ‘NR==3 {print $1}’)

mac_address_unix=$(cat /tmp/nm_hosts.txt | awk ‘NR==10 {print $4}’) ##inicio de verificação p/ ver se é cliente Unix

if [ “$mac_address_unix” == “00-00-00-00-00-00” ]; then ## Se $mac_address_unix for igual a 00-00-00-00-00-00 é um cliente unix
#mac_address=$(cat /tmp/nm_hosts.txt | awk ‘NR==10 {print $4}’)
nm_pc=$(cat /tmp/nm_hosts.txt | awk ‘NR==2 {print $1}’)
nm_grupo=$(cat /tmp/nm_hosts.txt | awk ‘NR==6 {print $1}’)
echo “On $ip $mac_address_unix $nm_pc $nm_grupo” >> /tmp/hosts.txt
online=$(expr $online + 1)

else
if [ “$mac_address_xp” == “” ]; then
echo “On $ip $mac_address_win2003 $nm_pc $nm_grupo” >> /tmp/hosts.txt
online=$(expr $online + 1)

else
if [ ! $nm_pc == ‘No’ ]; then
echo “On $ip $mac_address_xp $nm_pc $nm_grupo” >> /tmp/hosts.txt
online=$(expr $online + 1)

else
mac_address=
nm_pc=
nm_grupo=
echo “On $ip $mac_address $nm_pc $nm_grupo” >> /tmp/hosts.txt
online=$(expr $online + 1)
fi
fi
fi
done
offline=$(expr $hosts_verificados – $online)
echo “——————————————————————————————” >> /tmp/hosts.txt
echo ” ” >> /tmp/hosts.txt

echo “Informações:” >> /tmp/hosts.txt
echo “Faixa de IPs verificados:” >> /tmp/hosts.txt
echo “Inicio: $inicio” >> /tmp/hosts.txt
echo “Final : $final” >> /tmp/hosts.txt
echo ” ” >> /tmp/hosts.txt
echo “Hosts Verificado: $hosts_verificados” >> /tmp/hosts.txt
echo “Hosts Online: $online” >> /tmp/hosts.txt
echo “Hosts Offline: $offline” >> /tmp/hosts.txt
echo ” ” >> /tmp/hosts.txt
echo “OBS:” >> /tmp/hosts.txt
echo “Endereços com status On que não possuem (ou é invalido) MAC ADDRESS, NOME, GRUPO ou qualquer um, geralmente são clientes UNIX.” >> /tmp/hosts.txt
echo “Exemplos:” >> /tmp/hosts.txt
echo “On 192.168.0.1 ” >> /tmp/hosts.txt
echo “On 192.168.0.254 00-00-00-00-00-00 Meupc MEUGRUPO” >> /tmp/hosts.txt
dialog \
–title ‘Lista de Hosts Online’ \
–textbox /tmp/hosts.txt \
0 0

ipscan
}

## ——————————————————————————————————————————————————
Sair ( ) {
clear
exit
}
Principal

## FIM ##

Fonte: http://www.vivaolinux.com.br/dica/Ipscan-com-shell-script+dialog+nmap

Esconder versão dos serviços de rede

Escondendo a versão dos serviços que estão rodando em seu servidor para aumentar a segurança Pessoal.

Importante para a segurança de um servidor é esconder a versão de seus serviços para que o invasor não fique procurando uma falha de segurança para aquela versão específica do daemon.

Então vamos ocultar alguns serviços mais utilizados:

Proftpd
=======
Basta adicionar a seguinte linha no proftpd.conf:

ServerIdent on “”

A linha acima informa a versão do serviço como sendo “”, isso quer dizer que será em branco.

Para validar é necessário reiniciar o Proftpd.

SSH
===
Já esse é necessário baixar o fonte do site oficial http://www.openssh.com/ e compilar : D

Após descompactar, terá um arquivo chamado version.h. Altere o conteúdo da seguinte linha:

#define SSH_VERSION “”

Depois é só compilar normalmente com ./configure, make e make install.

Obs.: O ssh escuta por padrão na porta 22. É altamente recomendável alterar essa porta para qualquer outra porta.

Apache
======
O Apache, assim como o Proftpd, basta apenas acrescentar uma opção em seu conf conforme a linha baixo:

ServerTokens Prod
=================

Necessário reiniciar o serviço também.

Para testar se as versões dos daemons estão ocultadas, use o nmap para verificar conforme o exemplo:

# nmap localhost -sV

Starting nmap 3.75 ( http://www.insecure.org/nmap/ ) at 2008-03-05 09:46 BRT
Interesting ports on localhost (127.0.0.1):
(The 1658 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
21/tcp open ftp?
8080/tcp open http Apache httpd
Nmap run completed — 1 IP address (1 host up) scanned in 100.332 seconds

Porque o ssh não apareceu quando utilizados o nmap para varrer as portas da máquina?

Porque foi alterada para uma porta que não está na lista que o nmap utiliza que está em /usr/share/nmap/nmap-services.

Alguns outros programas identificam o tipo de serviço em qualquer porta que seja, mas não saberá a versão do serviço. Um outro programa que pode ser usado é o Nessus para esse tipo de verificação.