FORWARDチェインとICMPについて悩んでおります。

このQ&Aのポイント
  • FORWARDチェインとは、パケットに処理を加える(NAPT)等を行うために必要な設定です。
  • iptables -P FORWARD DROPと設定している場合、icmpのルーティング処理だけが必要な場合にはFORWARDのDROPチェインは有効になりません。
  • ご教授お願いします。
回答を見る
  • ベストアンサー

FORWARDチェインについて

FORWARDチェインとICMPについて悩んでおります。 10.10.10.0/24  | ======================= IPTABLES linux ルータ(CentOS6.3) =======================  |             | 192.168.1.0/24    172.16.1.0/24 FORWARDは、パケットに処理を加える(NAPT)等を行う時に必要ということが分かったのですが 「iptables -P FORWARD DROP」 のみ設定しております。 この時、192.168.1.1から10.10.10.1へのpingが通るのは、 「icmpのルーティング処理だけが必要だから、FORWARDのDROPチェインは有効にならない。」 という認識で間違いないでしょうか。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

いいえ、なります。むしろその状況でなぜpingが飛ぶのか分からん・・・・。 iptablesの各チェインを(mangleテーブルは省いて)ざっくり説明すると、 1.インバウンド(よそのパソコンから自分へ) 1-1.natテーブルのPREROUTINGチェイン 1-2.filterテーブルのINPUTチェイン 2.アウトバウンド(自分からよそのパソコンへ) 2-1.filterテーブルのOUTPUTチェイン 2-2.natテーブルのOUTPUTチェイン 3.フォワード(よそのパソコンから自分を経由して(=自分は受け取らずに)よそのパソコンへ) 3-1.natテーブルのPREROUTINGチェイン 3-2.filterテーブルのFORWARDチェイン 3-3.natテーブルのPOSTROUTINGチェイン という順番で処理がなされる。 質問者の192.168.1.1から10.10.10.1へのpingは、上記の3-2でFORWARDチェインのDROPポリシーによって阻まれるはず。ICMPもIPの一部であるが階層上はIPの上で動作しているのでIPルーティングのルールに従う。 PREROUTINGでDNATをしていたとしてもFORWARDチェインをバイパスできるとは思えないのだが、natテーブルの方はどうなっているだろうか。 # iptables -t nat -L -v で確認してみてほしい。 念のために聞いておくと、まさか192.168.1.1または10.10.10.1がIPTABLES linux ルータ(CentOS6.3)という事はないよね。

kureakai
質問者

補足

情報ありがとうございます。 調べてみた所、FORWARD、NATにルールが3つほどついていました。 後は、INPUT,OUTPUTチェインが数行あるだけです。 (1)iptables -A FORWARD -i eth2 -o 10.10.10.253 -s 192.168.1.0/24 -j ACCEPT (2)iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT (3)iptables -t nat -A POSTROUTING -o 10.10.10.253 -s 192.168.1.0/24 -j MASQUERADE <詳細図> 10.10.10.1  |  |10.10.10.0/24  | eth0(10.10.10.253) =========================== IPTABLES linux ルータ(CentOS6.3) =========================== eth2(192.168.1.254) eth1(172.16.1.254)  |           |  |192.168.1.0/24    |172.16.1.0/24  |           | 192.168.1.1/32(PC)   172.16.1.1/32(PC) <iptables -t nat -L -v 結果> Chain PREROUTING (policy ACCEPT 1448 packets, 87875 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 50 packets, 4039 bytes) pkts bytes target prot opt in out source destination 1226 68846 MASQUERADE all -- any eth0 192.168.1.0/24 anywhere Chain OUTPUT (policy ACCEPT 33 packets, 2475 bytes) pkts bytes target prot opt in out source destination 質問1:結果を見ると、POSTROUTINGで、inがanyになっているため、 「192.168.1.0/24」、「172.16.1.1/24」からicmpが通るのでしょうか。 質問2:なぜanyになってしまっているのでしょうか。 (2)(3)のルールでanyになるような設定を知らず知らずのうちに記述しているのでしょうか

