CodeGym /コース /Docker SELF /ファイアウォールの設定 (`ufw`, `iptables`)

ファイアウォールの設定 (`ufw`, `iptables`)

Docker SELF
レベル 5 , レッスン 1
使用可能

ファイアウォールの設定 ufw, iptables

1. UFW: Uncomplicated Firewall

ファイアウォールは何のために必要?

サーバーを家に例えてみて?家には貴重なもの(もちろんデータ)がいっぱいあるよね。もしドアを開けっ放しにしてたら、誰でも入ってきて、君のデータを食い尽くしちゃうかもしれないし、汚れた皿を置いていくかも(もっとひどいこともあり得るけど)。ファイアウォールはそのドアみたいなもので、「誰が」「どの門を通って」「どんな条件で」入れるかをコントロールできる。

Linuxにはファイアウォールを設定するための2つの基本ツールがあるよ:ufw(Uncomplicated Firewall、つまり「シンプルなファイアウォール」って感じ)とiptables。それぞれの仕組みと違いを見ていこう。

UFWって何?

UFWは「簡単にしましょう」ってコンセプトで作られたファイアウォール設定ツールだよ。高度な詳細を気にせずに、基本的なアクセスルールをサクッと設定したい人にはぴったりだよ。

UFWのインストールと有効化

UFWは普通Debian/Ubuntuベースのディストリビューションには最初から入ってる。もし無かったら、インストールしてね:

sudo apt update
sudo apt install ufw

UFWを有効にするには:

sudo ufw enable

ステータスを確認:

sudo ufw status

最初に実行すると、ステータスはたぶん「inactive」だよ。有効化したら「active」に変わるよ。

UFWルールの設定

さて、面白いところに入るよ。どのトラフィックを通して、どれをブロックするかを決めるルールの設定だ!

SSHアクセスを許可する(ポート22):

sudo ufw allow 22

ウェブサーバーへのアクセスを許可する(ポート80):

sudo ufw allow 80

HTTPSを開放する(ポート443):

sudo ufw allow 443

不要なポートを閉じる(例: 8080):

sudo ufw deny 8080

ルールを削除:

もしやり直したくなったら、sudo ufw status numberedコマンドで番号を確認して、その番号を指定して削除できるよ。例えば:

sudo ufw delete 1

確認とテスト

ちゃんとうまく動いているか確かめるために、もう一度ステータスを見てみよう:

sudo ufw status

全ての有効なルールのリストが表示されるよ。


2. IPTABLES: もっとコントロール、もっと可能性

iptablesとは?

UFW が「簡単なロック付きドア」だとしたら、iptables は「賢い警備員」だね。これを使えばすべてを設定することができるよ。トラフィックの制御、ルーティング、さまざまな基準でのフィルタリング、さらにはパケットの変更も可能だよ。

iptablesの基本概念

  1. テーブル — ネットワークパケットを処理するための機能のセットだよ。
    • filter: パケットの処理とフィルタリング(例: 許可またはブロック)。
    • nat: アドレス/ポート変換(例えばルーター用)。
  2. チェーン — パケットに適用されるルール群。
    • INPUT: 受信トラフィック用。
    • OUTPUT: 送信トラフィック用。
    • FORWARD: 転送されたトラフィック用。
  3. ターゲット (targets) — パケットに対して実行されるアクション。
    • ACCEPT: パケットを許可。
    • DROP: パケットを破棄。
    • REJECT: パケットを破棄して通知を送信。

では、iptablesルールを設定する方法を見てみよう。

現在のルールの確認

既に設定されているルールを確認するには、以下を実行してね:

sudo iptables -L

さらに詳細な情報を得るには、-v-n を追加してね。

iptablesでルールを作成

簡単なルール: SSH(ポート 22)を許可:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

ポート8080へのアクセスをブロック:

sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

IPアドレスによるアクセス制限:

特定のIPを持つコンピュータだけがサーバーに接続できるようにしたい場合、その他のすべては接続できない:

sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

ルールの削除

ルールを削除するには、その番号を知る必要があるよ。以下を使って番号を確認してね:

sudo iptables -L --line-numbers

そして削除:

sudo iptables -D INPUT <番号>

ルールの保存

iptablesのルールは通常、システムを再起動すると「忘れられる」よ。これを避けるため、ルールを保存してね:

sudo iptables-save > /etc/iptables/rules.v4

その後、ルールを以下のように復元できるよ:

sudo iptables-restore < /etc/iptables/rules.v4

3. UFW対IPTABLES: どっちを選ぶべき?

UFWとiptablesは同じ機能を果たしてるよ、サーバーを保護するってやつ。じゃあ、どっちのツールを使うべき?

  • UFW — これは基本的なセキュリティ設定を簡単にするツールだよ。低レベルな詳細を気にしたくないとか、とにかくさっとファイアウォールを設定したい人向け。
  • Iptables — こっちはもっと複雑な設定ができる強力なツールだね。もしインフラが複雑(例えば、NATとかルーティングとか)なら、iptablesが必要だよ。

ちなみにね、UFWは実際にはiptablesの「上で」動いてるんだよ。UFWはiptablesルールをあなたの代わりに生成してくれるわけ。だから、iptablesをマスターしたら、UFWが内部でどう動いてるかも自然とわかるはず。


4. 実践例: サーバー保護

例1: UFWでSSHとウェブサーバーの保護

  1. UFWがインストールされ、アクティブになっていることを確認しよう:
sudo ufw enable
  1. SSHとウェブサーバーへのアクセスを許可しよう:
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
  1. アクティブなルールを確認しよう:
sudo ufw status

例2: iptablesで不要なトラフィックをブロック

  1. SSHアクセスを許可しよう:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  1. ウェブトラフィックを許可しよう:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  1. 他の全てをブロックしよう:
sudo iptables -A INPUT -j DROP

今日はUFWとiptablesを使ってサーバーを保護する方法を学んだね。どちらのツールも強力で便利だよ。UFWは「普段使いの友達」で、iptablesは「熟練者の手に渡る強力なツール」って感じかな。ファイアウォールを設定して、自分の設定を理解しよう。そうすれば、サーバーはしっかり守られる「要塞」になり、誰でも自由に入れる場所じゃなくなるよ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION