server_top


2004年04月02日

Antivir Mailgateによるメールのウイルスチェック

クライアントにはNorton Antivirusを入れていますがせっかくなのでサーバの段階でたたき落としておきたいと思います。昔はSophosAVとAmavisで構築していましたが、今回は個人利用が無料の Antivir Mailgateを使ってみることにしました。

インストール
まず、H+BEDVのサイトから「Antivir Mailgate for Linuxをダウンロードします。登録ページでユーザー登録を行い、ライセンスキーを入手します
$ tar xvfz aavlxmgt.tgz
$ cd antivir-mailgate-2.0.2-1
# ./avinstall.pl
すべてデフォルトでインストール
ただし、起動スクリプトが"/etc/rc.d"にできてしまうので"/etc/rc.d/init.d"に移動する
# mv /etc/rc.d/avgate /etc/rc.d/init.d/avgate

AntiVir Mailgateの設定
まず/etc/serviceに以下の記述を追加
[/etc/service]
antivir 10024/tcp #Port for avgated
smtp-backdoor 10025/tcp #Port for postfix

/etc/avmailgate.confを編集
[/etc/avmailgate.conf]
MyHostName mail.takenouchi.to
PidDir /var/run/antivir
LogFile /var/log/avmailgate.log
ListenAddress 127.0.0.1 port antivir
ForwardTo SMTP: 127.0.0.1 port smtp-backdoor
VirusAlertsUser virusalert

PidDirを作り所有者、グループをuucpに変更
# mkdir -m 755 /var/run/antivir
# chown uucp:uucp /var/run/antivir
ライセンスキー(hbedv.key)を、/usr/lib/AntiVirにコピーし、所有者をuucpに変更

# cp hbedv.key /usr/lib/AntiVir/hbedv.key
# chown uucp:uucp /usr/lib/AntiVir/hbedv.key

Postfix側の設定
[/etc/postfix/master.cf]
localhost:smtp-backdoor inet n - n - - smtpd -o content_filter=

[/etc/postfix/main.cf]
content_filter = smtp:127.0.0.1:10024

動作確認
# /etc/rc.d/init.d/avgate start

Postfixを再起動
# /etc/rc.d/init.d/postfix restart

テストメールを送ってみて、ヘッダに下記のような記述が追加されていれば成功
X-AntiVirus: checked by AntiVir MailGate (version: 2.0.2-1; AVE: 6.24.0.7; VDF: 6.24.0.75; host: mail.takenouchi.to)

テスト用のウイルスでのアラートチェック
eicarからテスト用のウイルスをダウンロードして送受信してみる。ウイルスが検出できた時には、送信者、受信者に送信される

ウィルス定義ファイルの更新
インストール時に定義ファイルの更新を行うようにした場合、crontabに以下のような記述が追加されているはずです
[/etc/crontab]
3 * * * * root /usr/lib/AntiVir/antivir --update -q

もし手動で更新する場合は、以下のコマンドを実行します。
# /usr/lib/AntiVir/antivir --update

logrotateの設定
ログの肥大化防止のためにrotateする

[/etc/logrotate.d/syslog]
/var/log/avmailgate.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

blank_space
投稿者 たけのうち : 08:34 | コメント (0) | トラックバック

Network Time Protocol(ntpd)

/etc/ntp.conf にタイムサーバの設定をします。

[/etc/ntp.conf]
server ntp1.jst.mfeed.ad.jp # new mfeed server
server ntp2.jst.mfeed.ad.jp # new mfeed server
server ntp3.jst.mfeed.ad.jp # new mfeed server
server clock.nc.fukuoka-u.ac.jp # Fukuoka Univ
server clock.tl.fukuoka-u.ac.jp # Fukuoka Univ
server ntp.tut.ac.jp # Toyohashi Univ of Technology
server cesium.mtk.nao.ac.jp # Kokuritsu Tenmondai
server eagle.center.osakafu-u.ac.jp # Osaka Furitsu Univ
server ntp.sut.ac.jp # Science Univ of Tokyo
server ntp.hiroshima-u.ac.jp # Hiroshima Univ
server 127.127.1.0 # local clock
...

そして、まず、
# ntpdate -b ntp1.jst.mfeed.ad.jp
で、そのマシンの時刻を合わせ、
# clock -w
で CMOSの時刻をシステム時刻に合わせます。
# ntsysv
で"ntpd"にチェックして、
# /etc/rc.d/init.d/ntpd start
でサービスを開始します。

