Създаване на скрипт в systemd с Firewall против SPAM от Blocklistde и Spamhaus на Debian 9
Скрипта може да работи съвместно с fail2ban защото използва таблицата raw в iptables която приема пакетите преди веригата INPUT от таблицата filter която ползва fail2ban. По този начин имаме заредена твърда Blacklist-a отпред и втора след нея (fail2ban) която следи логовете в системата за евентуални атаки.
Това от една страна вдига сериозно нивото на сигурност още „преди да се е случила случката“ но от друга е напълно възможно а и по някой път се случва, клиент да попадне в горенаписаните „блеклисти“ без да е спамер. Пример за това ще дам с родните мобилни оператори на които мрежите често попадат в тези листи. В такива случаи трудно бяснявам на клиента защо не може да си достъпи служебната пощенска кутия от телефона а от настолния си компютър може.
Инсталиране на ipset
root@server22:~# apt install ipset
Създавам инициализиращ файл в systemd
root@server22:~# vim /etc/systemd/system/firewall.service
Поставям в него следното съдържание
[Unit]
Description=Spam Firewall for Servers
DefaultDependencies=no
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/etc/init.d/firewall start
ExecReload=/etc/init.d/firewall restart
ExecStop=/etc/init.d/firewall stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
След което създавам изпълнимия скрипт
root@server22:~# vim /etc/init.d/firewall
#!/bin/bash
### BEGIN INIT INFO
# Provides: iptables firewall
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Spam Firewall for Servers
### END INIT INFO
#
# Author: Samuil Arsov <support@itservice-bg.net>
#
start() {
echo "blocklistde"
ipset create blocklistde hash:ip hashsize 4096 maxelem 131072
wget -qc https://lists.blocklist.de/lists/all.txt -O /tmp/blocklistde
for i in $(cat /tmp/blocklistde | grep -v 2001: | grep -v 93.155.130); do
ipset -A blocklistde $i
done;
rm -rf /tmp/blocklistde
iptables -t raw -A PREROUTING -m set --match-set blocklistde src -j DROP
echo "spamhaus"
ipset create spamhaus hash:net
wget -qc www.spamhaus.org/drop/drop.lasso -O /tmp/spamhaus
for i in $(cat /tmp/spamhaus | egrep -v '^;' | awk '{ print $1}'); do
ipset -A spamhaus $i
done;
rm -f /tmp/spamhaus
iptables -t raw -A PREROUTING -m set --match-set spamhaus src -j DROP
}
stop() {
echo "stop firewall"
iptables -F -t raw
ipset destroy blocklistde
ipset destroy spamhaus
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
И му добавам права за изпълнение
root@server22:~# chmod 755 /etc/init.d/firewall
След което разрешавам, стартирам скрипта и презареждам systemd
root@server22:~# systemctl enable firewall.service
root@server22:~# systemctl start firewall.service
root@server22:~# systemctl daemon-reload
Проверка дали е изпълнен скрипта.
root@server22:~# systemctl status firewall
Това което би трябвало да се види е банера на самият пост.
echo "spamnets"
NETS="cn kr ua ru jp in tr br id vn hk ir mx th"
ipset create spamnets hash:net
for ZONE in $NETS; do
wget -O - http://www.ipdeny.com/ipblocks/data/countries/$ZONE.zone 2>/dev/null >> /tmp/spamnets
done;
for i in $(cat /tmp/spamnets); do
ipset -A spamnets $i
done;
rm -f /tmp/spamnets
iptables -t raw -A PREROUTING -p tcp -m multiport --dports 21,25,110,143,465,587,993,995,8080 -m set --match-set spamnets src -j DROP
Да, (cn kr ua ru jp in tr br id vn hk ir mx th) това са кодовете на държавите от сайта www.ipdeny.com които не искам да виждат описаните портове.
