UFWの理解と設定方法

# 1\. まず、サービスごとのポートを理解する
サーバーが提供するサービスは外部と接続が発生します。外部からサーバーにアクセスするときには、SSH、FTP、HTTPSなどの様々なプロトコルでアクセスします。これらは通信時にポート番号を利用してアクセスしています。

### サービスごとのポートの整理
### SSH (SFTP 含む)
用途: 
- [x] 管理者が作成したユーザーによる SSH 接続
- [x] SFTP によるファイル転送（SSH の仕組みを利用）
- [x] ホスティング会社の Web 経由での root アクセス（必要な場合）

標準ポート: 22

注意: もしセキュリティ強化のためにカスタムポートに変更している場合、そのポート番号を許可する必要があります。特定の IP からのみアクセスを許可する（IP ホワイトリスト）とさらに安全です。

### Apache2やNginx (Web サーバー)

用途: 
- [x] Web コンテンツの提供（HTTP と HTTPS）
- [x] ホスティング会社による稼働チェック（通常は HTTP/HTTPS でのアクセス）

標準ポート:　HTTP: 80、HTTPS: 443

### Mail サーバー

用途: 
- [x] メールの送受信のため

一般的なポート例:
SMTP（受信側・送信側）: 25
SMTP Submission: 587
SMTPS（SSL/TLS）: 465（必要に応じて）
IMAP (SSL): 993
POP3 (SSL): 995

注意: 実際にどのプロトコルを使用しているかにより、必要なポートを選んで開放してください。

### FTP

用途: 
- [x] ファイルのアップロードやダウンロード

標準ポート: 21, 30000～31000

注意: もし可能なら、FTP よりも SFTP を利用するほうが安全です。もし純粋な FTP を利用する場合は、制御用ポート 21 と、パッシブモード用のポートレンジ（例：30000～31000など）を開放する必要があります。

# 2\. UFWの設定
### まず、システムとソフトウェアの最新状態の維持
```
sudo apt update
sudo apt upgrade
```
## UFW の設定例
以下は、上記のサービスを前提として、外部から不要なアクセスを遮断し、必要なポートのみを許可する UFW の設定例です。

### 1\.デフォルトポリシーの設定
まず、すべての受信トラフィックを拒否し、送信トラフィックは許可するように設定します。

```
sudo ufw default deny incoming
sudo ufw default allow outgoing
```
※必要に応じて、特定の IP からのみアクセスを許可するように設定することも検討してください。

### 2\.SSHやSFTPの許可
```
sudo ufw allow 22/tcp
```
※ もしカスタムポート（例：2222）を使っている場合は:
```
sudo ufw allow 2222/tcp
```

### 3\.Apache2やNginxの許可 (HTTP/HTTPS)

```
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
```

### 4\.Mail サーバーの許可
※必要なサービスに合わせて、以下の例のうち該当するポートのみを許可してください。

```
sudo ufw allow 25/tcp    # SMTP（メール受信／送信）
sudo ufw allow 587/tcp   # SMTP Submission（認証付き送信）
```

以下は、メール受信に IMAP/POP3 を利用している場合

```
sudo ufw allow 993/tcp   # IMAP over SSL
sudo ufw allow 995/tcp   # POP3 over SSL
```

必要なら SMTPS の 465 番も:

```
sudo ufw allow 465/tcp
```

### 5\.FTP の許可（必要な場合）
※ 可能なら SFTP（SSH経由）で代替するのが望ましいですが、FTP を使う場合は以下のように設定します。

```
sudo ufw allow 21/tcp    # FTP制御用ポート
```

パッシブモードのためのポートレンジ（例: 30000～31000）

```
sudo ufw allow 30000:31000/tcp
```

### その他のサービス

必要に応じて、その他のサービスのポートも開放しましょう。


## 3\.設定の有効化

最後に UFW を有効化します。

```
sudo ufw enable
```

設定の確認

現在の UFW のルールを確認するには次のコマンドを実行します。

```
sudo ufw status verbose
```

UFWの状態確認

```
sudo ufw status
```


# 4\.注意事項 & 補足
### ホスティング会社のアクセスについて

ホスティング会社が管理コンソールやウェブ経由で SSH アクセス（root でのアクセス含む）を行う場合、SSH の許可ルール（22/tcp）が適用されます。

### IPの指定
もし特定の IP からのみアクセスを許可したい場合は、次のように個別にルールを追加します（例として、ホスティング会社の IP が 203.0.113.10 の場合）:

```
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
```

### 他サーバーへの SFTP 転送

これらは基本的に SSH（SFTP）を利用するため、22番ポートの許可ルールでカバーされます。

### テストと調整

初めは必要最低限のポートだけを開放し、サービスが正常に動作することを確認してください。
その後、必要に応じて追加のポートを開放するなど、環境に合わせた調整を行ってください。

### TCP と UDP の違い
TCP (Transmission Control Protocol)

接続指向: 通信を開始する前にコネクションの確立（ハンドシェイク）が必要です。
信頼性: データの送信順序や再送制御、エラー検出などの仕組みがあり、データが正しく届くように保証されます。
用途: SSH、HTTP/HTTPS、FTP（制御用）など、信頼性が重視されるプロトコルで使われます。
UDP (User Datagram Protocol)

非接続型: コネクションの確立なしにデータを送信でき、オーバーヘッドが少ないため、低遅延で通信が行えます。
信頼性なし: データが届いたかどうかの確認や順序の保証がありません。そのため、必要な場合はアプリケーション側でエラー処理を行います。
用途: DNS、DHCP、VoIP、動画や音声のストリーミング、一部のオンラインゲームなど、多少のパケットロスを許容できる通信で利用されます。

ですので、SSH、SFTP、Apache2やNginx: 両方とも TCP を利用するため、sudo ufw allow 22/tcp や Apache2 用の 80/tcp、443/tcp の設定で十分です。UDP の設定（例：sudo ufw allow 22/udp）は不要です。