HOME | 2026-11-05 (Thu) Today's Access : 23 Total : 1414498. Since 10 Sep. 2019

ラズパイで作る自宅WEBサーバ:nginx編
第6回 ファイアウォール設定
2026.10.30

ブロードバンドルータ側で必要なポートのみを解放すれば 済んでしまうのですが、ブロードバンドルーター内側のラズベリーパイでもファイアウォールを設置して二重化しています。

●ufw の無効化
ufw(Uncomplicated FireWall)は、ファイアウォールの設定を行うコマンドですが、iptablesのラッパーなので無効化しておきます。

$ sudo ufw disable
Firewall stopped and disabled on system startup

●iptables インストール

$ dpkg --get-selections | grep iptables
iptables   install

既にインストールされています。手動でインストールする場合は
$ sudo apt install iptables

初期設定の確認
$ sudo /usr/sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
何も設定されていないので、すべてのポートがACCEPTになっています。

iptables 設定用スクリプト(iptables.sh)の作成

iptablesはコマンドなので、シェルスクリプトを用意して、起動時に実行するようにします。
iptables コマンドをリモートで直接実行する場合は要注意です。間違えるとポートが塞がって回線が切断されてしまいます。

$ mkdir /home/ubuntu/scripts
$ cd /home/ubuntu/scripts
$ vi iptables.sh
#!/bin/bash

iptables -F           ← 設定をクリア(chainのルールをすべて削除)
iptables -X           ← ユーザー定義チェインを削除

iptables -P INPUT   DROP    ← ポリシー設定
iptables -P FORWARD DROP
iptables -P OUTPUT  ACCEPT
 
iptables -A INPUT -p tcp --dport 22  -j ACCEPT    ← SSH
iptables -A INPUT -p tcp --dport 25  -j ACCEPT    ← SMTP
iptables -A INPUT -p tcp --dport 53  -j ACCEPT    ← DNS
iptables -A INPUT -p tcp --sport 53  -j ACCEPT
iptables -A INPUT -p udp --dport 53  -j ACCEPT
iptables -A INPUT -p udp --sport 53  -j ACCEPT

iptables -A INPUT -p tcp --dport 80  -j ACCEPT    ← WEB(http)
iptables -A INPUT -p tcp --dport 110 -j ACCEPT    ← POP
iptables -A INPUT -p udp --dport 123 -j ACCEPT    ← NTP
iptables -A INPUT -p udp --sport 123 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT    ← IMAP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT    ← WEB(https)
iptables -A INPUT -p tcp --dport 587 -j ACCEPT    ← SMTP Submission
iptables -A INPUT -i lo -j ACCEPT            ← 自端末からの入力許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
                                 ↑こちらから求めたパケットは許可する
※iptablesは上から順番にルールが適用されます。
※iptables -F:これをリモート端末から直接実行すると通信が遮断されることがあります。

ping を飛ばして サーバを探索して、悪意ある攻撃をされることがあるので解放することは推奨されません。 解放するのであれば下記を追加します。
iptables -A INPUT -p icmp -j ACCEPT
ICMP ( Internet Control Message Protocol ) はインターネット層(OSI参照モデルのネットワーク層)で動作するプロトコルです。

パソコンからRealVNCで接続する場合は、5900番ポートを開放します。
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT

Sambaのファイル共有を行う場合は下記の4ポートも開放します。
iptables -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -j ACCEPT
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p udp --dport 138 -j ACCEPT

また、必要に応じて下記の許可も検討してみてください。
iptables -A INPUT -p tcp --dport 20 -j ACCEPT ← FTP(非推奨)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT ← FTP(非推奨)
iptables -A INPUT -p tcp --dport 465 -j ACCEPT ← SMTPS(SMTP SSL)
iptables -A INPUT -p tcp --dport 993 -j ACCEPT ← IMAP(SSL)
iptables -A INPUT -p tcp --dport 995 -j ACCEPT ← POP(SSL)

スクリプトファイルのアクセス権限を設定します
$ sudo chmod 700 iptables.sh

フィルタを適応してみます
$ sudo ./iptables.sh
接続が遮断された場合は、再度、SSH接続します。

