電子書籍の厳選無料作品が豊富!

IPTABLESの使い方を理解できません。
ですので、PCルーターを作成して、最低限の機能にしぼってから試してみることにしました。

PcCからRouterBにPINGを実行すると、TTLが期限切れとのメッセージが表示されます。
PcDからRouterAにPINGを実行すると、192.168.100.1 からの応答: バイト数 =32 時間 <1ms TTL=64と表示されます。

RouterBには、IPTABLESの設定は何も行っていません。
/etc/sysctl.confにnet.ipv4.ip_forward = 1を設定しているだけです。
iptablesはINPUT/OUTPUT/FORWARD すべてがACCEPTのポリシーです。

質問1.ただ単にフィルターを掛けずにルーター機能として使うには、/etc/sysctl.confにnet.ipv4.ip_forward = 1を設定すればよいのでしょうか?

質問2.ttlが期限切れとでるPcC上で、PING 192.168.101.1 -i 250 と入力しても期限切れと表示されます。ルーターが間に一つしかないのにTTLが切れることがあるのでしょうか?
   
質問3.PcDからWebを見ようとしてもみることができません。この場合RouterAに何か設定していないのが原因でしょうか? それともRouterBの設定に何か不備があるのでしょうか?

Router A YamahaRT57i      アドレス     192.168.100.1/24 ゲートウェイ 192.168.100.1
Router B PC ubuntu 10.04LTS アドレス ETH0  192.168.100.179/24 ゲートウェイ 192.168.100.1
                    アドレス ETH1  192.168.101.1/24
PC   C Windows7 32bit     アドレス     192.168.100.100/24 ゲートウェイ 192.168.100.1                       DNS 192.168.100.1
                               ROUTE ADD 192.168.101.0 MASK 255.255.255.0 GATEWAY 192.168.100.179
PC   D Windows7 32bit     アドレス     192.168.101.2/24 ゲートウェイ 192.168.101.1 DNS 192.168.100.1

+-------------------+
| Internet       |
|       |
+-------------------+
|
+-------------------+ XXX.XXX.XXX.XXXグローバルアドレス
| Router A          |
| RT57i             |アドレス 192.168.100.1 DNS機能ON
+-------------------+
|                     +--------------------+
|------------------------| PC C           |ADDRESS:192.168.100.100/24
|                    |                 |GATEWAY:192.168.100.1
|                   +-------------------+ROUTE ADD 192.168.101.0 MASK 255.255.255.0 GATEWAY 192.168.100.179
+-------------------+
| Router B           |アドレス ETH0 192.168.100.179/24 ゲートウェイ 192.168.100.1
|                 |アドレス ETH1 192.168.101.1/24
+-------------------+
|
|
|
+-------------------+
| PC D            |アドレス 192.168.101.2/24
|                 |ゲートウェイ 192.168.101.1
+-------------------+DNS 192.168.100.1

混乱してきました。
図がきれく貼り付けできない・・・見にくいですが。
教えてください。

A 回答 (4件)

できればもう少し簡素にお願いします…



>PPPインターフェスも、ルーターとして起動していると自ホスト扱いに
>なると思います。 この設定だとグローバルアドレスからルーターで
>起動しているサービスにすべてacceptされないでしょうか?

ルーターとして起動しているか(この場合はIPマスカレード)どうかにかかわらず、何も操作しなければパケットは到達します。その後の処理はアプリケーション側の問題です。
sshdはバインドアドレスを指定しなければ自ホストのすべてのアドレスに対して応答しますのでacceptになると思います。
    • good
    • 0
この回答へのお礼

EF_510さん レスありがとうございました。
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/out …
ここのIPTABLES HOW TOを一通り流し読みしてみました。

Linux(iptables)をルーターとして使用する場合の考え方を知りたかったのですが、
ネット上の情報をかじる程度で読んだので逆に混乱しました。

HOW TOを一通り読み、PCにUbuntuを入れて自宅でルーターテストを行ってみました。
pptpで遠隔地から入るテストや、ブルートフォースアタックのテストなども行ってみました。

ttp://www2s.biglobe.ne.jp/~nuts/labo/inti/ipt_recent.html
portscanも遠隔から行ってみて、1723.greしか開いていないことを確認できました。

少しだけわかってきたように感じます。
ありがとうございました。

お礼日時:2011/06/16 18:02

まず修正します。



FORWARDのルールは「自ホスト宛」じゃないパケットに適用され、それはOUTPUTを「通りません」

