セキュリティ


概要

サーバ用途として設置しているからには、セキュリティには気を付けたいところ。
実際問題どれほどのアタックがあるかは別として、やっぱり注意しておきましょう。
というか、ただの自己満足って感じがしますが。(^^;)
対策は山のようにありますので、的を絞ってとりあえずってところを中心。
ここでは外部からの攻撃を防ぐことを主眼に置いておきます。

※ここであげた内容が全てではないですし、最良の解決策でない可能性もあります。


inetd.conf

まずは余計なサービスを停止することから始めます。
設定されていても使わないようなサービスとかは極力止めるようにしましょう。
サービスの起動方法の一つとして inetd という物があって、複数のサービスを管理してます。
設定ファイルは/etc/inetd.confです。
とりあえずこのファイルを開いてみれば大体のことはわかるでしょう。

必要と思うのは
ftp
telnet
たったこれだけだと思います。(もちろんftpやtelnetも使わないなら不要)
loginとかshellなんて名前的には必要そうですけど、いりません。
必要な人だけ設定しておけばいいでしょう。
メールサーバにしてるなら、これにpop3が加わる程度でしょう。

他の物は全部コメントアウトしちゃいましょう。
必要になったときに開けばいいのです。

でもって書き換えたら設定を反映します。(リブートでもいいけど。。。)
# ps aux | grep inetd
# kill -HUP inetdのpid


アクセス元制限

余計なところからのアクセスを制限しましょう。
本当は inetd ではなく、xinetd を導入した方が良いのですが、ここでは inetd の場合で。
正確には tcp wrapper (/usr/sbin/tcpd) の設定ってことになります。
inetd.confから /usr/sbin/tcpd を指定してあるサービスがこの設定で有効になります。
設定ファイルは/etc/hosts.deny/etc/hosts.allowです。

/etc/hosts.deny 何にも編集する必要ありません。
ALL : ALL EXCEPT LOCAL
/etc/hosts.allow 必要に応じて編集します。(これは例です)
ALL : LOCAL
in.telnetd : 192.168.0.0/255.255.255.0
in.ftpd : 192.168.0.0/255.255.255.0
swat : 192.168.0.0/255.255.255.0
まず、hosts.denyで、とりあえず何でもかんでも禁止に設定(コンソールをのぞく)
次に hosts.allowで必要なサービスだけ、ローカルのネットワーク(IPアドレスの範囲)で許可。

swatはファイルサーバとして使う場合の管理ツール。あんまりネットワークで許可するのは良くないかもしれません。
上の例を使うのではなく、特定の管理マシンだけ許可するとかのほうがいいでしょう。
もちろんSWAT自身のglobal設定で hosts allow もやっておきましょうね。

このファイルは更新するだけで即有効になります。

※swatはマニュアル通りだと tcpd を使わないので、inetd.conf には以下のように設定
2重にアクセス制御することになって無意味かなぁ?
/etc/inetd.conf
swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/local/samba/bin/swat
inetdの設定反映(kill -HUP inetdのpid)も忘れずに。


anonymous FTP

anonymous FTP なんてあんまり使うこと無いんじゃないでしょうかね。
必要なら別として、よくわからんとか、使わんって場合は閉じちゃいましょう。
設定ファイルは/etc/ftpaccessです。
先頭の方に class remote って行があるので、そこから anonymous を消します。
他のところの anonymous って文字はいじらなくても平気です。ログインできないので。

なお/etc/ftpusersってファイルもあります。
ここでftpで入ることをユーザ単位(/etc/ftpgroupsはグループ単位)で指定できます。
ここにanonymousって登録しておいても上記と同様anonymous ftpが使用できなくなります。

このファイルは更新するだけで即有効になります。
※ftpaccessファイルが有効になるのは /etc/inetd.conf で in.ftpd に -a オプションがある場合です。


rootのログイン

ネットワークから直接rootでログインできちゃうのは問題ですよね。
一般ユーザで入った後、"su - root" するのが普通でしょう。
で、rootでログインできる範囲を設定するのが/etc/securettyです。
/etc/securetty これでいいでしょ。
console
tty1
tty2
tty3
tty4
tty5
tty6


ログイン設定

設定ファイル /etc/login.defs でログインプロンプトの時の動作を定義します。
パスワード間違いの回数とか、間違えたときにしばらく時間をおく秒数とか、ログ取るとか。
必要に応じて変更しましょう。
面倒なので詳細は省略(^^;)