blank_space
投稿者 たけのうち : 08:31 | コメント (0) | トラックバック

Webサーバ(Apache)

基本設定
/etc/httpd/conf/httpd.conf を以下に従って変更します。

基本的なネットワークの設定管理者の設定
ServerAdmin root@localhost

ServerAdmin webmaster@takenouchi.to

htmlの拡張子を持つファイルでSSIが使えるようにする
AddHandler server-parsed .shtml

AddHandler server-parsed .shtml
AddHandler server-parsed .html

ログファイルにIPアドレスではなく、ホスト名を記述させるようにする
HostnameLookups Off

HostnameLookups On

インクルードファイルやHTMLエディタのバックアップファイルなどの中身を見られないようにする
incやbakなど(場合によってはphpなど)の拡張子を持つファイルはその中身を見られたくないものですので、ブラウザから直接アクセスを禁止するため、 /etc/httpd/conf/httpd.conf に以下のような記述を追加します。
<Files ~ "^\.inc">
Order allow,deny
Deny from all
</Files>
<Files ~ "^\.bak">
Order allow,deny
Deny from all
</Files>

名前ベースのVirtual hostの設定
我が家では http://www.takenouchi.to/ で、ローカルの/home/httpd/html/が見えますが、以下のように /etc/httpd/conf/httpd.conf に記述することで、例えば、我が家の親バカページ、http://www.takenouchi.to/kumiko/へ、http://kumiko.takenouchi.to/でアクセスすることができます。これを「名前ベースのバーチャルホスト」といいます。(ただし、古いブラウザやproxyサーバなどでは対応していないこともあります。)

NameVirtualHost 192.168.0.1  ← NATの環境では、プライベートアドレスを指定する。

ServerName www.takenouchi.to
ServerAdmin root@takenouchi.to
DocumentRoot /home/httpd/html/
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
CustomLog logs/access_log combined
CustomLog logs/referer_log referer


ServerName takenouchi.to
ServerAdmin root@takenouchi.to
DocumentRoot /home/httpd/html/
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
CustomLog logs/access_log combined
CustomLog logs/referer_log referer


ServerName kumiko.takenouchi.to
ServerAdmin root@takenouchi.to
DocumentRoot /home/httpd/html/kumiko/
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/kumiko/
CustomLog logs/kumiko_access_log combined
CustomLog logs/kumiko_referer_log referer

アクセス制御の設定
家の中からだけ見たい、限られた人にだけ見せたいなど、いろんな情報の見せ方があると思います。そんな時には以下の2種類のアクセス制御を適切に設定することで解決できることが多いと思います。
ホストベースの認証決まったホスト、決まったネットワークからのみのアクセスのみを許可する方法です。例えば httpd.conf に以下の設定を加えることで、/secret/以下のファイルは、プライベートネットワーク(例えば192.168.0.0)以外からのアクセスは禁止されます。

Order deny,allow
Deny from all ← デフォルトで全てのホストからのアクセスを禁止
Allow from 192.168.0.0/255.255.255.0 ← 192.168.0.0 からのアクセスは許可
Allow from 127.0.0.1 ← ローカルホストからのアクセスも許可

パスワードベースの認証
以下の設定で、/secret/以下のファイルにアクセスするためには、ユーザー名とパスワードをによる認証を行うようにできます。

AuthType Basic
AuthName Private
AuthUserFile /etc/httpd/conf/.htpasswd
require valid-user

認証するユーザ名とパスワードを設定するには以下のようにします。
# htpasswd -c /etc/httpd/conf/.htpasswd hogehoge
New password:****
Re-type new password:****
"-c" はファイルを新規作成するオプションですので、2回目以降は指定しないようにしてください。(もし指定すると、これまでのユーザ名、パスワードはクリアされるので、注意してください。)

ホストベースの認証とパスワードベースの認証の組み合わせあるネットワークからのアクセスに限定し、かつ認証をしたいことや、あるネットワークからは認証なしで、それ以外からはパスワード認証を行いたいことがあると思います。その場合には、"Satisfy"を使います。 "Satisfy all"で、「ホストベース認証 かつ パスワード認証」となり、指定されたネットワークでかつ、パスワードが要求されないとアクセスできないようになります。また"Satisfy any"で「ホストベース認証 または パスワード認証」となり、指定されたネットワークではパスワード認証なし、それ以外では、パスワードが要求されるようになります。

