Є:
Отже завдання як тільки в logfile pistfix's з'явився запис на подобі:
Те заносимо IP адресу у тимчасовий чорний список "IP block list", викорисувуючи правила для firewall - IPWF і дані про адреси що записані у таблиці № 99, а правило з цієї таблиці всіх не пускає.
Реалізація:Обмеження не більше 4 підключень в 2 хвилини, не вважаючи локальні адреси.
postfix, main.cf:
Дивимося лог, якщо перевищення 10 раз ліміт підключень, блокуємо адресу IP на 12 годин.
Swatch-postfix-lim:
Авто запуск swatchrc.conf
Правило фаєрвола:
ipfw.rules:
Додавання в базу даних, і в таблицю файервола. Виключаючи
IP 111.11.11.111 (Свій, а то при тестірваніі можна гілку обрізати на
якій сидиш Smile) І протоколюючи поштою, причину занесення адреси.
ipfw-blockip-0.sh:
Code:
mysql: table mailusers.blackip
~ /. My.cnf:
Очищаємо застарілі IP раз на годину.
ipfw-blockip-release.sh:
crontab:
При старті системи, таблиця файрвола порожня, заповнимо її з бази даних.
ipfw-blockip-init.sh:
Обговорювання теми на форумі , Posted: Fri Jul 10, 2009 8:32 pm
Як на додаток, можна ознайомитися з наступними проектами:
Аналізатор лог файлів так блокування за правилами, Fail2ban - FreeBSD: /usr/ports/security/py-fail2ban
- FreeBSD,
- Postfix,
- Swatch - log analyze.
- MySQL - database
- IPFW - firewall
Отже завдання як тільки в logfile pistfix's з'явився запис на подобі:
Code: |
Jul
10 15:43:52 mail postfix/smtpd[89997]: warning: Connection rate limit
exceeded: 10 from unknown[62.213.112.69] for service smtp
Jul 10 15:43:52 mail postfix/smtpd[89997]: disconnect from unknown[62.213.112.69] |
Те заносимо IP адресу у тимчасовий чорний список "IP block list", викорисувуючи правила для firewall - IPWF і дані про адреси що записані у таблиці № 99, а правило з цієї таблиці всіх не пускає.
Реалізація:Обмеження не більше 4 підключень в 2 хвилини, не вважаючи локальні адреси.
postfix, main.cf:
Code: |
anvil_rate_time_unit = 240s
smtpd_client_connection_rate_limit = 4 smtpd_client_connection_limit_exceptions = 127.0.0.1 172.16.1.0/24 smtpd_client_event_limit_exceptions = 127.0.0.1 172.16.1.0/24 |
Дивимося лог, якщо перевищення 10 раз ліміт підключень, блокуємо адресу IP на 12 годин.
Swatch-postfix-lim:
Code: |
watchfor /warning: Connection rate limit exceeded: 10/i
echo exec /usr/local/etc/manage_scripts/ipfw-blockip-0.sh 12 '$_' |
Code: |
swatch_enable="YES"
swatch_rules="7" swatch_7_flags="--tail-file=/var/log/maillog --config-file=/usr/local/etc/swatch/.swatch-postfix-lim --daemon --pid-file=/var/run/swatch_7.pid --restart-time=00:00" swatch_7_pidfile="/var/run/swatch_7.pid" |
ipfw.rules:
Code: |
deny log logamount 5 ip from table(99) to any |
ipfw-blockip-0.sh:
Code:
#!/bin/sh
# Block postfix spammers by ip, $1 - hours block duration, $2 - log line
# ipfw table 99 - list of ips. ipfw deny from table(99) any
# Oleksiy Petrov, 2009, http://lexxai.co.cc
ip=`echo $2 | /usr/bin/sed -n 's#.*\[\([0-9.]*\)\].*#\1#p'`
ips=`echo $ip | /usr/bin/grep -v '^111\.11\.11\.111$'`
if [ -n "$ips" ]
then
/sbin/ipfw table 99 add $ips $1
/sbin/ipfw table 99 list > /var/tmp/~blockip
/usr/bin/tail -n 50 /var/log/maillog | /usr/bin/grep -e "RCPT from.*\[$ips\]" >> /var/tmp/~blockip
cat /var/tmp/~blockip | mail -s "ipfw block [$ips] `host $ips`" root
rm /var/tmp/~blockip
export HHH=$HOME
export HOME=/root
echo "replace into blackip VALUES('$ips',DATE_ADD(NOW(),
INTERVAL $1 HOUR));" | /usr/local/bin/mysql --defaults-file=~/.my.cnf
mailusers
export HOME=$HHH
fimysql: table mailusers.blackip
Code: |
CREATE TABLE IF NOT EXISTS `blackip` (
`ip` char(15) CHARACTER SET ascii NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`ip`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
~ /. My.cnf:
Code: |
[client]
user = mailusers password = fdfjuu3***def |
ipfw-blockip-release.sh:
Code: |
#!/bin/sh
# Block postfix spammers by ip, $1 - hours block duration, $2 - log line # ipfw table 99 - list of ips. ipfw deny from table(99) any # Oleksiy Petrov, 2009 http://lexxai.co.cc export HHH=$HOME export HOME=/root echo "SELECT ip FROM blackip WHERE time < now( ) " | /usr/local/bin/mysql --defaults-file=~/.my.cnf --skip-column-name mailusers | while read str; do \ /sbin/ipfw table 99 delete "$str" | echo "DELETE FROM blackip WHERE (ip='$str');" | /usr/local/bin/mysql --defaults-file=~/.my.cnf mailuser done export HOME=$HHH |
Code: |
@hourly root /usr/local/etc/manage_scripts/ipfw-blockip-release.sh |
ipfw-blockip-init.sh:
Code: |
#!/bin/sh
# Block postfix spammers by ip, $1 - hours block duration, $2 - log line # ipfw table 99 - list of ips. ipfw deny from table(99) any # Oleksiy Petrov, 2009 http://lexxai.co.cc export HHH=$HOME export HOME=/root echo "SELECT ip FROM blackip WHERE time > now( ) " | /usr/local/bin/mysql --defaults-file=~/.my.cnf --skip-column-name mailusers | while read str; do \ /sbin/ipfw table 99 flush /sbin/ipfw table 99 add "$str" 999 done export HOME=$HHH |
Як на додаток, можна ознайомитися з наступними проектами:
Аналізатор лог файлів так блокування за правилами, Fail2ban - FreeBSD: /usr/ports/security/py-fail2ban
Немає коментарів:
Дописати коментар