Firewallってどんなんだ?

fwファイヤーウォールは比較的誤解にまみれた言葉の1つであると同時にかなり抽象度の強い言葉であり、また且つ様々な機器と結びついて適当に居座っている亡霊のようなものです。
PCの後ろにEtherネットケーブルで繋がっていてアクセスの度にピコピコ光っているあれ、それがFWです。違います。おそらくFWルーターです。よくなんか設計図なんかにある中世の要塞風の石の壁に火が燃えているやつ、あれはただの比喩です。なんかセキュリティー上必要なやつ、それは曖昧すぎます。あ、あれだ!オレンジ色の炎のように見えてよくみる狐のアイコンのブラウザー!違うます。それはFirefoxです。というところで認識されているのがFW(ファイヤウォール)です。
実際にエンジニアがサーバーのエンジニアがファイヤウォールという時には、ip tableというしち面倒臭いサービス(駐屯機能)のことを指します。FWはip tableというサーバーアクセスを制御しフィルタリングするいわばサーバーの入り口の門番みたいなサービスです。LinuxディストリビューションのOSにはたいてい標準で付いていますし、なかったらリポジトリから適当に落とせます。ip tableでは、大きく分けて、

  • プロトコルの制御
  • ポートの制御
  • IPやホストの制御

を行います。といいつつ実際はこれしかやっていないといっても過言ではありません。

プロトコルの制御

といっていいのかわかりませんが、別の言い方をするとサーバーサービスの制御をします。つまりSSHは通す、httpは通す、httpsも通す、しかしftpは通さないといった制御です。サーバー内に存在しないサービスには当然アクセスできません。しかし明示的にどのサービスに接続しているのかを示し設定するのは大切なことです。なぜなら、監視する領域が限定されてセキュリティーの向上に役立つからです。

ポートの制御

実際にサーバーアクセスする際に通る道はポートです。ポートを塞げば通れない、ポートを開ければ通れます。それぞれのサービスにはWell Known portといわれている標準のポートがあります。例えばSSHなら22、httpなら80とたいだい決まっているのです。このポートは限定的に開放してどのポートがどのサービスに使われているのかを設定して必要最低限のポートを開放します。開放されているポートを以下のコマンドで確認してみるとよいでしょう。
$ netstat -antu
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 192.168.2.xxx:22 123.456.789.101:56809 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:48274 0.0.0.0:*

IPやホストの制御

平たくいってしまうとホストの制御とIPの制御を比較して何が違うのかというと殆ど違いがありません。しかしその用途によって設定の方法を変えた方がよいということだけです。クライアントが固定IPでもって何らかのサーバーやネットワークを設定している場合はIPを設定するのがよいでしょう。恒久的にIPアドレスは変わらないからです。DHCPや各種家庭用のプロバイダーなどのサービスを使っている場合にはホストベースの制御が向いています。変化するIPアドレスに一定のホスト名を結びつけているからです。そしてIP制御とホスト制御のどちらが性能がよいかというとこれも差がありません。きちんと正引き・逆引きされている場合は同等の性能が期待できます。
今現在、セキュリティー云々と言われている時に制御すべき設定は殆どの場合IPアドレスです。それ以外に方法が実際のところ殆どないです。アクセスできるIPアドレスを制御すること(限定すること)で、もし仮に何かしらの悪意のあるアクセスを検出した場合にアクセス先を特定できます。勿論これは人間の運用が絡む部分でして、それらのIPを拒否するかどうかは我々の判断に委ねられます。またiptableの制御と連動してdenyhostsというデーモンで認証に連続して失敗したIPアドレスを拒否リストに自動的に格納し、一定期間のアクセスを拒否することができます。これらの制御は非常に難しいところではあります。

さて、セキィリティーに関してFWの設定3つを見て来ましたが、セキュリティーとは実際問題としてかなりのジレンマを伴うものです。強くしすぎると運用や実用性に乏しくなり、弱くすると完全なセキュリティーホールになります。これはもうただのダブル・バインド、ダブル・スタンダードじゃないかと思われるぐらいです。悩ましげです。
そこらの中庸をいかほどに設定するかというのがFirewallの設定に必要なところです。