自動起動サービス

inetd以外に、単独でデーモン化(常駐)するものを整理しましょう。
設定は/etc/rc.d/ディレクトリの中のシェル群がそうです。
rc.M
メールサーバにしないなら sendmail は必要ありません。コメントアウト。
メールサーバにするんでも、sendmailよりか qmail 使った方がいいよね。
大体は rc.* を呼び出す形になってますので、他はいいでしょう。

rc.inet1
セキュリティ的なことで編集の必要は無いでしょう。
PCMCIAのネットワーク設定側が有効なので、こっちはおまけみたいなもんです。
IPADDRとか全部コメントアウトされてるでしょ。

rc.inet2
このファイルは非常に大事です。こいつから不要なサービスをコメントアウトします。
lpdUNIX経由でプリンタを使わないなら lpd は不要というわけで、IN_SERV="" に変更。
syslogdこれはシステムのロギング(設定は/etc/syslog.conf)するものなので必要。
inetd普通は必要です。xinetdに置き換えたらな不要になりますが。
sshdtelnetなんか解放するよりsshの方がいいでしょう。外に解放しないなら不要かも。
namedローカルでネームサーバをあげないなら不要。
routedルーティングプロトコル関連。特別ルータとのやりとでとかいう場合をのぞいて不要。
rwhodリモートのwho。不要。
ypbindNIS関連。不要ってことにしておきましょう。
rpc.portmap
rpc.mountd
rpc.nfsd
NFS使わないなら全く不要。

rc.httpd
Webサーバにしないなら rc.httpd は削除かリネームしましょう。
その前に標準だと rc.httpd って無かったっけ?

rc.samba
ファイルサーバにしないなら rc.samba は削除かリネームしましょう。
その前に標準だと rc.samba って無かったっけ?

rc.atalk
MacとAppletalkを使って通信しないなら rc.atalk は削除かリネームしましょう。
その前に標準だと rc.atalk って無かったっけ?

rc.pcmcia
これがなきゃPCMCIAのネットワークも使えないし、サーバで使うなら必須。
セキュリティ的な編集は特にないでしょう。

rc.serial
シリアルポートを使うならもしかしたら必要なのかもしれない。
設定気を付けないと起動時にハングアップなんていう悲しい自体になるかも。
あと、rc.S で起動がコメントアウトされてる可能性があるので必要ならこっちもチェック

rc.local
まあ必要に応じてってとこでしょうか。内容は環境によってだいぶ違いそうなんで省略。
一ついえるのはよくわからないのは不要ってスタンスでいいってことです。

その他
中を見て判断して(^^;)
基本的にいじらなくても大丈夫だと思う。

以上の設定が完了したら、起動しないように設定したプロセスを全て kill しましょう。
面倒だから、動作テストも兼ねて shutdown -r してリブートする方がいいかも。
ps aux でプロセス見るとかなり少なくなっていることでしょう。
Apacheのプロセスとか減らしていれば1画面に収まる程度かもしれません。


telnet接続のバージョン表示

telnetで接続したとき"Welcome to Linux 2.x.x"とか出ます。
サーバのOSがわかっちゃうと、そのセキュリティホールを付いてくるための情報源になってしまいます。
不要な情報は与えない方がいいでしょう。

設定は再び/etc/inetd.confになります。
"in.telnetd" のところを "in.telnetd -h" という風に -h オプションを付け加えてください。

ネットワークから接続時に、/etc/issue.netが使用されます。
ローカルは /etc/issue が使われて、このファイルは rc.S で自動生成。
-h オプションを付けると、このissue.netを使わなくなります。

この設定しても "login:" の前にホスト名が残ってしまいますね。。。
ホスト名も出ないようにするには Plamo Linux の場合どうしたらいいんだろう?

知っている人がいましたら教えてください。


ftp接続のバージョン表示

ftp接続したときにホスト名やftpdのバージョンを表示してしまいます。
バージョンを出しちゃったら対応したセキュリティホールがわかってしまいますよね。
というわけで、メッセージはシンプルにしておきましょう。
設定ファイルは再び/etc/ftpaccessです。

/etc/ftpaccess 1行追加します。
greeting terse


他なんかあったかなぁ。。。


戻る