Я пишу сценарий bash для сбора IP-адресов из файла apache2 access.log, сохранения их в массиве и проверки, существуют ли эти IP-адреса в iptable или нет, чтобы запретить их.
Я возобновляю что бан не идет хорошо, из-за IP не собраны хорошо:
#/bin/bash/
BADWORDS=( '/etc/passwd' 'file' 'w00tw00t' 'fckeditor' 'ifconfig' )
# Store IPs
storeIPs=()
entries=${#BADWORDS[@]}
elements=$(($entries - 1))
for ((i=0; i<=$elements; i++))
do
setBadWord=${BADWORDS[$i]}
ch=$( cat /var/log/apache2/access.log | awk -F\" ' { print $1,$2 } ' | grep "$setBadWords" )
echo $ch >> spam.log
getIPs=$( cat spam.log | awk '{print $1}' )
echo "IP is $getIPs"
# Check if IP exists in he array
FOUND=`echo ${storeIPs[*]} | grep "$getIPs"`
returnElems=$?
if [ $returnElems == "0" ]
then
echo "$getIPs exists"
else
echo "$getIPs NOT exists"
storeIPs+=($getIPs)
fi
countIPs=${#storeIPs[@]}
echo "count stored $countIPs"
if [[ "$countIPs" -gt "0" ]]
then
echo "Yes"
chkIP=$( iptables -L --line | grep "$getIPs" )
ipExists=$?
if [[ $ipExists == "0" ]]
then
iptables -I INPUT -s "$getIPs" -j DROP
fi # end if [[ $ipExists == "0" ]]
fi # end if [[ "$countIPs" -gt "0" ]]
done # end for
Большое спасибо