が、

1.192.168.100.50から192.168.100.101.1あてのsshd接続要求。(経路は正常に指定できていることが前提)
2.192.168.100.179のlocalrouterのeth0でパケット受信

3.eth0で受信したパケットは、あて先が192.168.100.179宛ではないのでFORWARD処理に入る。

ここが違います。宛先が自ホストとは100.179も101.1も該当します。
なのでINPUTに回ってしまいます。

参考にされたサイトの2ページ目、最初の処理がそうです。

NATの処理が入ると話がまたややこしくなるのですがそういう場合はsshdのバインドアドレスを調整するなどの工夫が必要だと思います。

この回答への補足

返信ありがとうございます。

>>ここが違います。宛先が自ホストとは100.179も101.1も該当します。
>>なのでINPUTに回ってしまいます。
目から鱗が落ちました。
そうだったのですか。

実際に理解するためにテストしました。

1.eth1のinput/outputを無効にして、192.168.101.1に対して接続要求を通すとつながる。
ポリシーはすべてDROPです。
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -o eth0 -j ACCEPT
-A FORWARD -o eth1 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
ETH1は、192.168.101.1なのでETH1のINPUT/OUTPUTを無効にしても
自ホストなので通信できることをSSHで確認しました。

2.ETH0のOUTPUTをDROPにして、ETH192.168.101.1のINPUTをDROP
通信できないのを確認しました。
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -i eth0 -j ACCEPT
#iptables -t filter -A INPUT -i eth1 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#iptables -t filter -A OUTPUT -o eth0 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -j ACCEPT
iptables -t filter -A FORWARD -o eth0 -j ACCEPT
iptables -t filter -A FORWARD -o eth1 -j ACCEPT
ETH0 192.168.100.179のINPUTが有効でも、EHT0のOUTPUTが無効の
ため通信できませんでした。
EHT1のOUTPUTを有効にしていますが、自ホストの場合はFORWARDされないので
通信できないのが当然の結果と認識しました。

3.eth0のinput/outputをDROP
192.168.100.0からアクセスできず。
192.168.101.2からは192.168.101.1と192.168.100.179にアクセスできました。
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -A INPUT -i lo -j ACCEPT
#iptables -t filter -A INPUT -i eth0 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#iptables -t filter -A OUTPUT -o eth0 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -j ACCEPT
iptables -t filter -A FORWARD -o eth0 -j ACCEPT
iptables -t filter -A FORWARD -o eth1 -j ACCEPT

4.
sshdの設定(/etc/ssh/sshd_conf)で、192.168.101.1にアドレスを設定。
iptablesの設定は、すべて通す設定。
192.168.100.179宛の接続は、接続されず。(拒否される)
192.168.101.1には接続可能。
アプリケーションレベルでの拒否設定可能なことを確認しました。

5.eth0/eth1/loのinput/outputをDROPに設定。
192.168.101.2の別pcからインターネットや192.168.100.250のファイル共有にアクセスできることを確認できました。。
192.168.100.170からは192.168.101.2のファイル共有を見ることができました。
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#iptables -t filter -A INPUT -i lo -j ACCEPT
#iptables -t filter -A INPUT -i eth0 -j ACCEPT
#iptables -t filter -A INPUT -i eth1 -j ACCEPT
#iptables -t filter -A OUTPUT -o lo -j ACCEPT
#iptables -t filter -A OUTPUT -o eth0 -j ACCEPT
#iptables -t filter -A OUTPUT -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -j ACCEPT
iptables -t filter -A FORWARD -o eth0 -j ACCEPT
iptables -t filter -A FORWARD -o eth1 -j ACCEPT

なんとなくわかってきたように思います。
ディストリビューションごとのfirewallの設定の違いも
iptables-saveで、コマンド一覧を取得できることがわかりました。
iptables -vLでインターフェースの一覧がでることがわかりました。

試しに、下記コンテンツを理解しようとしているのですが・・・
tp://www.teradas.net/hiromo/linux/poptop/6.ht
echo 1 > /proc/sys/net/ipv4/ip_forward
 ルーター機能ON
iptables -t filter -F FORWARD
iptables -t filter -F INPUT
 組み込みチェインの初期化
iptables -t filter -P FORWARD DROP
 FORWARDポリシーをDROP
