|Home|私のLinux活用記録-Home-|

私のLinux活用記録

-Page14-

 

[ネットワーク・サーバー・セキュリティ−総集編]

作成:2003年05月16日

これまでに掲載したネットワーク、サーバー、セキュリティ−についての記事を、現在運用している環境をベースにまとめなおしました。過去記事も参考としてリンクしています。

kh14-01.01 ネットワーク構成
kh14-01.02 機器構成
kh14-01.03 ネットワーク設定の前提(名前解決)
kh14-01.04 ネットワーク設定ファイル
kh14-01.05 ルーターの設定
kh14-01.06 Telnet & FTP Server
kh14-01.07 Samba Server
kh14-01.08 NFS Server
kh14-01.09 公開 Web Server(Apache)
kh14-01.10 SSH Server(Open SSH)
kh14-01.11 PPP Server
kh14-01.12 セキュリティ−
kh14-01.13 iptables によるファイアーウォール

戻る

ネットワーク構成

ネットワーク構成図を以下に示します。
 
図表(ネットワーク構成図)

 

■ ネットワーク構成の説明
横浜ローカルネットワークと大津ローカルネットワークをインターネット(SSH2) 及び PPP(非常時)で接続しています。

□ 横浜ローカルネットワークの構成

□□ 横浜 Host1(ph700)
インターネットへ接続するルーター(ゲートウェイ)、ホームページを公開する Web Server、インターネット経由のセキュアなアクセスを受け付ける SSH2 プロトコルによる SSH Server など、インターネット側の機能とローカルネットワーク内部のTelnet & FTP Server, NFS(Network File System) Server, Samba Sever(Windows Client 用のファイルサーバー)をサポートしています。
また、インターネット側とローカルネットワーク側を分離して、アクセスを管理するファイアーウォール機能を備えています。

□□ 横浜 Host2(gw450)
通常は Linux、Windows デュアルブートのローカルホストです。
ただし、留守中など、非常時に外部から Host1 をメンテナンスできるよう PPP Server を稼働させています (Host1 のADSL 接続に異常が起こり、Web Server、SSH Server 等がインターネットからアクセスできなくなった場合、外部からこれをメンテナンスするために、Host2 に PPP 接続し、Telnet で Host1 をメンテナンスできるようにしています)

□ 大津ローカルネットワークの構成

□□ 大津 Host3(ibm380)
インターネットへ接続するルーター(ゲートウェイ)、インターネット側とローカルネットワーク側を分離して、アクセスを管理するファイアーウォール機能と、ローカルネットワーク向けの Telnet & FTP Server だけを装備しています。

□□ 大津 Host4(gw350)
Linux、Windows デュアルブートのローカルホストです。

□□ 大津 Host5(waku2)
Windows のローカルホストです。

戻る

機器構成

■ 横浜 Host1(ph700)
Machine : PLAT'Home Entry System 700i (PentiumIII 800MHz, MEM=256MB)
Host Name: ph700
eth0 : Corega Ether PCI-TL (Local)
eth1 : Intel PRO/100+ (Internet)
Linux : Vine Linux 2.6r1 (Install Pakages = Internet & File Server)

■ 横浜 Host2(gw450)
Machine : Gateway GP7-450 (PentiumIII 450MHz, MEM=256MB)
Host Name: gw450
eth0 : Corega Ether PCI-T
Modem : I/O DFML-560E(Seirial Port接続、外付け)
Linux : Vine Linux 2.5 (Full Install)
Windows : Windows 98

■ 大津 Host3(ibm380)
Machine : IBM ThinkPad 380XD (PentiumII 233MHz, MEM=96MB)
Host Name: ibm380
eth0 : Corega FEther PCC-TXD(PCMCIA Card) (Internet)
eth1 : Corega EtherII PCC-T(PCMCIA Card) (Local)
Linux : Vine Linux 2.6r1 (Install Pakages = Note PC, Internet Server)

■ 大津 Host4(gw350)
Machine : Gateway GP6-350 (PentiumII 350MHz, MEM=256MB)
Host Name: gw350
eth0 : Corega Ether PCI-T
Modem : I/O DFML-560E(Seirial Port接続、外付け)
Linux : Vine Linux 2.6r1 (Full Install)
Windows : Windows 98

■ 大津 Host5(waku2)
Host Name: waku2
Windows : Windows ME
他省略

戻る

ネットワーク設定の前提(名前解決)

■ 名前解決とは
ネットワーク通信では、通信相手を特定するために IP Address が使われていますが、小規模なローカルネットワーク以外では、全ての相手先を IP Address で識別することは大変繁雑です。そこで、人間が識別しやすい[ホスト名+ドメイン名] によって相手を識別する方法が採られています。コンピューターは、[ホスト名+ドメイン名] を IP Address に変換する必要があります。
名前解決を行う方法としては、/etc/hosts ファイルに IP Address と[ホスト名+ドメイン名] のリストを作成するか、DNS(Domain Name Service) Server を使用します。

■ ローカルネットワーク内の名前解決
家庭内ネットワークのように小規模ネットワークであれば、/etc/hosts ファイルを用いるのが簡便です。DNS を用いる場合は、ローカル(非公開) の DNS Server を用います。

■ インターネット側の名前解決
膨大な数のインターネットサイトを /etc/hosts ファイルで名前解決することは不可能なので、インターネット側の名前解決には、DNS Server を用います。この場合、ローカル DNS Server、自ドメインの公開 DNS Server, ISP(Internet Service Provider) の DNS Server 等の選択肢があります。