Satisfy any ← 192.168.0.0, 127.0.0.1 からはパスワード認証なし
# Satisfy all ← 192.168.0.0, 127.0.0.1 以外からはアクセス不可、192.168.0.0, 127.0.0.1 からでもパスワード認証が必要
Order deny,allow
Deny from all
Allow from 192.168.0.0/255.255.255.0
Allow from 127.0.0.1
AuthType Basic
AuthName Private
AuthUserFile /etc/httpd/conf/.htpasswd
require valid-user

blank_space
投稿者 たけのうち : 08:29 | コメント (0) | トラックバック

DNSサーバ(BIND8)

ゾーン設定ファイルは普通は/var/named 以下にに置かれますが、設定ファイルのバックアップが楽なので/etc/named にしています。

[/etc/named.conf]

options {
directory "/etc/named";
};

zone "." IN {
type hint;
file "db.cache";
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "db.127.0.0";
allow-update { none; };
allow-query {
127.0.0.1/32;
192.168.0/24;
};
};

zone "localhost" IN {
type master;
file "db.localhost";
allow-update { none; };
allow-query {
127.0.0.1/32;
192.168.0/24;
};
};

zone "0.0.10.in-addr.arpa" {
type master;
file "db.10.0.0";
allow-query {
127.0.0.1/32;
192.168.0/24;
};
};

zone "takenouchi.to" {
type master;
file "db.takenouchi.to";
allow-transfer {
*.*.*.*;
*.*.*.*;
};
};
ゾーンファイル /etc/namedの下は以下のファイルをおく。

db.takenouchi.to, db.192.168.0, db.127.0.0, db.cache
このうちdb.cache.dnsはルートヒントファイルなので、そのままで使う。

blank_space
投稿者 たけのうち : 08:25 | コメント (0) | トラックバック

Mailサーバ(postfix)

ネットワークの設定
[/etc/postfix/main.cf]
myhostname = mail.takenouchi.to
mydomain = takenouchi.to
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.$mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relaydomains = $mydestination
alias_maps = hash:/etc/postfix/aliases
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP $mail_name ← 余計なバージョン情報などは外に出さない

エイリアスの設定
rootのメールは直接pop3で読めないので、root宛のメールは転送する。

[/etc/postfix/aliases]
root: hoge
あと必要なら、エイリアスを設定する
info: root
webmaster: root

Postfixのセキュリティ強化
user@domain形式以外の宛先を拒否し、!や%によるリレーができないようにするデフォルトで不正中継に対しては十分ですが、Vine 2.1.5の時に後述するmail-abuse.org でのチェックに引っかかった経緯があり、さらなる対策を行ってます。

/etc/postfix/main.cf に以下の行を新たに追加。 [/etc/postfix/main.cf]

smtpd_recipient_restrictions = regexp:/etc/postfix/recipient_checks, permit_mynetworks, check_relay_domains
notify_classes = resource,software,policy
allow_percent_hack = yes
swap_bangpath = yes
/etc/postfix/recipient_checks というファイルを新規作成し、以下をのように記述。 [/etc/postfix/recipient_checks]

/[@!%].*[@!%]/ 550 Please use user@domain address forms only.

不正中継チェック
長崎ネットワークサービスでの不正中継確認テスト
有名なサイトです。まずはここでチェックするといいと思います。

<<< 220 mail.takenouchi.to ESMTP Postfix
>>> HELO rlytest.nanet.co.jp
<<< 250 mail.takenouchi.to
>>> MAIL FROM:<"58c3a9:TPR TEST http://www.nanet.co.jp/rlytest/ requested from
[203.141.147.165]"@mail.takenouchi.to>
<<< 250 Ok
>>> RCPT TO:
<<< 554 : Recipient address rejected: Relay access denied
正常:中継は拒否されました。
mail-abuse.org でのチェック
mail-abuse.org でもメールの不正中継のテストをしてくれます。こちらは relay-test.mail-abuse.org にtelnetすることでより詳細なチェックをしてくれます。

# telnet relay-test.mail-abuse.org
さらにルールを有効にするために、/etc/postfix/main.cf に以下の行を追加する必要があります。。(ヘッダーでなく本文でチェックする場合は、main.cfで"body_checks=(ファイル名)"とするといいと思います。)