設定を確認します
$ sudo /sbin/iptables -L
Chain INPUT (policy DROP)
target     prot opt source         destination
ACCEPT     icmp --  anywhere       anywhere
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:ssh
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:smtp
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:domain
ACCEPT     tcp  --  anywhere       anywhere       tcp spt:domain
ACCEPT     udp  --  anywhere       anywhere       udp dpt:domain
ACCEPT     udp  --  anywhere       anywhere       udp spt:domain
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:http
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:pop3
ACCEPT     udp  --  anywhere       anywhere       udp dpt:ntp
ACCEPT     udp  --  anywhere       anywhere       udp spt:ntp
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:imap2
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:https
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:submissions
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:submission
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:netbios-ssn
ACCEPT     tcp  --  anywhere       anywhere       tcp dpt:microsoft-ds
ACCEPT     udp  --  anywhere       anywhere       udp dpt:netbios-ns
ACCEPT     udp  --  anywhere       anywhere       udp dpt:netbios-dgm
ACCEPT     all  --  anywhere       anywhere
ACCEPT     all  --  anywhere       anywhere       state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source         destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source         destination
システム起動時にスクリプトが実行されるように、サービス用のファイルを設定します。
$ sudo vi /lib/systemd/system/iptables.service
[Unit]
Description=iptables startup script

[Service]
Type=simple
ExecStart=/home/ubuntu/scripts/iptables.sh
Restart=no

[Install]
WantedBy=multi-user.target

※ファイル名は末尾が.serviceになるようにします。

サービスを有効にします
$ sudo systemctl enable iptables
Created symlink '/etc/systemd/system/multi-user.target.wants/iptables.service' → '/usr/lib/systemd/system/iptables.service'.

有効になると、/etc/systemd/system/multi-user.target.wants 配下に iptables.service のシンボリックリンクが作成されます

システムを再起動して、ステータスを確認します
$ sudo reboot
$ sudo systemctl status iptables
○ iptables.service - iptables startup script
     Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; preset: enabled)
     Active: inactive (dead) since Mon 2026-07-06 16:31:35 JST; 1min 42s ago
   Duration: 1.389s
 Invocation: 7c12a7dc4a474df68434959d721a218a
   Main PID: 591 (code=exited, status=0/SUCCESS)
        CPU: 319ms

 7月 06 16:31:33 ns.example.com systemd[1]: Started iptables.service - iptables startup script.
 7月 06 16:31:35 ns.example.com systemd[1]: iptables.service: Deactivated successfully.
※備考 iptables.sh で、Restart=always を指定した場合
start request repeated to quickly
のエラーになります。

解放しているポートを調べるツールを組込みます
$ apt-cache show nmap
Package: nmap
Version: 7.95+dfsg-3

$ sudo apt-get -y install nmap

TCP ポートをスキャンします
$ sudo nmap localhost
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-07-03 19:30 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00015s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 996 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
3306/tcp open  mysql
2026.08.27 番外編 DNSトランスファー
2026.09.06 第0回 nginx を始めよう
2026.09.14 第1回 Ubuntu Server 設定
2026.09.24 第2回 DNS設定
2026.10.08 第3回 Nginxインストール
2026.10.21 第4回 PHPインストール
2026.10.29 第5回 MariaDB設定
2026.10.30 第6回 ファイアウォール設定
2026.10.31 第7回 認証サーバ設定
2026.11.01 第8回 メールサーバ設定
2026.11.02 第9回 Node.js設定
2026.11.03 第10回 アプリ作成
2026.11.04 第11回 crontab設定
2026.11.05 第12回 運用・保守

KEYESTUDIO Micro:bit V2ロボットスターターキット (マイクロビットなし) MakecodeとPython用
動き、光と音の使い方、障害物の検知と回避方法、線をたどり、IRリモコンとアプリでコントロールする方法を学びます。

Maqueen Lite V5 micro:bit ロボットキット STEM用(ライントレース&障害物回避)
Maqueen Lite V5 STEMロボットは、事前調整済みのライントレースアルゴリズム、耐衝撃モーター、開封即使用可能な設計で、ストレスを解消します。

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.