やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pi4B Raspbian buster に ufw をインストールする(ファイアウォール)

 ネットワーク・セキュリティ。

Pi3B+のときの手順

 これに従い、Pi4Bで実施する。

手順

  1. 要件
  2. インストール
  3. 設定
  4. 接続確認

1. 要件

 自宅ネットLANからのアクセスのみ許可したい。

  • ローカルネットワークからSSHVNCを使ってアクセスしたい
  • グローバルネットワークからのアクセスは全面的に遮断したい

ポート番号

通信 ポート番号
SSH 22
VNC 5900, 5901, 5902

2. インストール

sudo apt install ufw
...
この操作後に追加で 852 kB のディスク容量が消費されます。
...

確認

sudo ufw --version
ufw 0.36
Copyright 2008-2015 Canonical Ltd.
sudo ufw status
Status: inactive

3. 設定

  1. 現状確認
  2. ufw設定
  3. ufw有効化

3-1. 現状確認

sudo iptables -nL
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         

ufw設定

  1. ポート定義一覧
  2. 自分のIPアドレスを確認する
  3. SSH
  4. VNC

3-2-1. ポート定義一覧

 SSHVNCが存在することを確認する。

sudo ufw app list

一覧

Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  LDAP
  LDAPS
  LPD
  MSN
  MSN SSL
  Mail submission
  NFS
  OpenSSH
  POP3
  POP3S
  PeopleNearby
  SMTP
  SSH
  Socks
  Telnet
  Transmission
  Transparent Proxy
  VNC
  WWW
  WWW Cache
  WWW Full
  WWW Secure
  XMPP
  Yahoo
  qBittorrent
  svnserve

3-2-2. 自分のIPアドレスを確認する

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether dc:a6:32:**:**:** brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.10/24 brd 192.168.11.255 scope global dynamic noprefixroute wlan0
識別名 意味
eth0 有線LAN
wlan0 無線LAN

 今回IPアドレス192.168.11.10とする。環境によって変わる。

 自宅のLANは192.168.11.0192.168.11.255のいずれかになるはず。

3-2-3. SSH

sudo ufw allow from 192.168.11.0/24 to any port ssh
Rules updated

 sshがないならポート番号22を指定する。

sudo ufw allow from 192.168.11.0/24 to any port 22

 なお、192.168.11.0/24という指定方法は「192.168.11.から始まる全アドレス」を意味する。4つ目の数字は0〜255のどれか。ひとつずつ書かなくてもすべて対象にできる。

3-2-4. VNC

 VNCサーバーは5900 + ディスプレイ番号 のポートを使うらしい。

 ディスプレイ番号はVNCサーバを起動させる以下コマンドで判明する。

vncserver -randr=1920x1080
...
New desktop is raspberrypi:1 (192.168.11.10:1)

 ディスプレイ番号は1である。IPアドレスの末尾にある。

 このコマンドを続けてもう一度実行すると192.168.11.10:2になる。そのときのディスプレイ番号2はである。

 最小のディスプレイ番号は1である。そしてRaspberry Pi 4B の場合、micro HDMI のポートが2つある。よって以下3つのポート番号を開ければ良い。

5900
5901
5902

 ポートを開ける。sshと違い、vcnのキーワードは使えないようだ。

sudo ufw allow from 192.168.11.0/24 to any port 5900
sudo ufw allow from 192.168.11.0/24 to any port 5901
sudo ufw allow from 192.168.11.0/24 to any port 5902

失敗ログ

sudo ufw allow from 192.168.11.0/24 to any port vnc
ERROR: Bad port 'vnc'
sudo ufw allow from 192.168.11.0/24 to any port VNC
ERROR: Bad port 'VNC'

 以下の書式で59005902までのポート番号を開ける。

sudo ufw allow 5900:5902
ERROR: Must specify 'tcp' or 'udp' with multiple ports
sudo ufw allow from 192.168.11.0/24 to any port 5900:5902/tcp
ERROR: Port ranges must be numeric

 プロトコルで制限することもできる?

sudo ufw allow from 192.168.11.0/24 to any port 5900
sudo ufw allow from 192.168.11.0/24 to any port 5900/tcp
sudo ufw allow from 192.168.11.0/24 to any port 5900/udp
sudo ufw allow from 192.168.11.0/24 to any port 5901
sudo ufw allow from 192.168.11.0/24 to any port 5901/tcp
sudo ufw allow from 192.168.11.0/24 to any port 5901/udp
sudo ufw allow from 192.168.11.0/24 to any port 5902
sudo ufw allow from 192.168.11.0/24 to any port 5902/tcp
sudo ufw allow from 192.168.11.0/24 to any port 5902/udp

 ルールを削除したいときは以下。

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    192.168.11.0/24           
[ 2] 5900                       ALLOW IN    192.168.11.0/24       

 5900のを削除したいときは以下。

sudo ufw delete 2

 以下のように確認される。y, Enterキー押下。

Deleting:
 allow from 192.168.11.0/24 to any port 5900
Proceed with operation (y|n)? 
Rule deleted

3-3. ufw有効化

 ufwを有効化する。

sudo ufw enable
Firewall is active and enabled on system startup

 もしufwを無効化するなら以下。

sudo ufw disable

 enableすると、Statusinactiveからactiveになった。

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    192.168.11.0/24           
[ 2] 5900                       ALLOW IN    192.168.11.0/24           
[ 3] 5901                       ALLOW IN    192.168.11.0/24           
[ 4] 5902                       ALLOW IN    192.168.11.0/24           

 設定が書き込まれたことを確認する。

sudo iptables -nL

4. 接続確認

 Pi3B+などからPi4Bへ問題なくSSH, VNCアクセスできることを確認する。

SSH

  1. Pi4Bを起動する
  2. Pi4BのIPアドレスを調べる ip a
  3. Pi3B+など他のマシンからPi4BへSSHログインする
ssh pi@192.168.11.10

VNC

 Pi4BでVNCサーバを起動する。

vncserver -randr=1920x1080

 Pi3B+などでVNC Viewerを起動し、ログインする。URL例: 192.168.11.10:1

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで

 ハード。

 ソフト。

 設定。

 データ移行。

 企業。