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
#%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
ログインできなくなるとやたら反応の遅い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