はじめに
- 自分用メモです。元の記事 パソコン鳥のブログ - [Ubuntu] ファイアウォール ufw で海外からの接続をブロックする を見る方がいいです。
- 世界の国別 IPv4 アドレス割り当てリスト の日本のIPアドレスのみにアクセスを許可したい
- 設定は iptables でやりたい
- 新しい chain を作成して設定する
- 日本のIPアドレスは、RETURN して、そのほかは DROP する
環境
~$ uname -a
Linux linux 5.4.0-121-generic #137-Ubuntu SMP Wed Jun 15 13:33:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
設定
概要
-
以下のように、新しいチェーンを作成して、日本のIPアドレスは、RETURN して、そのほかは DROP するように設定する。そのためにスクリプトや設定編集を実行する。
iptables -F DROP_EXCEPT_JP iptables -A DROP_EXCEPT_JP -s AAA.AAA.AAA.AAA/16 -j RETURN iptables -A DROP_EXCEPT_JP -s BBB.BBB.BBB.BBB/24 -j RETURN : : iptables -A DROP_EXCEPT_JP -j DROP
作業
-
/etc/ufw/before.rules
を編集して、以下の3行を COMMIT とコメントの前に追加する:DROP_EXCEPT_JP - [0:0] -A DROP_EXCEPT_JP -j ACCEPT -A ufw-before-input -j DROP_EXCEPT_JP # don't delete the 'COMMIT' line or these rules won't be processed COMMIT
-
/etc/ufw/after.init
の start) と stop) を編集するstart) # typically required /etc/ufw/after.init.drop_except_jp ;; stop) # typically required iptables -F DROP_EXCEPT_JP ;;
-
/etc/ufw/after.init
に実行権限を付加するchmod +x /etc/ufw/after.init
-
以下のスクリプトを作成する。場所はどこでも良い。 {self subnet} に自分のサブネットを入れる。
#!/bin/sh IPTABLES=iptables #EXCLUDE_PORTS=80,443,25 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 # 次の行は必要に応じて echo $IPTABLES -A DROP_EXCEPT_JP -s {self subnet} -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
-
スクリプトを実行して日本のIPアドレスを記載したファイルを作成する
sh drop_except_jp.sh > after.init.drop_except_jp cp after.init.drop_except_jp /etc/ufw/after.init.drop_except_jp chmod +x /etc/ufw/after.init.drop_except_jp
-
ufw を再起動する
ufw reload service ufw restart service ufw stats
おわりに
- かんたんでしたね、簡単になるように公開してくださっている記事に感謝