ゴール

  • 基本的なフィルタリングの設定ができる
  • 基本的なNATの設定ができる

Linuxによる簡単なファイアウォールの設定ができればそれでよい。

この講習会はごく初歩的な内容と運用上のちょっとした注意事項にフォーカスして行う。

すばらしい参考資料

分かりやすくて読みやすい。

これを小一時間かけて熟読すればこの講習会は不要という説も。

iptables概説

  • これを使ってIPフィルタリングとNATを行うことができる。
  • 実のところLinuxカーネルに実装されているNetfilterというパケット処理フレームワークの制御ツール。
  • 2.2系列以前ではipchains,ipfwadmといったツールが同じ目的で使われていた。

用語

テーブル

各テーブルは用途別のルールの集まり。
- nat
- filter
- mangle

とりあえずnatとfilterが分かればいい。

チェイン

チェインはルールの集まり。

以下のチェインは最初から定義されている基本のチェイン。

それぞれ決まったタイミングで適用される。
- INPUT
- FORWARD
- OUTPUT
- PREROUTING
- POSTROUTING

詳しくは「 テーブルとチェーンの道のり」をじっくり見るとよい。

このほか自分でチェインを定義して複数のルールをひとまとめにできる。

これによりリストの可読性を上げたり、チェインを再利用してDRYにしたりできる。

例えばRedHat系では「RH-Firewall-1-INPUT」というチェインが定義されているが、これをINPUTとFORWARDの両方に適用することで、ルール記述の重複をなくしている。

ルール

パケットの内容に応じてそのパケットをどのように処理するかを定義したもの。

マッチ条件とその条件が満たされた際のターゲット(パケットに対するアクション)かチェインを指定する。

ルールは定義した順に適用され、途中でターゲットにジャンプしたらそこで処理終了。

なのでよくマッチするルールほど先に定義するとよい。

マッチ条件

パケットの内容に対するマッチ条件。そのまま。

OSI7層参照モデルで言うとL2からL4(MAC/IP/TCP)の条件を指定できる。

L7でもマッチさせることは可能だが、CPU時間を食うのでオススメできない。

それはプロキシとか別のソフトウェアの仕事。

ターゲット

パケットに対するアクション。

許可したり拒否したり、拒否したということすら知らせず捨てたり。

NATのためにパケットの中身を書き換えたり。
- ACCEPT
- DROP
- REJECT
- DNAT
- SNAT
- REDIRCT
- 等々

現在定義されているルールを確認する

フィルタリングルール

iptables -L -n
  • -Lでリスト表示。
  • -nはDNS参照をしない
  • filterテーブルを参照する。-tを指定しない場合のデフォルトがfilterなので「-t filter」をつけて実行した場合と同じ結果になる

NATルール

iptables -t nat -L -n
  • 「-t nat」でnatテーブルを参照する

IPフィルタリングしてみる

httpのアクセスを不許可

iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP

NATしてみる

httpのアクセスを他のサーバに飛ばす

iptables -t nat -A PREROUTING -d 192.168.75.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.75.5

ちょっとした注意事項

自分を締め出すフィルタリング

  • やっちまった感でいっぱいになる痛恨のミス。リモート接続できなくなる。
  • 直接コンソールから設定しなおして復旧するしかない。
  • データセンターなどにあるマシンに対する設定を行うときは注意。
  • こういうミスを防ぐにはペア作業などが望ましい。

iptables再起動によるコネクションの切断

  • iptablesを再起動すると再起動を行った人以外の接続が切れるので注意。
  • 他にそのマシン上でリモートアクセスで作業している人が居ないかどうかの確認を。

iptables再起動によるネットワークの異常停止

  • 上の切断の話とは別に再起動するとなぜかまったくアクセス不能になることがある。
  • コンソールからiptables再起動すると直ったりする。
  • たまにあるのでデータセンターなどにあるマシンに対するときは注意。
  • まあ、いじってたシステムが不安定だっただけかもしれない。

/etc/init.d/iptables panic

  • すべてのネットワークパケットを受け付けなくなる究極防御呪文。
  • データセンt
  • 止めたいときはstop使ってください

要は

  • 直接コンソールを触れない場所にあるマシンのiptablesをいじるときは注意。
  • シリアルコンソール?
  • このエントリーをはてなブックマークに追加
Feedforce Developer Blog

新しいブログへ移行しました!こちらもよろしくお願いします。