daybreaksnow's diary

私を私と呼びたい

[Linux]さくらVPSのCentOSにApacheをインストール

Redmineを立てたかったので、まずはAapacheを動かす。


やったこと

参考:
基本設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル
SERIES | アカベコマイリ

OSのバージョンを確認
  • コマンド
cat /proc/version
cat /etc/redhat-release 
  • 結果
Linux version 2.6.32-431.3.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Jan 3 21:39:27 UTC 2014

CentOS release 6.5 (Final)
rootのパスワードをデフォルトのものから変更
passwd
パッケージをアップデート
 yum update
UIの日本語化
  • 編集対象
 vi /etc/sysconfig/i18n
  • 編集内容
 LANG=ja_JP.UTF-8

操作用ユーザ追加

useadd hoge
新規ユーザにパスワード追加
passwd ユーザ名
新規ユーザにwheel権限付与

wheelとは:http://itpro.nikkeibp.co.jp/word/page/10005502/

usermod -G wheel ユーザ名
suをwheelグループ内のユーザのみ可能とする。
  • 編集対象
vim /etc/pam.d/su
  • 修正内容

以下のコメントを解除

#auth required pam_wheel.so use_uid
sudoを有効に
  • 編集対象
visudo
  • 修正内容

以下のコメントを解除

# %wheel ALL=(ALL) ALL


ここから http://akabeko.me/blog/2012/04/revps-01-prepare-ssh-key/#revps-01-04 を参考

SSHの設定

TeraTermSSH接続用の鍵を作る

1.TeraTermを起動。
2.メニューバーのSetup→SSH KeyGenerator…
 鍵の種類:RSA
 ビット数:2048
 パスフレーズを入力し、「Save public key」「Save private key」ボタンを実行、保存。それぞれ「id_rsa.pub」「id_rsa」で保存する。
3.id_rsa.pubをサーバに転送。ログイン済みのTeraTermにドラッグ&ドロップ→SCPで転送できる。
転送したファイルはログインユーザのホームディレクトリ直下に置かれる
公開鍵のパーミッション設定

この鍵でログインしたいユーザのhomeディレクトリに移動する。
rootでログインしたくないので、最初に作ったユーザのhomeディレクトリにする。

mkdir .ssh
chmod 700 .ssh
mv id_rsa.pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
SSHでのパスワードログインを無効化

パスワードだとブルートフォースとか怖いので、公開鍵でのみログイン可能とする。

  • 編集対象
vi /etc/ssh/sshd_config
  • 修正内容

以下の値をyesからnoに

PermitRootLogin no (rootのログイン)
PasswordAuthentication no (パスワードによるログイン)
sshを再起動
service sshd restart

なお、SSHのサービスの実体は /etc/rc.d/init.d/sshd にあり、以下のコマンドでも実行可能。

/etc/rc.d/init.d/sshd restart

ここから http://akabeko.me/blog/2012/04/revps-02-sudo-ssh-port/ を参考

SSHのポート変更

デフォルトの22だとアタックされやすいので、変えておく

  • 編集対象
sudo vi /etc/ssh/sshd_config
  • 編集内容

以下のコメントを外して、適当な数字にする。

#Port 22
sshを再起動
service sshd restart

これでSSHで22番で接続しようとすると、接続が拒否されました、と言われるようになる。

ここから http://akabeko.me/blog/2012/04/revps-03-iptables-logwatch/ を参考

iptablesを設定

SSH と HTTP 用の接続のみを許可する。

  • 編集対象(新規ファイルになる)
sudo vi /etc/sysconfig/iptables
  • 修正内容

以下をコピペ。この定義の元サイトはこちら。http://www.nina.jp/server/redhat/iptables/iptables.html
SSHのポート番号については適宜変更すること。(★の箇所)

# パケットフィルタリングでは、filterテーブルを使う
*filter
### :チェーン名 デフォルトポリシー [パケットカウント:バイトカウント]
# デフォルトポリシーをACCEPTにすると明示されないパケットは通過され、DROPにすると明示されないパケットは破棄される
# INPUTチェーン、送信先がローカルホストのパケットに適用される
:INPUT   ACCEPT [0:0]
# FORWARDチェーン、ローカルホストを経由するパケットに適用される
:FORWARD ACCEPT [0:0]
# OUTPUTチェーン、送信元がローカルホストのパケットに適用
:OUTPUT  ACCEPT [0:0]
# ユーザ定義チェーン
:RH-Firewall-1-INPUT - [0:0]

#ルール。
#-A チェーン名 マッチング条件 -j ターゲット
# ローカルホスト宛のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック
-A INPUT -j RH-Firewall-1-INPUT

# ローカルホスト経由のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック
-A FORWARD -j RH-Firewall-1-INPUT

# 受信インタフェースが"lo"(ループバック)ならば、通信を許可
-A RH-Firewall-1-INPUT -i lo -j ACCEPT

# プロトコルが"icmp"ならば、通信を許可
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

# プロトコル番号が"50"(ESP)ならば、通信を許可
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT

# プロトコル番号が"51"(AH)ならば、通信を許可
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

# プロトコルが"udp"かつ送信先ポートが"5353"(Multicast DNS)かつ送信先アドレスが"224.0.0.251"ならば、通信を許可
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

# プロトコルが"udp"かつ送信先ポートが"631"(Internet Printing Protocol)ならば、通信を許可
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT

# プロトコルが"tcp"かつ送信先ポートが"631"(Internet Printing Protocol)ならば、通信を許可
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT


# 接続状態が"ESTABLISHED"または"RELATED"ならば、通信を許可
# これがないと通信ができない!
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# SSH, HTTP
# ★接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"22"ならば、通信を許可
# SSHサーバへの接続要求パケット
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# HTTPサーバへの接続要求パケット
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

# ここまでのチェックでひっかからなかったパケットは、ICMPパケット"host-prohibited"を返して接続拒否
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

ここでコメント行の先頭に空白があったり、空行の先頭にスペースがあるとエラーとなる。

  • エラー出力例
iptables: ファイアウォールルールを適用中: iptables-restore v1.4.7: no command specified
Error occurred at line: 11
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
                                                           [失敗]
iptablesの再起動
sudo /etc/rc.d/init.d/iptables restart
sudo iptables -L

修正前

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

修正後

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (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:22(SSHのポート番号)
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited


ここから http://akabeko.me/blog/2012/04/revps-04-apache/ を参考

apacheのインストール

# yum update -y install httpd
バージョンの確認
  • コマンド
httpd -v
  • 実行結果
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28
セキュリティを向上させる
  • 編集対象
vi /etc/httpd/conf/httpd.conf
  • 修正内容
ServerTokens OSをServerTokens Prodに(サーバの情報をどれだけクライアントに返すか)
Options Indexes FollowSymLinksを、-Indexesとハイフンを付けて無効に(ファイル一覧ページが自動生成されないように)
ServerSignature OnをOffに(internal server error時にサーバの情報を出すかどうか)
  • 編集対象2
vi /etc/httpd/conf/welcome.conf
  • 修正内容

全てコメントアウト(行頭に#)する(ウェルカムページを非表示に。ウェルカムページにはOS名まで出てしまっている)

httpd.confの文法チェック
# apachectl configtest
apacheの起動
# service httpd start

これでブラウザに対し、接続しているさくらのサーバのIPアドレスを入力すれば、apacheのデフォルトページが表示される。

apache自動起動ON
chkconfig httpd on