iptables初心者です。


http://www.atmarkit.co.jp/flinux/rensai/buildlamp/lamp_03/03_1.html
こちらのサイトに、「図4 シンプルな遮断ルールを設定した/etc/sysconfig/iptablesファイル」「ここではルールをごくシンプルにしています。」というのが紹介されています。

私にとっては呪文の羅列にしか見えないのですが、本当にこれはシンプルなのでしょうか?
熟練したサーバエンジニアなら、この設定ファイルを何も見ずにさくっと記述できるのでしょうか?

よろしくお願いいたします。



回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/30 01:08:15
  • 終了:2011/09/06 01:10:02

回答(3件)

id:degucho No.1

degucho回答回数254ベストアンサー獲得回数682011/08/30 03:08:13

ポイント34pt

実際はiptablesコマンドの引数が羅列されたもので

saveが実行されたときに保存されるものです。


シェル上で一行一行試してiptables -Lで確認しながら

動作を検証するとわかりやすいと思います。

基本はすべてDROPで使いたいものだけ穴を開けていく感じで。

よく使われるものはコピペで採用してもいいかと思います。


http://vine.1-max.net/iptables.html

http://linuxest.jugem.jp/?eid=62

http://www.nina.jp/server/redhat/iptables/iptables.html

http://cyberam.dip.jp/linux_security/iptables/iptables_main.html

id:DQNEO

ありがとうございます!

やってみます。

2011/08/31 00:38:29
id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472011/08/30 09:54:24

ポイント33pt

私にとっては呪文の羅列にしか見えないのですが、

まぁ、呪文と思われても仕方ないです(^^;。


余談:

呪文と言えば、sendmail.cf にかなうものは無いと、個人的には思っています。


閑話休題。

熟練したサーバエンジニアなら、この設定ファイルを何も見ずにさくっと記述できるのでしょうか?

何も見ずにサクッとかけるとしたら、熟練したサーバエンジニア、というよりも、iptables の専門家、に近いと思います。ただ、内容をある程度理解できる人は少なくないと思います。


自分が iptables の設定をする場合、デフォルトで設定されている内容、もしくは、GUI やターミナルベースの GUI もどきの設定ツールを使って吐き出したものに対して編集していきます。


例の設定をちょっと解説してみます。


 *filter

iptables に「filter テーブル」と「nat テーブル」があって、「以下は filter テーブルに対する設定です」という宣言です。

:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

iptables でデフォルトで用意されている「INPUT チェーン」「FORWARD チェーン」「OUTPUT チェーン」に対するデフォルトの挙動を設定してます。後で「この条件に合致したパケットはこうする」というルールを記述しますが、どのルールにも合致しなければ、このデフォルトが適用されます。

  • このホスト宛のパケット(INPUT)は、デフォルトでは DROP(捨てる)。
  • このホストを経由して他のホストへ転送されるパケット(FORWARD)は、デフォルトでは ACCEPT(受理する)。
  • このホストから出ていくパケット(OUTPUT)は、デフォルトでは ACCEPT(受理する)。

「[0:0]」の部分は、サクっと無視して下さい。

-A INPUT -i lo -j ACCEPT

「-A」は指定したチェーンに対するルールの追加、「-i」はインタフェースの指定、「-j」は条件にマッチした時のアクションを指定します。で、上記の場合は、

  • 自分宛のパケット(INPUT)で、
  • ループバック用のインタフェース(-i lo)の場合、
  • 受理する(-j ACCEPT)。

という意味になります。

-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

「-p」はプロトコルを指定、「-m」はモジュールを指定します。この「-m」で指定できるものには色々なものがあって、ここでは「icmp」という、ICMP プロトコル専用のモジュールを使う事を宣言しています。「--icmp-type」というのは、その icmp モジュールを使った時に指定できるもので、ICMP パケットの種類を指定しています。

  • 自分宛のパケット(INPUT)で、
  • ICMP プロトコルで(-p icmp)、
  • ICMP の種別はどんなものでも(-m icmp --icmp-type any)
  • 受理する(-j ACCEPT)。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

今度は「state」モジュールを使っています。state モジュールは、分かりやすい例だと、TCP の接続で、「接続を始めるパケット」「応答のパケット」といった状態を識別するものです。この行は、接続先から戻ってくるパケットを許可する常套句になっています。

-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp ! --syn -j DROP

今度は「tcp」モジュールを使っています。「!」は、その後ろに続く条件の否定になります。この行を訳すと、

  • 自分宛のパケット(INPUT)で、
  • eth0 のインタフェースで(-i eth0)、
  • TCP プロトコルで(-p tcp)、
  • 通信開始のパケットで(-m state --state NEW)、
  • TCP の SYN フラグが立っていない(-m tcp ! --syn)場合、
  • 捨てる(-j DROP)

という事になるのですが、SYN フラグが立っていないのに、state が NEW になるケース、というのが、具体的にはよく分からないですが、何らかの不正なパケットを落とす意図があるのは分かります。個人的には、この行の必要性に関しては、よく分からないです。

-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

「--dport」は tcp モジュールのオプションで(udp モジュールでも同様のオプションはあります)宛先ポート番号を指定しています。

  • 自分宛のパケット(INPUT)で、
  • eth0 のインタフェースで(-i eth0)、
  • TCP プロトコルで(-p tcp)、
  • 通信開始のパケットで(-m state --state NEW)、
  • 宛先ポート番号が 22 番(-m tcp --dport 22)の場合、
  • 受理する(-j ACCEPT)。
COMMIT

ここまでの内容を、実際に適用するためのコマンドです。


本当にこれはシンプルなのでしょうか?

やっていることは、

  • 自分に繋ぎにくる場合、eth0 から ssh のポートに繋ぎにくるものだけ許可。
  • よそへ繋ぎに行くパケットは全部 OK。

なので、フィルタリングしている内容自体はシンプルだけど、それを iptabels の設定に落としこむと呪文の様になってしまう、といったところだと思います。

id:DQNEO

>何も見ずにサクッとかけるとしたら、熟練したサーバエンジニア、というよりも、iptables の専門家、に近いと思います。ただ、内容をある程度理解できる人は少なくないと思います。

なるほど。

それを聞いて安心しました。

ご丁寧な解説ありがとうございます!

これからじっくり読んでみます。

2011/08/31 00:39:48
id:c4h6o5 No.3

c4h6o5回答回数4ベストアンサー獲得回数02011/09/05 00:36:33

ポイント33pt

新人&FW構築研修(5日間)の人から見た感想です.

(FW構築では,Web3階層システムを構築しました.FWは専用機です.)


> 本当にこれはシンプルなのでしょうか?

・コマンドが何をやっているか何となく分かります.

・設定数は1/3くらいなので,少ない気がします.

そのため,新人にも何となく分かるかなりシンプルな例だと思います.


> 熟練したサーバエンジニアなら、この設定ファイルを何も見ずにさくっと記述できるのでしょうか?

研修ではGUIで設定ファイルを書きました.

そのGUIならば,より簡単に速く書けます.

つまり,熟練したサーバーエンジニアは,

ヘルプを参考にしながらGUIを駆使してさくっと設定し,,

どうしようも無いときだけ設定ファイルを直書きすると思います.

id:DQNEO

なるほどなるほど。

やはり基本はツールを使って生成して、部分的に編集するのですね。

私にはまだ暗号にしか見えないので勉強がんばります!

ありがとうございます。

2011/09/05 01:14:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません