【サーバ】iptablesを使いこなす | 稼働率99.9%

稼働率99.9%

春日井市でiPhoneアプリの開発を行っています。iPhoneを使い出してからそれに伴って開発環境もWindowsからMacへと移行しました。MacやiPhoneだけでなくIT全般について日々感じた事や思った事を備忘録として記録する事を目的としたブログです。



概要


今に始まった事ではないのですが、外部公開サーバに対するセキュリティー対策としてファイアウォールをしっかりと設定する必要が出てきました。
個人で借りているサーバにおいて不正パケットが大量に発生していたのでとりあえず設定を行ってみたもののやっぱりよく知っておいた方が安心できるという事で現在勉強中です。
その中でも腑に落ちなかった点があったのでメモ。

:INPUT ACCEPT [0:0]の[0:0]は何の事?


  • パケット・バイトカウンタ [パケットカウンタ:バイトカウンタ]を表している。
  • #iptables-save > iptables.cfgとすると現在のパケット・バイトカウンタが保存されるので確認できる。

  • 初期状態でCentOSをインストールした場合、/etc/sysconfig/iptablesには「:INPUT ACCEPT [0:0]」となっている為、再設定する度に初期化される。
  • パケット・バイトカウンタを利用する事で各プロトコルの通信量の確認が可能

  • 通信量を把握しておけば、攻撃を受けているのか判断をする事も可能

:INPUT ACCEPT にしているのに通信できない


  • CentOS 6.2のデフォルトの状態は確かにデフォルトポリシーは「:INPUT ACCEPT」となっておりルールが明示されていない通信は許可されるはず。

  • 例えば、Apacheをインストールしてアクセスしてもそのままでは通信が行えない。


なぜなのか?
  • よく見ると次のルールが記述されている
  • -A INPUT -j REJECT --reject-with icmp-host-prohibited

  • これは、「入ってきたパケット」に対して「エラーパケット」で応答しなさいという事。

  • この記述より前に記述されているルールに一つも一致しない場合に適用される。

  • デフォルトでは、「SSH」、「接続状態のもの」、「icmp」、「ループバック(サーバ自身からのアクセス)」が許可されている。

  • HTTP通信はこれらのルールに一致しない為、「REJECT」ルールが適用されるので通信が行えない事となる。

「REJECT」は基本的に「DROP」と同じ動作であるが、接続元に対してエラーパケットを送信する点で異なる。デフォルトでは、「port-unreachable」(ポート到達不能)を返す。「icmp-host-prohibited」は、Host Unreachable (ホスト到達不能)をエラーパケットとして送信する。例えば、悪意あるユーザがポートスキャンを行った場合において「port-unreachable」ではホストの存在を知らせてしまう事となる。
「Host Unreachable」ではそもそも存在しないのか、電源が落ちているのか判断出来ない為に諦めさせられる可能性がある。
ただし、Webサーバなどを不特定多数に公開している場合はこの限りではない。


参考:
 Man Page of iptables
 ICMPタイプリスト