header_checks = regexp:/etc/postfix/header_checks_rule

APOPの設定
外からPOPで受け取りたいという妻の要望がありましたが、POPのままではパスワードが平文で流れ、セキュリティ的に不安なので、APOPの設定を行いました。

qpopperのAPOP用DBの初期化

# popauth -init
APOPのアカウントをユーザー毎に作成。

# popauth -user hogehoge

blank_space
投稿者 たけのうち : 01:19 | コメント (0) | トラックバック

Windowsファイル共有(samba)

セキュリティポリシー
とりあえず、以下のようなセキュリティポリシーの下に設定を行います。

アクセスできるホストは、ファイアウォール内のホスト、またはローカルホスト
ユーザは一部のユーザとwheelグループに制限、それ以外はアクセス不可。

アクセス権の変更
LAN内からWebで外部公開する/home/httpd以下のディレクトリはwheelグループの所有に変更し、書き込み権を与えることにします。

# chgrp wheel /home/httpd/*
# chmod g+w /home/httpd/*

/etc/smb.conf の設定
ユーザhogehogeとグループwheelをアクセスさせるために以下のように設定しています。

[/etc/smb.conf]
[global]
coding system = euc
client code page = 932
workgroup = PHTWIN
server string = Samba %v
encrypt passwords = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 1
dns proxy = No
guest account = smbguest
hosts allow = localhost 192.168.0.0/255.255.255.0
hosts deny = ALL EXCEPT localhost 192.168.0.0/255.255.255.0
map to guest = Bad User

[homes]
comment = %U's Home directory
username = hogehoge,@wheel
valid users = hogehoge,@wheel
write list = hogehoge,@wheel
writeable = Yes
only user = Yes
browseable = No

[Temporary]
comment = Temporary
path = /tmp
username = hogehoge,@wheel
valid users = hogehoge,@wheel
write list = hogehoge,@wheel
writeable = Yes
only user = Yes

[Web Pages]
comment = Web pages
path = /home/httpd
username = hogehoge,@wheel
valid users = hogehoge,@wheel
write list = hogehoge,@wheel
writeable = Yes
only user = Yes

[Backup]
comment = Backup
path = /backup
username = hogehoge,@wheel
valid users = hogehoge,@wheel
write list = hogehoge,@wheel
writeable = Yes
only user = Yes

[printers]
comment = All Printers
path = /var/spool/samba
print ok = Yes
browseable = No

Sambaにアクセスさせるためには、Windowsからのユーザの認証のためにLinuxサーバのユーザ、パスワードとは別に、これらを設定する必要があります。

# smbadduser linuxのアカウント:smbのアカウント
Adding: hogehoge to /etc/smbpasswd
----------------------------------------------------------
ENTER password for hogehoge
New SMB password:****
Retype new SMB password:****
Password changed for user hogehoge.

blank_space
投稿者 たけのうち : 01:15 | コメント (0) | トラックバック

ログインできないユーザーアカウントの設定

コンソールにログインする必要の無いユーザーは、ログインできないようにする
# useradd -s /bin/false [アカウント名]

既存のアカウントをログインができないように変更するには、以下のようにする
# usermod -s /bin/false [アカウント名]

blank_space
投稿者 たけのうち : 00:48 | コメント (0) | トラックバック

libsafeによるBuffer Overflow防止

libsafeの入手とインストール
Avaya LabsからRPM版ををダウンロードしてインストール。

http://www.research.avayalabs.com/project/libsafe/src/libsafe-2.0-16.i386.rpm

# rpm -ivh libsafe-2.0-16.i386.rpm
libsafe ##################################################
Adding libsafe to ld.so.preload for system wide protection
/etc/ld.so.preload が以下のようになっているか確認

[/etc/ld.so.preload]
/lib/libsafe.so.2

libsafeの動作確認
まずは ldd で、"libsafe.so.2" が最初に読み込まれているか確認します。

