[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
操作用ユーザ追加
useadd hoge
新規ユーザにパスワード追加
passwd ユーザ名
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の設定
TeraTermでSSH接続用の鍵を作る
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
- iptablesの設定の確認
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
apacheのインストール
# yum update -y install httpd
セキュリティを向上させる
- 編集対象
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