2016年2月19日金曜日

openwrtでipsetとfail2ban

ログを転送してそのログを元にbanするというならばありかもしれないが
2000円に満たないおっぱい1号とたばこ1箱にもならない
電気代ケチってリスクを増やす必要があるのだろうか?

なーんて考えたら負け。

1.タイムゾーンの設定

UTCなら問題ない。
ローカルタイム(JST)にLUCIで設定しただけだと
asteriskのログはUTCのままだったりする。
ついでにasteriskのログ表示も変えておく。

opkg install zoneinfo-asia
ln -sf /usr/share/zoneinfo/Japan /etc/localtime
cp -a /etc/asterisk/logger.conf  /etc/asterisk/logger.conf.org
sed -i -e "/^\[general\]$/a dateformat=%F %T" /etc/asterisk/logger.conf

ゾーンファイルにこだわりがあるぜ!って人は
Japanじゃなくてasia/Tokyoでもいいけど同じだぞ・・

そうそう、関係ないけどasterisk入れると大抵aelも入るので
[21]
type=friend
defaultuser=21
secret=passw0rd
canreinvite=no
host=dynamic
context=ael-default

とでもしておくと、とりあえず1000に電話するとおめでとうメッセージが聞こえる。
確認したらcontextを変えてmodule.confでaelをnoloadにすればあとくされがない。


2.一気に設定

pythonはlightでもそれなりの容量を喰うのでnand32MBとかの機種じゃ無理です。
で、USBに入れるかって話になるとドングル使うにはハブがいる。
ちょいまて、おしゃれなハブ買うと同じ値段でOPI-ONEかえるやん!

WNDR4300なら安心の100MB!
11na使えないんですけどね…



mkdir -p /etc/ssl/certs
export SSL_CERT_DIR=/etc/ssl/certs
source /etc/profile
opkg install ca-certificates wget python ipset gunzip tar ipset
wget https://github.com/fail2ban/fail2ban/archive/0.9.3.tar.gz
tar xvfz 0.9.3.tar.gz
cd fail2ban-0.9.3
python setup.py install

cat << EOF > /etc/init.d/ipset-persistent
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org
START=17
STOP=17
start() {
echo start
/usr/sbin/ipset -! restore < /etc/iptables/ipset 2> /dev/null
}
stop() {
echo stop
/usr/sbin/ipset save > /etc/iptables/ipset
}
EOF
cat << EOF > /etc/init.d/fail2ban
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org
START=98
STOP=98
RUNDIR=/var/run/fail2ban
start() {
test -d \$RUNDIR || mkdir -p \$RUNDIR
test ! -e \$RUNDIR/fail2ban.sock || rm -f \$RUNDIR/fail2ban.sock
exec /usr/bin/fail2ban-client -f -x start
}
stop() {
exec /usr/bin/fail2ban-client stop
exec rm -f  \$RUNDIR/fail2ban.pid
}
EOF
chmod +x /etc/init.d/ipset-persistent
chmod +x /etc/init.d/fail2ban
/etc/init.d/ipset-persistent enable
/etc/init.d/fail2ban enable
cat << EOF > ./jp_list.sh
#!/bin/sh
if [ -s cidr.txt ]; then
mv cidr.txt cidr.txt.old
fi
wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
ipsz=\`wc -c < cidr.txt\`
if [ \$ipsz -lt 1500000 ]; then
rm -f cidr.txt
else
ipset swap JPLIST JPLIST
if [ \$? -ne 0 ] ;then
ipset create -! JPLIST hash:net
fi
ipset create -! JPLIST2 hash:net
sed -n 's/^JP\\t//p' cidr.txt | while read ADDRESS; do
ipset add JPLIST2 \$ADDRESS
done
ipset swap JPLIST JPLIST2
ipset destroy JPLIST2
fi
EOF
chmod +x ./jp_list.sh
./jp_list.sh

超てきとう。
openwrtやDD-WRTはinitスクリプトが超シンプルでよいね。

ラズパイやらでipsetの読み込みをする場合スクリプトがいる
http://ppl.ug/ae9qsuHnMwI/

systemctl enable ipset-presistent

で/etc/rcS.d にリンクが生えてるはず

0 件のコメント:

コメントを投稿