Попытка подключить файл журнала (журнал iptraf) и grep строку, чтобы автоматически запретить пользователям, которые подключаются к порту telnet.
Журнал постоянно катится (что означает, что он постоянно записывается), и мне нужночитать его постоянно для каждой строки, добавленной iptraf.
UPDATE-1:
Получает IP-адрес, но теперь мне нужно использоватьэто, но если я заменю echo на var =, это не вызовет команду bash
#!/bin/bash
tail -f /iptraf/ip.log |
while read LINE
do
echo "${LINE}" | grep -o '[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}:[0-9]\{0,6\}\ to localhost:telnet' | cut -d':' -f1
done
Это напечатает первый ip, разделив возвращенный grep точкой с запятой и получив первую часть, которая является ip нарушителей.
Не кажется, что можно поместить часть эха в переменную?Мне также нужно иметь возможность определить, является ли это IP-адрес в массиве ["xxxx", "xxxx"], и не запрещать их.
UPDATE-2:
#!/bin/bash
#Rolling log file
tail -f /iptraf/iplog.log |
while read LINE
do
#get the ip of the offender x.x.x.x <----
#Example of output
#Sun Apr 21 09:54:41 2019; TCP; eth0; 52 bytes; from x.x.x.x:53923 to localhost:telnet; first packet (SYN)
#Regex/cut output ends up with this: x.x.x.x
ip=${
"${LINE}" | sed -n 's/^.* from \(.*\) to localhost:telnet;.*/\1/p' | cut -d':' -f1
};
#bad substitution error?
if [[$ip !== 'localhost']] then
#ban offender and log to console
iptables -I INPUT -s $ip -j DROP && route add -host $ip reject
echo "Offender Banned: $ip";
fi
done
С этим консоль выдает мне среднее сообщение "ПЛОХАЯ ЗАМЕНА"
Я знаю, что это заново изобретает колесо и все, но мне нужно это, чтобы создавать свои собственные сценариидля других журналов.Я также имею дело с кучей хакеров каждый день, так что это невероятно бесит, когда я не могу сделать это автоматически.
Пример вывода iptraf
Sun Apr 21 01:50:44 2019; TCP; eth0; 52 bytes; from x.x.x.x:52364 to x.x.x.x:telnet; first packet (SYN)
PS, xxxx - это АКТУАЛЬНЫЕ IP-адреса, такие как 111.111.111.111, только что выделенные.
ОБНОВЛЕНИЕ-3:
#!/bin/bash
tail -f /var/log/iptraf/ip_traffic-1.log |
awk -v skipIps="192.168.1.1,127.0.0.1" '
BEGIN {
split(skipIps,tmp,/,/)
for (i in tmp) {
skipSet[tmp[i]]
}
}
/to localhost:telnet/ {
ip = $11
sub(/:.*/,"",ip)
if ( !(ip in skipSet) ) {
printf "BANNING TELNET: %s\n", ip | "cat>&2"
print "[External] EXTERNAL HIT TELNET [Telnet Server Connection]:", ip
fflush()
system("iptables -I INPUT -s "ip" -j DROP && route add -host "ip" reject")
} else {
printf "That was US! TELNET: %s\n", ip | "cat>&2"
print "[Allowed] INTERNAL HIT TELNET [Telnet Server Connection]:", ip
fflush()
}
}
'
Теперь, когда мы можем запретить IP-адреса, попавшие в порты,Лучше всего очищать логи iptables каждый месяц, чтобы предотвратить замедление работы сервера, верно?- Я могу сделать это позже сам, в настоящее время меня интересует та часть, где указывается порт "localhost: telnet" - мне действительно нужно иметь возможность проверять несколько имен портов по списку известных имен портовкак "telnet", "ircd", "ssh", "ftp", "sip-tls" и т. д. и т. д.
Было бы замечательно, если кто-нибудь может помочь мне с несколькими именами портов в update-3этот пост.