ufwをインストールして使ってみた

第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のルールを書くのってまあまあ面倒くさい  
定義漏れがあったりしたら怖い
それが少しでも楽になればイイね！と思った