第12回:もう怖くない!ファイアーウォール(iptables)第12回:もう怖くない!ファイアーウォール(iptables)さぁ今回のテーマは「ファイアーウォール」です。あんずちゃん、その人の持ってるカバンには「DDoS」「XSS」「Exploit」「Rootkit」と、アヤしげなラベルが・・・。ファイアーウォールは、ネットワークとネットワークの間で通信を制御することで、特定ネットワークの安全性を確保する技術です。ネットワーク通信を選別するようなイメージですね、問題のない通信だけを許可したり、悪影響を及ぼす通信を破棄したり。ファイアーウォールには、動作する通信のレイヤーに応じていろいろな製品があります。今回扱うiptablesというツールは、Linuxで動作してパケットフィルタやNATの機能を実現するものです。他にも、例えばWindowsには「Windowsファイアウォール」と呼ばれるものが用意されていたりします。これもiptablesと同じようなパケットフィルタリングをすることもできますが、加えてOS上のプログラム毎に設定ができたり、グループポリシーと連携できたりといった、Windowsならではの機能があります。ファイアーウォールには、他にもより大量のトラフィックを捌ける専用の商用製品があったり、最近はアプリケーションレイヤーで動作するものがあったりと、非常に多くの種類があります。オフィスでskypeなどのチャットツールが使えなかったりしませんか?それはファイアーウォールがブロックしているからだったりします。iptablesとはiptablesは、Linuxに実装されたNetfilterという機構を使用するツールで、主にTCP/IPレベル(OSI参照モデルのネットワーク層、トランスポート層)の条件でパケットフィルタリングやNATを行うものです(実際はもっとたくさんの機能やフィルタリング条件があり、正直筆者も全て把握していません・・・)。このパケットフィルタリングでサーバーへの通信を選別することで、ファイアーウォールの機能を実現しています。iptablesは、最近のLinuxならばほぼインストールされているでしょう。CentOS7やFedora18以降ではfirewalldと言う、別のサービスが使われているので注意してください。iptablesの設定は、OSのネットワーク通信全体に影響を与えます。設定の変更はrootで行います。誤った設定変更をすると、通信ができなくなるなどの影響が出ますので、運用環境などで試す場合は注意してください。物騒な一文を入れましたが、もし良ければVPSをもう一台契約してみませんか?安心して試せますよ。■INPUTチェインさてそれでは、VPSにログインしてiptablesコマンドを実行してみましょう。destinationなにやらずらずらと出てきました。iptablesの-Lオプションはlistの事で、現在の設定を一覧表示するオプションです。上から見てみましょう。ACCEPT)Chain(チェイン)とは、パケットをフィルタするルールの入れ物のようなものだと思ってください。このINPUTチェインは、外部からサーバに対するパケットを扱います。ACCEPT)は、すべてのルールにマッチしなかったパケットの扱い方法です。ACCEPTなので、通信を許可することになります。RELATED,ESTABLISHEDChain行の次にヘッダー行が続き、ここからがルールになります。・パケットの送信先となっています。最後は、このルールに対するオプションです。パケットに対するより細かい条件を設定したり、接続元へ返すメッセージを指定したりします。DNATなどを指定します。(他にもログを記録したり、パケットに印を付けたりいろいろできます。マニュアルを見てみてください)このルールの場合、ACCEPTなのでルールにマッチした場合通信が許可され、プロトコルはallなのでどのプロコトルにもマッチし、送信元と送信先はanywhereなのでどのパケットもマッチします。RELATED,ESTABLISHED」は、すでに確立した通信(established)と、そのパケットに関連したパケット(related)を許可するという意味です。TCP接続では、接続確立の接続切断までに複数のパケットがやりとりされ、iptablesはその状態を管理しています。このルールでは一度確立した通信に対しては、以後のルールを適用しないようにしています。第一カラムにACCEPTとあるので、このルールにマッチしたパケットは許可されます。このサーバに対してのSSH通信が許可されているわけです。SSHが通らないとリモートログインできないですからね。icmp-host-prohibited第一カラムにREJECTとあります。このルールにマッチしたパケットは拒否されることになります。icmp-host-prohibited」とあります。これは拒否したことを接続元に通知するのに、icmp-host-prohibitedメッセージを返すということです。ICMPについては説明を省略しますが、IP通信において制御情報をやりとりするためのプロトコルくらいに考えておいてください。prohibited(禁止)という意味なので、接続元は「接続が拒否された」と判断することができます。このルールのプロトコルはallで、送信元と送信先がanywhereなので全てのパケットがマッチします。このルールより上のルールにマッチしなかったパケットは全て拒否されることになります。一つ上にはSSH通信を許可するルールしかありませんでした。このサーバへのSSH以外の通信は全て拒否されることになります。ん?ちょっと待ってください。3つめのルールを見てみましょう。anywhereでオプションの設定もなく、これは全ての通信を許可(ACCEPT)するというルールです。これではファイアーウォールの機能をなしません。-vと実行するとわかります。-vはverboseで詳細を出力するという意味です。(以下略)第六カラム(inとなっている)を見てみてください、loとなっています。このカラムはルールを適用するネットワークインターフェイスを設定します。典型的にはeth0やeth1などです。このルールはローカルループバックアドレス(127.0.0.1)に対して適用されるのです。このルールがないと、サーバへのローカル接続もiptablesのフィルタリング対象になってしまうのです。ローカルで立てているMySQLサーバや、Postfixメールサーバなどに接続するケースなどで問題が出ます。ローカル接続にはファイヤーウォールを適用する必要はないのです。■FORWARDチェインとOUTPUTチェイン以上がINPUTチェインの説明でした。他にもOUTPUTとFORWARDというチェインがありますが、INPUTチェインに比べればとてもシンプルです。destinationFORWARDチェインは、パケットを別のホストに文字通り転送するためのチェインで、NATを実現するために使用したりします。ここでは全てREJECTの設定がされています。OUTPUTチェインはサーバから外部への通信です。policyがACCEPTで、ルールは一つもありません。サーバから外部への通信は全て許可されています。ファイアーウォールの設定を変更するここまでで説明したようにCentOSでは、サーバに対する通信に強い制限をかけています。サーバを使っていくにあたり、iptablesの設定変更が必要になるケースもあり、実は前回のブログでもiptablesを使った設定変更を解説しています。VPSを使えば、最悪iptablesの設定ミスで全く通信ができなくなってしまっても、コントロールパネルからコンソールに接続できるので問題なく復旧できます。通常のレンタルサーバなどでは、SSHが接続できなくなってしまったらお手上げの場合が多いですからね。VPSで、いろいろ試してみてください。問題は解決できましたか?はいいいえご回答ありがとうございます。送信ご回答受け付けました。ご協力ありがとうございました。