さくら VPS (CentOS 6.3) に LAMP を構築する - セキュリティ設定
- sudo の設定
管理者権限を使う方法として,ユーザー切り替えの su コマンドで root ユーザーになる方法があるが,- 権限の範囲が指定できない
- 管理者権限を使用したユーザーがわからない
などのセキュリティ上の問題があるため,sudo コマンドを使う事が推奨されている.
デフォルトでは sudo は root ユーザーのみが利用できる設定になっているため,先程設定した管理者グループ (wheel) で sudo が使えるように設定する.
[root@www****** ~]# visudo
visudo コマンドで開いた vi エディタで以下の行を探し,コメントアウトを解除する.
# %wheel ALL=(ALL) ALL ↓ %wheel ALL=(ALL) ALL
- su の設定
su コマンドも wheel のユーザーのみが使用できるように設定を変更しておく.[root@www****** ~]# vi /etc/login.defs
/etc/login.defs の最後の行に以下を追記.
(2013/06/06 追記: 投稿時は SU_WHEEL_ONLY yes としていましたが,現在はこの記述で OK.)SU_WHEEL_ONLY
- ssh のポート番号変更 (任意)
ssh のポート番号をデフォルト (22) のままにしておくと攻撃を受けることがあるため,ポート番号を変更しておく.[admin@www****** ~]$ sudo vi /etc/ssh/sshd_config
/etc/ssh/sshd_config を以下のように書き換える.(xxxxx は一般的に他のアプリケーションと重複しない 10000 ~ 65535 の任意のポート番号を設定)
#Port 22 ↓ Port xxxxx
ssh を再起動してログインを確認する.
[admin@www****** ~]$ sudo /etc/init.d/sshd restart sshd を停止中: [ OK ] sshd を起動中: [ OK ] [admin@www****** ~]$ exit logout Connection to XXX.XXX.XXX.XXX closed.
サーバーとの接続を閉じ,変更したポートからログイン.
$ ssh admin@XXX.XXX.XXX.XXX -p xxxxx (上で設定したポート番号)
- 公開鍵ログインの設定 (任意)
個人の重要なデータを保存するサーバーの場合,パスワードによる ssh ログインを有効にしておくとセキュリティ上に問題があるとされるため,公開鍵暗号方式に切り替える.一旦サーバーとの接続を切る.
[admin@www****** ~]# exit logout Connection to XXX.XXX.XXX.XXX closed.
ローカル側で秘密鍵と公開鍵を作成.
$ ssh-keygen -t rsa Enter file in which to save the key (/Users/name/.ssh/id_rsa): Enter Enter passphrase (empty for no passphrase): 任意のパスフレーズを設定 Enter same passphrase again: もう一回入力 Your identification has been saved in /Users/user/.ssh/id_rsa. Your public key has been saved in /Users/user/.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@PC-Name.local The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | | | | | | | | | | | | +-----------------+ $ cat ~/.ssh/id_rsa.pub ssh-rsa xxxxxxxx...xxxx user@PC-Name.local
~/.ssh/id_rsa.pub が作成されていることを確認.
次にサーバー側の設定.
先ほど作成した作業用のアカウントで ssh ログインし,公開鍵登録用の .ssh というディレクトリをホームディレクトリに作成,パーミッションを 700 に設定.$ ssh admin@XXX.XXX.XXX.XXX -p xxxxx [admin@www****** ~]$ cd ~ [admin@www****** ~]$ mkdir .ssh [admin@www****** ~]$ chmod 700 .ssh/ [admin@www****** ~]$ exit logout Connection to XXX.XXX.XXX.XXX closed.
一旦接続を閉じてローカルの公開鍵を scp コマンドを用いて公開鍵をサーバーにアップロード.
$ scp ~/.ssh/id_rsa.pub admin@XXX.XXX.XXX.XXX:~/.ssh/authorized_keys id_rsa.pub 100% 408 0.4KB/s 00:00
作業用ユーザーでサーバーにログインし,登録した鍵のファイルのパーミッションを 600 に設定.
$ ssh admin@XXX.XXX.XXX.XXX -p xxxxx [admin@www****** ~]$ chmod 600 .ssh/authorized_keys
ssh の設定を公開鍵認証方式に切り替える.
[admin@www****** ~]$ sudo vi /etc/ssh/sshd_config We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for admin:
vi エディタで /etc/ssh/sshd_config を開き,以下のように書き換える.
#PermitRootLogin yes ↓ PermitRootLogin no # rootでのログインを禁止
#PasswordAuthentication yes ↓ PasswordAuthentication no # パスワード認証を禁止
#PermitEmptyPasswords no ↓ PermitEmptyPasswords no # 空のパスワードを禁止
UsePAM yes ↓ UsePAM no # PAMのパスワード認証を禁止
ssh を再起動させて設定を適用.
[admin@www****** ~]$ sudo /etc/init.d/sshd restart [sudo] password for admin: sshd を停止中: [ OK ] sshd を起動中: [ OK ]
これでリモートコンソールからと秘密鍵を持った PC から作業用ユーザーでログインすることしかできなくなる.手順にミスがあると ssh でのログインが出来なくなるため注意.
念のためログインできることを確認.[admin@www****** ~]$ exit logout Connection to XXX.XXX.XXX.XXX closed.
一旦サーバーとの接続を閉じ,ローカルから再度 ssh.
$ ssh admin@XXX.XXX.XXX.XXX -p xxxxx
※ ここでログイン出来ない場合はさくら VPS の管理メニューのリモートコンソールからローカルの公開鍵 (~/.ssh/id_rsa.pub) とアップロードした公開鍵 (/home/admin/.ssh/authorized_keys) を比較して同じことを確認する.違っていればコピペするなり編集.
- iptables によるパケットフィルタ設定
パケットフィルタリングは,IPアドレスやポート番号等の情報を元に通信データにフィルターをかけて,通過・遮断・転送・記録する機能.これを設定することによって無駄なトラフィックを減らしたり,セキュリティを向上させることができる.[admin@www****** ~]$ sudo vi /etc/sysconfig/iptables
/etc/sysconfig/ に iptables というファイルを作成し,以下の内容を書き込む.
(今回は SSH の使用を許可する場合の設定を記述した.実際は各自の用途に合わせて設定.)*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :FIREWALL - [0:0] -A INPUT -j FIREWALL -A FORWARD -j FIREWALL -A FIREWALL -i lo -j ACCEPT -A FIREWALL -p icmp --icmp-type any -j ACCEPT -A FIREWALL -p 50 -j ACCEPT -A FIREWALL -p 51 -j ACCEPT -A FIREWALL -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A FIREWALL -p udp -m udp --dport 631 -j ACCEPT -A FIREWALL -p tcp -m tcp --dport 631 -j ACCEPT -A FIREWALL -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH (xxxxx は自分で指定したポート番号) -A FIREWALL -m state --state NEW -m tcp -p tcp --dport xxxxx -j ACCEPT -A FIREWALL -j REJECT --reject-with icmp-host-prohibited COMMIT
設定した iptables を適用させ,フィルタリングの設定を確認する.
[admin@www****** ~]$ sudo /etc/rc.d/init.d/iptables restart iptables: ファイアウォールルールを適用中: [ OK ] [admin@www****** ~]$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination FIREWALL all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination FIREWALL all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain FIREWALL (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ACCEPT udp -- anywhere anywhere udp dpt:ipp ACCEPT tcp -- anywhere anywhere tcp dpt:ipp ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:10022 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited