Активируем IPFW
Добавим в /etc/rc.conf
firewall_enable="YES"
firewall_script="/etc/ddos.sh"
firewall_logging="YES"
Создаем наш файерволл в файл /etc/ddos
#!/bin/sh
ipfw='/sbin/ipfw -q'
${ipfw} flush
${ipfw} add check-state
${ipfw} table 1 flush
${ipfw} add deny ip from table\(1\) to me
${ipfw} add allow all from any to any
Пишем парсер логов и добавляем их в черный список
Создадим файл /etc/ban.sh, который будет собирать IP и добавлять их в table1
#!/bin/sh
echo '' > /etc/bl
cat /var/log/nginx/deathstar.name.access.log | awk ' match($0, /(\d*.\d*.\d*.\d*).*"-" "-"/) {print $1}' | sort | uniq >> /etc/bl
/sbin/ipfw table 1 flush
cat /etc/bl | awk '{ if ($1!="") {system("/sbin/ipfw table 1 add "$1"")} }' > /dev/null
Добавить в cron задание
*/1 * * * * root /etc/ban.sh
Добавим в /etc/rc.conf
firewall_enable="YES"
firewall_script="/etc/ddos.sh"
firewall_logging="YES"
Создаем наш файерволл в файл /etc/ddos
#!/bin/sh
ipfw='/sbin/ipfw -q'
${ipfw} flush
${ipfw} add check-state
${ipfw} table 1 flush
${ipfw} add deny ip from table\(1\) to me
${ipfw} add allow all from any to any
Пишем парсер логов и добавляем их в черный список
Создадим файл /etc/ban.sh, который будет собирать IP и добавлять их в table1
#!/bin/sh
echo '' > /etc/bl
cat /var/log/nginx/deathstar.name.access.log | awk ' match($0, /(\d*.\d*.\d*.\d*).*"-" "-"/) {print $1}' | sort | uniq >> /etc/bl
/sbin/ipfw table 1 flush
cat /etc/bl | awk '{ if ($1!="") {system("/sbin/ipfw table 1 add "$1"")} }' > /dev/null
Добавить в cron задание
*/1 * * * * root /etc/ban.sh