server_top


2004年04月02日

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

/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) | トラックバック