ADSL や PPP 接続を利用したインターネット接続の場合、ISP から与えられる Global IP Address は接続の度に変化するので、インターネット側の名前解決に公開 DNS Server を使うことができません。また、ローカル DNS Server では、キャッシュされていない名前が検索されると、DNS のルートサーバーへ問い合わせることになり、名前解決に時間がかかってしまいます。

そこで、ISP の DNS Server に名前解決を委ねるわけですが、この場合2通りの方法があります。ローカル DNS Server を使っている場合は、forwarders option を使って ISP の DNS Server に名前解決を委ねます。もうひとつは、リゾルバ(DNS Server の IP Address を指定する機能、/etc/resolv.conf ファイルで定義する) を使って、ISP の DNS Server に名前解決を委ねる方法です。

私の場合、Vine 2.1.5 までは、ローカル DNS Server によるローカルネットワーク内の名前解決と、forwarders option によるインターネット側の名前解決の方法を採ってきましたが、Vine 2.5 or Vine 2.6r1 では、DNS Server がいまいち不安定であるため([注])、ローカルネットワーク内の名前解決は /etc/hosts ファイル、インターネット側の名前解決は /etc/resolv.conf により ISP DNS Server に名前解決を委ねる方法を採りました。

[参考過去記事]
kh08-01[ネットワークの構築]
kh08-01.08 Domain Name Service(DNS) Server の設定
kh08-01.09 DNS の動作確認
kh08-01.10 bind-8.2.3 での DNS Server 設定上の注意

[注]
ISP の POP Server にアクセスしたとき、たまに接続に時間がかかると、ローカル DNS Server が猛烈なクエリーを ISP DNS Sserver に送ってしまい、ローカル DNS Server を再起動しないと正常にもどらない現象が発生します。原因を特定できていないので、bind の問題なのか、自分の設定ミスなのかは不明です。

■ 公開サーバーの名前解決
Web Server 等を公開するには、自ドメインの名前解決がインターネット側でできる必要があります。公開 DNS Server を使うことができれば問題ありませんが、利用できない場合は、Dynamic DNS を使って名前解決します。

[参照]
kh14-01.09 公開 Web Server(Apache)

戻る

ネットワーク設定ファイル

■ 横浜 Host1(ph700)
□/etc/hosts
127.0.0.1   localhost.localdomain localhost
192.168.1.1 ph700.tamura.net ph700
192.168.1.2 gw450.tamura.net gw450

□ /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=ph700

□ /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
ONBOOT=yes
[注]
eth0 はローカルネットワーク用の I/F カード

