Archive for the 'サーバ管理' Category

STLS/STARTTLSの導入

Ubuntu(10.04)の postfix(2.7.0)に STLS/STARTTLSを導入する手順。
※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。
  postfixのバージョンは「/usr/sbin/postconf | grep mail_version」で取得。

  1. postfixのSASLは設定済み(とする)
    $ sudo nano /etc/postfix/main.cf
    # SMTP-Auth setting
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth-dovecot
    smtpd_sasl_authenticated_header = yes
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    broken_sasl_auth_clients = yes
    
  2. dovecot側のSASLも同様(設定済みとする)
    $ sudo nano /etc/dovecot/dovecot.conf
      socket listen {
        client {
          path = /var/spool/postfix/private/auth-dovecot
          mode = 0660
          user = postfix
          group = postfix
        }
      }
    
  3. TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
    $ cd /usr/lib/ssl/misc
    $ sudo nano CA.pl
    
    #$CATOP="./demoCA";
    $CATOP="./postfixCA";
    
    $ sudo nano /usr/lib/ssl/openssl.cnf
    
    #dir            = ./demoCA              # Where everything is kept
    dir             = ./postfixCA           # Where everything is kept
    
  4. private keyを作る。(一部伏字)
    $ sudo ./CA.pl -newca
    CA certificate filename (or enter to create)    # 空Enterキー
    
    Making CA certificate ...
    Generating a 1024 bit RSA private key
    ............................++++++
    .........................++++++
    writing new private key to './postfixCA/private/cakey.pem'
    Enter PEM pass phrase:                    # パスワードを入れる
    Verifying - Enter PEM pass phrase:    # もう1回パスワード
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Kanagawa-ken
    Locality Name (eg, city) []:Yokosuka-shi
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Mamoru Satake
    Email Address []:mam@x-xx.jp
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:                   # 入れなくてよい
    An optional company name []:
    Using configuration from /usr/lib/ssl/openssl.cnf
    Enter pass phrase for ./postfixCA/private/cakey.pem:   # パスワードを入れる
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number:
                xx:ee:33:xx:6b:xx:59:xx
            Validity
                Not Before: Jul 11 21:43:17 2011 GMT
                Not After : Jul 10 21:43:17 2014 GMT
            Subject:
                countryName               = JP
                stateOrProvinceName       = Kanagawa-ken
                organizationName          = Satake Studio,LPC.
                commonName                = Mamoru Satake
                emailAddress              = mam@x-xx.jp
            X509v3 extensions:
                X509v3 Subject Key Identifier:
                    xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
                X509v3 Authority Key Identifier:
                    keyid:xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
                    DirName:/C=JP/ST=Kanagawa-ken/O=Satake Studio,LPC./CN=Mamoru Satake/emailAddress=mam@x-xx.jp
                    serial:xx:EE:xx:AE:xx:F8:xx:F1
    
                X509v3 Basic Constraints:
                    CA:TRUE
    Certificate is to be certified until Jul 10 21:43:17 2014 GMT (1095 days)
    
    Write out database with 1 new entries
    Data Base Updated
    
  5. もう1回 private keyを作る。(なんでだ?)
    $ cd postfixCA/
    $ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
    
    Generating a 1024 bit RSA private key
    ..........++++++
    ..............++++++
    writing new private key to 'postfix-key.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Kanagawa-ken
    Locality Name (eg, city) []:Yokosuka-shi
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Mamoru Satake
    Email Address []:mam@x-xx.jp
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    
  6. CSR に認証局の証明書で署名。
    $ sudo sh -c "echo '00' > serial"
    $ cd /usr/lib/ssl/misc
    $ sudo rm postfixCA/index.txt*   # 「TXT_DB error number 2」エラー対策
    $ sudo touch postfixCA/index.txt
    $ sudo openssl ca -out postfix-cert.pem -infiles postfixCA/postfix-req.pem
    
    Using configuration from /usr/lib/ssl/openssl.cnf
    Enter pass phrase for ./postfixCA/private/cakey.pem:          # パスワードを入れる
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 0 (0x0)
            Validity
                Not Before: Jul 12 00:02:50 2011 GMT
                Not After : Jul 11 00:02:50 2012 GMT
            Subject:
                countryName               = JP
                stateOrProvinceName       = Kanagawa-ken
                organizationName          = Satake Studio,LPC.
                commonName                = Mamoru Satake
                emailAddress              = mam@x-xx.jp
            X509v3 extensions:
                X509v3 Basic Constraints:
                    CA:FALSE
                Netscape Comment:
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier:
                    xx:E3:xx:32:xx:D4:xx:EF:xx:2A:xx:35:xx:4C:xx:DC:xx:AD:xx:D5
                X509v3 Authority Key Identifier:
                    keyid:xx:B2:xx:88:xx:4E:xx:B4:xx:73:xx:DF:xx:5A:xx:72:xx:55:xx:33
    
    Certificate is to be certified until Jul 11 00:02:50 2012 GMT (365 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
  7. ファイルの配置&postfixリスタート
    $ sudo cp postfix-cert.pem /etc/ssl/certs/
    $ sudo cp postfixCA/postfix-key.pem /etc/ssl/private/
    $ sudo  chmod 644 /etc/ssl/certs/postfix-cert.pem
    $ sudo  chmod 400 /etc/ssl/private/postfix-key.pem
    $ sudo service postfix restart
    
     * Stopping Postfix Mail Transport Agent postfix
       ...done.
     * Starting Postfix Mail Transport Agent postfix
       ...done.
    
  8. これでOK(のはず)

さくらのVPS引越し手順完全版

キーワード
この記事は、さくらのVPS、Ubuntu 10.04、引越し、Apache+PHP+MySQL+WordPress+EC-CUBEなどのキーワードで参照されます。

ここ1週間にあったこと
・2011/3/11 14:46 東北関東大震災が起きる。日時を忘れてしまわないように記録。犠牲になられた方に合掌。
・3/11発生当日は深夜1時まで停電。情報は手回し充電ラジオで。
・電気がついたところで飛び起き、まずサーバの確認。大丈夫だ。それから情報収集。大惨事。
・起動スクリプトに漏れがあったところなど、次に停電になったとき、アタフタしないようにチェック。
・こんなときに限ってUPSのバッテリー切れ(故障)でシャットダウンできなかったので、すかさず新しいUPSを注文。
・計画停電が始まる。1日のうち、6:20~22:00までを5つに区切ってブロックごとに停電させるシステム。
・うちは第3ブロックで初日(3/14)こそ停電しなかったものの、2日目以降は毎回停電。
・一日3時間、午前開始のときは6時間停電するのは、サーバを公開している体制としてはあり得ない。
・しかも4月以降も続くらしいので、ここ(横須賀)で自家発電なしにサーバを公開するのは限界。
・さくらのVPSはデータセンターが大阪(堂島)にあって、そのうち、北海道(石狩)と東京にもできるらしい。
・将来的には3か所借りておけば、負荷分散+耐障害性としてもいいだろうということで、さくらのVPSに決定。

やること
・いまのサーバ(Ubuntu 9.04 i386)をVPSサーバ(1.5GB、Ubuntu 10.04 amd64)へ移す。
・EC-CUBEを使っているお客様のみ、単独サーバ(1.0GB、Ubuntu 10.04 amd64)へ移す。
・この際だから、Apache+PHP を nginx+PHP(FastCGI)にしたかったんだけど、最後の方の挙動がおかしくて断念。
・とりあえず、枯れた構成でいくことにした。

以下、不親切な作業記録(あとで自分が見るためだけのものともいう)

  1. さくらのVPS申込み等
    • 『さくらのVPS』アフィリエイト
       時間に余裕があるときは、A8.netでアフィリエイトを申し込んでおく。本人可。ただし審査あり。
    • Java Runtime Environmentのインストール
       VPSコントロールパネルからのインストールに必要。先にやっておくこと。
    • さくらインターネット会員メニュー
       https://secure.sakura.ad.jp/menu/top/
       契約情報 > 契約サービスの確認 > さくらのVPS 1.5G > サーバ設定
    • VPSコントロールパネル
       https://secure.sakura.ad.jp/vpscontrol/main/
       OS再インストール > カスタムOSインストールへ > OS選択 > Ubuntu10.04 amd64
       ※ VPSコントロールパネルログインのパスワードとサーバ・ログインのパスワードは違う。
         VPSコントロールパネル上部にパスワード変更ボタンあり。
  2. Ubuntu10.04インストール&基本設定
    • Ubuntu10.04 amd64 インストール
       ここを見ればほぼOK。さくらのVPSにUbuntu 10.04をインストール
       ※1 ネットマスクの入力ミスに注意 ⇒ 255.255.254.0
       ※2 1.0GB以上は仮想ディスクが2つですが『Guided – use entire disk』にします。sdbは別マウント。
       終わったら、1分弱待ってから、VPSコントロールパネルから起動でOK
  3. sshログイン
    • 最初は TeraTerm等でプレーンパスワード・ログイン(ポート22番)
    • パスワードログインできなくしておく
       ※ サーバ側で公開鍵と秘密鍵を作って、秘密鍵(id_rsa)はクライアントのTeraTermのところに保存しておく。(cat .ssh/id_rsa とでもして、コピペでファイル書き出し)

      $ cd			# ログインルートへ。
      $ ssh-keygen	# id_rsaがクライアント秘密鍵、id_rsa.pubはサーバへ置く
      $ mv .ssh/id_rsa.pub .ssh/authorized_keys
      
      $ sudo nano /etc/ssh/sshd_config
         Port 22xx				#ポート番号変更
         PasswordAuthentication no	#パスワードでログインしない
      
      $ sudo nano /etc/services
         ssh 22xx/tcp
         ssh 22xx/udp
      
      $ sudo service ssh restart
      
  4. 不要なサービス等を止める
    • gettyを止める
      Ubuntu 10.04 Beta 版で不要なサービスを停止してみる。

      $ sudo nano /etc/default/console-setup
         ACTIVE_CONSOLES="/dev/tty[1-2]"
      
      $ sudo nano /etc/init/tty3.conf
      $ sudo nano /etc/init/tty4.conf
      $ sudo nano /etc/init/tty5.conf
      $ sudo nano /etc/init/tty6.conf
         # なかをすべてコメントアウトして実行されないようにする
      
      $ sudo aptitude install sysv-rc-conf
      $ sudo sysv-rc-conf dns-clean off
      $ sudo sysv-rc-conf pppd-dns off
      
  5. 環境についてと2台目の仮想ドライブ
    • ルートのパスワードを設定など
      $ sudo su -
      [sudo] password for user: PASSWORD
      
      # passwd
      Enter new UNIX password: PASSWORD
      Retype new UNIX password: PASSWORD
      
      # aptitude install ntp
      # nano /etc/ntp.conf
      server ntp.jst.mfeed.ad.jp        # 負荷分散のため ntpサーバは変える
      
      # service ntp restart
      # ntpq -p
      
      # aptitude install screen          # MUSTではないけど、あれば便利
      
    • 2台目の仮想ドライブをマウント
      OSを再インストールしても仮想ディスクの中身までフォーマットされるわけじゃない。
      sdbはそのまま残ってるので注意。(失敗したと思って何回もやり直さないこと)

      # blkid /dev/sdb1				# UUIDの確認
      # mkdir /www					# マウント・ポイントの作成
      # nano /etc/fstab
      UUID=73d3fdb7-750d-44bb-aec9-d018092a3de1 /www  ext3  defaults  0  0
      
      # mount -a						# fstabによるマウントで確認
      # df -ah
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/sda1              19G  836M   18G   5% /
      proc                     0     0     0   -  /proc
      none                     0     0     0   -  /sys
      none                     0     0     0   -  /sys/fs/fuse/connections
      none                     0     0     0   -  /sys/kernel/debug
      none                     0     0     0   -  /sys/kernel/security
      none                  748M  172K  748M   1% /dev
      none                     0     0     0   -  /dev/pts
      none                  752M     0  752M   0% /dev/shm
      none                  752M   40K  752M   1% /var/run
      none                  752M     0  752M   0% /var/lock
      none                  752M     0  752M   0% /lib/init/rw
      none                   19G  836M   18G   5% /var/lib/ureadahead/debugfs
      /dev/sdb1              30G  185M   28G   1% /www
      
  6. インストールプログラム
    • apache2 + php5 + mysql
      $ sudo aptitude install apache2 php5 libapache2-mod-php5 mysql-server php-pear php5-{mysql,curl,dev,gd,imap,ldap,mcrypt,snmp,xmlrpc}      # 必要最低限ではありません
      
      $ dpkg -l | grep apache
      ii  apache2                         Apache HTTP Server metapackage
      ii  apache2-mpm-prefork             Apache HTTP Server - traditional non-threade
      ii  apache2-utils                   utility programs for webservers
      ii  apache2.2-bin                   Apache HTTP Server common binary files
      ii  apache2.2-common                Apache HTTP Server common files
      ii  libapache2-mod-php5             server-side, HTML-embedded scripting languag
      
      $ dpkg -l | grep php
      ii  libapache2-mod-php5             server-side, HTML-embedded scripting languag
      ii  php-pear                        PEAR - PHP Extension and Application Reposit
      ii  php5                            server-side, HTML-embedded scripting languag
      ii  php5-cli                        command-line interpreter for the php5 script
      ii  php5-common                     Common files for packages built from the php
      ii  php5-curl                       CURL module for php5
      ii  php5-dev                        Files for PHP5 module development
      ii  php5-gd                         GD module for php5
      ii  php5-imap                       IMAP module for php5
      ii  php5-ldap                       LDAP module for php5
      ii  php5-mcrypt                     MCrypt module for php5
      ii  php5-mysql                      MySQL module for ph 5
      ii  php5-snmp                       SNMP module for php5
      ii  php5-xmlrpc                     XML-RPC module for php5
      
      $ sudo nano /etc/mysql/my.cnf
      [client]
      default-character-set=utf8  #追加
      [mysqld]
      default-character-set=utf8  #追加
      character-set-server=utf8  #追加
      
      $ sudo a2enmod rewrite #mod_rewriteを有効にする
      $ sudo service apache2 restart
      
      $ sudo aptitude install language-pack-ja     # ロケールを ja_JP.UTF-8 にする
      $ sudo locale-gen ja_JP.UTF-8
      $ sudo update-locale LANG=ja_JP.UTF-8
      $ export LANG=ja_JP.UTF-8
      
  7. ドメインの設定
    • DNSレコードの変更
      ドメインをレジストラ(お名前.com、ムームードメイン等)で管理しているのであれば、DNSのAレコードを変更する。
    • DNS逆引きレコードを設定
      さくらのVPSコントロール画面で、ホスト名を変更する。
  8. rsync
    • 旧サーバから新サーバへのお引越しには rsyncを使う。
      新サーバに余計な設定を残さないよう、旧サーバ側をクライアントにしてアクセス。
      ※ 以下、c# はクライアント側ルート、s# はサーバ側ルート。

      s# ssh-keygen
      s# mv .ssh/id_rsa.pub .ssh/authorized_keys
      s# cat .ssh/id_rsa         # このファイルをクライアント側へ持っていく
      
      c# cd
      c# nano .ssh/id_rsa_sakura.1.5_root     # このファイルに秘密鍵を入れる
      c# cat .ssh/config               # 接続先ごとの設定ファイル(Hostを繰り返す)
      Host sakura.1.5
          HostName        49.xxx.xxx.xxx
          IdentityFile    ~/.ssh/id_rsa_sakura.1.5_root
          User            root
          Port            22xx
      
      c# chmod 600 .ssh/config        # 他のユーザが書き込めると怒られる
      c# chmod 600 .ssh/id_rsa_sakura.1.5_root
      c# ssh sakura.1.5                # sshで繋がるかテスト(root@49.xxx.xxx.xxx)
      c# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/
      
  9. apache2
    • apache2のテスト・・・デフォルト
      なにも設定せずに、/var/www/index.htmlが表示できたらOK。

      $ wget http://example.com -O -      # 標準出力に吐き出すオプション
      長さ: 177 1
      `STDOUT' に保存中
      <html><body><h1>It works!</h1>
      <p>This is the default web page for this server.</p>
      <p>The web server software is running but no content has been added, yet.</p>
      </body></html>
      stdout へ出力完了 [177/177]
      
    • apache2のテスト・・・example.com
      $ sudo nano /etc/apache2/site-available/my_site
      #NameVirtualHost *:80            # ドメインが1つしかないときはいらない
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/example.com/
      </VirtualHost>
      
      $ sudo a2ensite my_site
      Enabling site my_site.
      
      $ sudo service apache2 restart
      
  10. proftpd
    • proftpdのインストールと設定
      うまくいかないときは、/var/log/proftpd/proftpd.log にエラーがあるはず。
      ※ Ubuntu 10.04でインストールされる proftpdは 1.3.2c で、脆弱性(Telnet IAC stack overflow vulnerability (ZDI-CAN-925))があります。最新版(1.3.3d)をインストールするのがベストですが、自分でできない場合は Ubuntu用パッケージが出回るまで接続元IPアドレスを制限するなどの対応をしてください。

      $ sudo aptitude install proftpd
      from inetd           # 常駐しない設定
      
      $ export TZ="JST-9"        # これがないとFTPでファイルを書くときの時間がずれる
      $ sudo nano /etc/environment
      export TZ="JST-9"         # 起動時もセットしておく
      
      $ sudo nano /etc/proftpd/proftpd.conf
      AuthUserFile   /etc/proftpd/ftpd.passwd
      AuthGroupFile  /etc/proftpd/ftpd.group
      AuthOrder      mod_auth_file.c mod_auth_unix.c
      <Limit LOGIN>
        Order allow, deny
        Allow from 127.0.0.1, IP-ADDRESS      # 許可するIPアドレス
        Deny from all        # 自サーバのグローバルIPはwordpressのプラグイン・インストールで必要
      </Limit LOGIN>
      DefaultRoot             /www/USER_DIR              USER
      DefaultRoot             !ADMIN_USER
      <Directory /www/USER_DIR/*>
        AllowOverwrite on
        Umask 000
        <Limit WRITE >
          AllowAll
        </Limit>
      </Directory>
      
      $ sudo ftpasswd -passwd -file=/etc/proftpd/ftpd.passwd -name=USER -uid=USER_ID -gid=GROUP_ID -home=/www/USER_DIR -shell=/bin/bash
      
      $ sudo nano /etc/proftpd/ftpd.group
      USER:x:USER_GROUP:
      
      $ sudo chown -R USER_ID:GROUP_ID /www/USER_DIR/
      
      $ sudo service proftpd restart
      ProFTPd is started from inetd/xinetd.
      
  11. phpMyAdmin
    • 定番のphpMyAdminのインストール
      危ないので、接続元を制限する。

      $ sudo aptitude install phpmyadmin
      $ sudo nano /etc/phpmyadmin/apache.conf
      <Directory /usr/share/phpmyadmin>
          Order deny,allow                    # この3行を追加する
          deny from All
          Allow from IP-ADDRESS        # 許可するIPアドレス
      
      $ sudo service apache2 restart
      
  12. WordPress
    • WordPress 3.1 日本語版をインストール
      $ wget http://ja.wordpress.org/wordpress-3.1-ja.tar.gz
      $ tar zxf wordpress-3.1-ja.tar.gz
      $ mysql -u root -pPASSWORD-ROOT
      mysql> create database DATABASE-NAME;
      mysql> create user USER-NAME@localhost identified by 'PASSWORD-USER';
      mysql> grant all on DATABASE-NAME.* to USER-NAME@localhost;
      mysql> quit
      
      $ cp -av /www/wordpress/wp-config-sample.php /www/wordpress/wp-config.php
      $ nano /www/wordpress/wp-config.php
      define('DB_NAME', 'DATABASE-NAME');
      define('DB_USER', 'USER-NAME');
      define('DB_PASSWORD', 'PASSWORD-USER');
      define('AUTH_KEY', ...);          # https://api.wordpress.org/secret-key/1.1/salt/
      define('SECURE_AUTH_KEY', ...);    # このURLからダウンロードしたキーに差替え 
      
      $ sudo mkdir /etc/apache2/sites-available/include
      $ sudo nano  /etc/apache2/sites-available/include/wordpress    # ログを取らない設定
      SetEnvIf Request_URI "\.(gif)|(jpg)|(jpeg)|(JPG)|(png)|(bmp)|(ico)|(css)|(swf)$" nolog
      SetEnvIf User-Agent "Gigabot" nolog
      SetEnvIf User-Agent "Googlebot" nolog
      SetEnvIf User-Agent "MJ12bot" nolog
      SetEnvIf User-Agent "msnbot" nolog
      SetEnvIf User-Agent "psbot" nolog
      SetEnvIf User-Agent "TurnitinBot" nolog
      SetEnvIf User-Agent "Yahoo! Slurp" nolog
      SetEnvIf User-Agent "Zealbot" nolog
      SetEnvIf User-Agent "Baiduspider" nolog
      SetEnvIf Request_URI "\.(ida|IDA|exe|printer|asp|dll)" nolog
      SetEnvIf Request_URI "^/_mem_bin/" worm nolog
      SetEnvIf Request_URI "^/_vti_bin/" worm nolog
      SetEnvIf Request_URI "^/c/" worm nolog
      SetEnvIf Request_URI "^/d/" worm nolog
      SetEnvIf Request_URI "^/msadc/" worm nolog
      SetEnvIf Request_URI "^/MSADC/" worm nolog
      SetEnvIf Request_URI "^/scripts/" worm nolog
      SetEnvIf Request_URI "^/default.ida" worm nolog
      SetEnvIf Request_URI "root\.exe" worm nolog
      SetEnvIf Request_URI "cmd\.exe" worm nolog
      SetEnvIf Request_URI "NULL\.IDA" worm nolog
      SetEnvIf Request_URI "^/cgi-bin/" nolog
      SetEnvIf Request_URI "robots\.txt" nolog
      SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log
      SetEnvIf Request_Method "(OPTIONS)" nolog
      
      $ sudo nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/wordpress/
        Include ./sites-available/include/wordpress
      </VirtualHost>
      
      $ sudo a2dissite default        # defaultを無効化
      $ sudo a2ensite my_site       # これはすでにやっているけど
      $ sudo service apache2 restart
      
      $ sudo nano /www/wordpress/wp-config.php    # マルチサイト化
      define ('WP_ALLOW_MULTISITE', true);
      
      $ sudo mkdir /www/wordpress/wp-content/blogs.dir
      $ sudo chown www-data:www-data /www/wordpress/wp-content/blogs.dir
      
      $ sudo nano /www/wordpress/wp-config.php
      define( 'MULTISITE', true );
      define( 'SUBDOMAIN_INSTALL', true );
      $base = '/';
      define( 'DOMAIN_CURRENT_SITE', 'satake7.jp' );
      define( 'PATH_CURRENT_SITE', '/' );
      define( 'SITE_ID_CURRENT_SITE', 1 );
      define( 'BLOG_ID_CURRENT_SITE', 1 );
      
      $ sudo nano /www/wordpress/wp-config.php
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
      RewriteCond %{REQUEST_FILENAME} -f [OR]
      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^ - [L]
      RewriteRule . index.php [L]
      
      # WordPress MU Domain Mapping プラグインをインストールする
      $ cp -av /www/wordpress/wp-content/pluginswordpress-mu-domain-mapping/sunrise.php /www/wordpress/wp-content/
      $ sudo nano /www/wordpress/wp-config.php
      define( ‘SUNRISE’, ‘on’ );
      
      
      
  13. postfix & dovecot
    • 順番が違うようだが、メール環境を整備
      $ sudo aptitude install postfix      # システムメールのドメインを聞かれるので要準備
      $ sudo aptitude install dovecot dovecot-common dovecot-imapd dovecot-pop3d
      $ sudo nano /etc/postfix/master.cf
      submission inet n       -       -       -       -       smtpd      # 587対応・コメントを外す
      docomo-smtp unix -      -       n       -       1       smtp    # docomoだけリレーするため
             -o smtp_destination_concurrency_limit=1
             -o smtp_destination_recipient_limit=1
      
      $ sudo nano /etc/postfix/main.cf       # 標準と違うところのみ
      delay_warning_time = 12h
      # TLS parameters               # 全部コメント。後ろでセット
      #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
      #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
      #smtpd_use_tls=yes
      #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
      #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
      myhostname = mail.example.com
      myorigin = example.com
      mydestination = $myhostname, localhost.$myorigin, localhost, $myorigin
      mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 IP-ADDRESS/32   # 許可IPアドレス
      home_mailbox = Maildir/
      message_size_limit = 30485760
      unknown_local_recipient_reject_code = 550
      # SMTP-Auth setting
      smtpd_sasl_auth_enable = yes
      smtpd_sasl_type = dovecot
      smtpd_sasl_path = private/auth-dovecot
      smtpd_sasl_authenticated_header = yes
      smtpd_recipient_restrictions =
              permit_mynetworks,
              permit_sasl_authenticated,
              reject_unauth_destination
      broken_sasl_auth_clients = yes
      # Virtual Mailbox
      virtual_mailbox_domains = example.com.local
      virtual_mailbox_base = /home/vmailbox
      virtual_mailbox_maps = hash:/etc/postfix/vmailbox
      virtual_minimum_uid = 100
      virtual_uid_maps = static:VMAILBOX-USER-ID
      virtual_gid_maps = static:VMAILBOX-GROUP-ID
      virtual_alias_maps = hash:/etc/postfix/virtual
      transport_maps = hash:/etc/postfix/transport
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/saslpass
      smtp_sasl_security_options =
      
      $ sudo nano /etc/postfix/saslpass         # 転送に使うためのプロバイダ設定
      email.mail.plala.or.jp USER-PLALA:PASSWORD-PLALA
      
      $ sudo postmap /etc/postfix/saslpass
      $ sudo nano /etc/postfix/transport         # 転送設定(docomoだけ)
      docomo.ne.jp  docomo-smtp:[email.mail.plala.or.jp]:587      # docomoはゆっくり送る
      .docomo.ne.jp docomo-smtp:[email.mail.plala.or.jp]:587
      
      $ sudo postmap /etc/postfix/transport
      $ sudo nano /etc/postfix/virtual
      info@example.com info@example.com.local
      
      $ sudo postmap /etc/postfix/virtual
      $ sudo nano /etc/postfix/vmailbox
      info@example.com.local example.com.local/info/
      
      $ sudo postmap /etc/postfix/vmailbox
      $ sudo nano /etc/dovecot/passwd
      USER-NAME@smtp:{HMAC-MD5}3d272806034dd7c43f1643c4ab60731e3d1051ff9433afe14b056f3d34fe6ab1:1000:1000:/home/USER-NAME::userdb_mail=maildir:/home/USER-NAME/Maildir
      
      $ sudo nano /etc/dovecot/dovecot.conf      # 標準と違うところだけ
      mail_location = maildir:~/Maildir
        mechanisms = plain login digest-md5 cram-md5 apop
        passdb passwd-file {
          args = /etc/dovecot/passwd
        }
        userdb passwd-file {
          args = /etc/dovecot/passwd
        }
       socket listen {
          client {
            path = /var/spool/postfix/private/auth-dovecot
            mode = 0660
            user = postfix
            group = postfix
          }
        }
      
      $ sudo service postfix restart
      $ sudo service dovecot restart
      
      $ sudo mkdir -p /etc/skel/Maildir/new        # ユーザが作られたときにMaildirも作られるように
      $ sudo mkdir -p /etc/skel/Maildir/cur
      $ sudo mkdir -p /etc/skel/Maildir/tmp
      $ sudo chmod -R 700 /etc/skel/Maildir/
      
      $ sudo nano /etc/aliases             # ドメイン共通のアドレス
      $ sudo newaliases
      
      $ sudo adduser vmailbox                       # postfix, dovecot用ユーザ
      $ sudo cp -av /home/vmailbox/ /www/     # メールを/www に置きたいので
      $ sudo nano /etc/passwd                      # サーバ移転をしている関係でユーザIDと/wwwを変更
      $ sudo nano /etc/group                         # 同上の理由でグループIDを変更
      $ sudo chown -R vmailbox:vmailbox /www/vmailbox/
      $ sudo nano /etc/dovecot/passwd          # /home/vmailbox ⇒ /www/vmailbox
      $ sudo nano /etc/postfix/main.cf
      $ sudo service postfix restart
      $ sudo service dovecot restart
      
      $ sudo nano /etc/postfix/virtual  # 移転先ドメインは、main.cf の mydestination から外しただけじゃダメ
      $ sudo nano /etc/postfix/vmailbox  # virtual と vmailbox も見てるみたい
      $ sudo postmap /etc/postfix/virtual
      $ sudo postmap /etc/postfix/vmailbox
      
      $ sudo service postfix restart
      $ sudo service dovecot restart
      
  14. 旧IPへのアクセスを新IPへ振り替える
    • リバースプロキシの設定
      $ sudo a2enmod proxy                  # すでに入っているはず
      $ sudo a2enmod proxy_http           # httpsは対象外
      $ sudo nano /etc/hosts                  # これすごく重要!!!
      xx.xxx.xx.xxx  example.com         # 新しいサーバのIPアドレスを書く
       
      $ sudo nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
        ServerName example.com
        ProxyPass / http://example.com/
      </VirtualHost>
      
      $ sudo service apache2 restart
      
      $ sudo nano /etc/postfix/transport          # メールがあるときは忘れずに!!
      example.com     :[xx.xxx.xx.xxx]:587    # 新しいサーバのIPアドレス
      
      $ sudo postmap /etc/postfix/transport
      $ sudo nano /etc/postfix/virtual              # 転送するドメインをコメントにする
      $ sudo nano /etc/postfix/vmailbox          # 同上
      $ sudo nano /etc/postfix/main.cf            # ディスティネーションから外す
      $ sudo postmap /etc/postfix/virtual
      $ sudo postmap /etc/postfix/vmailbox
      $ sudo service postfix restart
      
  15. ドメイン引越しまとめ
    • 旧サーバから新サーバへの引越し
      いろいろ面倒なのでルート権限で操作。以下 o# は旧サーバ、n# は新サーバ

      o# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/    # ファイル全部コピー
      o# rsync -avz /home/vmailbox/example.com.local/ sakura.1.5:/www/vmailbox/example.com.local/    # メールコピー
      
      n# nano /etc/postfix/virtual          # メール関係の設定
      n# nano /etc/postfix/vmailbox
      n# postmap /etc/postfix/virtual
      n# postmap /etc/postfix/vmailbox
      n# nano /etc/postfix/main.cf
      
      o# nano /etc/hosts         # 新しいサーバのIPアドレス
      o# nano /etc/postfix/virtual        # 移転させるものはコメントに
      o# nano /etc/postfix/vmailbox    # 同上
      o# nano /etc/postfix/main.cf      # 同上
      o# nano /etc/postfix/transport
      example.com :[xx.xxx.xx.xxx]:587     # 新しいサーバのIPアドレス
      
      o# postmap /etc/postfix/virtual
      o# postmap /etc/postfix/vmailbox
      o# postmap /etc/postfix/transport
      o# service postfix restart
      
      n# nano /etc/apache2/sites-available/my_site       # apacheの設定
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/example.com/
      </VirtualHost>
      
      n# service apache2 restart        # ここまでやってからDNSレコードを書き変える
      
      o# nano /etc/hosts
      xx.xxx.xx.xxx  example.com         # 新しいサーバのIPアドレスを書く
      
      o# nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
        ServerName example.com
        ProxyPass / http://example.com/
      </VirtualHost>
      
      o# service apache2 restart
      
      o# nano /etc/postfix/transport
      
  16. 続き
    • 続き
      
      
  17. 続き
    • 続き
      
      
  18. 続き
    • 続き
      
      

phpMyAdminのインストール

phpmyadmin

今更ながら、phpMyAdmin をインストールしてみました。
いままで敬遠していたのは、PHPダサいなぁと思っていたことと、phpMyAdminを入り口にしてセキュリティが甘くなったら嫌だなぁということだったんですが、WordPressにこれだけお世話になっておいて、PHPダサいはないだろうと。あと、セキュリティについては、ルーターの外から入れないようにしとけばいいんじゃね、ということで手順と若干の注意点です。

  1. phpMyAdmin本体のダウンロードは、ここから
    現時点の最新安定版は、phpMyAdmin-3.3.5.1-all-languages.tar.gz でした。
  2. 落っことしたら、/home/www/ 配下にインストールすることにします。(もちろん、どこでもいいのですが)
    $ cd /home/www
    $ tar -xzvf phpMyAdmin-3.3.5.1-all-languages.tar.gz
    $ mv phpMyAdmin-3.3.5.1-all-languages phpMyAdmin
    $ s chown -R www-data:www-data phpMyAdmin
    

    tarで解凍するとバージョンも含んだ長い名前のディレクトリができちゃったので、リネームしました。
    あと、Apacheのユーザが実際の読み書きをするので、ディレクトリごとオナ―を変えちゃいました。

  3. phpMyAdminディレクトリの中に、config.sample.inc.php があるので、これを編集して、config.inc.php という名前で保存しておきます。変更点はこちら(↓)
    $cfg['blowfish_secret'] = 'xsafsdfsggdfgdvffdegrge';  // クッキー認証用の暗証文字列なので、適当な長さのものをセット。特殊記号とか大文字は混ぜない方がいいのかな。(未確認)
    $cfg['Lang'] = 'ja-utf-8';    // 日本語指定
    $cfg['PmaNoRelation_DisableWarning'] = true;    // リンクテーブルがありませんエラーを出さなくする指定
    

    あとは標準のままでいけます。

  4. 基本的にこれでOKなんですが、ブラウザからアクセスするために、Apacheの設定をやっておきます。
    
      ServerName phpmyadmin.192.com
      DocumentRoot /home/www/phpMyAdmin
      
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from 192.168.1
      
    
    

    192.comは自分ででっち上げたドメインです。(本物の192.comはどこか別のところを指すはず)
    お気軽にこのドメインを hostsファイルに登録して自サーバに振り向けておきます。(そうはいっても万が一、外から入ってこられたときのために内部LANだけ allowしておくと)

  5. あとやったことは、mcryptというライブラリが PHPに入っていなかったので、これを入れて Apacheを再起動しました。
    # apt-get install php5-mcrypt
    # /etc/init.d/apache2 restart
    
  6. 『リンクテーブルを処理するための追加機能が無効になっています』エラーについて
    $cfg['PmaNoRelation_DisableWarning'] = true; の設定でエラーはでなくなりますが、拡張機能らしいのでちょっと使いたくなって、いろいろとやってみたのですが、最初の項目(pmadb)はOKになるんですが、それ以降はすべて NGで一向に進展がないため、あきらめました。忘れたことにやってみるかも。⇒ 参考サイト:phpMyAdminのインストール

こちら(↓)はインストールとは関係ありませんが、参考まで。
MySQL + phpMyAdmin によるバックアップ

HyperDB

hyperdb

 
なぜかあまり日本語での情報が少ない『HyperDB』ですが、負荷分散だったり、フェイル・オーバーだったりは、大切なことだと思うのです。
WordPress3.0にアップグレードするときには、HyperDBもセットで入れます!という決意表明です。

RT-200NEのバカぁ

rt-200ne

 
タイトルは、もちろん親しみをこめて書いてますよ。
うちのルータは、NTTの RT-200NEというやつなんですけど、これがなかなか曲者なんです。
やりたいことは『WANに 2IP用意して、どっちのIPで入ってきても、同じサーバが応対する』ということなんですけど、ボクがバカなのか、RT-200NEがバカなのか、わかりませんが、うまくいきません。

  • 2回線の接続はOK。でもそのうち1本を『優先』にしなくちゃいけない。
  • 優先IPに外部からアクセスするのはOK。ちゃんと応答を返してくれる。
  • 優先じゃないIPに外部からアクセスするのはNG。RT-200NEでエラーになる。こんな(↓)エラー。
    RX-ERROR List Create Error : TCP 219.117.219.210 : 62853 &gt; 192.168.1.200 : 80 (IP-PORT=ZOOT)
    
  • 静的ルーティング設定で、送信元(192.168.1.200)を優先じゃないIPに割り振ると、優先じゃないIPへ返答してくれるようになるので、OKなんだけど、今度は優先IPの方へ応答できなくなる。(当たり前)
  • 静的ルーティング設定を2つ登録しても、最初のエントリの方が優先されるっぽい。(そりゃ無理筋)
  • あきらめる。← いまここ。

 
言いたいことがうまく書けませんが、つまり、『外部からアクセスに来たIPに対して、その経路で応答を返す』ことを期待してるんですけど、静的ルーティングを書かないと、『どこからきたアクセスであろうと、常に』優先IPに対して応答を返しているようなんです。なんで、こんな仕様になってるのか。(ほんとか、ほんとか、俺が知らないだけじゃないのか?)
 
こんなこと、するやついないから、こうなってるのかなぁ。
 
参考:
RT-200NE 機能詳細ガイド
DNSラウンドロビン
DNS でラウンドロビンは当てにならない。

mail forwarding loop

 
[postfix-jp: 783] mail forwarding loop
こういうメッセージが Postfixから返ってきたときに疑うべきところ。
 

aliasや.forwardなどが正常なのにPostfixが”mail forwarding loop”を検知することがあります。

具体的には、Delivered-To:ヘッダフィールドが詐称されている場合です。
local(8)デーモンは、配送先のアドレスがすでにDelivered-To:にあるメッセージを”mail forwarding loop”としてbounceします。

だそうです。
 
ついでに、「sendmail の使い方」がわかりやすいです。
NTP で時刻合わせ」はこちらをどうぞ。

Rubyから PostgreSQLを使う

 
Rubyから PostgreSQLを使おうとして、ちょっとつまづいたので、後進の人のためにメモ。
入れようとした環境はこんな感じ。

  • Ubuntu 9.04(サーバ版)
  • ruby 1.8.7
  • Rails (2.1.0) + passenger (2.0.1)
  • psql (PostgreSQL) 8.3.9

つまり、少し古い Rubyと Railsが動いていて、かつ、PostgreSQLも動いていて、いま動いているものは変えたくないということ。
 
Read More

proftpdにユーザ追加

proftpd

FTPサーバとして proftpd を立てているんですけど、新しいユーザを追加するとき、いつも、どうやるんだっけ?と悩むので、自分用のメモ。
 
1.proftpdの環境

/etc/proftpd/
/etc/proftpd/proftpd.conf
/etc/proftpd/ftpd.group
/etc/proftpd/ftpd.passwd

 
2.グループの追加
  基本、1ユーザ=1グループにしているので、まずグループを追加します。
  グループIDをどこまで使ったかは、cat /etc/proftpd/ftpd.group で。

ftpasswd --group --file=/etc/proftpd/ftpd.group --name=group_name -gid=5003

 
3.ユーザの追加

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=user_name --uid=5003
 --gid=5003 --home=/home/www/user_root --shell=/bin/bash

 
4.アクセス環境の設定

e /etc/proftpd/proftpd.conf

DefaultRoot    /home/www/user_root    user_name


  AllowOverwrite on
  Umask 000
  
    AllowAll
  

5.サービスリスタート

/etc/init.d/proftpd restart

mail loops back to myselfが出たとき

完全なる備忘録。
メールが送れなくて、『mail loops back to myself』みたいなメッセージが出た時は十中八九、main.cf にそのドメインが登録されてません。info@hogehoge.com へ送ろうとしてこれがでた場合は、main.cf の mydestinationに hogehoge.comを登録したかどうかを確認すること。
(この話はもちろん、自分でドメインを管理している場合のお話です)

$ e /etc/postfix/main.cf
mydestination = $myhostname, localhost.$myorigin, localhost, $myorigin, hogehoge.com

サイトスピード

すばらしく助かったのでメモ。
 
ウェブページ全体及びそのオブジェクトの分析
ファイルごとにダウンロード時間を計測してくれます。
 
あと、aguse.jp にもお世話になってます。
サイト全体の管理情報の表示や、aguse gatewayで迂回アクセスができるので、外からアクセスするとどのくらいのレスポンスかなど、いろいろと助かってます。
 
HTTP Status Code
なんかあったときはここ。HTTPのステータスコード一覧です。
 
ログファイルの分割ツールについて。これはどこかに書いておきたかったので。

次ページへ »