第132回 関西Debian勉強会でufwのお話を聴く機会があり、raspbianにもインストールして使ってみた
ufwとは?
Uncomplicated FireWall(複雑ではないファイアーウォール)
インストールする
$ sudo apt -y install ufw
早速使ってみる
sshで接続している場合は、まずsshで使用しているポートを許可してからufwを有効化しないと詰んでしまう
$ sudo ufw allow [sshで使用しているポート]/tcp
Rules updated
Rules updated (v6)
もしsshをポート22で使用していたら
$ sudo ufw allow 'SSH'
Rule added
Rule added (v6)
だけで済む
IPv4とIPv6の両方のルールを設定してくれるから楽かも
ufwを有効化する
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
ufwを無効化する
$ sudo ufw disable
Firewall stopped and disabled on system startup
現在の状態を確認する
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
$ sudo ufw status
Status: active
To Action From
-- ------ ----
SSH ALLOW Anywhere
SSH (v6) ALLOW Anywhere (v6)
使い方
ルールを追加する
$ sudo ufw allow [使用するポート]/プロトコル
予め定義したものは定義名を指定すると簡単に設定できる
定義名を取得するには
$ 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
定義を使ってルールを追加するには
$ sudo ufw allow Bonjour
$ sudo ufw allow 'WWW Full'
のようにする
自分で定義を作成するには
/etc/ufw/applications.d
にある定義ファイルを参考に追加する
$ cat /etc/ufw/applications.d/ufw-webserver
[WWW]
title=Web Server
description=Web server
ports=80/tcp
[WWW Secure]
title=Web Server (HTTPS)
description=Web Server (HTTPS)
ports=443/tcp
[WWW Full]
title=Web Server (HTTP,HTTPS)
description=Web Server (HTTP,HTTPS)
ports=80,443/tcp
[WWW Cache]
title=Web Server (8080)
description=Web Server (8080)
ports=8080/tcp
ルールにコメントを追加するには
$ sudo ufw allow 1313/tcp comment "hugo server"
$ sudo ufw status
Status: active
To Action From
-- ------ ----
Bonjour ALLOW Anywhere
1313/tcp ALLOW Anywhere # hugo server
SSH ALLOW Anywhere
WWW Full ALLOW Anywhere
Bonjour (v6) ALLOW Anywhere (v6)
1313/tcp (v6) ALLOW Anywhere (v6) # hugo server
SSH (v6) ALLOW Anywhere (v6)
WWW Full (v6) ALLOW Anywhere (v6)
ルールを削除する
$ sudo ufw delete allow [使用するポート]/プロトコル
便利だと思ったlimitオプション
ルールを追加する時にlimitオプションを使うと「30秒に6回の接続があったらブロック」されるらしい
ブルートフォースアタックを緩和できるかも?
ただし構成管理ツールやscpを使っていると自分で罠にハマることになるかも
$ sudo ufw limit 'SSH'
まとめ
iptablesのルールを書くのってまあまあ面倒くさい
定義漏れがあったりしたら怖い
それが少しでも楽になればイイね!と思った