skip to content
barorin&?

Ubuntuのufwで海外からのアクセスをブロックする方法

/ 2 min read

はじめに

Ubuntuのufwで海外からのアクセスをブロックする設定方法です。

ufwの設定

$ sudo vim /etc/ufw/before.rules
# COMMIT前に以下を追記
# :DROP_EXCEPT_JP - [0:0]
# -A DROP_EXCEPT_JP -j ACCEPT
# -A ufw-before-input -j DROP_EXCEPT_JP

$ sudo vim /etc/ufw/after.init
# 以下を追記
# start)
#     # typically required
#     /etc/ufw/after.init.drop_except_jp
#     ;;
# stop)
#     # typically required
#     iptables -F DROP_EXCEPT_JP
#     ;;

# 権限付与
$ chmod +x /etc/ufw/after.init

スクリプトの作成

格納フォルダを作成して移動

$ mkdir drop_except_jp
$ cd drop_except_jp

drop_except_jp.shの作成

#!/bin/sh
IPTABLES=iptables
# 接続を許可するポートをカンマ区切りで指定
EXCLUDE_PORTS=80,443
wget -q -N http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip -q -f -c cidr.txt.gz > cidr.txt
if [ -f cidr.txt ]; then
    echo $IPTABLES -F DROP_EXCEPT_JP
    echo $IPTABLES -A DROP_EXCEPT_JP -p tcp -m multiport --dport $EXCLUDE_PORTS -m state --state NEW -j RETURN
    # 接続を許可したい国外IPアドレスがあれば以下に追加
    echo $IPTABLES -A DROP_EXCEPT_JP -s 192.168.1.0/24 -j RETURN
    sed -n 's/^JP\t//p' cidr.txt | while read address; do
        echo $IPTABLES -A DROP_EXCEPT_JP -s $address -j RETURN
    done
    echo $IPTABLES -A DROP_EXCEPT_JP -j DROP
fi

作成後、以下のコマンドを実行

$ sh drop_except_jp.sh > /etc/ufw/after.init.drop_except_jp
$ chmod +x /etc/ufw/after.init.drop_except_jp

# ufw再起動
$ systemctl restart ufw

jp_iplist_update.shの作成

cronで上記コマンドを実行するためのスクリプトです。

#!/bin/bash
sh /root/drop_except_jp.sh > /etc/ufw/after.init.drop_except_jp
systemctl restart ufw

jp_iplist_update.shをcronに登録

$ sudo crontab -e
# (例)毎日1時に実行
# 0 1 * * * sh /home/ユーザー名/drop_except_jp/jp_iplist_update.sh >> /home/ユーザー名/drop_except_jp/cron.log 2>&1

参考

[Ubuntu] ファイアウォール ufw で海外からの接続をブロックする Ubuntuで国外からのアクセスをfirewallでブロックする