iptables -t filter -A FORWARD -i eth1 -j ACCEPT
 ローカルからの通信をすべて転送許可
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 接続要求以外の通信を許可
iptables -t filter -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
 インターネット側からのPPTPで使用する1723を許可(ルーターマシンで起動しているpptpへ)
iptables -t filter -A INPUT -i eth0 -p 47 -j ACCEPT
 インターネット側からのPPTPで使用する47(gre)を許可(ルーターマシンで起動しているpptpへ)
iptables -t filter -A INPUT -i ppp+ -j ACCEPT
iptables -t filter -A FORWARD -i ppp+ -j ACCEPT
 pppインターフェスからINPUT/FORWARDを許可

・中から外へはIPMASQUARADEで接続する。
・インターネット側からPPTPに接続して内部に接続する。
下記コマンドを追加(更新)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

PPPインターフェスも、ルーターとして起動していると自ホスト扱いに
なると思います。 この設定だとグローバルアドレスからルーターで
起動しているサービスにすべてacceptされないでしょうか?

たびたびすみません。
よろしくお願いいたします。

補足日時:2011/06/11 23:03
    • good
    • 0

>よくよくやってみると昨日も色々試したのですが、eth1にlanケーブルを接続しなかったときになります。


>
>再現性があります、eth1に192.168.101.1に必ずケーブルがささっていないとだめなんですね。ipを振っているので問題ないと勘違いしていました。
>
>tracert 192.168.101.1と行うと、192.168.100.1<->192.168.100.179を延々と繰り返しました。

ケーブルを抜いた場合、何もしなければeth1は機能していないと認識されますのでeth0でループしてしまうと思います。
IPアドレスを振っただけでは機能しません。
(ケーブルを挿した状態のアダプタをダウンさせることはできるのですが、挿してないのを起動できたかな…?)

>試しにeth0のinputとoutputをdropにしました。
>そうすると、192.168.100.50等のpcから192.168.101.1のsshdに接続できなくなりました。
>
>転送後のパケットはeth1に届けば,eth1から帰りのforwardでそのままeth0から帰っていかないのでしょうか?
>それとも転送の場合も、outputする際にはそのインターフェースを使用するのでしょうか。

その前にinputをdropしていますのでsshdにパケットが到達しません。故に帰りのパケットは生成されません。rejectなら生成されます。
パケットが転送されたものでもそうでなくても出て行く際にはoutputルールを参照します。
input/forward/outputはそれぞれ独立しています、該当するルールの中で一つでも拒否があれば通信できません。

iptables -L INPUT -v

でパケット数を見るとどうなったかがすぐに判ると思います。(増えた、とかで)

iptables --zero でカウンターだけをリセットできます。

この回答への補足

レスありがとうございます。

>>パケットが転送されたものでもそうでなくても出て行く際にはoutputルールを参照します。

ネット上のIPTABLESのパケットの流れを見るとそのように書いているように考えにくいのですが、一部絵が省かれているのでしょうか?(自分の理解力のなさが嫌になってきました。)

転送処理でもOUTPUTを通るとのことなので、間違っていることは理解しています。
今間違った理解での流れです。


eth0は、192.168.100.179
eth1は、192.168.101.1
ssh機能は、eth0でもeth1でも動作しています。

ett0のinputおよびoutputをdropにした場合・・・
以下のように考えています。

http://www.atmarkit.co.jp/flinux/rensai/security …
の図1のパケットフィルタリングの流れを見ると・・・

たとえば、192.168.100.50のpcから192.168.100.179および192.168.101.1のsshdサーバーにアクセスするとします。
sshdサーバーはルーター機能としても動作しています。

