Smily Books Blog 2023年7月更新中

Linuxサーバパーフェクトセキュリティ 阿部ひろき(ソフトバンクパブリッシング)

1.セキュリティ監査の基本
(1)tracerouteによる経路確認
・デフォルトではUDPパケット送信なので、ブロックされる場合がある。
 その時は-lオプションをつけてICMPエコーリクエストで確認する。
・既定では3回試行するため、応答時間は3つ表示される。
(2)nslookupによるクエリ
・引数なしで起動し、対話モードで入り、set allで設定項目を確認する。
・ドメイン配下のサーバ(例えばWebサーバ)の確認を行う。
 domain=以降にある内容(デフォルトドメイン)の入力は不要。
 通常wwwと入力するとWebサーバのIPアドレスが確認できる。
・ls -d (デフォルトドメイン)でドメイン情報一覧を取得する。
・以下のコマンドでbindのバージョンを確認する。
 set type=TXT
set class=CHAOS
version.bind
(3)フットプリンティングについて
・(1)、(2)以外の手法として以下のWhoisJPNIC Whois Gateway)から情報入手する。

 http://whois.nic.ad.jp/cgi-bin/whois_gw
(4)psコマンドでサービス確認
・プロセスを階層表示するにはfより-Hオプションが良い。(例えばps ax -Hで確認)
 PIDが1のinitプロセスからの階層表示が確認できる。
(5)netstatコマンドでポート確認
・netstat -rで経路情報も確認できる。
・サーバの状態を確認するには-apeオプションが最適(Unixの場合)。

2.インターネット共通のセキュリティ
(1)Telnetの制限
・ログインメッセージの制御
 /etc/issue.netにあるウェルカム・メッセージ(OS名やバージョン名)をコメントアウトする。
・ポートの変更
 /etc/servicesの既定の23/tcpを変更(例えば1023/tcp)
 接続する場合、ポート番号の指定が必要となる(telnet IPアドレス ポート番号)。
・rootログインの制限
 /etc/securetty記述の端末はrootでログインできる。
 ttyp0〜3はtelnet端末であるため、ログインさせたくなければ削除する。
 このとき、/etc/pam.d/loginに以下の行が有効であることも確認する。

  auth required /lib/security/pam_securetty.so

・rootになれるユーザを制限する。
 以下の通り設定して、wheelグループユーザのみsuコマンド可能とする。
 ○/etc/groupのwheel行に指定ユーザ追加
 ○/etc/pam.d/suに以下のように記述

 auth required /lib/security/pam_wheel.so use_uid group=wheel

(2)サーバアプリケーションの導入
MD5によるチェックサムで整合性を確認する
 配付元であらかじめ用意されたMD5チェックサム(例えばapache.tar.gz.md5ファイル)の内容と
 ダウンロードファイルをmd5sumコマンドでチェックしたMD5チェックサムの内容を比較する。

3.Webサーバのセキュリティ
(1)Apacheのセキュリティの基本
・デフォルトユーザ/グループであるnobodyでログインできない設定とする。
 /etc/passwdのnobodyの行に/sbin/nologin追加
・nobodyがsuからrootになれない設定とする。
(rootになれるグループを設定し、そこにnobodyは含めない。)
・Webブラウザにインデックスを表示させないようにする。
 (=ドキュメントルートディレクトリの読み取り権限を制御する。)

 chmod 311 /usr/local/apache/htdocs

 これによりファイル名指定のないアクセスがあると、Webブラウザに「Forbidden」と表示される。
・httpヘッダ情報を制限する。
 以下のようにディレクティブを変更する。

 ServerSignature Off
 ServerTokens ProductOnly

・エラーページを変更する。
 以下のようなディレクティブを追加する。

 ErrorDocument ステータスコード アクション

 アクションに直接メッセージ記述、表示ファイル名指定などして設定する。
 もしくは別のURLにリダイレクトさせる事も可能。

4.FTPサーバのセキュリティ
(1)/etc/ftpaccessで設定する。
・認証試行回数(loginfails:既定値5)
・コマンド制限(コマンド名 [yes|no] タイプ)
 タイプにno guest、no anonymousとして制限する。
・ログインメッセージ制御(greeting terseあるいはtext 指定したメッセージ)
・ファイルダウンロード制限(noretrieve 指定ファイル名)
・ファイルアップロード制限(upload 指定ディレクトリ * no)
・端末接続制限(deny 接続元アドレス メッセージファイル名)

(2)etc/ftpusersで設定する。
ユーザ制限(拒否アカウント記述)

(3)etc/ftphostsで設定する。
接続元での接続制限

5.メールサーバのセキュリティ
(1)スパムメールについて
・不正中継を許可しているメールサーバデータベース
 http://www.ordb.org/

6.DNSサーバのセキュリティ
(1)DNSサーバに許可するのは以下の2つのみ。
・ネットワーク内部からドメイン検索要求を受け、上位のDNSサーバに問合せ
・他のDNSサーバから問合せを受けた時に必要なゾーン情報を提供

(2)ゾーン転送はセカンダリサーバのみとする。
allow-transfer {セカンダリサーバIPアドレス; localhost; }

(3)問合せ作業を行うのはネットワーク内部とローカルホストだけとする。
allow-query{192.168.0.0/24; localhost; }

(4)再帰検索はネットワーク内部とローカルホストだけとする。
allow-recursion{192.168.0.0/24; localhost; }

7.セキュリティ情報の信頼性
(1)米国の非営利団体MITRECorp.運営のCVE(Common Vulnerabilities&Exposures)

http://cve.mitre.org/

上記サイトが決定した脆弱性の名前や詳細が業界標準となる。

IDは

・CVE-YYYY-XXXX
・CAN-YYYY-XXXX

の何れかでCVEが脆弱性として認定、CANが脆弱性の可能性有り(Candidates)

※以下の各ツールについては割愛

 nmap(ポートスキャン)
 tcpdump(ネットワークトラフィック監視)
 iptables(ルーティング)
 tcp wrapper(サービス接続制御)
 open ssh(暗号通信)
 sftp(暗号化ftp
 sendmailSMTP
 qpopper(POP)
 snort(IDSツール)
 swatch(ファイル監視)
 tripwire(ファイル整合性検知)