Linux による各種サーバー構築


IP Masquerade によるルータ/ファイヤーウォールの構築


[前の階層へ] | [トップページに戻る]





IP Masquerade とわなにか?みたいなコトに関しては TCP/IP ねっとわーく概論の方で説明してあるから、省略。

(ちなみに、NAT と NATe と NAPT (IP Masquerade を含む)の違いをまったく知らないってヒトは、構築以前に TCP/IP ねっとわーく概論のルータやゲートウェイの説明を読んだ方が良いかもです。)


  1. Kernel の再構築

    RedHat 系なヒトは必要はないかもだけど、Slackware 系のヒトは必要な場合が多いみたいです。
    # Plamo 1.4.3 や 2.0 は最初から必要なオプションは付いてたけど、2.1 は再構築が必要だった(^_^;)

    まぁ、確認の方法としては、後述の ipfwadm や ipchains を使ったルール(設定)を実行しよーとして、「そんなの知らない」って蹴られたら Kernel の再構築が必要だと思うです。

    で、ココではあくまで IP Masquerade 自体の設定のみ説明するので、Kernel の再構築が必要なヒトは他のページを参考にどぞ(ぉぃ
    一応 うち(Plamo 2.1 / Kernel 2.2.16)の Kernel Configuration は置いとくけど(^_^;)


  2. IP Forwarding の設定

    まづ、IP Masquerade を使うためには、IP Forwarding が使えるよーになってないといけないの。
    (ちなみに、Plamo1.4.3/98 は Kernel か何かの問題で IP Forwarding が動かないために IP Masquerade が使えなかった(苦笑))

    使えるよーにするって言っても、/proc/sys/net/ipv4/ip_forward (モノによっては、/proc/sys/net/ipv4/ip_forwarding)の値を 1 にするだけなんだけど。

    具体的には

    echo 1 > /proc/sys/net/ipv4/ip_forward

    こんなふーに打てば 1 になるの。
    それで、毎回コレをしないと 1 にならないみたいだから、/etc/rc.d/rc.inet2 あたりに書いておけば良いかと。

    だから

    echo -n "Enabling IPv4 packet Forwarding: "
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo
    

    なんて、書いておくとかっこいーかもね(笑)

    ちなみに、RedHat 系を使ってるヒトは、/etc/sysconfig/network の中にある FORWARD_IPV4 ってゆーのを、true か yes かなんかにするだけで上で書いたコトがされるみたい。

    って、別に特別なコトがされてるワケぢゃなくて、FORWARD_IPV4 が true だったら、"echo 1 > /proc/sys/net/ipv4/ip_forward" を実行、みたいなシェルスクリプトが書かれてるからなんだけど(笑)


  3. IP Masquerade の設定

    IP Masquerade は概念的には「○○から来て××へ行こーとするパケットを△△する」ってゆーよーなルール(設定)をたくさん書くコトでいろいろするよーになってて、そのルールはどーやって設定するかってゆーと、ルールを設定するツールを実行するコトで設定するんだけど、それは Kernel のばーじょんによって使うモノが違うの。

    Kernel 2.0.x, 2.1.102 以前の 2.1.x 系は、ipfwadm。
    Kernel 2.1.102 以降の 2.1.x 系と 2.2.x 系は、ipchains を使うみたい。
    # 2.3.x や 2.4.x の方は知らなぁ〜い(ぉぃ

    セキュリティをあまり顧みず、とりあえず IP Masquerade だけ出来れば良いのなら・・・
    (プライベート IP アドレスに 192.168.0.0/24 を使ってる場合)

    ipfwadm の場合なら

    ipfwadm -F -p deny
    ipfwadm -F -a accept -m -S 192.168.0.0/24 -D 0.0.0.0/0

    こんな感じ。

    ipchains なら

    ipchains -P forward DENY
    ipchains -A forward -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQ

    こんな感じ。

    いずれも、192.168.0.0/24 から来て、どっか適当な場所(0.0.0.0/0)へフォワーディングされるパケットをみんなマスカレードして、それ以外で来たのは破棄ってゆーよーな設定。

    まぁ、/etc/rc.d/rc.inet2 とか /etc/rc.d/local とかそのへんに書いておけば良いんぢゃないかと。
    # うちは、rc.ipmasq って別ファイルにしてそれを起動時に呼び出すよーにして、そっちに書いてるけど(^_^;)

    で、セキュリティを追求した場合はとゆーと、あまりに複雑だし環境にも依存する部分があると思うのでパス(爆)

    個人的には、TCP Wrapper を使ってるのなら、あとは IP Masquerade でインターフェースによるフィルタリングをするだけで、「とりあえずは」良いと思ふのです。
    # TCP Wrapper だけだと、IP Spoofing 攻撃に遭ったら大変だし。

    ちなみに、インターフェースは、/sbin/ifconfig なんてすれば見れるかと。

    ループバックインターフェースは lo。
    内部は、LAN カードのデバイス名(大抵は、eth0 とか eth1 ぢゃない?)
    PPxP を(Userlink で)使ってると、外部インターフェース(グローバル IP アドレスが割り振られるインターフェース)は ul0 なんてゆーのになってるの。
    # Ethertap の場合には、tap0

    だから、userlink で PPxP を使ってるのなら、

    ipfwadm -F -a deny -S 192.168.0.0/16 -W ul0
    ipfwadm -I -a deny -S 192.168.0.0/16 -W ul0
    

    もしくは、

    ipchains -I output -s 192.168.0.0/16 -i ul0 -j DENY
    ipchains -I output -d 192.168.0.0/16 -i ul0 -j DENY
    

    こんなふーに書くと、ul0 ってインターフェース(即ち外側・・・インターネット側)から 192.168.0.0/16 を名乗って来たパケットは deny(黙殺)するって感じになるワケ。
    # Ethertap で PPxP を使ってるのなら ul0 は tap0 に置換。

    ちなみに、deny ぢゃなくて reject にすれば明確に拒絶出来るけど・・・まぁ、そこは好みの問題でせう(笑)
    # deny だと黙殺。reject だと拒否の旨を要求してきたノードに送信するの。


  4. 各種モジュールの組み込み

    FTP とか IRC とか、また Read Audio とか VDO Live が通らないってときには、IP Masquerade のモジュールが組み込まれてない可能性があるのね。

    lsmod とか(もしくは /sbin/lsmod で) やってみて ip_masq_なんちゃら ってゆーよーなのがなかったら組み込まれてない証拠。(lsmod なんてないって言われたら?・・・入れるしか(爆))

    ちなみに、(unused) になっててもそれは正常。使われるときは、ちゃんと組み込まれるから。

    だからそんなときには、まづ /lib/modules/[Kernel のばーじょん]/ipv4 とかの中に ip_masq_ftp.o とかってゆーよーなモジュールファイルがあるかどーか確認して、あるよーなら /etc/rc.d/rc.modules とかモジュールを起動させるよーなファイルに、

    /sbin/modprobe ip_masq_ftp

    とか書いておけば、そのモジュールのプロトコルとかがサポートされるよーになるの。

    ・・・モジュールファイルがなかったら?(笑)

    IP Masquerade が Kernel オプションで有効にしてあって、Kernel の再構築時にちゃんとモジュールもコンパイルしてインストールしてれば、ないハズはないと思ふ(笑)

    逆に、カーネルオプションでそのへんを有効にしてないとか、make modules とか make modules_install を再構築時にしてなければ、ないです(笑)
    (古い Kernel だとなかったり少なかったりするのかもしれないけど、IP Masquerade がないよーな古い Kernel を使ってるってコトは今時ないと思うし(^_^;))


  5. 完成っ!

    できあがり〜♪(ぱちぱち)