- Код за потвърждение: Избери целия код
#!/bin/bash
# Задал съм пътя поради простата причина, че iptables при мен не е
# в /sbin, а е в /usr/local/sbin, но при така зададеният път
# няма да имате проблем
PATH=/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/sbin
ipt="iptables"
# Създаваме файл с всички ip адреси, които може да са дублирани
# при всяко изпълнение на скрипта
all_ip=/tmp/blacklist
touch $all_ip
# Създаваме файл, който ще служи за буфер при обединение
# на старите и новите правила
merge_ip=/tmp/blackmerge
touch $merge_ip
# Създаваме списък с неповтаряемите ip-та
black_ip=/var/log/blacklist
touch $black_ip
# Извличаме информация за неуспешните оптити за влизане през ssh
# от лога /var/log/auth.log
grep sshd /var/log/auth.log | grep Failed | awk '{print $11}' |sort|uniq| grep "^[0-9]"> $all_ip
grep sshd /var/log/auth.log | grep invalid | awk '{print $13}' |sort|uniq >> $all_ip
# Премахваме повтарящите се ip-та
echo -n “” > $merge_ip
cat $all_ip | sort | uniq > $merge_ip
cat $black_ip | sort | uniq >> $merge_ip
cat $merge_ip | sort | uniq > $black_ip
# Вмъкваме всички нови ip-та в iptables
lines=`$ipt -L INPUT -n | wc -l`
rules=$(($lines -1))
file=`cat $black_ip`
for ip in $file; do
$ipt -I INPUT $rules -s $ip -j DROP
echo "$ip banned"
done
$ipt -A INPUT -p tcp --dport 22 --syn -m limit --limit 1/m --limit-burst 2 -j ACCEPT
$ipt -A INPUT -p tcp --dport 22 --syn -j DROP
Хубаво е скрипта да се изпълнява периодично или да се сложи в crontab за автоматично изпълнение през определен период.
Изхода при изпълнение на скрипта ще бъде нещо от сорта на
- Код за потвърждение: Избери целия код
debian:/home/gaara/works/firewall# sh ../../ban
192.168.0.27 banned
192.168.0.28 banned
192.168.0.29 banned
192.168.0.30 banned
debian:/home/gaara/works/firewall#
- Код за потвърждение: Избери целия код
debian:/home/gaara/works/firewall# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP 0 -- 192.168.0.27 0.0.0.0/0
DROP 0 -- 192.168.0.28 0.0.0.0/0
DROP 0 -- 192.168.0.29 0.0.0.0/0
DROP 0 -- 192.168.0.30 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 limit: avg 1/min burst 2
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
debian:/home/gaara/works/firewall#
И нека бъде светлина
Източник: Основен


. Примерно от маскирана мрежа се опитваш да достъпиш сървър с реален адрес и при една грешка на user/pass gateway-а на въпросната мрежа попада в auth.log-a на сървъра като Failed и след едно изпълнение на скрипта гледаш така 
