Linuxサーバ運用マニュアル

第3話 「フリーソフトでファイアウォールを作ろう!(後編)」

前回,ファイアウォールの基本設定とメールの転送について解説しました。しかし,それだけでは,ほとんどアクセスができませんので,ゲートウェイでデータを中継することによって,アクセスができるようにします。

この中継機能は,ゲートウェイが代理で通信することから,プロキシ機能とも呼びます。必要なデータだけを選択して転送することができるため,ファイアウォールの運用には欠かせないものです。

データ転送のレベル

データの転送には,いろいろな段階があります。

ゲートウェイ上のプロキシで,これを中継するわけですが。どのレベル(階層)で中継するかによって,サーキットレベル・ゲートウェイ,アプリケーションレベル・ゲートウェイなどがあります。

サーキットレベル・ゲートウェイ

サーキットレベル・ゲートウェイ

TCP/IPレベルで中継するもの。動作が速いが,データはそのまま中継するだけ。

アプリケーションに依存しない。

アプリケーションレベル・ゲートウェイ

アプリケーションレベル・ゲートウェイ

アプリケーションレベルで中継するもの。動作は重くなるが,データ内容による動作など,いろいろ複雑な中継処理が可能になる。

アプリケーションに毎に中継プログラムが必要。

プロキシソフトの設定方法

ここでは,サーキットレベル・ゲートウェイとしてsocks5,アプリケーションレベル・ゲートウェイとしてDelegateについて,起動時の設定や起動方法などを中心に解説していきます。

socks5

SOCKS5とは,米NEC社で開発されたもので,TCP/IPレベルでデータの中継を行うものです。

ICQなどのツールをファイアウォール越しに動作させる場合などに必要になります。

また,VPN(Virtual Private Network)という機能で,インターネット越しに,仮想的なプライベートネットワークを構築することも可能です。

ここでは,参考程度にとどめておきます。

socks5.confの例
#
# socks5.conf 1998.11.26
#
set      SOCKS5_BINDPORT 1080
auth     - - -
route    10.0.1. - eth1
route    - - eth0
permit   - - 10.0.1. - - -

これは,1080ポートでsocks5を動かす設定で,eth1をローカルネットに,eth0をインターネットに割り当てています。permit行で,ローカルネットからのアクセスを許可しています。

Delegate

Delegate電総研が開発した多機能プロキシです。ローカルネットからインターネットにアクセスするためのプロキシサーバ機能と,ローカルネットのデータをインターネットに公開するためのマウント機能があります。対応しているプロトコルには,HTTP, Gopher, Whois, FTP, Telnet, NNTP, SMTP, POPなどがあり,TCP/IPのほとんどの中継処理をこれで行うことができます。また,httpデータのキャッシュ機能や,各アクセスに対してアクセス制限機能や,ログの採取機能があります。

Delegateは起動時のオプションでこれらの機能を設定します。

delegateの起動時オプション
オプション内容
-Pdelegatedがコマンドラインから起動する場合のポート番号(inetdから起動する場合は無効)
-vvデバッグ情報を出力して実行
-Fkilldelegatedを終了させる(killコマンドとして動作させる)

以下のオプションは,識別名=値の形式で設定します。MOUNT PERMIT EXPIREなどのオプションは,繰り返し指定することができます。

delegateのオプション
識別名値の書式内容
SERVERproto://host:port中継するプロトコルの種類とサーバ指定
PROXYhost:portプロキシサーバとそのポート番号
DELEGATEhost:portdelegatedの動作するホスト名とポート番号
RESOLV{sys,cache,file,dns}ホスト名解決の順序
SOCKSsocks-host利用するSOCKSホスト
MOUNT"path URL opt"//${DELEGATE}/pathにマウントするURL
PERMITProt:Dst:Srcアクセス制御方法
プロトコル:サーバ:クライアント
ACTDIRdir-name一時データ格納ディレクトリ
VARDIRdir-name可変データ格納ディレクトリ
CACHEDIRdir-nameキャッシュ格納ディレクトリ
EXPIRE{days,hours,secs}キャッシュの有効期間
LOGDIRdir-nameログ・データ格納ディレクトリ
LOGFILEfile-nameログファイル名
PROTOLOGfile-nameプロトコルログ格納ファイル名
"${PORT}.${PROTO}"
OWNERuser-namedelegatedを起動するユーザ名
AUTH"forward:*:"認証指定(クライアント・アドレスの通知)