この場合、eth0のinput/outputどちらか片方でもdropした段階で通信できなくなるのは理解できます。
しかし、forwardをこのローカルルーター上で動作している場合。
1.192.168.100.50から192.168.100.101.1あてのsshd接続要求。(経路は正常に指定できていることが前提)
2.192.168.100.179のlocalrouterのeth0でパケット受信
3.eth0で受信したパケットは、あて先が192.168.100.179宛ではないのでFORWARD処理に入る。
4.FORWARD処理では、lo,eth0,eth1のinput,outputのインターフェスを許可(ポリシーでACCEPT)に設定しているのと同じことのため、パケット送信処理に入る。
5.192.168.101.1のeht1のインターフェスはinput,outputを制限していないので、eth1からhubに一度パケットが飛ぶ。
6.hub上でパケットの宛先が、192.168.101.1のため、eht1へパケットが送信される。
7.eth1上で宛先が自ホストのパケットなので、ルーティング処理に入るが、必要ないのでそのままINPUTチェインに入る。
8.ETH1のINPUTチェインは、すべて許可されているので,ETH1からルーター上で動作しているSSHDサーバーにパケットが渡される。
9.SSHDサーバーが接続要求を許可して、ETH1から入力されたOUTPUTチェインから192.168.101.1のアドレス元としてパケットが送出される。
10.192.168.100.0宛のパケットが192.168.101.1から遅れないので、宛先が不明なのでルーティング処理に入る。
11.宛先が192.168.100.50宛なので、FORWARD処理される。
12.FORWARDされた後は、EHT0から送出される。(このときはローカル処理ではないパケットなのでETH0がINPUT,OUTPUTともにDROPだが関係なくそのままHUBに送出される。
13.HUB上で192.168.100.50のPCにパケットを転送する。

でもつながりません。
なにか根本的に勘違いしてるようなのですが、どこに考え間違いがあるでしょうか?

よろしくお願いします。

補足日時:2011/06/09 00:31
    • good
    • 0

質問1


そうです

質問2
各システムのルートテーブルを確認してください。
linuxであればnetstat -rn
Windowsであればroute printです。
RT57iはshow ip routeだと思います。

ttlが無くなると言うことであればどこかでループしています。tracerouteコマンドを使うとどこの区間でループしているか確認できます。

質問3
RT57iが192.168.101.0/24を認識していないからだと思われます。
ダイナミックルーティングの仕組みで認識させるか手動でルートテーブルを追加する必要があります。


iptablesはルーターなどを作らないで単体で試した方が理解が早いと思います。
今の状態ではiptablesが悪いのかルート構成が不適切なのかを先に切り分ける必要があります。

この回答への補足

EF_510さん レスありがとうございます。

質問1
そうです=>ありがとうございます。
192.168.101.2のpcから、ネットサーフィンを行うことができました。

質問2
各システムのルートテーブルを確認してください。

ttlが無くなると言うことであればどこかでループしています。tracerouteコマンドを使うとどこの区間でループしているか確認できます。

すみませんでした。
よくよくやってみると昨日も色々試したのですが、eth1にlanケーブルを接続しなかったときになります。

再現性があります、eth1に192.168.101.1に必ずケーブルがささっていないとだめなんですね。ipを振っているので問題ないと勘違いしていました。

tracert 192.168.101.1と行うと、192.168.100.1<->192.168.100.179を延々と繰り返しました。

質問3
RT57iが192.168.101.0/24を認識していないからだと思われます。
ダイナミックルーティングの仕組みで認識させるか手動でルートテーブルを追加する必要があります。

ip route 192.168.101.0/24 gateway 192.168.100.179
でインターネット側にも通信ができるようになりました。

間違えるとだめなので、ファイルに内容を纏めて実行しています。

initialize.sh
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

test.sh
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -j LOG --log-prefix "IPTABLES_INPUT_LOG : " --log-level=info
iptables -A OUTPUT -j LOG --log-prefix "IPTABLES_OUTPUT_LOG : " --log-level=info
iptables -A FORWARD -j LOG --log-prefix "IPTABLES_FORWARD_LOG : " --log-level=info
iptables -t filter -A INPUT -i lo -j ACCEPT
#iptables -t filter -A INPUT -i eth0 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#iptables -t filter -A OUTPUT -o eth0 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -j ACCEPT
iptables -t filter -A FORWARD -o eth0 -j ACCEPT
iptables -t filter -A FORWARD -o eth1 -j ACCEPT

initialize.shは、filter設定で問題があったときに一回実行しています。

test.shで試しにポリシーを全て、DROPにしたあとに
lo,eth0,eth1ともにインターフェスを指定して全てACCEPTにして通信を行いました。
その場合は、ポリシー全て許可と同じように問題なくアクセスできます。

http://www37.atwiki.jp/brain_walks2/pages/20.html
のパケットの流れを確認しました。
ルーターはローカルルーターとして現在使用しています。

試しにeth0のinputとoutputをdropにしました。
そうすると、192.168.100.50等のpcから192.168.101.1のsshdに接続できなくなりました。

転送後のパケットはeth1に届けば,eth1から帰りのforwardでそのままeth0から帰っていかないのでしょうか?
それとも転送の場合も、outputする際にはそのインターフェースを使用するのでしょうか。

よろしくお願いします。

補足日時:2011/06/08 18:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!