TRACTATUS ELEMENTALIS

GNU/Linux en estado puro.

Scripts

2013/03/09

gestrac

Descarga y consultas del tractatus via consola.

Instalar las dependencias:

# apt-get install cowsay ccze git

gestrac (gestrac) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#!/bin/bash
# Date: 22-11-2013
# Author: "lapipaplena" <lapipaplena@gmail.com>
# Version: 4.0
# Licence: GPL v3.0
# Description: Script de desarrollo del tractatus via github
# Require: cowsay ccze git
DIR=$HOME/TRAC
## comprobar privilegios
if [ "$(id -u)" = "0" ]
then
  echo
  echo "<< Ejecutar el script como usuario sin privilegios... abortando.... >>"
  echo
 exit 1
fi
#
function fcolor ()
{
  echo $1 | ccze -A
}
#
function fdir ()
{
if [ -d $DIR ]
then
  echo
else
  mkdir $DIR
fi
}
#
function fdesglosetractatus ()
{
mkdir files
cd files
ESTAT=1 # 1 - Linia en blanc, 2- comanda, 
COMANDA=""
while read linia
do
	if [ $ESTAT -eq 1 ] && [ -z "${linia}" ];
	then
		ESTAT=1
	else
		if [ $ESTAT -eq 1 ] && [ ! -z "${linia}" ];
		then
			ESTAT=2
			read -ra COMANDA <<< "$linia"
			echo "$linia" >> "$COMANDA"
		elif [ $ESTAT -eq 2 ] && [ -z "${linia}" ];
		then
			ESTAT=1
		else
			echo "$linia" >> "$COMANDA"
		fi
	fi
done < ../0-file1.txt
echo
fcolor "... proceso terminado...."
cd ..
ls files > 0-lista.txt
if [ ! -s 0-lista.txt ]
then
  fcolor "Se han detectado errores al procesar la descarga del Tractatus"
  exit
else
  echo
 fcolor  "<< Creado el directorio "files" correctamente ... >>"
fi
}
#
function fpagina_man ()
{
  MAN=$(man $COMANDO | wc -l 2>/dev/null)
  if [ $MAN -gt 2 ]
  then
      echo
      read -p "No existe la entrada $COMANDO en el tractatus... ¿Visualizar su página man?  (s/n) " CON
      echo
      if [ $CON = s ]
      then
          echo
          man $COMANDO
          echo
     else
          echo
     fi
  else
      cowsay -f tux "Concepto inexistente en el tractatus y en las páginas man"
  fi
  read
}
#
###
if [ -d $DIR ]
then
  echo
  fcolor " <<Actualizando la versión del tractatus... >> "
  cd $DIR
  rm 0-*.txt
  rm -R files
  echo
  git pull
  echo
  cat tractatus.txt | sed '1d' > 0-file1.txt
  fdesglosetractatus
  echo
else
  fdir
  cd $DIR
  git clone https://github.com/templix/tractatus.git .
  git init
  echo
  fcolor " << Creando directorio TRAC y repositorio git... >> "
  echo
  cat tractatus.txt | sed '1d' > 0-file1.txt
  fdesglosetractatus
  echo
fi
###
cd $DIR/files
NUM2=$(cat ../0-file1.txt | awk 'BEGIN { FS="\n"; RS="" } {print $1 }' | awk -F " " '{print$1 }' | wc -l)
while [ "$OPC1" != 3 ]
do
  echo
  fcolor "[1] Entrar una busqueda"
  fcolor "[2] Realizar busqueda avanzada"
  fcolor "[3] Salir"
  echo
  read -p "<< Ingresar opción (NO distingue mayúsculas y minúsculas): >> " OPC1
  echo
  case $OPC1 in
  1)
      # Buscar los comandos deseados.
      echo
         fcolor "<< Introducir dato a consultar: >>"
          echo
          read COMAND_
          COMANDO=$(echo "$COMAND_" | tr 'A-Z' 'a-z')
          clear
      if [ -e "$COMANDO" ]
      then
          pr -f -d -h $COMANDO $COMANDO | ccze -A
          echo
          read
     else
          fpagina_man
          echo
     fi
     clear;;
  2)
      ### Busqueda recursiva
      clear
      echo
          fcolor "<< Introducir dato a consultar: >>"
          echo
          read COMAND_
          COMANDO=$(echo "$COMAND_" | tr 'A-Z' 'a-z')
          clear
          grep -l $COMANDO * | cut -d/ -f2 > ../0-file3.txt
          if [ -s ../0-file3.txt ]
          then
              OP=s
              while [ $OP = s ]
              do
                  echo
                  fcolor "El dato entrado sale en los siguientes ficheros: "
                  echo
                  numero=0
                  for linia in `cat ../0-file3.txt`; do
                      let numero+=1
                      echo "[$numero] $linia"
                  done
                  echo
                  echo "[0] Cancelar"
                  echo
                  echo
                  fcolor "<< Comando a mostrar... >>"
                  read COM
                  if [ $COM -ne 0 ] && [ $COM -le $numero ];
                  then
                      comando=`sed -n ${COM}p ../0-file3.txt`
                      if [ "$?" -eq "0" ]
                      then
                          echo
                          clear
                          pr -f -d -h $comando $comando | ccze -A
                      else
                          echo
                     fi
                     read
                     echo
                     fcolor "<< Consultar otro comando del listado? [s/n] >>"
                     read OP
                     clear
                  elif [ $COM -gt $numero ] ;
                  then
                      echo
                      clear
                      cowsay -f tux "No existe en el listado"
                      read
                 else
                      OP="n"
                      clear
                  fi
              done
          else
              fpagina_man
              echo
         fi
      echo;;
  3);;
  esac
