Last active
September 24, 2020 09:29
-
-
Save lumenpink/a3b58425288bba2f9341 to your computer and use it in GitHub Desktop.
Knock 2015.1 - Projeto elaborado na Estácio de Sá Santa Catarina - https://docs.google.com/presentation/d/1G-kDirpN6SyehQw8KUaFqMJARwLrHhw80Y9wdXNNkXQ/edit?usp=sharing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
. /usr/local/knock/library | |
#Lista de portas na ordem da sequencia | |
ports=(34 1032 43231 456) | |
#Porta a Ser desbloqueada | |
safePort=29 | |
#Comando tshark (wireshark para console) | |
#customizado para exibir apenas | |
#ip de origem e porta de destino | |
tshark -n -l -f "tcp and dst 177.70.2.30 and tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 0" -E separator=":" -Tfields -e ip.src -e tcp.dstport | | |
while read ipport | |
do | |
#Separa a saída em IP e PORTA | |
ip=`echo $ipport | cut -f1 -d:` | |
port=`echo $ipport | cut -f2 -d:` | |
#Converte o Ip para Decimal via funcao | |
#incluida na biblioteca | |
#porque as arrays só suportam indices decimais | |
#A variavel dip significa decimalIp | |
dip=`ip2dec $ip` | |
#Verifica se a conexão é na primeira porta | |
if [ "$port" -eq ${ports[0]} ] ; then | |
echo "o IP $ip concluiu o passo 1" | |
passo[$dip]=1 | |
#Verifica se o IP já concluiu algum passo | |
elif [ ${passo[$dip]} ] ; then | |
#Verifica se a conexão é no passo atual | |
if [ ${ports[${passo[$dip]}]} -eq $port ] ; then | |
#Se for aumenta em um o passo | |
passo[$dip]=$((${passo[$dip]}+1)) | |
#Verifica se é o ultimo passo | |
if [ ${passo[$dip]} -eq ${#ports[*]} ] ; then | |
echo "o IP $ip concluiu os passos" | |
#Desbloqueia o IP para a porta segura | |
iptables -I INPUT -s $ip -ptcp --destination-port $safePort -j ACCEPT | |
#Agenda desbloqueio | |
cat /usr/local/knock/knock-agenda | | |
sed 's/\^\^/'$ip'/' | | |
at `date --date="+2 hours" "+%H:%M %m/%d/%Y"` | |
#remove o IP da memória | |
unset passo[$dip] | |
else | |
echo "o IP $ip concluiu o passo ${passo[$dip]}" | |
fi | |
else | |
if [ ! ${ports[ $((${passo[$dip]}-1)) ]} -eq $port ] ; then | |
echo "o IP $ip nao concluiu o passo $((${passo[$dip]}+1))" | |
unset passo[$dip] | |
fi | |
fi | |
fi | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IP=^^ | |
if who --ips | grep -q " "$IP$ ; then | |
#Reagendar | |
cat knock-agenda | | |
sed 's/\^\^/'$IP'/' | | |
at `date --date="+2 hours" "+%H:%M %m/%d/%Y"` | |
else | |
iptables -D INPUT -s $IP -ptcp --destination-port 29 -j REJECT | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Biblioteca de funcoes | |
#Funcao ip2dec - Transforma o ip do formato | |
#de 4 octetos para decimal | |
ip2dec() { | |
local ip | |
local decimalIp | |
ip=$1 | |
#Separa os octetos do endereco IP | |
octeto1=`echo $ip | cut -f1 -d. ` | |
octeto2=`echo $ip | cut -f2 -d. ` | |
octeto3=`echo $ip | cut -f3 -d. ` | |
octeto4=`echo $ip | cut -f4 -d. ` | |
#Executa as multiplicacoes | |
decimalOcteto1=$(($octeto1*256*256*256)) | |
decimalOcteto2=$(($octeto2*256*256)) | |
decimalOcteto3=$(($octeto3*256)) | |
decimalOcteto4=$(($octeto4*1)) | |
#Soma os decimais e gera o IP em decimal | |
decimalIp=$((decimalOcteto1+ \ | |
decimalOcteto2+ \ | |
decimalOcteto3+ \ | |
decimalOcteto4)) | |
echo $decimalIp | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment