IPFilter でセキュリティ対策

概要

このページでは、IPFilter のインストール法と設定法を説明する。IPFilter はパケットフィルタリングソフトウェアである。「LAN 内からのアクセス」や「指定したポート・アドレスからのアクセス」だけを許可し、それ以外を拒否する設定ができる。用途は次の通りである。

Solaris での IPFilter の扱いは、OS のバージョンによって次のように異なる。

目次

関連する外部ページ

Solaris 9 以前でのインストール手順

Solaris 10 以降では OS に IPFilter が付属するため、この手順は不要である。次の手順は Solaris 9 で確認したものである。パケットを取得するための pfil モジュールと、IPFilter 本体の 2 つをインストールする。IPFilter 本体のソースは作者による配布サイト(http://coombs.anu.edu.au/~avalon/)で公開されている。ソースからインストールする場合は、入手できる最新版を使う。

cd /tmp
gzip -d < /tmp/pfil-2.1.9.tar.gz | tar -xvf -
cd /tmp/pfil
/usr/ccs/bin/make
/usr/ccs/bin/make package
pkgadd -d /tmp/pfil.pkg

cd /tmp
gzip -d < /tmp/ip_fil4.1.31.tar.gz | tar -xvf -
cd /tmp/ip_fil4.1.31
/usr/ccs/bin/make solaris
cd SunOS5
/usr/ccs/bin/make package

IPFilter ルール設定

ルールを記述するファイルは /etc/ipf/ipf.conf(Solaris 10 以降の付属版)である。ソースからインストールした場合は /etc/opt/ipf/ipf.conf である。

次に示すのはルールのである。この例では、LAN 内部との通信を許可し、それ以外の受信パケットを拒否する。LAN の外側にサービスを公開しないマシンを想定している。LAN 外部と通信するメールサーバ、DNS サーバ、WWW サーバ、NTP サーバでは、公開するポートを許可するルールを追加する。ルールの方針は次の通りである。

IPFilter では、quick を付けたルールは一致した時点で評価が終わる。quick を付けないルールでは、最後に一致したルールが適用される。そのため、すべてを拒否するルールは quick を付けずにファイルの末尾に置く。また、IPFilter の pass ルールは既定でステートレスであるため、通信の状態を記録して戻りのパケットを通すには keep state を付ける。

次の例は Solaris 10 に付属の IPFilter での設定例である。

#
# ループバック(lo0)
#
pass out quick on lo0
pass in quick on lo0

#
# 送信パケット
#

# tcp/udp と icmp の送信を許可する
pass out quick on hme0 proto tcp/udp all keep state
pass out quick on hme0 proto icmp all keep state

# 特定のポートだけを許可する場合の例
# 20(ftp-data), 21(ftp), 25(smtp), 80(http)
# pass out quick on hme0 proto tcp from any to any port = 20 keep state
# pass out quick on hme0 proto tcp from any to any port = 21 keep state
# pass out quick on hme0 proto tcp from any to any port = 25 keep state
# pass out quick on hme0 proto tcp from any to any port = 80 keep state

#
# 受信パケット
#

# LAN 内部からの通信を許可する
pass in quick on hme0 proto tcp/udp from 133.xx.yy.0/24 to any

# 外部に公開するサービスがある場合の例(ssh: 22 番ポート)
# pass in quick on hme0 proto tcp from any to any port = 22 flags S/SA keep state

# 送信元アドレスを偽造したパケットを拒否する
block in log quick on hme0 from 127.0.0.0/8 to any
block in log quick on hme0 from 10.0.0.0/8 to any
block in log quick on hme0 from 169.254.0.0/16 to any
block in log quick on hme0 from 172.16.0.0/12 to any
block in log quick on hme0 from 192.168.0.0/16 to any

# IP option が設定されたパケットを拒否する
block in log quick on hme0 all with ipopts

# 短すぎる IP fragment をもつパケットを拒否する
block in log quick on hme0 proto tcp all with short

#
# 上記に一致しないパケットの扱い(デフォルトのルール)
#
block out log on hme0 all
block in log on hme0 all

hme0」の部分は、実際のネットワークインタフェース名に書き換える。インタフェース名は「ifconfig -a」で確認する(Solaris 11 では「ipadm show-if」または「dladm show-link」で確認する)。

「133.xx.yy.0/24」の部分は、実際の LAN のアドレスとネットマスクに書き換える。「/24」は 255.255.255.0 と同じ意味である。ipf.conf では「133.xx.yy.0/24」と「133.xx.yy.0/255.255.255.0」のどちらの書き方も使える。

LAN が 192.168.0.0/16 や 10.0.0.0/8 などのプライベートアドレスの場合は、送信元アドレスの偽造を拒否するルールのうち、その LAN のアドレスに当てはまる行を削除する。削除しないと、LAN 内部からの通信が拒否される。

IPFilter ルールの読み込みと動作確認

ルールの読み込みで通信が拒否されると、リモートログイン中の接続が切断されることがある。コンソールで操作するか、自分の接続元を許可するルールを先に記述してから読み込む。

Solaris 10 以降に付属のものを使った場合

次のコマンドを順に実行する。

自前で Solaris に IPFilter をインストールした場合

次のコマンドを順に実行する。

Solaris 11.4 以降での設定(PF)

Solaris 11.4 以降では IPFilter は削除され、PF が標準のファイアウォールである。ipf.conf の記述は PF の文法とは異なるため、書き換えが必要である。PF での作業手順は次の通りである。

PF では pass ルールが既定でステートフルであり、ループバックインタフェースのパケットも常に検査される。IP フラグメントの再構成も既定で行われる。