skip to content
barorin&?

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

/ 2 min read

Table of Contents

はじめに

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

ufwの設定

Terminal window
$ 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

スクリプトの作成

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

Terminal window
$ 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

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

Terminal window
$ 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に登録

Terminal window
$ 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でブロックする