二つのNICが刺さっていれば、IPマスカレードが実装できるでしょう。
IPマスカレードとはアスキーのデジタル用語辞典によれば、
NATによるIPアドレスの変換だけでなく、その上位プロトコルであるTCP/UDPのポート番号も識別することで、異なる通信ポートを利用するものについては、1つのグローバルIPアドレスを利用して、複数のローカルノードが外部と通信できるようにしたソフトウェア。UNIXシステムの1つであるLinux上で最初に開発された。「masquerade」は「仮面舞踏会」という意味。
だそうです。
LINUX kernelが2.2系列であれば、ipchainsが
LINUX kernelが2.4系列であれば、iptablesが
それぞれ使用できるでしょう。
[ipchainsの場合]
とりあえず、目標として次のような場合を考えます。
192.168.1.*
| HOST A | :::::::::::::::::::::: | LINUX Masq-Gate|
::::::::::::::::::::
eth1: 192.168.1.1(ローカルIP) eth0: 1.2.3.4(グローバルIP)
HOST Aから LINUX GATEWAYを通って、外を見るという一番単純な例です。
上記の設定をする場合、次のようにしましょう。
/sbin/ipchains -P forward DENY (基本的にフォワーディングはしない)
/sbin/ipchains -A forward -s 192.168.1.0/24 -j
MASQ (192.168.1.*からのアクセスについてはmasqueradeする。)
/sbin/ipchains -A input -i ! eth1 -s 192.168.1.0/255.255.255.0
-j DENY (eth1以外に192.168.1.*というアクセスがあることはありえないのでそれは拒絶する。)
/sbin/ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0
-j DENY (local以外に127.*.*.*というアクセスがあることはありえないのでそれも拒絶する。)
更に外から来るNetBIOSなどへのアクセスを遮断します。
/sbin/ipchains -A input -i eth0 -p udp -s 0/0
137:139 -d 0/0 -j DENY
/sbin/ipchains -A input -i eth0 -p tcp -s 0/0
137:139 -d 0/0 -j DENY
他にもふさぎたいポートがあれば適宜付け加えます。
IPマスカレードするためには更に/proc/sys/net/ipv4/ip_forwardの数字を0から1にする必要があります。
echo 1 > /proc/sys/net/ipv4/ip_forward
として、ip_forwardに書き込みましょう。
/etc/rc.d/init.d/ipchains start
で、上記ルールでのフィルタリングが行われるはずです。
上記で、うまくいっていれば再起動しても同じ設定になるようにしたいでしょう。
/etc/rc.d/rc.localにrc.firewallを実行する旨の記述を書いて、
rc.firewallに上記コマンドを羅列するという書き方もあります。
(実際、JFのIP-Masquerade-HOWTOではそうしています。)
が、ipchainsにはipchains-saveというコマンドがありますので
今回は、それを使うことにしましょう。(Redhat 7.1でもそれを使っているようですので…。)
今までの設定を保存するには次のようにします。
ipchains-save > /etc/sysconfig/ipchains
すると、/etc/sysconfig/ipchainsというファイルが作成され、
その中身は次のようになるでしょう。
:input ACCEPT
:forward DENY
:output ACCEPT
-A input -s 0.0.0.0/0.0.0.0 137:139 -d 0.0.0.0/0.0.0.0
-i eth0 -p 17 -j DENY
-A input -s 0.0.0.0/0.0.0.0 137:139 -d 0.0.0.0/0.0.0.0
-i eth0 -p 6 -j DENY
-A input -s 127.0.0.0/255.0.0.0 -d 0.0.0.0/0.0.0.0
-i ! lo -j DENY
-A input -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0.0.0.0
-i ! eth1 -j DENY
-A forward -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0.0.0.0
-j MASQ
ルールを追加したくなったら、これに適宜変更を加えた後、
/etc/rc.d/init.d/ipchains restart
を行えば、すぐにルールの変更ができて楽なような気がします。
上記のようにipchains-saveを用いても、起動時には、/proc/sys/net/ipv4/ip_forwardに1を
書き加える必要がありますので
rc.localにでも
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_masq_ftp (ftpを使えるようにモジュールを組み込む)
/sbin/modprobe ip_masq_raudio (RealAudioを使えるようにモジュールを組み込む)
/sbin/depmod -a
などの記述を追加するといいでしょう。
(上記については、etc/sysctl.confの中の
# Disables packet forwarding
net.ipv4.ip_forward = 0
->
net.ipv4.ip_forward = 1
# Disables automatic defragmentation (needed
for masquerading, LVS)
net.ipv4.ip_always_defrag = 0
->
net.ipv4.ip_always_defrag = 1
のようにすればよかったようです。未確認ですが…。)
[オプションの説明]
ipchains -L 現在どのようなフィルタリングの設定がされているのかを表示する
ipchains -F 現在設定されているフィルタールールをすべて削除します
ipchains -A ルールの一番最後に新しいルールを追加する
ipchains -I ルールの最初に新しいルールを追加する
ipchains -j ターゲット ACCEPT, DENY, REJECT, MASQなどを設定する
ipchains -i インターフェイスの設定
ipchains -s 送信元のIPアドレスを設定する
[ターゲットの説明]
ACCEPT パケットを受け入れる
DENY パケットを破棄する
REJECT パケットを拒否する (DENYの破棄と同じように見えるが拒否の場合は発信元に拒否されたことを通知する)
MASQ IPマスカレードを有効にする
より詳しい説明は、JFのIPCHAINS-HOWTOやIP-Masquerade-HOWTOなどを
読まれると良いと思います。適宜、参考にしてみてください。