本記事では、WordPressサイト(Apache)を日本国内からのアクセスのみに制限する方法を解説します。
対象ポート:
・HTTP(80)
・HTTPS(443)
■ なぜ必要か
WordPressは世界中から攻撃されます:
・ログイン総当たり攻撃
・スキャン
・脆弱性攻撃
👉 日本IPのみに制限すると攻撃を大幅に削減できます
■ 注意(最重要)
設定を誤るとサイトにアクセスできなくなります。
・SSHは必ず許可したまま作業
・別セッションで確認しながら作業
■ 全体構成
日本IP → 許可
海外IP → 拒否
■ ① ipset(jp)作成
sudo firewall-cmd --permanent --new-ipset=jp --type=hash:net
■ ② 日本IPリスト取得
curl -O http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
■ ③ 日本IP抽出
grep '|JP|' delegated-apnic-latest | grep ipv4 | \
awk -F '|' '{print $4"/"32-log($5)/log(2)}' > jp.txt
■ ④ ipsetに登録
while read line; do
sudo firewall-cmd --permanent --ipset=jp --add-entry=$line
done < jp.txt
■ ⑤ 日本IPのみ許可(重要)
sudo firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source ipset="jp" port port="80" protocol="tcp" accept'
sudo firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source ipset="jp" port port="443" protocol="tcp" accept'
■ ⑥ その他を拒否
※ゾーンがDROPならそのままでOK
■ ⑦ 設定反映
sudo firewall-cmd --reload
■ ⑧ 確認
sudo firewall-cmd --list-all
👉 jp ipset が適用されていればOK
■ ⑨ Googlebot対策(重要)
Google検索に必要なIPを許可
sudo firewall-cmd --permanent --ipset=jp --add-entry=66.249.0.0/16
■ よくあるトラブル
● サイトが見れない
→ 自分のIPがjpに入っていない
● 海外から見れない
→ 正常動作
● WordPress更新できない
→ 外部API制限の可能性
■ 運用ポイント
・月1回IPリスト更新
・fail2banと併用
・ログ監視
■ 本環境
・Raspberry Pi 5
・Ubuntu Server
・Apache + WordPress
・fail2ban + firewall
■ メールサーバー用ポート設定(重要)
メールサーバーを運用している場合は、必要なポートを開放します。
■ SMTP(送信)
sudo firewall-cmd --permanent --add-service=smtp
または:
sudo firewall-cmd --permanent --add-port=25/tcp
■ Submission(認証付き送信)
sudo firewall-cmd --permanent --add-port=587/tcp
■ SMTPS(SSL送信)
sudo firewall-cmd --permanent --add-port=465/tcp
■ IMAP(受信)
sudo firewall-cmd --permanent --add-port=143/tcp
■ IMAPS(SSL受信)
sudo firewall-cmd --permanent --add-port=993/tcp
■ POP3(必要な場合のみ)
sudo firewall-cmd --permanent --add-port=110/tcp
■ POP3S(SSL)
sudo firewall-cmd --permanent --add-port=995/tcp
■ 設定反映
sudo firewall-cmd --reload
■ VPN(WireGuardなど)
WireGuardを使用している場合:
sudo firewall-cmd --permanent --add-port=51820/udp
■ 確認
sudo firewall-cmd --list-all
👉 必要なポートがすべて表示されていればOK
■ 最低限開けるべきポートまとめ
| 用途 | ポート |
|---|---|
| SSH | 10022 |
| HTTP | 80 |
| HTTPS | 443 |
| SMTP | 25 |
| Submission | 587 |
| SMTPS | 465 |
| IMAP | 143 |
| IMAPS | 993 |
| WireGuard | 51820/udp |
■ セキュリティ強化(重要)
👉 必要なポートだけ開ける
👉 使わないものは閉じる
例:
sudo firewall-cmd --permanent --remove-port=110/tcp
■ 運用ポイント
・fail2banと併用
・不要ポートは開けない
・ログを確認
■ 本環境
・Postfix
・Dovecot
・WireGuard
・firewalld
■ 次の記事
👉 IP自動更新スクリプト
👉 セキュリティ強化


コメント