
Вопрос: как правильно сделать сравнение в скрипте?
сабж: Есть скрипт вытаскивающий из логов, "плохие" ip-адреса, и добавляющий их, в таблицу BRUTE (для PF), хочется сделать сравнение, найденных IP-адресов с существующими в таблице, что-бы добавлять только новые адреса, как это сделать через if ?
Код: Выделить всё
for STR in `cat ${SPAM}`; do
if [ ??? ]; then
Как лучше сделать сравнение, вывести существующие ip-адреса в отдельный файл и сравнить с ним, или можно сравнить напрямую с данными полученными из таблицы (/sbin/pfctl -t BRUTE -T show ) ?
fi
done
Код: Выделить всё
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
echo -------------------------------------------------------------------
echo Start
cd /
cd /var/log
LOG="/var/log/maillog"
LOG2="/var/log/all.log"
SPAM="/var/log/SPAM.log"
SPAM_T="/var/log/SPAM_T.log"
grep "warning" ${LOG2} | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | sort -u >> ${SPAM_T}
grep "warning" ${LOG} | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | sort -u >> ${SPAM_T}
grep "RCPT from unknown" ${LOG} | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | sort -u >> ${SPAM_T}
sleep 1
sort -u ${SPAM_T} > ${SPAM}
rm -rf ${SPAM_T}
sleep 3
for STR in `cat ${SPAM}`; do
echo $STR "add to BRUTE"
/sbin/pfctl -t BRUTE -T add $STR
done
sleep 3
echo "#------------------------------------------" >> ${SPAM}
/bin/echo -n "# `/bin/date` !!!" >> ${SPAM}
echo "" >> ${SPAM}
/sbin/pfctl -t BRUTE -T show >> ${SPAM}
echo "#------------------------------------------" >> ${SPAM}
cat ${SPAM} | mail -s "BRUTE" (почтовый@ящик)
echo Finish !
