セキュリティを高める |
ここまで解説してきたように,実はサーバをインターネットに公開するということは,ちょっと苦労をすれば誰にでも実現できることだ。しかし,インターネットに公開するということは,誰もがサーバにアクセスできることを意味し,セキュリティ上の懸念が残る。そこでセキュリティ対策について考える必要がある。
セキュリティを考える場合,自分が動かしているサーバでどのようなサービスが動いているのかを知ることが重要だ。インターネット側から接続される場合,サーバー上に存在する「ソケット(Socket)」と呼ばれる口に接続される形態を持つ。いい換えれば,サーバ上にソケットの口を開けているサービス(デーモン)が動作していなければ,接続する手段がないのだ(もちろんカーネル自身にセキュリティホールがある場合には、それはまた別の話だ)。
|
基本的なセキュリティ対策としては,ソケットを開けているサービス(デーモン)のうち,不必要なものを動かさないようにしたり,各サービスの設定ファイルを正しく設定することが大切だ。覚えのないサービスは停止させておいて,インターネット側から接続できないように制限するのだ。
今回ここで紹介する方法は,Linuxのipchainsコマンドを使い,パケットフィルタリングと呼ばれる機能を利用する方法である。パケットフィルタリングとは,インターネットから自サーバへの接続や,逆に自サーバからインターネット側へ接続する際,どのソケットからどのソケットに到達するかを設定するものだ。特定のパケット(データ)を判別し,必要のないものは通さないようにする方法である。ソケットには「ポート番号」と呼ばれる番号が付いている。ipchainsコマンドでは,ポート番号を指定することで,どのソケットへ到達を許すのか,許さないのかを設定することが可能だ。
RP-PPPoEでは、ファイアウォールタイプとしてSTANDALONEを指定すると,/etc/pppディレクトリ下のfirewall-standaloneというスクリプトファイルが実行される。このスクリプトの内容は次のようになっている。この設定は,自サーバからインターネットには接続できるが,逆にインターネットからこのサーバ上に動作しているすべてのサービスには接続できないという高いセキュリティレベルである。
1: #!/bin/sh 2: # 3: # firewall-standalone This script sets up firewall rules for a standalone 4: # machine 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 ※説明の都合上、行頭には行番号を付けた。実際のfirewall-standaloneファイルには行番号はついていない。 |
|
前述のように,上記で挙げたfirewall-standaloneスクリプトファイルの設定では,インターネット側から自サーバ上で動作しているすべてのサービスには接続できないようになっている。しかしこのままでは必要なサービスを外部に公開できないので,公開したいものだけをインターネット側から接続できる――すなわち,公開したいポート番号の部分だけ通過できる穴をあける――ように設定する必要がある。これは,必要なものだけ空けていくというセキュリティーポリシーに則っているものだ。
特定のサービスに対して接続許可を与えたいのであれば,22行目に次のような記述で設定を挿入すればよい。
ipchains -A input-i $EXTIF -d $ANY ポート番号 -p プロトコル -j ACCEPT |
この行は21行目より後ろ,23行目よりも前に挿入しなければならない。 |
|
おもなサービスのポート番号とプロトコルを,Table 3に挙げる。たとえば,httpサービスに対してインターネットからの接続を許可し,外部にホームページを公開したいのであれば次の行を挿入すればよい。
ipchains -A input -i $EXTIF -d $ANY 80 -p tcp -j ACCEPT |
同様に,ftpサービスを許したいのであれば次の行を挿入する。
ipchains -A input -i $EXTIF -d $ANY 21 -p tcp -j ACCEPT |
このように公開したいサービスの数だけipchains行を挿入していくのだ。
|
Table 3■おもなサービスのポート番号とプロトコル
|
※表に示した以外のポート番号,プロトコルについては,/etc/servicesファイルやRFC1700を参照してほしい。
このようにfirewall-standaloneファイルを変更したならば,次にRP-PPPoEの設定を変更してファイアウォールタイプとしてSTANDALONEを使うようにする。そのためには,/etc/ppp/ディレクトリにあるpppoe.confファイルをviエディタなどで読み込み,FIREWALLという項目をSTANDALONEに変更する。
# Firewalling: One of NONE, STANDALONE or MASQUERADE FIREWALL=STANDALONE |
以上の設定により,挿入したipchains行で許可したサービスのみしかインターネット側から利用できないようになり,サーバのセキュリティが保たれることになる。
|
8/12 |