筆者が1997年に「Linux」を使い始めたとき、組み込みのファイアウォールを使いこなすことは、誰でもできることではなかった。実際に、それはかなり複雑な作業だった。1998年頃から、システムのセキュリティを管理したいのであれば、iptables(「Netfilter」パケットフィルタリングシステムを操作するための一連のコマンド)を習得することが必須になった。
例えば、すべての着信セキュアシェル(SSH)トラフィックを許可する場合は、以下のようなコマンドを実行する。
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Linux OSをマスターするだけでなく、複雑なセキュリティシステムの管理に関する詳細も学習する時間があるのなら、それでも全く問題はない。公平を期すために言っておくと、筆者は実際に時間をかけてそれらのことを習得し、最終的にiptablesを使用して、システムのセキュリティを管理できるようになった。
しかし、忙しくなればなるほど、iptablesを使いこなすのに必要な習熟度を維持するのが難しくなっていった。時間が経つにつれて、さまざまなものへのアクセスが容易になり、一部のLinuxディストリビューション開発者は、より簡単なシステムが必要であることに気づき始めた。「Ubuntu」ディストリビューション(バージョン12.04辺り)で、そうしたアクセスしやすいLinuxファイアウォールの1つが登場した。そのファイアウォールには、「Uncomplicated Firewall」(複雑でないファイアウォール)という適切な名前が付けられている。
Uncomplicated Firewall(UFW)は、iptablesのフロントエンドであり、シンプルさを重視している。iptablesと比較すると、UFWは、公園をのんびり散歩するようなものであり、誰でも扱うことが可能だ。
本記事では、UFWの基本を紹介し、UFWによって、Linuxシステムのファイアウォールの管理がいかに簡単になるかを解説する。
UFWについて知っておくべきことが2つある。
- UFWはコマンドラインツールである。
- UFWをさらに使いやすくするGUIツールが存在する。
UFWのコマンドラインの基本
UFWのコマンドは実際には非常に単純である。ここでも、SSHを使用する例を紹介する。具体的には、ほかのシステムがSSH(ポート22でリッスンする)を使って自分のマシンにアクセスすることを許可したいとしよう。
まず、UFWが有効になっていることを確認する必要がある。意外なことに、UFWはデフォルトで有効になっていない。ターミナルウィンドウを開いて、以下のコマンドを実行し、それを確認してみよう。
sudo ufw status
おそらく、以下のメッセージが表示されるはずだ。
Status: inactive
どうすればUFWを有効にできるのだろうか。以下のコマンドを実行するといい。
sudo ufw enable
以下のような出力(「ファイアウォールは有効であり、システム起動時に有効化される」を意味する)が表示されるはずだ。
Firewall is active and enabled on system startup
おめでとう。これでファイアウォールが有効になった。
UFWの基本的な使用方法は、以下のような感じだ。
sudo ufw ARGUMENT SERVICE
ARGUMENT(引数)はallow、deny、reject、limit、status、show、reset、reload、enable、disableのいずれかであり、SERVICE(サービス)はユーザーが使用したいサービス(SSHやHTTPなど)だ。
次に、システムへのSSHトラフィックを許可する必要がある。信じられないかもしれないが、それは以下の簡単なコマンドで実行可能だ。
sudo ufw allow ssh
以下のように、ポート番号を使用してコマンドを実行することもできる。
sudo ufw allow 22
ポート2022でSSHを実行する場合、コマンドは以下のようになる。
sudo ufw allow 2022
サーバーで作業していて、HTTPトラフィックの通過を許可する必要がある場合、コマンドは以下のようになる。
sudo ufw allow http
もう少し高度な機能を見てみよう。
UFWの美点の1つは、高度な知識がなくても、高度な機能を使用できることだ。例えば、ネットワーク上の特定のIPアドレスからのSSHトラフィックだけを許可したいとしよう。