done
clear
echo
rm ../0-file1.txt
echo  "============================================================="
fcolor "<< La base de datos del tractatus cuenta con $NUM2 entradas >>"
echo  "============================================================="
cd $HOME
echo
exit

servidef

script que muestra las ips y su procedencia de los ataques bloqueados por fail2ban a nuestro servidor. En primer lugar instalar las dependencias:

# apt-get install fail2ban geoip-bin ccze

gestrac (servidef) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/bash
# Date: 04-02-2013
# Author: "lapipaplena" <lapipaplena@gmail.com>
# Version: 4.0
# Licence: GPL v3.0
# Description: Comprueba  los ataques filtrados por fail2ban
# Require: fail2ban geoip-bin ccze
####
if [ "$(id -u)" != "0" ]; then
	echo
	echo "<< Solo root puede ejecutar este script. >>" | ccze -A
	echo
	exit 1
fi
clear
baneos=$HOME/`date +%s`.txt
if [ -s /var/log/fail2ban.log -a -s /var/log/fail2ban.log.1 ]
then
	cat /var/log/fail2ban.log.1 | grep Ban | grep -v 192.168. | awk '{print$7}' > $baneos
	cat /var/log/fail2ban.log | grep Ban | grep -v 192.168. | awk '{print$7}' >> $baneos
else
	echo
	echo "<< O fail2ban no se encuentra en el sistema o todavía no ha generado logs... abortando..... >>" | ccze -A
	echo
	exit 1
fi
if [ -s $baneos ]
then
	for i in $(cat $baneos); do
		ATAC=$(geoiplookup $i | grep Country | awk '{print$4,$5}' | sed 's/Address/Enmascarada/')
		printf "%s\t --> %s\n" "$i" "$ATAC" | ccze -A | tee -a $HOME/baneos1.txt
	done
	echo
	echo "<< Las ips que han sido baneadas más de una vez son: >>" | ccze -A
	echo
	cat $HOME/baneos1.txt | sort -n | uniq -d -c | sort -k1 -r | tee -a $HOME/reincidentes.txt
	echo
	echo
else
	echo
	echo "<< No existen ips baneadas... abortando.... >>" | ccze -A
	echo
	exit 1
fi
###
echo
read -p "<< ¿Colocar en iptables las ips baneadas 3 o más veces? [s/n] >>" OP
echo
iptables -nL INPUT | grep DROP | awk '{print$4}' > $HOME/blockips.txt
if [ $OP = s ]
then
	read -p "<< ¿Resetear todas las reglas de iptables? [s/n] >> " OPT
	if [ OPT = s ]
	then
		iptables -P INPUT ACCEPT
		iptables -P FORWARD ACCEPT
		iptables -P OUTPUT ACCEPT
		iptables -F
		iptables -X
	else
		echo
		echo  "<< Se conservan las reglas de iptables y se añadiran, si procede, las nuevas >>" | ccze -A
		echo
	fi
	cat $baneos | sort -n | uniq -d -c | sort -k1 -r > $HOME/reincidentes1.txt
	while read line
	do
		MAX=$(echo $line | awk '{print$1}')
		if [ $MAX -gt 2 ]
		then
			BAN=$(echo -e "$line" | awk '{print$2}')
				if grep -i $BAN $HOME/blockips.txt > $HOME/ip.txt
				then
					echo
					echo "<< La ip $BAN ya se encuentra bloqueada. >>" | ccze -A
					echo
				else
					echo
					iptables -A INPUT -s $BAN -j DROP
					echo "<< Se bloquea la ip $BAN por iptables. >>" | ccze -A
					echo
				fi
		else
			echo
		fi
	done < $HOME/reincidentes1.txt
else
	echo
fi
echo
echo "las reglas DROP de iptables son: "
echo
iptables -nL | grep DROP | ccze -A
echo
rm $HOME/*.txt
exit 0