Linuxサーバをセキュアな環境にする
Linuxサーバでセキュアな設定についてまとめてみました。 OSはCentOS6なので古いですが。。 Wordpress周りはまだ調べられてないので どこかでまとめたい。
アドレススキャン対策
ブロードキャスト宛のICMP Echo Requestに対して回答しない
vim /etc/sysctl.conf net.ipv4.icmp_echo_ignore_broadcasts=1
OSやバージョンの確認
# yum -y install nmap # nmap -O example.com
telnet example.com 80
まずはこれぐらいはやっておきたいセキュアな設定
- OSはminimalで必要最小限でインストールする
- システム管理者用のユーザを作成して利用する
yum -y update
でパッケージを最新のものを利用する- 不要なサービスは停止する
- rootユーザのログインを禁止する
- コンソールからのrootログイン禁止
# echo > /etc/securetty
- SSHでのrootログイン禁止
# vim /etc/ssh/ssh_config #PermitRootLogin yes
↓
PermitRootLogin no
- SSHを受け付けるPort番号を変更する
# vim /etc/ssh/ssh_config Ports 20022
OSのセキュリティ
- GRUBのパスワード設定
grub-md5-crypt
を実行して出力内容を/boot/grub/grub.conf
に書くコム- title で始まる行よりも前に
password --md5 パスワード
の書式で記述する
- 一般ユーザのログイン管理
- 不要なユーザのロック
usermod -L hoge
- 不要なユーザのロック解除
usermod -U hoge
- シェルログインが不要なユーザの作成
useradd -s /sbin/nologon hoge
- hogeユーザのログインシェルを
/sbin/nologin
に設定usermod -s /sbin/nologin hoge
- 不要なユーザのロック
- コンソールからのrootログイン禁止
echo > /etc/securetty
- su コマンドを使えるユーザを制限
/etc/pam.d/su
ファイルをrootユーザで開き、 「auth required pam_wheel.so use_uid」という行を追加する- これでwheelグループに追加されたユーザのみがsuコマンドを利用できるようになる
usermod -G wheel hoge
でグループに所属させることが可能
- sudoコマンドの利用設定
visudo
を実行し/etc/sudoers
を開くhoge ALL=(ALL) ALL
ですべてのroot権限が必要なコマンドの実行を許可する
- Clam AntiVirusのインストール
メールサーバのセキュリティ
- ユーザログインの禁止
- メールサーバを利用するだけのユーザならログインする必要ないのでデフォルトシェルを無効にしておく
useradd -s /sbin/nologin newuser
main.cfの主な設定
- myhostname
- ホスト名をFQDNで指定
myhostname = windsor.example.com
- mydomain
- メールサーバのドメイン名を指定
mydomain = example.com
- myorigin
- メールアドレスの[@]以降が指定されなかった時、デフォルトで保管する値を指定する
myorigin = $mydomain
- inet_interfaces
- mydestination
- mynetworks
- 中継を許可するホストの存在する内部ネットワークアドレスを指定
- ここに指定したアドレスからのメールは無条件で中継される
mynetworks = 192.168.11.0/24, 127.0.0.1/8
- smtpd_banner
- SMTPの応答コードに続いて出力されるバナー情報を指定
- できるだけ情報は少ないほうがいいが、
$myhostname
は削除しないようにすること
- disabled_vrfy_command
- STMPのVRFYコマンドを禁止にする
- VRFYコマンドはメールサーバにどのようなアカウントがあるのかを知られる可能性がある
disable_vrfy_command = yes
- smtpd_helo_required
- smtpd_recipient_restrictions
- 通常は末尾にrejectを指定する
- smtpd_sender_restictions
- メールの送信元アドレスをチェックし、受信を拒否するかどうかを判断
設定の反映
service postfix reload
デフォルト値から変更されている項目のみを表示
postconf -n
FTPサーバのセキュリティ
CentOSではセキュアなvsftpdを使う
vsftpd.confの設定
- バナーの表示
- FTP接続確立時のバナーメッセージはftpd_bannerディレクティブで設定
ftpd_banner='FTP Login
- バナーメッセージを格納したファイルを指定するbanner_fileによって無視せれるので注意
- TCP Wrapperの利用有無
tcp_wraller=Yes
tcp_wraller=No
- ユーザリストファイル
userlist_file=/etc/vsftpd/user_list userlist_enable=YES userlist_deny=YES
- ホワイトリストの場合
userlist_file=/etc/vsftpd/user_list userlist_enable=YES userlist_deny=NO
/etc/vsftpd/user_list
にはFTP接続にかかわるユーザを登録。userlist_enable=NO
となっている場合/etc/vsftpd/user_list
内に指定されたユーザのみFTP許可されるが、/etc/vsftpd/ftpusers
にユーザ名が指定されている場合はFTPログインを禁止されてしまう- ファイルのアップロード
- FTPサーバをファイル配布用にするならアップロードは不要
write_enable=NO
でアップロードが禁止になる
- ユーザの設定
- ホームディレクトリ以外に移動できないように設定
chroot_local_user=YES #chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list
- 一部のユーザにはホームディレクトリ以外に移動できないように設定
chroot_list_enable=YES
と設定して、chroot_list
にユーザを列挙する
chroot_local_user=YES chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list
- ホームディレクトリ配下のFTPログイン用のサブディレクトリにログインするようにする
- 匿名FTPを許可の有無
- デフォルトでは有効になっている
anonymous_enable=YES
- 匿名FTPを使ってファイル配布したい場合は、匿名アカウントでのファイルアップロードを禁止しておく
anon_upload_enable=NO
write_enbale=NO
ならanon_upload_enable=YES
でもファイルのアップロードはできない
- FTPSを使う
- 証明書と秘密鍵をまとめてpemファイルを作る
cd /etc/pki/tls/certs cp mycerts.crt mycerts.pem cat mycerts.key >> mycerts.pem
- vsftpd.confに以下の行を追加
ssl_enable=YES #SSLの有効化 rsa_cert_file=/etc/pki/tls/certs/mycerts.pem #サーバ証明書秘密鍵のパス
force_local_logins_ssl=NO #FTPログイン時にSSL接続を強制しないように設定 force_local_date_ssl=NO #FTP転送時にSSL接続を強制しないように設定
- vsftpdのログ
- デフォルトでは
/var/log/xferlog
にファイル転送に関するログが記録される
- デフォルトでは
xferlog_enable=YES xferlog_std_format=YES
- ファイル転送のログに加えて、サーバへの接続に関するログも出力されるようにする
xferlog_std_format=NO vsftpd_log_file=/var/log/vsftpd.log
- syslogへ出力するようにもできる
syslog_enable=YES
安全なSSHサーバの設定
/etc/ssh/sshd_config
の設定
- Portの変更
Port 20022 #portの待受けを22番以外にする
- Protocolのバージョンを2にする
Protocol 2
- rootログインを許可しない
PermitRootLogin no
- パスワード認証を許可しない
PasswordAuthentication no
- ログイン認証認証の失敗を許容できる回数を変更
MaxAuthTries 3