banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

使用ipsetを使用してファイアウォールのポートホワイトリストを設定し、指定された国のみがアクセスできるようにします。

** 説明:** 以前、ブロックしたい国の IP を一括でブロックする方法についてのチュートリアルを投稿しましたが、特定の国からのウェブサイトへのアクセスや CC 攻撃を防ぐためには、ホワイトリストの設定方法も必要です。そこで、ipset を使用して設定する方法を調査しました。現在、問題なく動作しています。

方法#

まず、国の IP 範囲を取得する必要があります。ダウンロード先:http://www.ipdeny.com/ipblocks/。ここでは、中国を例に説明します。

1. ipset のインストール

# Debian/Ubuntuシステム
apt-get -y install ipset

# CentOSシステム
yum -y install ipset

CentOS 7 では、ファイアウォールを停止する必要があります。

systemctl stop firewalld.service
systemctl disable firewalld.service

2. 以前のルールをクリア

# ルールが適用されないことを防ぐため、以前のファイアウォールルールをクリアすることをお勧めします
iptables -P INPUT ACCEPT
iptables -F

3. 新しいルールの作成

# cnipという名前のルールを作成
ipset -N cnip hash:net
# 国のIP範囲をダウンロードし、ここでは中国を例にします
wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone
# IP範囲をcnipルールに追加
for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done

4. IP 範囲のホワイトリストの設定

# IP範囲を許可する
iptables -A INPUT -p tcp -m set --match-set cnip src -j ACCEPT
# すべてのポートを閉じる
iptables -P INPUT DROP

これにより、指定された国の IP のみがサーバーにアクセスできるようになります。

国内にいる場合、ウェブサイトが国内の人によるアクセスを許可しない場合、すべてのポートを閉じないようにしてください。そうすると、SSH にアクセスできなくなります。代わりに、80/443 ポートのみを閉じることができます。

# 特定のポートを閉じる(例:80/443)
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP

これにより、他の国の IP はサーバーの 80/443 ポートにアクセスできず、ウェブサイトにアクセスできなくなりますが、他のポートにはアクセスできます。

5. ルールの削除

# -Aを-Dに変更すると、ルールが削除されます。例:
iptables -D INPUT -p tcp -m set --match-set cnip src -j ACCEPT
iptables -D INPUT -p tcp --dport 443 -j DROP

説明#

ファイアウォールを設定すると、一部のサーバーではシステムの再起動後にファイアウォールルールがクリアされ、設定が無効になる場合があります。したがって、ルールを設定した後は、iptables コマンドを使用して保存する必要があります。保存コマンドは、多くのシステムで一般的ではないため、ここでは説明しません。各自で検索して解決する必要があります。また、再起動時にファイアウォールを再設定するために、毎回手動で設定することもできます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。