この特集のトップページへ
この回のトップページへ

firewall-masqファイルの修正

 /etc/pppディレクトリのfirewall-masqファイルは次のようになっている。

1:#!/bin/sh
2:#
3:# firewall-masqThis script sets up firewall rules for a machine
4:# acting as a masquerading gateway
5:#
6:# Copyright (C) 2000 Roaring Penguin Software Inc.This software may
7:# be distributed under the terms of the GNU General Public License, version
8:# 2 or any later version.
9:
10:# Interface to Internet
11:EXTIF=ppp+
12:
13:ANY=0.0.0.0/0
14:
15:ipchains -P input ACCEPT
16:ipchains -P output ACCEPT
17:ipchains -P forward DENY
18:
19:ipchains -F forward
20:ipchains -F input
21:ipchains -F output
22:
23:# Deny TCP and UDP packets to privileged ports
24:ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p udp -j DENY
25:ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p tcp -j DENY
26:
27:# Deny TCP connection attempts
28:ipchains -A input -l -i $EXTIF -p tcp -y -j DENY
29:
30:# Deny ICMP echo-requests
31:ipchains -A input -l -i $EXTIF -s $ANY echo-request -p icmp -j DENY
32:
33:# Do masquerading
34:ipchains -A forward -j MASQ
35:echo 1 > /proc/sys/net/ipv4/ip_forward
※先頭の行番号は説明のために入れたものであり,実際のfirewall-masqファイルには記載されない。

 標準設定では,IPマスカレード機能を利用してクライアント(Windowsマシンなど)からの中継(ゲートウェイ)を許可するようになっている。LinuxサーバのLAN側に接続されたクライアントが,ADSL回線を使ってインターネットに接続するようにするだけという目的であれば,この設定のままでよい。

 しかしこの設定は比較的高いセキュリティ設定になっており,クライアントからサーバへの接続はすべて許すものの,ADSL回線(ppp0インタフェース)を通じたインターネットからサーバへの接続を許可していない。そのため,インターネット上からはこのサーバ上で動作しているサービスは利用できない。

 そこで前回説明したのと同様にipcahinsコマンドを適時加えて,公開したいサービスのポートに穴を開ける必要がある。

 具体的には,firewall-masqファイルの22行目の部分に次のようなipchainsコマンドを挿入する。

ipchains -A input -i $EXTIF -d $ANY ポート番号 -p プロトコル -j ACCEPT


ipchainsコマンドは/sbinディレクトリに存在する。パスが通っていない場合には,firewall-masqファイルのipchainsとある部分をすべて/sbin/ipchainsのようにフルパスで指定するよう修正しないと正しく動作しない。

 まず何よりもポートを開放する必要があるのは,DNSが使用する番号だ。標準の「firewall-masq」ファイルでは,DNSさえも透過されておらず,DNSを利用したドメイン名参照ができない。そこで,22行目に次のようなipchainsコマンドを追加しよう。

ipchains -A input -i $EXTIF -d $ANY 53 -p udp -j ACCEPT

 あとは随時,サーバ上で公開したいサービスのポートを開けるためのipchainsコマンドを,やはり22行目の部分に追加していけばよい。たとえば,httpサービスを公開したいのであれば,次の行を追加すればよい。

ipchains -A input -i $EXTIF -d $ANY 80 -p tcp -j ACCEPT

 もしそれ以外にも公開したいサービスがあれば,適時ipchainsコマンドを追加してほしい。

COLUMN:IPマスカレードとNATとの違い

 IPマスカレードと同様なものとしてNATがある。厳密にいえば,IPマスカレードとは「1つのIPアドレスと複数のIPアドレスを互いに変換するもの(ポート番号も偽装するもの)」,NATとは「1つのIPアドレスと複数のIPアドレスとを互いに変換するもの(ポート番号は偽装しないもの)」を意味する。

 しかし近年はIPマスカレードとNATは区別せず,どちらも同じ意味で使われることが多い。むしろNATのほうは「動的NAT」と「静的NAT」に分類し,動的NAT=IPマスカレード,静的NAT=本来のNATと使い分けることが多くなっているほどだ。

 LinuxではIPマスカレードという機能名になっているわけだが,ipchainsコマンドの指定次第でNATとしても動作させることが可能だ。つまり,あるポートに接続されたならば,それを特定のIPアドレスをもつクライアントに流すといったこともできるようになっている。


PREV 6/8 NEXT