関連するQ&A

  • linuxのルーティング処理

    CentOS6.3で、iptablesでルータを作成しようとしております。 CentOS6.3に、NICを2枚刺し、二つのセグメント(A:192.168.11.0/24 と B:192.168.11.24)があります。 AからBにルーティング処理させたいのですが、 「iptablesのFORWARDを使用して処理させるのでしょうか?」 先ほど調べてたところ 「route add コマンド 」 を使用してルーティング処理を記述するという記事も見つかったのですが CentOSルーターを作成する場合、どちらで処理させるのでしょうか? Ciscoルーターでルーティング処理を作成したことはありますので、 基本的なことは分かっています。 ご教授お願いします。

  • NAPTとPING

    ルータのパケットフィルタルールにWAN側UDP禁止にしたらなぜかPINGのリプライが返ってこなくなりました。ICMPパケットってNAPTではUDPでラップされるんですか?

  • iptablesによるパケットフィルタ

    こんにちは、皆さん iptablesに関して、2つの種類の質問があります。 1. SYNパケット以外の許可の設定 iptablesで、HTTPやFTPのサービスポートを閉じた上で、 以下のコマンドを実行すると、サービスポートが空いてなくても パケットが通ってしまいます。 iptables -A INPUT -p tcp ! --syn -j ACCEPT 上記の意味はSYNパケット以外だけ許可するとなってますので、 最初のセッションを張るパケットは通過できないので、 結果的にはサービスは提供されないのではないでしょうか? でもなぜか通ってます。 また、上記をDROPに指定し直すと、パケットは通過しません。 その後、以下のように個別にサービスポートを開けると、 パケットは通過できるようになるので、当然サービスが提供されます。 iptables -A INPUT -p tcp --sport 1024:65535 --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 21 -j ACCEPT 2. INPUTとFORWARDについて INPUTとFORWARDの違いは、FORWARDはサーバをルータとして使っている時だけ 必要なチェインで、INPUTはパケットを受信する時に必ず通るチェインという 認識でよろしいでしょうか?

  • ポートフォワードについて

    よろしくお願いいたします。 Linux上で2枚のLANカードでルーターを構築中です。 環境は、 eth0:インターネットへ(外へ) eth1:ローカルネット(内へ) 接続しています。 設定したiptables(ポートフォワードの部分)は、以下のとおりです。 iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80 iptables -A FORWARD -i eth0 -p tcp --dport http -j ACCEPT iptables -A FORWARD -o eth0 -p tcp --sport http -j ACCEPT 実際外部から内部のwebサーバーにつながるのですが、 ルータ上から、ルータに割り当てられたグローバルIPアドレスで、 内部webサーバのホームページを見ようとすると見れません。 何か他に設定しないといけないのでしょうか?

  • iptablesの[カッコ]の意味を教えて下さい

    CentOS5でiptablesの設定をしています。 /etc/sysconfig/iptablesというファイルを編集して設定していますが 冒頭に *filter :INPUT DROP [12:584] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] などという記述があります。 デフォルトのチェインターゲットの指定をする記述と思うのですが この右にある[ ]カッコの意味がわかりません。 ([12:584]や[0:0]のことです。) 御存知の方おりましたら何卒御教授の程宜しくお願いいたします。

  • ファイアウォールとしてping of deathの設定をしたいです

    ファイアウォールとしてping of deathの設定をしたいのですが、どのように記述したらよいでしょうか? 1秒間に1回 バースト5にし、ログをとり、破棄したいです。 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix "ping-death" iptables -A INPUT -p icmp --icmp-type echo-request -j DROP これでよろしいのでしょうか?

  • iptablesのログ記述について

    http://www.atmarkit.co.jp/flinux/rensai/iptables01/template01.html を参考に勉強しなおしているのですが iptables -N LOGGING iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit iptables -A LOGGING -j DROP iptables -A INPUT -j LOGGING iptables -A OUTPUT -j LOGGING の内容でわからないことがあります。 一番下の3行 一.iptables -A INPUT -j LOGGING 二.iptables -A OUTPUT -j LOGGING 三.iptables -A LOGGING -j DROP 一.無効パケットの破棄(DROP)を指定し、ログ出力の後に破棄されるようにします。 二.INPUTおよびOUTPUTチェインに対し、このLOGGINGが行われるように設定します。 この二つの意味の違いがよくわからないのです。 一は「パケット廃棄→ログ出力」の流れは分かるのですが、 二は、「INPUT処理、OUTPUT処理」→「ログ出力?」 同じ処理ではないのでしょうか? ということですと、 「一と二で同じ処理をするのに、 LOGGINGのチェインの位置が変わっている」のはなぜなのでしょうか? とわからなくなっています。 ご教授お願いします。

  • LINUXのiptablesについて

    通常LINUXのコマンドライン上で新たにiptablesルールを作り直すとき # iptablse -F # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT # iptables -P FORWARD DROP # service iptables save と上記のようにコマンドを叩いて、あたらしいデフォルトのチェインポリシーを 事前に定義するもののようです。 この後【/etc/sysconfig/iptablse】というファイルを覗いてみると、 # Generated by iptables-save v1.4.7 on Wed Sep 5 06:20:56 2012 *filter :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] COMMIT # Completed on Wed Sep 5 06:20:56 2012 上記のような内容がiptablesに記述されていると思います。 おそらくこれに特定の条件のみ パケットを受信するportを開放したりする記述を追記していくものと存じます。 たとえば -A INPUT -p tcp --dport 22 -J ACCEPT などと記述して他ホストからのssdポートへのアクセスを 許可するといったかんじですね。 ただ冒頭のデフォルトのポリシーの設定に関しては、やはりコマンドライン上で # iptablse -F # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT # iptables -P FORWARD DROP # service iptables save このようなコマンドを叩いて設定するのが普通なのでしょうか? 例えば、デフォルトポリシーを直接 ファイルに記述するといったことはしないのでしょうか? ================================================================= *filter #以下で、デフォルトのフィルタポリシーを設定する -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP COMMIT ================================================================= 上記のように、直接iptablesの書式で書き込むように・・。 気になった理由としてはコマンドラインでデフォルトポリシーを指定した場合と コマンド -Aをつかって任意のportを開放する指定をした時の記述が異なることがきになっているのです。 デフォルトポリシーの記述は :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] 上記のような 行頭にコロンがついたような記述になっているのに -A INPUT -p tcp --dport 22 -J ACCEPT 上記のような -Aコマンドを叩いたときは、そのままコマンドがiptablseファイルに記述されているように思います。 :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP 上記の二種類の書き方を直接iptablesに記述してもキチンと動作します。 なぜ、上記のようにデフォルトポリシーに関しては二種類の書き方が存在するのでしょうか?

  • iptableコマンドを複数記載したスクリプトを実行したいです。

    Linuxのコマンドについてお聞きしたいです。 iptableコマンドを複数記載したスクリプトを作成し、そのスクリプトを実行することによってパケットフィルタリングの設定をしようと思っています。 Windowsで下記のようなファイルを作成しました。 #!/bin/sh iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth0 -d 210.98.76.54 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -i eth1 -d 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i eth0 -d 202.228.202.2 -p udp --sport 53 --dport 1024:65535 -j ACCEPT iptables -A INPUT -j LOG --log-prefix "### INPUT ###" iptables -A FORWARD -j LOG --log-prefix "### FORWARD ###" これをLinuxの/rootに作成したbinフォルダにフロッピーでコピーしました。 ファイル名をfilterにしたので、[root@linux root]# filter とし、Enterとし、 スクリプトを実行して設定を反映させようとしました。 しかし、: bad interpreter: そのようなファイルやディレクトリはありません と出てしまいます。 何が足りないのでしょうか?

  • iptablesの設定 NetBiosについて

    RedHat9 Linux でサーバ兼ルータを構築しています。(DMZも使用しています) (WAN側 ppp0 、DMZ側 eth1、LAN側 eth2) iptables の設定として、 # ポリシーの設定 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # NetBIOS関連のパケットはログをとり、インターネットに出さない iptables -N net-bios iptables -A net-bios -j LOG --log-prefix "### NetBIOS ###" iptables -A net-bios -j DROP iptables -A INPUT -i ppp0 -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p udp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p udp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --dport 135,137,138,139,445 -j net-bios というのを設定しました。 下記のサイトを参考にしました。 http://www.kkoba.com/linuxrouter/iptables.shtml ところで、NetBIOS関連のパケットはログをとり、インターネットに出さない という設定は必要ですか? これだと異常にたくさんのログが取れてしまいますが。。