□ /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=no
[注]
eth1 はインターネット接続(FLET'S ADSL) 用の I/F カードで、rp-pppoe による接続に使用するので、ONBOOT=no とします(詳細は後述)。

□ /etc/resolv.conf
nameserver XXX.XXX.XXX.XXX <== ISP First DNS Server IP Address
nameserver YYY.YYY.YYY.YYY <== ISP Second DNS Server IP Address

■ 横浜 Host2(gw450)
□ /etc/hosts
横浜 Host1 と同じ設定

□ /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=gw450
GATEWAY=192.168.1.1
[注]
横浜 Host1(192.168.1.1) をゲートウェイとしてインターネットに出ていくための設定として、GATEWAY=192.168.1.1 とします。

□ /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
ONBOOT=yes

□ /etc/resolv.conf
横浜 Host1 と同じ設定

□ Windows 98 のネットワーク設定
[コントロールパネル]-->[ネットワーク]-->[TCP/IP NETWORK_CARD_NAMR]-->[プロパティ]選択
[IP アドレス]タブ
IP アドレス指定:チェック
IP アドレス:192.168.1.2
サブネットマスク:255.255.255.0
[ゲートウェイ]タブ
192.168.1.1
[DNS 設定]タブ
DNS を使う:チェック
ホスト:gw450
ドメイン:tamura.net
DNS サーバー:
xxx.xxx.xxx.xxx <== ISP First  DNS Server IP Address
yyy.yyy.yyy.yyy <== ISP Second DNS Server IP Address

■ 大津 Host3(ibm380)
□ /etc/hosts
127.0.0.1   localhost.localdomain localhost
192.168.0.1 ibm380.ootsu.net ibm380
192.168.0.2 gw350.ootsu.net gw350
192.168.0.3 waku2.ootsu.net waku2

□ /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=ibm380

□ /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
[注]
eth0 はインターネット接続(Yahoo BB) 用の I/F カードで、dhcp による接続に使用するので、BOOTPROTO=dhcp, ONBOOT=yes とします(詳細は後述)。

□ /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
IPADDR=192.168.0.1
NETMASK=255.255.255.0
[注]
eth1 はローカルネットワーク用の I/F カード

□ /etc/resolv.conf
eth0 が Yahoo BB と dhcp 接続すると、自動的に /etc/resolv.conf の内容が設定されます。
nameserver XXX.XXX.XXX.XXX <== Yahoo BB の First  DNS Server IP Address
nameserver YYY.YYY.YYY.YYY <== Yahoo BB の Second DNS Server IP Address
nameserver ZZZ.ZZZ.ZZZ.ZZZ <== Yahoo BB の Third  DNS Server IP Address

■ 大津 Host4(gw350)
□ /etc/hosts
大津 Host3(ibm380) と同じ設定

□ /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=gw350
GATEWAY=192.168.0.1
[注]
大津 Host3(192.168.0.1) をゲートウェイとしてインターネットに出ていくため、GATEWAY=192.168.0.1 とします。

□ /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
ONBOOT=yes

□ /etc/resolv.conf
大津 Host3(ibm380) の /etc/resolv.conf と同じ設定にします。
nameserver XXX.XXX.XXX.XXX <== Yahoo BB の First  DNS Server IP Address
nameserver YYY.YYY.YYY.YYY <== Yahoo BB の Second DNS Server IP Address
nameserver ZZZ.ZZZ.ZZZ.ZZZ <== Yahoo BB の Third  DNS Server IP Address

□ Windows 98 のネットワーク設定
[コントロールパネル]-->[ネットワーク]-->[ネットワークの設定]タブ-->[TCP/IP NETWORK_CARD_NAME]-->[プロパティ]選択
[IP アドレス]タブ
IP アドレス指定:チェック
IP アドレス:192.168.0.2
サブネットマスク:255.255.255.0
[ゲートウェイ]タブ
192.168.0.1
[DNS 設定]タブ
DNS を使う:チェック
ホスト:gw350
ドメイン:ootsu.net
DNS サーバー:
xxx.xxx.xxx.xxx <== Yahoo BB の First  DNS Server IP Address
yyy.yyy.yyy.yyy <== Yahoo BB の Second DNS Server IP Address
zzz.zzz.zzz.zzz <== Yahoo BB の Third  DNS Server IP Address

戻る

ルーターの設定

横浜 Host1(ph700) および 大津 Host3(ibm380) は、ルーターとして設定しています。ルーターは、ローカルネットワーク内の複数のホストからインターネットに出て行くための機能を提供します。そのために、IP Masquerade 機能を設定する必要があります。IP Masquerade とは、ローカルホストから発信されたパケットの発信元 IP Adderess をルーターのインターネット側 IP Adderss に変換し、あたかもルーターが発信元であるかのごとくパケットをインターネットに送信し、かつ帰ってきたパケットの返信先をもとのローカルホストの IP Address に変換して、ローカルホストに返信パケットを返すという仕組です。
なお、IP Masquerade 機能の設定は、iptables によって行いますので、後述のkh14-01.13 iptables によるファイアーウォール で説明します。

■ 横浜 Host1(ph700) 及び 大津 Host3(ibm380) の設定ファイル
□ IP Masquerade のためのモジュールをロードするため、以下を /etc/rc.d/rc.local ファイルの末尾へ追記します。
/sbin/insmod ip_conntrack.o
/sbin/insmod ip_conntrack_ftp.o
/sbin/insmod ip_conntrack_irc.o
/sbin/insmod ip_nat_ftp.o
/sbin/insmod ip_nat_irc.o
/sbin/insmod ip_nat_snmp_basic.o
/sbin/insmod ip_queue.o
/sbin/insmod ip_tables.o

□ /etc/sysctl.conf の編集(ip_forward を有効にする)
net.ipv4.ip_forward = 1

■ 横浜 Host1(ph700) の FLET'S ADSL によるインターネット接続
FLET'S ADSL への接続には、ppp 及び rp-pppoe が必要です。
# rpm -qa | grep ppp
# rpm -qa | grep rp-pppoe
として、ppp 及び rp-pppoe がインストールされていることを確かめます。インストールされていない場合は、Vine の CD-ROM または Vine のダウンロードサイトから RPM パッケージを入手し、インストールします。
インストール例
# rpm -ivh ppp-2.4.1-0vl1
# rpm -ivh rp-pppoe-3.5-0vl1

□ /etc/ppp/pap-secrets ファイル
"MY_USER_ID@ISP.DOMAIN.NAME" * "MY_PASS_WORD"
[注]
MY_USER_ID@ISP.DOMAIN.NAME <== ISP に登録している自分の ID 名
MY_PASS_WORD <== ISP に登録している自分のパスワード

□ /etc/ppp/chap-secrets ファイル
/etc/ppp/pap-secrets ファイルと同じ設定

□ /etc/ppp/pppoe.conf ファイル
ETH='eth1'
USER='MY_USER_ID@ISP.DOMAIN.NAME'
DEMAND=no
DNSTYPE=NOCHANGE
PEERDNS=no
DNS1=
DNS2=
その他項目は、デフォルト設定のままです。

□ 接続開始方法
# /etc/rc.d/init.d/adsl start
でスタートします。コンピューター起動時に自動で接続開始するには、
/etc/rc.d/rcX.d/ ([注]) 配下に /etc/rc.d/init.d/adsl へのリンクがあるか確かめます。K99adsl がある場合は、
# mv K99adsl S99adsl
とします(S99adsl がある場合は何もしなくて OK です)。
/etc/rc.d/init.d/adsl へのリンクがない場合は、
# cd /etc/rc.d/rcX.d/
# ln -s /etc/rc.d/init.d/adsl S99adsl
として、/etc/rc.d/init.d/adsl へのソフトリンクを作成します。
[注]
/etc/rc.d/rcX.d/ の X は run level を表しています。
X=3 は、コンソールからのログインスタート
X=5 は、X Window からのログインスタート
/etc/inittab ファイルの id:X:initdefault: の記述によって、どちらかが選択されます。

[参考過去記事]
kh10-01[フレッツ-ADSL とファイアーウォール設定]
kh10-01.02 ネットワークと ADSL ルーターの設定

■ 大津 Host3(ibm380) の Yahoo BB によるインターネット接続
Yahoo BB は、DHCP Server による IP Address 付与方式を採っているので、ユーザーは、DHCP Client として IP Address を取得することになります。前述の /etc/sysconfig/network-scripts/ifcfg-eth0 において、BOOTPROTO=dhcp, ONBOOT=yes としたのはこのためです。
また、大津 Host3(ibm380) はノートPC のため、PCMCIA ネットワークカードを使用しています。PCMCIA ネットワークカードを DHCP Client として使用するためのコンフィグレーションを /etc/pcmcia/network.pcmcia-cs.opt で設定します。

□ /etc/pcmcia/network.pcmcia-cs.opt ファイル
BOOTP="y"
DHCP="y"
DHCP_HOSTNAME="ibm380"
IPADDR=""
NETMASK=""
NETWORK=""
BROADCAST=""
GATEWAY=""

機器を接続した後、コンピューターを再起動すれば自動的に Yahoo BB に接続されます。

戻る

Telnet & FTP Server

Telnet と FTP サービスは、/etc/inetd.conf ファイルで管理されています。
サービスを許可するには /etc/inetd.conf ファイルの以下の記述のコメントマークをはずします。
ftp     stream  tcp  nowait  root  /usr/sbin/tcpd in.proftpd
telnet  stream  tcp  nowait  root  /usr/sbin/tcpd in.telnetd

次に、proftpd を inet 経由で起動するために、以下の設定が必要です。
/etc/proftpd.conf ファイルの編集
ServerType  inetd

サービスを起動するには、
# /etc/rc.d/init.d/inet start
を実行します。コンピューター起動時に自動的に起動するには
/etc/rc.d/rcX.d/ (X=3 or 5) 配下に /etc/rc.d/init.d/inet へのリンク S50inet があれば、自動的に起動します。もし、K50inet となっている場合は、
# cd /etc/rc.d/rcX.d/
# mv K50inet S50inet
とします。

戻る

Samba Server

Samba Server は、Windows Client を対象にしたファイルサーバーです。
Vine Linux2.5 or Vine Linux2.6r1 の最新 RPM パッケージは、
samba-2.0.1_ja1.2-0vl2.26.i386.rpm
samba-client-2.0.1_ja1.2-0vl2.26.i386.rpm
samba-common-2.0.1_ja1.2-0vl2.26.i386.rpm
です。

■ Samba Server の設定ファイル(/etc/smb.conf)の編集
以下、ファイルサーバーとして使用するディレクトリを、/mnt/hda8 とした場合の設定です。
------------- 以下 /etc/smb.conf -------------
[Global]
coding system = euc
client code page = 932
workgroup = WORKGROUP <== Windows のワークグループと一致させます
server string = Samba %v
encrypt password = Yes
map to guest = Bad User
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
os level = 1

[mnt/hda8]
path = /mnt/hda8
read only = No
writable = Yes
create mode = 0755
directory mode = 0755
------------- 以上 /etc/smb.conf -------------
[注]
/mnt/hda8 の所有者とグループ、パーミッションを何にするかによって、アクセス権限と書き込み権限が変わります。
所有者=USER_NAME(UID=500)、グループ=USER_NAME(GID=500)、パーミッション=775 とした場合、グループ USER_NAME に他のユーザー USER_NAME_X を追加していなければ、所有者だけが書き込み可能となります。また、グループ USER_NAME に他のユーザー USER_NAME_X を加えた場合は USER_NAME_X にも読み書き権限が与えられ、ファイル共有が可能になります。
例えば、グループ USER_NAME に他のユーザー USER_NAME_1 と USER_NAME_2 を追加するには、/etc/group ファイルを以下のように編集します。
USER_NAME:X:500:USER_NAME_1,USER_NAME_2

■ Samba Server の起動
# /etc/rc.d/init.d/smb start
でスタートします。コンピューター起動時に自動で Samba Server を起動するには、/etc/rc.d/rcX.d/ (前出注)配下に /etc/rc.d/init.d/smb へのリンクがあるか確かめます。K35smb がある場合は、
# mv K35smb S35smb
とします(S35smb がある場合は何もしなくて OK です)。

■ Samba Password の登録
# smbpasswd -a USER_NAME

■ Windows 98 の設定とアクセス
[コントロールパネル]-->[ネットワーク]-->[識別情報]タブ
ワークグループ:WORKGROUP <== /etc/smb.conf の workgroup と一致させます
Windows 起動時のユーザーログインで、Samba Password に登録したユーザー名とパスワードを入力します。ネットワークコンピュータを開くと、指定したディレクトリが表示されます。

[参考過去記事]
kh05-05[Samba Server 構築]

戻る

NFS Server

NFS(Network File System) は、Linux Client 向けの File Server です。NFS と Samba を同時稼働すれば、Linux Client からも Windows Client からもファイルにアクセス可能になります。ここでは、Host1(ph700) の /mnt/hda8/ を読み書き可能なディレクトリとすることを前提に説明します。
/mnt/hda8/ は USER_NAME に対して読み書き権限が与えられているものとします。

■ NFS Server に必要なサービス(デーモン) の起動
NFS Server を有効にするには、Host1(ph700) で以下のサービスが起動している必用があります。
portmap
nfs
nfslock
[注]
nfslock については、必用かどうか判りませんが、とりあえずサービスを起動しています。
上記サービスを起動するには、
# /etc/rc.d/init.d/ portmap start
# /etc/rc.d/init.d/nfslock start
# /etc/rc.d/init.d/nfs start
とします。
コンピュータ起動時に、自動で NFS Server を起動するには、/etc/rc.d/rcX.d/ (前出[注]参照) 配下のサービス起動リンク名を以下のように一文字目を 'S' にしておきます。
S13portmap
S14nfslock
S20nfs
もし、K13portmap, K14nfslock, K20nfs のようになっている場合は、
# mv K13portmap S13portmap
# mv K14nfslock S14nfslock
# mv K20nfs S20nfs
とします。
正常に稼働しているかどうかは、# rpcinfo -p として、
portmapper
status
rquotad
mountd
nfs
nlockmgr
の各ポートが表示されていれば、正常稼働しています。

■ アクセスを許可するディレクトリの設定
NFS Server が Client からのアクセスを許可するディレクトリを定義する設定ファイルは、/etc/exports です。ここでは、Host2(gw450) に対して、/mnt/hda8/ へのアクセスを許可する設定を示します。

□ Host1(ph700) の /etc/exports
/mnt/hda8 gw450.tamura.net(rw)

■ NFS Client の設定
まず、NFS Server がアクセスを許可したディレクトリを Client Host のどのディレクトリにマウントするかを設定します。 ここでは、Host2(gw450) の /mnt/ph700/hda8/ に Host1(ph700) の /mnt/hda8/ をマウントします。
以下、Host2(gw450) 側の操作と設定です。
# mkdir /mnt/ph700/hda8
# mount -t nfs ph700:/mnt/hda8 /mnt/ph700/hda8
エラーが出なければ、Host1(ph700) の /mnt/hda8/ が Host2(gw450) の /mnt/ph700/hda8/ にマウントされ、読み書き可能になっています。
マウントに成功すれば、コンピューター起動時に自動的にマウントできるよう、 Host2(gw450) の /etc/fstab に以下の一行を追加します。

□ Host2(gw450) の /etc/fstab に追記
ph700:/mnt/hda8 /mnt/ph700/hda8 nfs exec,dev,suid,rw 0 0

[参考過去記事]
kh10-02[NFS Server の設定]

戻る

公開 Web Server(Apache)

横浜 Host1(ph700) 上に Web Server を構築します。Web Server を構築するには Apache を使用しますが、特に公開 Web Server を構築する場合は、セキュリティ−ホール対策が行われた最新のバージョンを用いることが安全です。
Vine Linux 2.5 or Vine Linux 2.6r1 の最新パッケージは、apache-1.3.27-0vl2.i386.rpm です。

■ 名前解決の方法
Web Server を公開するには、インターネット側で自分の Web Server の名前解決が行われるようにする必要があります。本格的な Web Server を構築するには、固定のグローバル IP Address と公式のドメイン名を取得し、DNS Server を公開する必要がありますが、個人が簡易な方法で Web Server を公開する方法として、動的 IP Address (普通の ADSL 接続で与えられるグローバル IP Address) でも Dynamic DNS を利用する方法があります。

■ Dynamic DNS の利用
Dynamic DNS は、インターネット上の DNS Server に、[ホスト名+ドメイン名] を登録してくれるサービスです。[ホスト名+ドメイン名] に対する IP Address をいつでも自由に変更することが出来るので、固定 IP Address を持つ必要がなく、公開 DNS Server を立てる必要もありません。
海外及び日本語の Dynamic DNS サービスについては、
http://www.hi-ho.ne.jp/yoshihiro_e/dice/ に詳しく紹介されています。
今回は、http://www.zive.org を利用しました(現時点では、登録、運用とも無料です)。登録方法は以下の手順で行います。親切な解説もありますので、簡単に登録できます。

□ ユーザー登録
ユーザー名とパスワードを登録

□ ホスト名登録
MY_HOST_NAME を登録、MY_HOST_NAME.zive.net が URL になります。

□ IP Address 登録
MY_HOST_NAME.zive.net の IP Address を登録します。IP Address は、現在 ADSL 接続中(FLET'S ADSL) の IP Address を以下のコマンドで確認し、登録します。
# adsl-status
[注]
Yahoo BB を用いている場合は、
# ifconfig -a
で、インターネット側 I/F の IP Address を確認します。

□ その他
自分のメールサーバを持たない場合のメール転送サービスもあります。

□ IP Adddress が変化したときの対応
ADSL 接続をやりなおした時など、IP Address が変わった場合は、IP Address の再登録が必要です。また、変更が無い場合でも、有効期間が最大 1週間なので、1週間に 1回は、IP Address の再登録が必要です。
http://www.hi-ho.ne.jp/yoshihiro_e/dice/linux.html に、IP Address の監視、有効期間の管理、IP Address の再登録を自動で行ってくれるプログラム DiCE(Linux 版) が公開されています。DiCE をデーモンとして走らせておけば、ADSL の異常切断が継続しない限り、Dynamic DNS への再登録が自動的に行われます。

□ DiCE のインストールと使用法
Download from http://www.hi-ho.ne.jp/yoshihiro_e/dice/linux.html 
Download to /home/USER_NMAE/temp
Program:diced0194.tar.gz
# cd /home/USER_NAME/temp
# mv diced0194.tar.gz /usr/local/bin/
# cd /usr/local/bin
# tar zxvf diced0194.tar.gz
でインストール完了です。インストール後の設定は、
# cd DiCE
# ./diced
:help
を参考にして行いますが、
http://homepage3.nifty.com/kagetsu/14.htm
http://acorn.zive.net/~oyaji/ddns/ddns_linux.htm
等に詳しく紹介されていますので省略します。設定が終了したら、
# ./diced -d -l
でバックグランドデーモンが起動します。コンピューター起動時に、
/usr/local/bin/DiCE/diced -d -l を自動で起動するには、/etc/rc.local ファイルの最後に、
/usr/local/bin/DiCE/diced -d -l
を追記しておきます。
IP Address のチェック、IP Address の再登録等のログファイルは、/usr/local/bin/DiCE/log/ 配下に作成されます。

■ ホームページ用ディレクトリの設定
Web Server によって公開するホームページ用のディレクトリを決めます。ここでは、/home/USER_NAME/public_html/ としました。ディレクトリのパーミッション
及び配下の HTML ファイルのパーミッションは、755 とします。
$ mkdir /home/USER_NAME/public_html
$ su -
# chmod 755 /home/USER_NMAE
$ chmod 755 /home/USER_NAME/public_html

以上の準備ができたら Apache の設定を行います。Apache の設定ファイルは、/etc/httpd/conf/httpd.conf です。以下、/etc/httpd/conf/httpd.conf の編集内容です。

■ 異常連絡等に使うメールアドレス
http://www.zive.org では、メール転送サービスが使えるので、自分の ISP メールアドレスを webmaster@MY_HOST_NAME.zive.net の転送先として登録しておきます。
/etc/httpd/conf/httpd.conf(編集)
ServerAdmin webmaster@MY_HOST_NAME.zive.net

■ Web Server 名の設定
ホームページディレクトリを /home/USER_NAME/public_html とした場合
/etc/httpd/conf/httpd.conf(追記)
NameVirtualHost MY_HOST_NAME.zive.net
<VirtualHost MY_HOST_NAME.zive.net>
ServerName MY_HOST_NAME.zive.net
DocumentRoot /home/USER_NAME/public_html
</VirtualHost>

■ CGI カウンター等の CGI プログラムを実行するための設定
以下、CGI プログラムを /home/USER_NAME/public_html 配下に置いた場合の設定です。

□ /etc/httpd/conf/httpd.conf(編集)
AddHandler cgi-script .cgi がコメントになっている場合は、コメントをはずします。

□/etc/httpd/conf/httpd.conf(追記)
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>

□ なお、CGI プログラムの利用方法については、以下のホームページを参考にしました。
http://www.net-easy.com/

■ Apache のバージョン情報を公開しないための設定(セキュリティ−対策)
/etc/httpd/conf/httpd.conf ファイルのデフォルト設定では、port 80 への Telnet で Apache のバージョン情報が公開されてしまう場合があります。またエラーメッセージを出したときにも、バージョン情報が公開されます。Apache を最新バージョンにしておくことは必要ですが、バージョン情報は公開しない方がセキュリティー上は好ましいでしょう。
/etc/httpd/conf/httpd.conf(編集&追記)
ServerTokens ProductOnly(編集)
ServerSignature Off(追記)

以上で Apache の基本的な設定は終了です。

■ Apache の起動
# /etc/rc.d/init.d/httpd start
コンピューター起動時に自動で Apache を起動するには、/etc/rc.d/rcX.d/ 配下に /etc/rc.d/init.d/httpd へのリンク S85httpd があるか確認します。もし、K85httpd となっている場合は、
# cd /etc/rc.d/rcX.d/
# mv K85httpd S85httpd
とします。

[参考過去記事]
kh11-02[公開 Web Server の構築]

戻る

SSH Server(Open SSH)

横浜 Host1(ph700)上に、SSH (Secure Shell) Server を構築します。SSH Server は、Telnet に代わる安全なリモートログイン機能をサポートしていますが、更に OpenSSH が提供する SSH2 プロトコルでは、FTP に代わる安全なファイル転送機能もサポートされています。SSH2 プロトコルは、通信の暗号化と、Server 側の公開鍵、Client 側の秘密鍵、更に秘密鍵の安全を確保するパスフレーズの3つ要素で Client を認証する仕組を備えています。Telnet や FTP に相当する通信がインターネット経由で、かつ安全に行える OpenSSH (SSH2プロトコル) による SSH Server の構築について以下に説明します。
なお、Client は、大津 Host4(gw350) としています。

■ SSH Server (& Client) に必要なパッケージ
セキュリティー対策の施された最新のパッケージを使用します。
openssh-3.4p1-0vl2.i386.rpm
openssh-askpass-3.4p1-0vl2.i386.rpm
openssh-client-3.4p1-0vl2.i386.rpm
openssh-server-3.4p1-0vl2.i386.rpm
openssl-0.9.6i-0vl0.26.1.i386.rpm

■ 秘密鍵と公開鍵の作成
Client Host 大津 Host4(gw350) マシンで秘密鍵と公開鍵を作成します。
$ ssh-keygen -d
Pass Phrase を訊いてきますので、10-30 文字の Pass Phrase を入力します。
以下のファイルがユーザディレクトリ配下に作成されます。
~/.ssh/id_dsa(秘密鍵)
~/.ssh/id_dsa.pub(公開鍵)

■ SSH Server 横浜 Host1(ph700) への公開鍵登録
Client マシンのユーザディレクトリに生成した ~/.ssh/id_dsa.pub をフロッピーディスク等のリムーマブルメディアを使って Server マシンのユーザディレクトリ配下 ~/.ssh/ にコピーします(セキュリティー確保のため、FTP や NFS 等の手段でコピーしないこと)。
次いで、id_dsa.pub を authorized_keys2 に変換します。
$ cd ~/.ssh
$ cat id_dsa.pub >> authorized_keys2

■ Client Host 大津 Host4(gw350) の設定
□ /etc/ssh/ssh_config の設定
デフォルトでは、
ForwardX11 yes 
となっているので、
Protocol 2
を追記します。

■ 横浜 Host1(ph700) の SSH Server の設定

□ /etc/ssh/sshd_config の設定

□□ port 22
port 22 を使用します。

□□ Protocol 2
SSH2 プロトコルのみ使用、SSH2 プロトコルは、Telnet 相当機能に加えて、FTP 相当機能をサポートします。

□□ PermitRootLogin no
root アカウントによるログインを許可しません。

□□ RSAAuthentication no
SSH1 プロトコルを使用しないので、RSA 認証を使いません。

□□ PubkeyAuthentication yes
DSA 認証を使います。

□□ RhostAuthentication no
単純な r 認証は行わない。

□□ RhostRSAAuthentication no
単純な r 認証 + RSA 認証は使わない。

□□ PasswordAuthentication no
パスワードによる認証を行わない。安全のため、SSH ではユーザ名とパスワードによる認証を行わないようにします。

□□ X11Forwarding yes
Server 側の X アプリケーションが Client 側の X 上で実行できるようにします。

□□ Subsystem sftp /usr/libexec/openssh/sftp-server
SSH による FTP Server を使用します。

■ openssh の起動
Server 横浜 Host1(ph700) の openssh を起動します。
まず、以下をチェックします。
# ls -Fal /etc/rc.d/rcX.d (X=3:Runレベル3, X=5:Runレベル5)
S55sshd が表示されていたら、すでに openssh は起動しています。
# /etc/rc.d/init.d/sshd restart
として、sshd を再起動します。
K55sshd が表示されていたら、
# /etc/rc.d/init.d/sshd start で openssh が起動します。
コンピューター起動時に openssh を自動で起動するには、
# cd /etc/rc.d/rcX.d (X=3:Runレベル3, X=5:Runレベル5)
# mv K55sshd S55sshd

[参考過去記事]
kh13-01[SSH Server の構築]

戻る

PPP Server

遠隔地から電話回線による PPP 接続を使ってネットワークにアクセスできるサービスを提供するのが PPP Server です。前記 SSH Server があれば、インターネット経由でリモートホストからのアクセスが可能なわけですが、万一、SSH Server 側の ADSL 接続に異常があった場合にはリモートからのアクセスができなくなります。PPP Server はこのような緊急の場合に、ADSL 接続の復帰や、Web Server のリモートからのメンテナンス、ファイル転送の手段等として大変有効です。
ここでは、横浜 Host2(gw450) を PPP Server とし、大津 Host4(gw450) or Mobile Host からのアクセスを可能にすることを想定しています。ちなみに、PPP Client が Linux の場合、接続はできますが通信が不安定なため、PPP Clientの OS は Windows を使用しています。

■ 必要なアプリケーション
ppp-2.4.1-0vl1.i386.rpm
mgetty-1.1.25-5vl4.i386.rpm
[注]
ppp は PPP 接続を行うための認証と通信のプログラム、mgetty は、モデムの監視を行い、モデムが PPP の通信要求を受けたとき、pppd に処理を引き渡すプログラムです。

■ /etc/mgetty+sendfax/login.config の編集(60行付近に以下を記入)
/AutoPPP/ - a_ppp /usr/sbin/pppd

■ /etc/mgetty+sendfax/login.config のパーミッション設定
# chmod 600 /etc/mgetty+sendfax/login.config

■ /etc/mgetty+sendfax/mgetty.config の編集(21行目付近)
# access the modem(s) with 38400 bps <== コメント
# speed 38400 <== コメント行にする
speed 115200

■ /etc/ppp/options の編集
-detach
auth
-chap
+pap
login
modem
asyncmap 0
crtscts
lock
proxyarp
192.168.1.10:192.168.1.11

■ /etc/ppp/option の所有者、グループ、パーミッションの設定
# chown root /etc/ppp/options
# chgrp daemon /etc/ppp/options
# chmod 644 /etc/ppp/options

■ /etc/ppp/pap-secrets の設定
USER_NAME * "" *

■ /etc/ppp/pap-secrets の所有者、グループ、パーミッションの設定
# chown root /etc/ppp/pap-secrets
# chgrp daemon /etc/ppp/pap-secrets
# chmod 400 /etc/ppp/pap-secrets

■ /etc/inittab の設定(最下行に以下を追記) と PPP Server の起動、停止
s0:2345:respawn:/sbin/mgetty ttyS0 (モデムはserial port/COM1(ttyS0)にセット)
上記を設定後、以下のコマンドを入力します。
# telinit q
mgettyが起動し、モデムの監視がスタートします。
[注]
PPP Serverを停止するには、
s0:2345:respawn:/sbin/mgetty ttyS0
の記述をコメント行に変更(行頭に#を付ける)して、以下を実行します。
# telinit q

■ PPP Server マシンのリモート起動
PPP Server マシンは必ずしも常時稼働させておく必要はありません。BIOS に [On Modem Ring(モデム受信時)] 機能があれば [Power On(電源オン)] に設定しておきます。BIOS がモデムを監視しており、電話がかかるとコンピューターが起動します。/etc/inittab の設定が有効であれば、コンピューター起動時に mgetty が起動し、PPP Server がスタートします。PPP 接続後は Telnet でコンピューターをシャットダウンします。

[参考過去記事]
kh05-02[PPP Server 構築]
kh09-01[Vine Linux 2.1.5]
kh09-01.07 PPP Server の設定

戻る

セキュリティー

「完全なセキュリティーを確保する方法というのはない」が、「いろいろなセキュリティー確保の方法を多用することによって、より高いセキュリティーを確保する」ことが重要なようです。一般論としては、以下のような対策が重要とされています。ここでは、横浜 Host1(ph700) の設定について記述します。

■ 不要なパッケージはインストールしない
公開サーバーマシン(or ルーターマシン)には、[Internet Server + File Server] オプションでインストールしています。

■ パッケージのセキュリティ−フィックスを常に最新にメンテする
Vine Linux Errata からセキュリティーホール対策を常に最新にメンテナンスしています。

■ 不要なデーモンは起動しない
公開サーバー上で稼働している /etc/rc.d/rc3.d/ 配下の起動デーモンを、以下に制限しています。
iptables, network, syslog, portmap, nfslock, autofs, nfs, random, smb, inet, sshd, keytable, gpm, httpd, crond, adsl, diced
[注]
portmap, nfslock, nfs, smb, inet は、ローカルネットワーク向けとして使っていますが、本来公開サーバーマシン上で稼働させることは好ましくありません。セキュリティー対策として tcp_wrapper と iptables によるパケットフィルタリングで外部からこれらのサーバーにアクセスできないように設定しています。

■ tcp_wrapper
tcp_wrapper は、IP Address 単位で、特定のサービスへのアクセスを拒否したり、許可したりする仕組です。拒否するサービスと IP Address のリストは /etc/hosts.deny 、許可するサービスと IP Address のリストは /etc/hosts.allow 
に記述します。tcp_wrapper は不正なアクセスを拒否するには有効ですが、DOS(Death of Service) 攻撃を防ぐことはできないため、後述する iptables を用いたパケットフィルタリングによるファイアーウォールの設定は必須です。

□ /etc/hosts.deny の設定
All:All
[注]
全てのサービスに対して、全てのホストからのアクセスを拒否します。その上で、以下の /etc/hosts.allow により、特定のサービスに対して、特定のホストからのアクセスを許可します。

□ /etc/hosts.allow の設定
in.telnetd: 127.0.0.1, 192.168.1.0/255.255.255.0 <== Telnet へのアクセス制限、localhost と ローカルネットワーク内からのアクセスのみを許可します。
in.proftpd: 127.0.0.1, 192.168.1.0/255.255.255.0 <== Proftp へのアクセス制限、同上
portmap: 127.0.0.1, 192.168.1.0/255.255.255.0    <== NFS Server へのアクセス制限、同上
sshd: All <== SSH Server は、インターネット(全ての IP Addrerss) からのアクセスを許可します。セキュリティ−は、iptables によるパケットフィルタリングと SSH2 プロトコルによる暗号化と認証によって確保します(前述)。

■ IP Spoofing(IP Address の詐称)防止
送信元 IP Address をいつわってアクセスしてくるアタックを防止するため、送信元 IP Address の正統性をチェックします。
/etc/rc.d/rc.local の末尾に以下を追記します。
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then
    for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do
        echo 1 > $f
    done
fi

[参考過去記事]
kh10-01[フレッツ-ADSL とファイアーウォール設定]
kh10-01.03 Host A のファイアーウォール設定

戻る

iptables によるファイアーウォール

iptables は、Kernel 2.4 からサポートされている、Kernel 組込みのパケットフィルタリング機能です。パケットフィルタリングを設定するための基本的なポリシーは以下のようにしました。

■不正なアクセスをチェックする(アクセスログの監視)
以下のログファイルを定期的にチェックし、不正なアクセスを行う IP Adderss を見付けます。
/var/log/messages
/var/log/secure
/var/log/httpd/access_log
/var/log/httpd/error_log

■ ローカルネットワーク内のホストからインターネットへの接続は IP Masquerade を行う。

■ 不正なアクセスを頻繁に行うインターネット側 IP Address に対しては、無条件にアクセスを拒否する。

■ ローカルサーバーは、ローカルネットワークのホストのみアクセスを許可する。

■ 公開サーバー(Web Server, SSH Server) のみ無条件にアクセスを許可する。

■ 不要(セキュリティ−上危険)なポートは閉じる。

■ その他のポートについては、送信パケットに対して確立した通信の戻りパケットのみ受信を許可する(インターネットからローカルネットワーク内へのアクセスを拒否する)。

上記ポリシーに基づいて、iptables の実行スクリプトファイル /usr/local/sbin/setiptables.sh を作成します。

■ /usr/local/sbin/iptables.sh
Forward Chain の記述が抜けていたので追記しました(2003.05.21)
------------------------- 以下 setiptables.sh -------------------------
#!bin/sh

# Clear Rule
/sbin/iptables -F
/sbin/iptables -t nat -F

# Policy
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT

# IP Masquerade
/sbin/iptables -t nat A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

# Input Chain
/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx/nn -j DROP
/sbin/iptables -A INPUT -s .................. -j DROP

/sbin/iptables -A INPUT -i ! ppp0 -s 127.0.0.1 -j ACCEPT
/sbin/iptables -A INPUT -i ! ppp0 -s 192.168.1.0/24 -j ACCEPT

/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p udp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p udp --dport 80 -j ACCEPT

portlist="21 23 25 53 98 110 111 113 119 123 137 138 139 161 194 515 518 901 1178 →
→2010 3128 5680 6000:6010 6667 7000:7010 8080 22273 22289 22305 22321"

for n in $portlist
do
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport $n -j DROP
/sbin/iptables -A INPUT -i ppp0 -p udp --dport $n -j DROP
done

/sbin/iptables -A INPUT -i ppp0 -m state --state ESTABLISHED -j ACCEPT

# Forward Chain
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP
------------------------- 以上 setiptables.sh -------------------------
[注]
NFS Server は、セキュリティ−上かなり危険なサービスです。ローカルネットワーク内のホストに対してだけアクセスを許可するために、以下の方法を使っています。
# rpcinfo -p
で、NFS Server が使用している port 番号を調べます。port 番号は、コンピュータを再起動すると変化するので、再起動の都度確認します。該当する port 番号を、上記 setiptables.sh の portlist に加えます。この方法で、インターネット側のインターフェースである ppp0(FLET'S ADSL / rp-pppoe 接続では、eth1 ではなく ppp0 になります) に対して、該当 port が塞がれますので、インターネット側から NFS Server へのアクセスは拒否されます。

■ iptables の実行
# /usr/local/sbin/setiptables.sh
で iptables のスクリプトが実行されます。次に現在の iptables を保存します。
# iptables-save > /etc/sysconfig/iptables
次回コンピューターを起動(再起動) したとき、/etc/sysconfig/iptables が参照されて、設定された iptables が実行されます。

[参考過去記事]
kh13-02[iptables 概要]
kh13-03[iptables によるファイアーウォール]

戻る

counter1counter2counter3counter4counter5counter6

|Home|
 
Valid XHTML 1.1 Valid CSS!