PERMITの形式
PERMIT=Proto1:Dst1:Src1
PERMIT=Proto1,Proto2:Dst1,Dst2:Src1,Src2

PERMITを複数指定した場合は,いずれかに適合した場合に,許可されます。


ホストおよびネットワークは,以下の例のように指定します。

delegateのアクセス制限の記述例
記述許可するホスト
*すべてのホスト
*.jp日本のすべてのホスト
!*.jp海外のすべてのホスト
*.ash.or.jpASH内のすべてのホスト
www.ash.or.jp特定のサーバのみ
210.154.87.16/255.255.255.240ASH内のすべてのIP(ネットワーク指定)
210.154.87.[16-31]ASH内のすべてのIP(ホスト範囲指定)
210.154.87.18特定のIPのみ

次にローカルネットからインターネットへのhttp中継と,インターネットからローカルネットへのhttp中継を例にして,具体的な設定を解説します。


ローカルネットからインターネットへのhttp中継例

/usr/local/sbin/delegated -P8080 SERVER='http'
OWNER=wmaster
PERMIT='*:*:*.lo.ash.or.jp'
AUTH="forward:*:"
ACTDIR=/usr/local/etc/delegate
VARDIR=/usr/local/etc/delegate
LOGFILE=""

これは,8080ポートでhttpの中継を行う設定です。ローカルネットから,インターネットのブラウジングをするために使用しています。

PERMIT='*:*:*.lo.ash.or.jp'という設定により,ローカルネット内のクライアントからのみ,自由なサーバにアクセスすることを許可しています。PERMITによってクライアントの限定を行っていないと,自由な場所からアクセスできるようになり,悪用される可能性があるので注意しましょう。

(編注:許可/不許可するホストの指定はIPアドレスで行う方が,多少安全度が増します)

インターネットからローカルネットへのhttp中継例

/usr/local/sbin/delegated -P80 SERVER='http://sv01.lo.ash.or.jp/'
OWNER=wmaster
PERMIT='*:sv01.lo.ash.or.jp:*'
AUTH="forward:*:"
ACTDIR=/usr/local/etc/delegate
VARDIR=/usr/local/etc/delegate
LOGFILE="" PROTOLOG="${PORT}.${PROTO}"

これは,80ポートでhttpの中継を行う設定です。ローカルのWWWサーバのデータを公開するのに使用しています。PERMIT='*:sv01.lo.ash.or.jp:*'という設定により,インターネット上の自由なクライアントから,ローカルネット内のWWWサーバにのみ,アクセスを許可しています。


次にDelegateの起動方法について触れておきます

Delegateは,デーモンとして起動しておく場合と,inetdで起動する場合があります。httpなどの使用頻度の高いものはデーモン起動,外部からのtelnetやftpなどの使用頻度が低いものについてはinetd起動にするのがいいでしょう。実際の運用形態に合わせて調整してください。

デーモン起動する場合は,それぞれのDelegeteを1つのスクリプトから起動できるようにしておき,etc/rc.d/rc.localに,そのスクリプトを実行するコマンドを追加します。inetd起動の場合は,それぞれのDelegateについて起動するためのスクリプトを作り,inetd.confに,それぞれの起動設定を追加します。


以下はinetd.confの記述例です。

delegate-ftp    stream  tcp     nowait  root    /usr/sbin/tcpd  ftpgate
delegate-telnet stream  tcp     nowait  root    /usr/sbin/tcpd  telnetgate

delegate-ftp delegate-telnetは,中継用のポート番号として,/etc/servicesで定義したものです。ftpgate telnetgateは,Delegate起動用のシェル・スクリプトの名前です。

ローカルマシンの設定

ファイアウォールを構築した場合。ローカルネットから直接インターネットにアクセスすることはできなくなります。

クライアント・マシンも,前回触れたプライベートアドレスに設定しなおします。また,クライアントのアプリケーションで,プロキシを使用する設定をする必要があります。ゲートウェイのIPアドレス(プライベート・アドレス)をプロキシサーバに指定し,プロキシが動作しているポート(上記の例では,httpは8080ポート)を,プロキシのポートに指定します


次回予告

次回は,「障害時の構成を考えよう!」です。

環境構築方法に関しては,今回のファイアウォールの構築方法の紹介まで程度にとどめることにします。次回は,障害対策の運用方法の概要となるわけですが,今回ゲートウェイを構築したことで2台となったサーバを有効活用した運用方法について,説明していきたいと思います。

(ASHマルチメディア研究会/joe,はしもと)