Friday 10 February 2012

[LAMP]さくらVPSセキュリティのために最初にやること

共有サーバーからVPSに乗り換えるにあたり、
LAMP環境の構築過程をメモしながら進めていきます
まずはLAMP環境と関係ないセキュリティ関連まとめ


やることの全体像
・ユーザー権限の設定
・公開鍵による認証に変更
・denyhostの導入
・ファイアウォール設定




ざっくりとユーザー権限関連の設定

とりあえずさくらのVPSコントロールパネルにログインし、VPSサーバーを起動

最初にログイン用のユーザーを作成し、root権限でのログインを禁止します
その後ssh認証を禁止し、公開鍵での認証に変更します

ターミナルでssh接続
$ ssh -l root [IP]
警告の後yesを入力→パスワードを入力でログイン

まずは「passwd」でrootのパスワードをデフォルトから変更
# passwd
Changing password for user root.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
新規の入力、確認の入力で完了

「useradd」で作業用アカウントを作成「passwd」でパスワード設定
# useradd hoge
# passwd hoge
Changing password for user hoge.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.

「usermod -G wheel」で追加したユーザーをwheelグループに設定
# usermod -G wheel hoge

viで"su"を編集
# vi /etc/pam.d/su
#auth           required        pam_wheel.so use_uid
このコメントを外す 

「visudo」でsudoの設定を変更
# visudo
## Allows people in group wheel to run all commands
#%wheel  ALL=(ALL)       ALL
↑下の行のコメントを外す

一旦接続を切って、今作ったアカウントで接続してみる。成功

新規ユーザーでコマンドのパスを通す
$ vi .bash_profile
/bash_profileを編集する
これの下に
# User specific environment and startup programs

PATH=$PATH:$HOME/bin
これを追加して保存する
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin
最後にこれで反映
$ source ~/.bash_profile



続いて公開鍵暗号方式による認証の設定

キーのペアを作成し、公開鍵をサーバーにコピーする
「ssh-keygen」でキーのペアを作成
$ ssh-keygen
Generating public/private rsa key pair.
キーの名前を入れる。そのままでよければそのまま。その後パスフレーズを入れる
Enter file in which to save the key (/Users/RM/.ssh/id_rsa): hoge
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in hoge.
Your public key has been saved in hoge.pub.

次に公開鍵"hoge.pub"の内容をサーバー側にアップ
ディレクトリを作成
$ mkdir -p ~/.ssh
パーミッションを700に設定
$ chmod 700 ~/.ssh
autorized_keyを作成し開き、hoge.pubの内容をコピー&ペースト
$ vi ~/.ssh/authorized_keys
authorized_keysのパーミッションを変更
$ chmod 600 ~/.ssh/authorized_keys
※この過程でパーミッション変更をしないと後で
Permission denied (publickey,gssapi-with-mic)のエラーの原因になります

ここで公開鍵認証での接続がどうしてもうまくいかない…
ログインできなくなるとやたら反応の遅いVPSコントロールパネル内からの操作になるので
パスワード接続をいったん可にして試行錯誤…


最終的にはauthorized_keysがただしくコピペできてなかったというオチ
時間返して!
これは難関だと思い公開鍵暗号方式の認証用エントリまで書きました




続いてdenyhostの導入


定期的にログをチェックして、接続失敗しているipを自動的に拒否してくれます


epelリポジトリを登録していない場合はまず登録します
方法はこちらの記事を参照


続いてインストール
$ sudo yum -y --enablerepo=epel install denyhosts


完了したら起動し、自動機同設定を行います
起動

$ sudo /etc/init.d/denyhosts start
starting DenyHosts:    /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf
自動起動設定
$ sudo /sbin/chkconfig denyhosts on

これで自動的に接続失敗を繰り返すipをはじいてくれます
常に許可したいipがある場合は下記に記載します
$ sudo vim /var/lib/denyhosts/allowed-hosts


最後にファイアウォールの設定

iptablesを設定します
さくらVPSだとデフォルトでインストールされています

まずは初期設定を見ておくといいと思います
$ sudo iptables -L
何も設定されていない状態です

では設定ファイルを記述します
このファイルは新規作成になります
$ sudo vi /etc/sysconfig/iptables

webサーバー用にSSH,ftp,http,httpsをあける設定は下記のように記述します
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
 
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# HTTP, FTP1, FTP2, SSH
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22    -j ACCEPT
 
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
 
COMMIT

※sshのポートを変更している場合は最後の22を設定通りに変更します

これで再起動すれば完了
$ sudo /etc/rc.d/init.d/iptables restart
設定の確認
$ sudo iptables -L

これでいったん完了!
結構さくさく進みますが、各部の詳細の理解を進めたいところです

No comments:

Post a Comment