動かざることバグの如し

近づきたいよ 君の理想に

ServersMan@VPS&Ubuntuの初期セットアップ 改

最初はrootでログインできる。パスワードはメールに記載されてる。

ユーザー初期設定

まずはともあれrootのパスワード変更

passwd

新しいユーザーを作成

sudo adduser username

途中で色々聞いてくるけど特に設定する必要なければ空白でEnter

追加したユーザーに管理者権限を与える

sudo vi /etc/group

21行目辺りのsudoに追記(2個目以降は,で区切る)以下のようになるはず

sudo:x:27:username

unable to resolve host対策

これでsudoできるが、実行しようとすると、「unable to resolve host *」というエラーが出る。が、sudoコマンド自体は正常に実行される。けどこれ逐一出るとよろしくないので対策しておく。

ホスト名を調べる

hostname

そのホスト名をホストファイルに追記する

sudo vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
127.0.1.1 dti-vps-srvxx     ←この一行を追加。ホスト名はさっき調べたやつ

SSHの設定

まずは共有鍵認証。パーミッションに気をつけること!!!!!!!!

$ chmod 755 /home/thr3a
$ mkdir .ssh
$ cat /tmp/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ chmod 700 .ssh

各種設定

sudo vi /etc/ssh/sshd_config
  • Port 3843→xxxx
  • PasswordAuthentication yes→no
  • PermitRootLogin yes→no

再起動忘れずに

sudo service ssh restart

dip.jpでDNS登録をする

以下を実行するとVPS側のIPで登録される

wget -q -O - 'http://ieserver.net/cgi-bin/dip.cgi?username=[サブドメイン]&domain=[ドメイン]&password=[パスワード]&updatehost=1'

iptablesの設定

適当に実行ファイルを作成

sudo vi /tmp/ip

iptablesで適応させたいルールを記述

#!/bin/sh
#現在のルールを全削除
iptables -F
iptables -X
#FORWARDは不許可
iptables -P FORWARD DROP
#とりあえず全許可
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
#ローカルホストからは許可
iptables -A INPUT -i lo -j ACCEPT
#確立済みの通信は許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#http許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#SSH許可
iptables -A INPUT -p tcp --dport 3843 -j ACCEPT
#MySQL許可
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
#ping許可
iptables -A INPUT -p icmp -j ACCEPT
#その他全不許可
iptables -P INPUT DROP

権限付加

sudo chmod +x /tmp/ip

実行。これでiptablesの設定が適応される

sudo /tmp/ip

確認

sudo iptables -L

が、再起動すると設定は吹っ飛んでしまうので起動時毎回適応されるようにする。

suログイン

su -

現在の設定をバックアップ

iptables-save > /etc/iptables.rules

元のユーザに戻っておく

su - username

以下のファイルを編集(新規作成)

sudo vi /etc/network/if-pre-up.d/iptables_start

以下を記述

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
sudo chmod 755 /etc/network/if-pre-up.d/iptables_start

これで再起動してiptables -Lして反映されてたら成功

Apacheの設定

セキュリティ対策

sudo vi /etc/apache2/conf.d/security
  • ServerTokens OS→Prod
  • ServerSignature On→Off

今回はバーチャルホストを利用する こんな感じ

sudo vi /etc/apache2/sites-available/hogehoge
<VirtualHost *:80>
    ServerName hogehoge.com
    ServerAdmin webmaster@localhost
    
    DocumentRoot /var/www/hoge
    <Directory /var/www/hoge>
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    SetEnvIf Remote_Addr 192.168.1. no_log
    SetEnvIf Remote_Addr 127.0.0.1. no_log
    SetEnvIf User-Agent "^.*mirall.*$" no_log
    SetEnvIf User-Agent "^.*csyncoC.*$" no_log
    SetEnvIf Request_URI "\.(jpg|png|gif|css|js|ico)$" no_log
    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!no_log
    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

デフォルト設定を無効化してさっき作った設定を有効化する

cd /etc/apache2/sites-available/
sudo a2dissite default
sudo a2ensite hogehoge

Apache2再起動

sudo service apache2 restart

PHPのインストール

sudo apt-get install php5 libapache2-mod-php5 php5-curl

各種設定変更

sudo vi /etc/php5/apache2/php.ini

日本語に関する設定

  • ;mbstring.language = Japaneseの;を外す
  • mbstring.internal_encoding = EUC-jpの;を外してUTF-8
  • default_charset = "UTF-8"の;を外す
  • date.timezone = Asia/Tokyoへ変更

セキュリティに関する設定

  • expose_php = OnをOffに変更

処理に関する設定

  • upload_max_filesize
  • post_max_size
  • memory_limit 各種100M?
  • max_execution_time 30から180(3分)とかに変更(0でタイムアウト無効)

設定後apache再起動

MySQLのインストール

sudo apt-get install mysql-server php5-mysql

インストールの途中でrootに対するパスワード設定を求められるので入れておく

文字コードを全てUTF-8に変更

sudo vi /etc/mysql/my.cnf
[client]
default-character-set=utf8

[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

設定反映

sudo /etc/init.d/mysql restart

ログインして確認

mysql -u root -p

ちゃんとエンコード設定できているか確認

show variables like 'character_set%';

ここから先は必須じゃないけど入れてる奴

Mecabのインストール

sudo apt-get install build-essential libc6-dev g++

MeCab本体のダウンロード

wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz

MeCab 用の辞書 (IPA 辞書)

wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz

MeCab本体のビルド

tar zxfv mecab-0.996.tar.gz
cd mecab-0.996
./configure 
make
make check
sudo make install

辞書のビルド

tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
sudo make install
libmecab.so.2: cannot open shared object file

のエラーが出る場合は以下のコマンドを実行してリトライ

sudo ldconfig

次にPHP上でMecabを動かせるようにする。

sudo apt-get install php-pear
pear channel-discover pecl.opendogs.org
pear remote-list -c opendogs
sudo pear install opendogs/mecab-beta

インストール途中で以下のように入力を尋ねられたらイアkのように設定

specify pathname to mecab-config [no] : /usr/local/bin/mecab-config

最後に

sudo vi /etc/php5/conf.d/mecab.ini

以下を追加(新規作成)

extension=mecab.so

Squidのインストール

sudo apt-get install squid

設定変更

sudo vi /etc/squid3/squid.conf
ポート番号変更 1138行目
http_port xxxx (デフォルト3128)

外部からのアクセスを有効化 815行目辺に追記
acl all src all
http_access allow all

アクセス元のIPを表示しない 5555行目
forwarded_for on → off

Proxyの存在を知らせない 3422行目辺に追記
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

キャッシュサイズを指定 2083行目
cache_mem 32 MB

再起動

sudo service squid3 restart