Raspberry Pi 2で遊ぶ(Ver.2.0):ufwでちょっと簡単にファイアウォール設定

このページは「Raspberry Pi記事まとめ 」に集約しています。

Linuxにはiptablesという強力なファイアウォールがありますが、なかなか設定が難しいです。 ufw(Uncomplicated FireWall)はiptablesの設定をちょっと簡単にするもので、少ないコマンドでルールを書くことができます。
ufwはあくまでポート操作がメインです。
外部からのアクセスを有効にするには、ルータのポート開けをする必要がありますが、ルータの設定をいじらずポート開けできるminiupnpcを後で使います。

参考サイト

インストールと初期設定

インストール

$ sudo apt-get install ufw

動作確認

まだ有効になっていないことがわかります。

$ sudo ufw status
Status: inactive

ufwのIPv6を無効にする

ufwはデフォルトでIPv6が有効になっています。
起動してしばらくするとsyslogに以下のようなメッセージが大量に残ります。

Jan  8 09:10:05 balam kernel: [37613.244531] [UFW BLOCK] IN=wlan0 OUT= MAC=33:33:00:00:00:01:00:0b:a2:69:fb:e6:86:dd SRC=fe80:0000:0000:0000:020b:a2ff:fe69:fbe6 DST=ff02:0000:0000:0000:0000:0000:0000:0001 LEN=76 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=ICMPv6 TYPE=130 CODE=0

IPv6が悪さをしてるのが原因なので、設定ファイルからIPv6を無効にしましょう。

$ sudo vi /etc/default/ufw

【7行目あたり変更】IPv6を無効
IPV6=no

FWのルール決め

基本的なファイアウォール設定を行いますが、設定をする前にまずどのポートを空けるか決めてからやった方が良いです。
今回の例では以下の番号順にルールを設定していきます。

  1. 外部通信を全て拒否
  2. ローカルアドレスからのssh(22)を許可
  3. 動画ストリーミング用(9000)を許可

実際のコマンドは以下のようになります。

$ sudo ufw disable
$ sudo ufw default deny
$ sudo ufw allow from 192.168.24.0/24 to any port 22 proto tcp
$ sudo ufw allow 9000

ufwの有効化

$ sudo ufw enable

ArchlinuxのWikiにはsystemctlも有効にせよと言ってるので、一応その通りにしておきます。

$ sudo systemctl start ufw

設定確認

default denyは表示されません。許可(ALLOW)か拒否(DENY)のみです。

$ sudo ufw status
Status: active
To     Action From
--     ------ ----
22/tcp ALLOW  192.168.24.0/24
9000   ALLOW  Anywhere

iptablesでも状況を確認することができます。

$ sudo iptables -L
(省略)
Chain ufw-user-input (1 references)
target prot opt source destination
ACCEPT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http-alt
ACCEPT udp -- anywhere anywhere udp dpt:http-alt
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT udp -- anywhere anywhere udp dpt:http
(省略)

よく使用するポート

例ではHTTPとSSHのみですが、様々なポートがあります。 限定しても結構な量なので、以下のサイトを参照して下さい。

ufwはユーザが設定するポート以外に以下のものはデフォルトで開けるようになっています(Uncomplicated Firewall – ArchWiki)。

  • 67, 68:DHCP
  • 5353:mDNS(Avahi, Bonjor)
  • 1900:UPnP

ufwで主に使用するコマンド

参考程度に置いておきます。

ufwの有効化

$ sudo ufw enable

ufwの無効化

$ sudo ufw disable ※無効の時はstatus確認できない

状態の確認

$ sudo ufw status

デフォルトで拒否(タイムアウト)

$ sudo ufw default deny

デフォルトで拒否(Connection Refused)

$ sudo ufw default reject

通信の許可

$ sudo ufw allow ポート番号 ※ ポートは番号の他、名前(SSH等)でも指定できる

通信の許可(プロトコル指定)

$ sudo ufw allow ポート番号/プロトコル

通信の許可(IPアドレス指定)

$ sudo ufw allow from IPアドレス

通信の許可(IPアドレス・ポート・プロトコル指定)

$ sudo ufw allow from IPアドレス to any port ポート番号 proto プロトコル

ufwが対応する名前の一覧

$ sudo ufw app list ※ 39個なのでそんなにない

ルールの削除

$ sudo ufw delete allow ポート番号

細かい決め方した場合は、その追加したときの名前を入れないと消えません。
例えば、

$ sudo ufw allow from 192.168.24.0/24 to any port 22 proto tcp

というルールを登録した場合、削除するときは

$ sudo ufw delete allow from 192.168.24.0/24 to any port 22 proto tcp

というように指定する必要があります。ちょっとめんどくさい。
ufw statusで順番が分かってる場合は、以下のコマンドでもいけるようです。ルールが少ない場合は便利かと。

$ sudo ufw delete ルールの順番

ルールの再読込

$ sudo ufw reload

ルールのリセット

$ sudo ufw reset

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中