ipset で安心安全サーバライフ

日頃サーバをいじっていると、ちょっと気を抜いただけで中国南北朝鮮ロシアあたりからアタックを試みられます。
もう面倒くさいので ipset でブロックしましょう。
ついでにsshは日本だけ許可しましょう。

yum install ipset ipset-service

ipdenyから国別IPを取得してきて、リストを作成するシェルスクリプトを作ります。

#!/bin/sh

BLACK_COUNTRIES=("cn" "kr" "kp" "ru")

ipset create -exist BLACKLIST hash:net
ipset flush BLACKLIST

for COUNTRY in ${BLACK_COUNTRIES[@]}; do
    echo ${COUNTRY}

    # Download Country ip address list(ipv4)
    if [ -s ${COUNTRY}.zone ]; then
        mv ${COUNTRY}.zone ${COUNTRY}.zone.old
    fi

    wget http://www.ipdeny.com/ipblocks/data/countries/${COUNTRY}.zone

    # Register specific country ip address to BLACKLIST group
    while read ADDRESS; do
        echo "ipset add BLACKLIST $ADDRESS" # FOR DEBUG
        ipset add BLACKLIST $ADDRESS
    done < ${COUNTRY}.zone
done

同様にjpのWHITELISTを作成します。

設定を保存します。

ipset save WHITELIST > /etc/sysconfig/ipset
ipset save BLACKLIST >> /etc/sysconfig/ipset

※保存先は /usr/libexec/ipset/ipset.start-stop の IPSET_DATA 参照

サービスに登録します。

systemctl enable ipset

リストをフラッシュしてみて・・・

ipset flush WHITELIST
ipset flush BLACKLIST

restart して設定がロードされていればOK

systemctl restart ipset

こんなふうに使います。

/sbin/iptables -A INPUT --match-set BLACKLIST src -j DROP
/sbin/iptables -A INPUT -p tcp -m state --state NEW --destination-port 22 -m set --match-set WHITELIST src -j ACCEPT