$ ldd /bin/ls
/lib/libsafe.so.2 => /lib/libsafe.so.2 (0x40017000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x40025000)
libc.so.6 => /lib/libc.so.6 (0x40029000)
libdl.so.2 => /lib/libdl.so.2 (0x40155000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
次に、ディレクトリ /usr/doc/libsafe-2.0/exploits/ 以下に、バッファオーバーフローのサンプルプログラムがありますので実行してみます。

$ ./t1
This program tries to use strcpy() to overflow the buffer.
If you get a /bin/sh prompt, then the exploit has worked.
Press any key to continue... [Return]
Libsafe version 2.0.16
Detected an attempt to write across stack boundary.
Terminating /usr/doc/libsafe-2.0/exploits/t1.
uid=0 euid=0 pid=1935
Call stack:
0x40018439
0x4001853a
0x80485bc
0x40041ffa
Overflow caused by strcpy()
強制終了
強制終了した場合、/var/log/secure に記録されます。

# tail /var/log/secure
May 19 16:31:12 server libsafe.so[1953]: 2.0.16
May 19 16:31:12 server libsafe.so[1953]: Detected an attempt to write across stack boundary.
May 19 16:31:12 server libsafe.so[1953]: Terminating /usr/doc/libsafe-2.0/exploits/t1.
May 19 16:31:12 server libsafe.so[1953]: uid=0 euid=0 pid=1953
May 19 16:31:12 server libsafe.so[1953]: Call stack:
May 19 16:31:12 server libsafe.so[1953]: 0x40018439
May 19 16:31:12 server libsafe.so[1953]: 0x4001853a
May 19 16:31:12 server libsafe.so[1953]: 0x80485bc
May 19 16:31:12 server libsafe.so[1953]: 0x40041ffa
May 19 16:31:12 server libsafe.so[1953]: Overflow caused by strcpy()

blank_space
投稿者 たけのうち : 00:47 | コメント (0) | トラックバック

ポートスキャナ(NMAP)の導入

NMAPの入手とインストール
http://www.insecure.orgから、NMAPのRPM版をダウンロード。(2004.3.19現在の最新版はnmap-3.50-1.i386.rpmです。)
http://download.insecure.org/nmap/dist/nmap-3.50-1.i386.rpm

NMAPのスキャン結果(参考)
参考までにwww.takenouchi.toへのNMAPのスキャン結果を以下に示します。

# nmap www.takenouchi.to
Starting nmap V. 2.54BETA33 ( www.insecure.org/nmap/ )
Interesting ports on 203.141.147.165.user.at.il24.net (203.141.147.165):
(The 1551 ports scanned but not shown below are in state: filtered)
Port State Service
25/tcp open smtp
53/tcp open domain
80/tcp open http

blank_space
投稿者 たけのうち : 00:44 | コメント (0) | トラックバック

Tripwireによるファイル改竄チェック

Tripwireの入手とインストール
http://www.tripwire.org/からのダウンロード(2004.3.19現在の最新版は、tripwire-2.3-47.i386.rpm でした。)

# rpm -ivh tripwire-2.3-47.i386.rpm
# /etc/tripwire/twinstall.sh
----------------------------------------------
The Tripwire site and local passphrases are used to
sign a variety of files, such as the configuration,
policy, and database files.

Passphrases should be at least 8 characters in length
and contain both letters and numbers.

See the Tripwire manual for more information.

----------------------------------------------
Creating key files...

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the site keyfile passphrase:********
Verify the site keyfile passphrase:********
Generating key (this may take several minutes)...Key generation complete.

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase:********
Verify the local keyfile passphrase:********
Generating key (this may take several minutes)...Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase:********
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file
/etc/tripwire/twcfg.txt
has been preserved for your inspection. It is recommended
that you delete this file manually after you have examined it.

----------------------------------------------
Signing policy file...
Please enter your site passphrase:********
Wrote policy file: /etc/tripwire/tw.pol

A clear-text version of the Tripwire policy file
/etc/tripwire/twpol.txt
has been preserved for your inspection. This implements
a minimal policy, intended only to test essential
Tripwire functionality. You should edit the policy file
to describe your system, and then use twadmin to generate
a new signed copy of the Tripwire policy.
インストール後の手順
/etc/tripwire/twcfg.txt(基本的な設定ファイル)や/etc/tripwire/twpol.txt(チェックするポリシーが書かれているファイル)に変更があれば編集。(特に編集しなくてもOK)

設定スクリプトを実行
# /etc/tripwire/twinstall.sh
Tripwireデータベースファイルの初期化
#/usr/sbin/tripwire --init
Tripwireデータベースとシステムファイルを比較。レポートをチェックして問題がないか確認する。
# tripwire --check
設定ファイル(twcfg.txtやtwpol.txt)を変更したら、twinstall.shの実行から再びやり直す。また、データベースを作り直すときは、tripwire --init を実行する。

改竄チェックの自動化
/etc/cron.dailyに以下の内容でtripwire-check.cronというファイルを作成することで毎日自動でチェックを行い、メールでリポートを送ってくれる。

#!/bin/sh
#
# File integrity check by tripwire
#
# 2002.5.1 H. Takenouchi

/usr/sbin/tripwire --check

blank_space
投稿者 たけのうち : 00:42 | コメント (0) | トラックバック

基本的なセキュリティの設定

/etc/inetd.confの書き換え(不要サービスのコメントアウト)
pop-3以外(telnet,swat)をコメントアウトし、アクセス権を600に変更。ついでに変更不可 (immutable)属性をつける。
# chmod 600 /etc/inetd.conf
# chattr +i /etc/inetd.conf

起動デーモンの選択
# ntsysv
起動デーモンを選択、設定後は再起動
[*] anacron → ×
[*] apmd
[*] atd → ×
[*] autofs → ×
[*] canna
[*] crond
[ ] dhcpd
[*] gpm → ×
[*] httpd
[*] identd
[*] inet
[ ] ipchains
[*] iptables
[*] keytable → ×
[*] kudzu
[*] lpd → ×
[ ] mcserv
[*] murasaki
[ ] named → ○
[*] netfs → ×
[*] network
[ ] nfs
[*] nfslock → ×
[ ] nscd
[ ] ntpd → ○
[*] pcmcia
[*] portmap → ×
[*] postfix
[ ] postgresql
[ ] proftpd
[*] random
[*] rawdevices
[ ] routed
[ ] rsync
[ ] smb → ○
[ ] squid
[*] sshd
[*] syslog
[ ] telnet
[*] usbmgr
[*] webmin → ×
[*] xfs
[ ] ypbind
[ ] yppasswdd
[ ] ypserv
[ ] ypxfrd

rootになれるユーザを制限
/etc/groupのwheelにrootになることを許可したいユーザ名(例えばhoge)を追加

[/etc/group]
wheel:x:10:root,hoge
/etc/pam.d/suに以下の行をコメントアウト

[/etc/pam.d/su]
auth required /lib/security/pam_wheel.so use_uid

シャットダウンををrootのみに制限
/etc/shutdown.allowというファイルを作り、"root"を追加

[/etc/shutdown.allow]
root

inetd経由サービスへのアクセスを制限
in.qpopperとsshd,swat,VNCへのアクセスはローカルホスト(127.0.0.1), サブネット内(例えば192.168.0.0/255.255.255.0)からのみ許可とする。それ以外のサービス、ホストからのアクセスは拒否。(sshdは、inetdから起動させているわけではないが、host.allow,host.denyを参照している。)

[/etc/hosts.deny]
swat:ALL → ALL:ALL

[/etc/hosts.allow]
swat:localhost 192.168.0.0/255.255.255.0
in.qpopper:localhost 192.168.0.0/255.255.255.0
sshd:localhost 192.168.0.0/255.255.255.0
Xvnc: localhost 192.168.0.0/255.255.255.0
(注意) 行に改行がないとその行は無効になってしまうので注意! tcpdchkでhost.allow,host.denyにミスがないか確認。ただしsshdはないといわれるが、このメッセージは無視。 tcpdmatchで指定IPアドレスからのアクセス(許可:granted,拒否:denyed)を確認。

(例) # tcpdmatch in.qpopper 192.168.0.1
間違いがなければinetdをリスタート

# /etc/rc.d/init.d/inet restart

rootでの直接ログインの制限 - コンソール・telnet
/etc/securettyのすべての行をコメントアウト

コンソールからrootでログインできないことを確認。

[/etc/securetty]
#vc/1
...(中略)...
#vc/11
#tty1
...(中略)...
#tty11

rootでの直接ログインの制限 - SSH
/etc/ssh/sshd_configのPermitRootLogin?が"no"になっていることを確認。

[/etc/ssh/sshd_config]
PermitRootLogin no

sudoを使えるユーザの設定 (現在設定していません) セキュリティ対策には反しますが、いつも"su -"するのは面倒なので、sudoerファイルを編集。デフォルトでは、当然以下のようになっていてrootが全能です。
root ALL=(ALL) ALL
ユーザfooに全てのコマンドを許可する場合は、
foo ALL = (ALL) : ALL
と書けばいいです。
foo ALL = (ALL) NOPASSWD: ALL
と書けば、パスワードも聞かれませんが、さすがにこれはちょっと危険すぎますのでやめましょう。localhost からアクセスする場合だけ、一部のプログラムだけパスワードなしにしたい場合は、例えば
foo localhost = (ALL) NOPASSWD: program1, program2
と書けば program1 と program2 だけがパスワードなしで sudo できます。プログラムの前に"!"をつければ、否定の意味を表せます。
foo localhost = (ALL) NOPASSWD: ALL, !program1

すべてのログを取る
ログはできるだけ多くとった方がいいと思います。というわけで、以下の一行を /etc/syslog.conf に追加。

[/etc/syslog.conf]
*.debug /var/log/all.log
syslogの再起動。
# /etc/rc.d/init.d/syslog restart
ちゃんと、ログが書き込まれているか確認

# tail /var/log/all.log
logrotateの設定をする

[/etc/logrotate.d/syslog]
/var/log/all.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

ルーターからのログを受け取る
ログを転送できるルーターを使っていますので、サーバー側で受け取る設定をしておきます。

[/etc/syslog.conf]
user.* /var/log/router.log
ネットワーク経由のログを受信するようにsyslogの起動スクリプトに"-r"オプションを追加

[/etc/rc.d/init.d/syslog]
daemon syslogd -r $SYSLOGD_OPTIONS
syslogの再起動。

# /etc/rc.d/init.d/syslog restart
ちゃんと、ログが書き込まれているか確認

# tail /var/log/router.log
logrotateの設定をする

[/etc/logrotate.d/syslog]
/var/log/router.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

/etc/host.conf の設定
IPスプーフィングなどを防止する対策。以下を /etc/host.conf に追加。

[/etc/host.conf]
# /etc/hostに記載のホストが複数のIPアドレスを持っているか調べる
multi on
# IP spoofing をチェックしてログをとる
nospoof on
spoofalert on

/etc/servicesの保護
よけいなサービスを追加されたりしないように、/etc/services に変更不可 (immutable)属性をつける。
# chattr +i /etc/services

自動ログアウトの設定
ログインして30分(1800秒)間、何もしなかった場合、自動的にログアウトするように /etc/profile に以下を追加する。

[/etc/profile]
TMOUT=1800

blank_space
投稿者 たけのうち : 00:17 | コメント (0) | トラックバック

2004年04月01日

インストール後の基本設定

Windowマネージャの変更
Gnomeに変更する

$ setwm gnome

Networkの設定
# control-panel
[名前]
ホスト名: cyclone.takenouchi.to
ドメイン: takenouchi.to
ネームサーバ: 192.168.0.1, (プロバイダのDNSのアドレス)

[ホスト]
マシン名にcycloneとつけた場合、はじめは、IP: 127.0.0.1/ 名前:cyclone/ ニックネーム:localhost.localdomain localhostとなっているので以下のように書き代える
IP: 127.0.0.1/ 名前:localhost/ ニックネーム:localhost
IP: 192.168.0.1/ 名前:cyclone.takenouchi.to/ ニックネーム:cyclone

[インターフェイス]
eth0を編集して、IP: 192.168.0.1、ネットマスク: 255.255.255.0、インターフェイス設定プロトコルに"static"と入力し、ブート時にインターフェイスを活動させるにチェックする

[ルーティング]
デフォルトゲートウェイを、192.168.0.253とする

aptの設定
(1) VinePlusをaptで利用できるようにする
VinePlusをaptでインストールできるように、/etc/apt/sources.listを編集
[/etc/apt/sources.list]

##
## Vine Linux 2.6 FTP
##
# (ring mirror)
rpm http://www.ring.gr.jp/pub/linux/Vine/apt 2.6/$(ARCH) main plus plus-noarch
rpm-src http://www.ring.gr.jp/pub/linux/Vine/apt 2.6/$(ARCH) main plus
#
# (jaist mirror)
#rpm ftp://ftp.jaist.ac.jp/os/linux/Vine/apt 2.6/$(ARCH) main plus plus-noarch
#rpm-src ftp://ftp.jaist.ac.jp/os/linux/Vine/apt 2.6/$(ARCH) main plus
#
# (kddlabs mirror)
#rpm ftp://ftp.kddlabs.co.jp/pub/Linux/distributions/Vine/apt 2.6/$(ARCH) main plus plus-noarch
#rpm-src ftp://ftp.kddlabs.co.jp/pub/Linux/distributions/Vine/apt 2.6/$(ARCH) main plus

(2) パッケージのアップデート
ネットワークがつながったらまずはパッケージのアップデートです。

# apt-get update; apt-get dist-upgrade
ああ楽チン。

lilo.confの設定
[/etc/lilo.conf] ACPIを無効にして、APMを有効にする

append="acpi=off apm=on"
FB(フレームバッファ)コンソールを有効にする
vesafbのコンソールとunicon(漢字が使えるコンソール)が組み込まれているのでこれを有効にする

vga=0x317 (1024x768,16bppの場合)
変更後はliloコマンドで変更を有効にする

# lilo
Added linux *
Added linux-2.2-up

blank_space
投稿者 たけのうち : 01:06 | コメント (0) | トラックバック

VineLinuxのインストール

パーティション
HDDは60GBです。以下のようにパーティションを切りました。ズボラなので/boot以外は1パーティションです。ファイルシステム,マウント場所,容量,フォーマット
/dev/hda1,/boot,32MB,ext3
/dev/hda2,,1GB,
/dev/hda3,/home,55GB,ext3~

インストールパッケージ
我が家のサーバーとしての用途ではカスタムインストールを選択し、下記の通り必要なパッケージのみインストールしています。

Xwindow
Gnome
ノートPCツール
Emacs
ファイルサーバ
ネットワークワークステーション
インターネットサーバー
データベース
開発ツール
ドキュメント

blank_space
投稿者 たけのうち : 01:04 | コメント (0) | トラックバック

ハードウェア構成

液晶のバックライトが壊れてしまった古いノートPCをベースにHDDを換装して使っています。
CPU: Pentium II 366MHz
HDD: 60GB
メモリ: 288MB(32MB+256MB)
その他: CD-ROM, FDD

blank_space
投稿者 たけのうち : 01:03 | コメント (0) | トラックバック

ドメインの取得

トンガドメインを取っています。
$50/yearで長期契約割引があります。

blank_space
投稿者 たけのうち : 01:02 | コメント (0) | トラックバック

ネットワーク構成について

以前はルータ2段構成で間にDMZを作ってそこにサーバをおいて、

WAN --> ADSLモデム <---> ルータ1 <---> Linuxサーバ <---> ルータ2 <---> スイッチングHUB <---> クライアント(windows)

のように、サーバがクラックされてもクライアントがやられないようにしていた時もありましたが、サーバとクライアントのセキュリティ対策をきちんとやっておけば、個人レベルでそこまで凝る必要はないのではないかと思います。今は、サーバとクライアントは同じサブネット上に置いています。

WAN <---> ADSLモデム <---> ルータ <---> スイッチングHUB <---> Linuxサーバ、クライアント(windows)

blank_space
投稿者 たけのうち : 00:59 | コメント (0) | トラックバック

ディストリビューションの選択

同じLinuxといってもディストリビューションの選択は重要なポイントとなります。自宅サーバーを構築するにあたって、重視したポイントは、

(1)インストールした状態である程度のセキュリティが確保できること
Redhatでも5.xの頃は、インストールしただけの状態では危なくて世間の荒波にもませることはできませんでしたが、最近のディストリビューションはそれほど深刻に考えることはないのかもしれません。ですがsendmailなどは設定が複雑すぎて、ちゃんとやらないとセキュリティホールの宝庫になり得ますので、最初から苦労の少なそうなディストリビューションを選ぶようにしました。

(2)日々のメンテナンスが楽なこと
サーバを構築している時は、結構気になって、毎日errataなどを覗いているものですが、構築が一段落して安定運用の状態になると、忙しさにかまけて、ついセキュリティアップデートなどを怠りがちになってくるということがわかりました。サーバー管理が本業でない人間にとっては、アップデートなどのメンテナンスの楽ちん加減は重要なファクターであると思います。まぁ、どれでも良かったんですが、いろいろなディストリビューションを試してみてパッケージのアップデートにaptが使えること、デフォルト設定が好みに合うことでVineにしました。 現在のバージョンは2.6r4です。

blank_space
投稿者 たけのうち : 00:58 | コメント (0) | トラックバック