OpenSSL + Apache 2.0.X (RPM설치시 예제)

■mod_sslインストール


[root@centos ~]# yum -y install mod_ssl ← mod_sslインストール

■WebサーバーSSL設定

(1)サーバー用秘密鍵・証明書作成

[root@centos ~]# cd /etc/pki/tls/certs/ ← ディレクトリ移動※CentOS5の場合

[root@centos ~]# cd /usr/share/ssl/certs ← ディレクトリ移動※CentOS4の場合

[root@centos certs]# sed -i 's/365/3650/g' Makefile ← サーバー用証明書有効期限を1年から10年に変更

[root@centos certs]# make server.crt ← サーバー用秘密鍵・証明書作成
umask 77 ; \
        /usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
.................++++++
............++++++
e is 65537 (0x10001)
Enter pass phrase: ← 任意のパスワードを応答※表示はされない
Verifying - Enter pass phrase: ← 任意のパスワードを応答(確認)※表示はされない
umask 77 ; \
        /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0
Enter pass phrase for server.key: ← 上記で応答したパスワードを応答※表示はされない
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) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Kanagawa ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Kawasaki ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:centossrv.com ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:centossrv.com ← Webサーバー名応答
Email Address []:webmaster@centossrv.com ← 管理者メールアドレス応答

[root@centos certs]# openssl rsa -in server.key -out server.key ← サーバー用秘密鍵からパスワード削除
Enter pass phrase for server.key: ← サーバー用秘密鍵・証明書作成時のパスワード応答※表示はされない
writing RSA key
※パスワードを削除するのは、Webサーバー起動時にパスワードを要求されないようにするため

(2)SSL設定

[root@centos certs]# vi /etc/httpd/conf.d/ssl.conf ← ApacheSSL設定ファイル編集
※CentOS5の場合
SSLCertificateFile /etc/pki/tls/certs/server.crt ← サーバー用証明書を指定

SSLCertificateKeyFile /etc/pki/tls/certs/server.key ← サーバー用秘密鍵を指定

※CentOS4の場合
SSLCertificateFile /usr/share/ssl/certs/server.crt ← サーバー用証明書を指定

SSLCertificateKeyFile /usr/share/ssl/certs/server.key ← サーバー用秘密鍵を指定

#  General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html" ← #を削除(コメント解除)
↓
DocumentRoot "/var/www/html"

■Apache設定反映

(1)Apache設定反映

[root@centos certs]# /etc/rc.d/init.d/httpd restart ← Apache再起動
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

(2)ポート443番のOPEN
ルーター側の設定でポート443番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

아파치 소스 설치의 경우가 더 많을 걸로 예상되어서 잠시 정리하면 ...

1. /usr/local/apache2/conf/httpd.conf 에서 httpd-ssl.conf 찾아서
include를 해제해 준다
약 400~450 사이쯤에 아래와 같은 부분이 있다
# Secure (SSL/TLS) connections
# Include conf/extra/httpd-ssl.conf
※ 위 # 삭제 아래와 같이
Include conf/extra/httpd-ssl.conf

2. vi /usr/local/apache2/conf/extra/httpd-ssl.conf (파일 열고)

3. 76째 줄부터 몇가지 설정을 해 준다
# General setup for the virtual host
DocumentRoot "/html/webroot" <-- 알맞게 변경
DirectoryIndex index.php index.html index.htm <-- 이 부분 추가
ServerName www.thenamed.net:443 <-- 해당 도메인으로 변경
ServerAdmin xxxx@xxxx.jp <-- 알맞게 변경
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/logs/access_log"

4. 약 100번째 줄에서 부터 두가지 변경
SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"
위를 아래와 깉이 변경
SSLCertificateFile "/usr/local/ssl/www.thenamed.net.crt"

5. 약 110번째 줄에서 부터
SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"
아래 처럼 변경
SSLCertificateKeyFile "/usr/local/ssl/www.thenamed.net.key"

즉 인증서(crt)과 키(key)파일을 저장한 위치를 설정해 주면 된다.

마지막으로 /usr/local/apache2/bin/apachectl restart

https://www.example.com 자기도메인으로 접속해 보면 정상적으로 보여야 한다
하지만 OpenSSL 이기 때문에 인증되자 않은 사용자라고 경고메세지가 뜨는데
이는 원도우계열이라면 MS에 인증서 비용을 제출해야 MS에서 경고메세지가
안 뜨도록 인증된 사용자라고 등록해 준다 ..

녹색방퍠와 빨간방패가 뜬다면 빨간 방패를 눌러 사이트에 접속하도록 하자..

TIP. VeriSign과 같은 등록대행 업체를 이용한다면
중계인증자까지 등록 해야 한다
SSLCACertificateFile 부분을 찾아 경로에 맞게 세팅한다.
확장자는 .ca.crt이다
SSLCACertificateFile /usr/local/ssl/www.verisign.net.ca.crt
(SSLCACertificateFile는 주석 처리 되어 있으니 경로에 맞게 세팅)

メールサーバー構築(sendmail+Dovecot)

 

メールサーバー構築(sendmail+Dovecot)

最終更新日: 2009.12.29

■概要

メールサーバーを構築する場合、送信メールサーバー(SMTPサーバー)と受信メールサーバー(POP/IMAPサーバー)の構築が必要となる。
ここでは、送信メールサーバーにはデフォルトでインストールされているsendmail、受信メールサーバーにはDovecotを採用する。

なお、sendmailは迷惑メールの不正中継に利用されないようにするため、デフォルトでは外部から外部宛(例えば、会社等で自宅サーバーのメールアドレスからプロバイダのメールアドレス宛)に送信できないようになっているが、迷惑メールの不正中継に利用されずに外部から外部宛に送信できるようにするため、SMTP-Auth機能※をもたせる。
また、DovecotはPOP/IMAPサーバーとして構築し、ユーザがPOPまたはIMAPを選択できるようにする。※POPとIMAPの違い

※SMTP-Auth機能とは、メール送信時にユーザ名とパスワードで認証を行なう機能であり、これにより、迷惑メールの不正中継に利用されないようにする。


■sendmail設定

(1)sendmail-cfインストール
sendmail.mcからsendmail設定ファイル(sendmail.cf)を作成するのに必要なsendmail-cfをインストールする。
※sendmail設定ファイル(sendmail.cf)は難解なため、sendmail.mcを編集してsendmail.cfに変換するのが一般的である

[root@centos ~]# yum -y install sendmail-cf ← sendmail-cfインストール

(2)sendmail設定

[root@centos ~]# vi /etc/mail/sendmail.mc ← sendmail.mc編集
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
↓
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl ← 変更(外部からの受信を許可)

dnl MASQUERADE_AS(`mydomain.com')dnl
MASQUERADE_AS(`centossrv.com')dnl ← 追加(送信元アドレスの@以降をドメイン名にする)

dnl FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_envelope)dnl ← 追加(エンベロープFromも書き替える)

EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl ← 変更(送信元がrootの場合も書き替える)

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
↓
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl ← 行頭のdnlを削除(SMTP-Auth有効化)
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') ← 行頭のdnlを削除(SMTP-Auth有効化)

define(`confMAX_MESSAGE_SIZE',`10485760') ← 最終行へ追加(受信メールサイズを10MB=10*1024*1024に制限)

以下を最終行へ追加(メールサーバー名&バージョン情報の隠蔽)
define(`confSMTP_LOGIN_MSG',`unknown')dnl
define(`confRECEIVED_HEADER',`$?sfrom $s $.$?_($?s$|from $.$_)
        $.$?{auth_type}(authenticated)
        $.by $j (unknown)$?r with $r$. id $i$?u
        for $u; $|;
        $.$b')dnl

[root@centos ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcよりsendmail.cf作成

[root@centos ~]# echo `hostname -d` >> /etc/mail/local-host-names ← xxxx@centossrv.comでメールを受信できるようにする

(3)SMTP-Auth設定
SMTP-Auth用ユーザ名、パスワードにシステムのユーザ名、パスワードを使用する場合

[root@centos ~]# /etc/rc.d/init.d/saslauthd start ← saslauthd起動
saslauthd を起動中:                                        [  OK  ]

[root@centos ~]# chkconfig saslauthd on ← saslauthd自動起動設定

[root@centos ~]# chkconfig --list saslauthd ← saslauthd自動起動設定確認
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合

[root@centos ~]# vi /usr/lib/sasl2/Sendmail.conf ← SMTP-Auth認証設定ファイル編集
pwcheck_method:saslauthd
↓
pwcheck_method:auxprop ← 変更

(4)Maildir形式メールボックス作成
sendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行する。

【既存ユーザ対処】
既存ユーザのホームディレクトリにMaildir形式のメールボックスを作成して、蓄積済のメールデータを当該メールボックスへ移行する⇒メールデータ移行を参照

【新規ユーザ対処】
新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする

[root@centos ~]# mkdir -p /etc/skel/Maildir/new ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(1/4)

[root@centos ~]# mkdir -p /etc/skel/Maildir/cur ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(2/4)

[root@centos ~]# mkdir -p /etc/skel/Maildir/tmp ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(3/4)

[root@centos ~]# chmod -R 700 /etc/skel/Maildir/ ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(4/4)

(5)Maildir形式メールボックス対応
sendmailはMaildir形式メールボックスに対応していないため、ProcmailでMaildir形式メールボックスへ配送するようにする。

[root@centos ~]# vi /etc/procmailrc ← procmail設定ファイル作成
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

(6)未承諾広告メールの削除
未承諾広告メール(件名に「未承諾広告※」と表示されているメール)は受信せずに削除するようにする。

[root@centos ~]# vi /etc/procmailrc ← procmail設定ファイル編集
以下を追加
# 未承諾広告メール削除※システムの文字コードがUTF-8(デフォルト)の場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null

# 未承諾広告メール削除※システムの文字コードがEUCの場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -meZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null


■sendmail再起動

(1)sendmail再起動

[root@centos ~]# /etc/rc.d/init.d/sendmail restart ← sendmail再起動
sendmail を停止中:                                         [失敗]
sendmailを起動中:                                          [  OK  ]
sm-clientを起動中:                                         [  OK  ]

(2)ポート25番のOPEN
ルーター側の設定でポート25番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に25と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=25 にアクセスできました。」と表示されることを確認。


■OP25B対策

OP25B(Outbound Port 25 Blocking)対策参照


■Dovecotインストール


[root@centos ~]# yum -y install dovecot ← Dovecotインストール


■Dovecot設定


[root@centos ~]# vi /etc/dovecot.conf ← Dovecot設定ファイル編集
# Protocols we want to be serving:
#  imap imaps pop3 pop3s
#protocols = imap imaps
protocols = imap imaps pop3 pop3s ← 追加(POPアクセスを追加)

# Default MAIL environment to use when it's not set. By leaving this empty
# dovecot tries to do some automatic detection as described in
# doc/mail-storages.txt. There's a few special variables you can use:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if user there's no domain
#   %h - home directory
#
# You can also limit a width of string by giving the number of max. characters
# after the '%' character. For example %1u gives the first character of
# username. Some examples:
#
#   default_mail_env = maildir:/var/mail/%1u/%u/Maildir
#   default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
#   default_mail_env = mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
#
#default_mail_env =
default_mail_env = maildir:~/Maildir ← 追加(メールボックス形式をMaildir形式とする)


# ':' separated list of directories under which chrooting is allowed for mail
# processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too).
# This setting doesn't affect login_chroot or auth_chroot variables.
# WARNING: Never add directories here which local users can modify, that
# may lead to root exploit. Usually this should be done only if you don't
# allow shell access for users. See doc/configuration.txt for more information.
#valid_chroot_dirs =
valid_chroot_dirs = /home ← 追加※OpenSSHでChrootを設定している場合のみ


■Dovecot起動

(1)Dovecot起動

[root@centos ~]# /etc/rc.d/init.d/dovecot start ← Dovecot起動
Dovecot Imapを起動中:                                      [  OK  ]

[root@centos ~]# chkconfig dovecot on ← Dovecot自動起動設定

[root@centos ~]# chkconfig --list dovecot ← Dovecot自動起動設定確認
dovecot         0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

(2)ポート110番(POPの場合)または143番(IMAPの場合)のOPEN
ルーター側の設定でポート110番(POPの場合)または143番(IMAPの場合)をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に110(POPの場合)または143(IMAPの場合)と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=110(POPの場合)または143(IMAPの場合) にアクセスできました。」と表示されることを確認。


■メールユーザ追加

(1)メールユーザ追加(SSHによるリモート接続はできないようにする場合)
※例としてユーザ名をcentosとする

[root@centos ~]# useradd -s /sbin/nologin centos ← ユーザ追加

[root@centos ~]# passwd centos ← パスワード設定
Changing password for user centos.
New UNIX password:  ← パスワード応答
Retype new UNIX password:  ← パスワード応答(確認)
passwd: all authentication tokens updated successfully.

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除

(2)メールユーザ追加(SSHによるリモート接続もできるようにする場合)
※例としてユーザ名をcentosとする

[root@centos ~]# useradd centos ← ユーザ追加

[root@centos ~]# passwd centos ← パスワード設定
Changing password for user centos.
New UNIX password:  ← パスワード応答
Retype new UNIX password:  ← パスワード応答(確認)
passwd: all authentication tokens updated successfully.

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除

(3)既存ユーザをメールユーザとする場合
※例としてユーザ名をcentosとする

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除


■メールソフト設定(受信メールサーバーをPOPにする場合)

自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期しなくてもいい場合(例:会社で受信したメールは自宅で受信できなくてもいい場合)、受信メールサーバーにPOPを使用する。
ここでは、メールソフトとしてOutlook Expressを使用する。

Outlook Expressを起動し、メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う



「表示名」に送信者の名前(任意)を入力して「次へ」




「電子メールアドレス」に送信者のメールアドレス(例:centos@centossrv.com)を入力して「次へ」




「受信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力
「送信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力して「次へ」




「パスワード」にパスワードを入力して「次へ」




「完了」




追加したアカウントをダブルクリックしてプロパティを開く




「サーバー」タブの「このサーバーは認証が必要」をチェック
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ「設定」ボタンをクリックして次の設定を行う




※SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
「次のアカウントとパスワードでログオンする」をチェック
「アカウント名」にSMTP-Auth用ユーザ名を入力
「パスワード」にSMTP-Auth用パスワードを入力して「OK」




「OK」




■メールソフト設定(受信メールサーバーをIMAPにする場合)

自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期したい場合(例:会社で受信したメールを自宅でも受信したい場合)、受信メールサーバーにIMAPを使用する。
ここでは、メールソフトとしてOutlook Expressを使用する。

Outlook Expressを起動し、メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う



「表示名」に送信者の名前(任意)を入力して「次へ」




「電子メールアドレス」に送信者のメールアドレス(例:centos@centossrv.com)を入力して「次へ」




「受信メールサーバーの種類」で「IMAP」を選択
「受信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力
「送信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力して「次へ」




「パスワード」にパスワードを入力して「次へ」




「完了」




追加したアカウントをダブルクリックしてプロパティを開く




「サーバー」タブの「このサーバーは認証が必要」をチェック
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ「設定」ボタンをクリックして次の設定を行う




※SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
「次のアカウントとパスワードでログオンする」をチェック
「アカウント名」にSMTP-Auth用ユーザ名を入力
「パスワード」にSMTP-Auth用パスワードを入力して「OK」




「IMAP」タブの「送信済みアイテムのパス」に「Sent」と入力
「IMAP」タブの「下書きのパス」に「Drafts」と入力して「OK」




「はい」




「OK」




■メールサーバー確認

・内部で同一ユーザ同士でメールの送受信
・内部で他ユーザ間でメールの送受信
・内部で外部(プロバイダのメールアドレス等)との送受信
・内部で携帯との送受信※
・外部(会社等)で同一ユーザ同士でメールの送受信
・外部(会社等)で他ユーザ間でメールの送受信
・外部(会社等)で外部(プロバイダのメールアドレス等)との送受信
・外部(会社等)で携帯との送受信※

※携帯はドメイン指定受信等でメールサーバーからのメールが拒否されないようにしておくこと


■メール不正中継拒否テスト

RBL.JPで「ホスト名」に自宅サーバーのホスト名(例:centossrv.com)を入力して「Check」ボタンを押下する。
19種類のテストが行われ、ページ最後尾にno relays accepted.と表示されればOK。


 




MySQL5 REPLICATION (MySQL 복제 구현) by Vins

아래 항목은 mysql 5-1.43 버젼에서 테스트 되었으며
mysql 5 이상의 버젼의 문서를 참조하였다

MySQL 복제 구현의 시나리오
 
  MASTER-DB : 192.168.34.72 (TDB1)
  SLAVE-DB : 192.168.34.71 (TDB2)

시나리오 --
Master DB에 이미 운영중인 2년치의 데이터가 들어있고
최근 서버가 불안정해 짐으로 실시간 복제를 구현해 DB이중화를 함이 목적이다
이에 웹소스에서 기존 서버인 TDB1 이 다운될 경우 TDB2에 Connecting 하도록
소스로 구현해 놓았다

(NOTE 설명이나 주의 즉 실행하는 항목이 아님)

사실 아래 STEP 1 ~ STEP 3의 test 까지 순서대로 실행만 해도
무리 없이 복제를 구현할 수 있을 것이다
그럼 STEP 1 Master DB 설정이다

-------------------------------------------------------------------------------------
STEP 1 [MASTER-DB Configuration]

1. connect to master db by root

2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'snsghrepl'@'192.168.34.%' IDENTIFIED BY 'ghrpsns0413';

3. [/etc/my.cnf configure]

log-bin=mysql-bin
server-id=1921683472
NOTE : server-id unique in network and bound from 1 to (2^32)-1 number, recommand ip address with dot
             server-id는 네트워크에서 유일해야 하며 2의32승까지 사용할 수 있다.
             점을 뺀 ip address를 사용하면 아마 유일할 것이다


4. mysql restart 
    4-1. /usr/local/mysql/bin/mysqladimin -uroot shutdown
    4-2. /usr/local/mysql/bin/mysqld_safe --user=mysql & ##(alter enter)
    NOTE : rpm 설치시엔 /etc/rc.d/init.d/mysql restart


5. confirm master db info
    5-1 mysql> FLUSH TABLES WITH READ LOCK;  (data full backup 할꺼니 전체 잠금)
    5-2 mysql> SHOW MASTER STATUS;

+-------------------+----------+---------------+------------------+
 File                         Position        Binlog_Do_DB  Binlog_Ignore_DB
+-------------------+----------+---------------+------------------+
 | mysql-bin.000001 |  106         |                       |                             |
+------------------+----------+---------------+------------------+

1 row in set (0.00 sec)

6. create tar file (NOTE : 테이블 LOCK걸었으니 안심하고 전체백업)

    6-1. cd /usr/local/mysql
    6-2. tar cf /dataCenter/alldb.tar ./usr/local/mysql/data
    (NOTE : mysqldump가 아니라 data 폴더를 전부 가져간다 mysql, information_schema 전부)
    6-3. copy alldb.tar to slave db server (somewhere.. maybe /usr/local/mysql )
    (NOTE : alldb.tar 이라는 이름으로 압축하였으니 이를 Slave DB로 Copy)
7. server reboot
   # reboot (wait a few minutes, 서버 재부팅 할때까지 대기)

8. /usr/local/mysql/bin/mysqld_safe --user=mysql & ##(alter enter)
    NOTE : mysql 을 실행 시킨다.
9. unlock tables;  (백업이 끝났으니 table lock을 풀어주자)
    9-1. # /usr/local/mysql/bin/mysql (access mysql server)
    9-2. mysql> unlock tables;
    9-3. mysql> show master status;    (NOTE : 5-2 와 같으면 됨, 확인작업)
    NOTE : remember value of File Name and Position Number
                 File 필드와 Position 필드의 값을 외워라 (적든가)

10. Master DB Config Complete !!  (Master DB 설정 끝)


STEP 2  [SLAVE-DB Configuration]

1. [/etc/my.cnf configure]  파일내 수정(찾아서 주석 풀거나 server-id만 변경해 주면 됨)
    [mysqld]

log-bin=mysql-bin
server-id=1921683471

NOTE : server-id unique in network and bound from 1 to (2^32)-1 number

2. /usr/local/mysql/bin/mysqladmin -uroot shutdown   (디비 실행 중지)

3. copy alldb.tar in /usr/local/mysql from master-db full back file  
    (NOTE : master full back file 을 소스폴더로 복사)

4. rm -rf /usr/local/mysql/data
    (NOTE : 기존 data폴더를 통채로 지운다 - 완벽한 동기화를 위해서)

5. tar xvf alldb.tar
   (NOTE : recreate /usr/local/mysql/data folder , 압축 풀면 master db의 data폴더가 생성된다)

6. /usr/local/mysql/bin/mysqld_safe --user=mysql &
   (NOTE : Mysql은 서버 재 시작하면 data폴더 이하의 정보를 자동으로 인식한다, database만 제외)

7. /usr/local/mysql/bin/mysql -uroot

    NOTE ; remember filename and position number form STEP1, 9-4
                 9-4에서 외운 정보를 아래에 대입한다
   
    7-1. mysql> CHANGE MASTER TO
                    > MASTER_HOST='192.168.34.72',
                    > MASTER_USER='snsghrepl',
                    > MASTER_PASSWORD='ghrpsns0413',
                    > MASTER_PORT=3306,
                    > MASTER_LOG_FILE='mysql-bin.000001',
                    > MASTER_LOG_POS=106;
       
                   Query OK, 0 rows affected (0.01 sec)

7-2. mysql> START SLAVE;

                    Query OK, 0 rows affected (0.01 sec)

8. Slave DB Config Complete !!  SLAVE DB도 설정 끝


STEP 3. TEST REPLICATION  (이제 테스트)

1. ACCESS MASTER DB
    /usr/local/mysql/bin/mysql -uroot

    mysql> use test;
    mysql> create table replTest (id int, name varcher(20));
    mysql> insert into replTest (1, 'test001');

2. ACCESS SLAVE DB
    /usr/local/mysql/bin/mysql -uroot

    mysql> use test;
    mysql> select * from replTest;
    +------+---------+
     | id      | name      |
    +------+---------+
     | 1       | test001   |
    +------+---------+

NOTE : master db에서 생성하고 insert된 데이터가 slave db에서도 그대로 반영 됨을 알 수 있다

3. Complete TEST !!  (끝)

referance : http://dev.mysql.com/doc/refman/5.1/en/replication-howto-masterbaseconfig.html
참조 : mysql 영문 공식 페이지의 메뉴얼을 참조 하였다
           (개인 블러그, 카페, 기타 웹 사이트에는 허위 정보들이 너무 많았다..)

OpenPNE 3.1 を CentOS 5 にインストールしてみました

OpenPNE開発チームの小川です。




前回はレンタルサーバに OpenPNE 3 をインストールする例を紹介しましたが、今回は自分で管理しているサーバへのインストール例として OpenPNE 3.1.0 を最小セットアップ状態の CentOS 5.3 にインストールする手順をご紹介します。



OpenPNE 3.1 の一般的なインストール方法は、OpenPNE3.1 セットアップ手順 をご覧ください。



はじめに

ここで紹介する手順は OpenPNE を動作させる例として最低限の手順しか記載していないので、実際に公開サーバの設定をする際には参考程度にご利用ください。



以下の手順では sudo を使用していますが、sudo の設定をしていない環境では「sudo」の付いているコマンドは「sudo」を抜いて root ユーザで実行してください。



また、ホスト名として sns.example.com を、OpenPNE を管理する一般ユーザとして admin を例にしていますが、環境に合わせて適宜読み替えてください。



ミドルウェアのインストール

Apache, MySQL, Postfix のインストール

yum コマンドを使ってOS標準のパッケージをそのままインストールします。



$ sudo yum install httpd mysql-server postfix



PHP のインストール

PHP に関してはバージョン 5.2.3 以降が必要なので、個別にインストールします。ソースコードからコンパイルしてももちろんよいのですが、今回は oss.oracle.com で公開されている rpm パッケージを利用しました。



$ sudo yum install aspell curl gmp libxslt wget



$ DIST=http://oss.oracle.com/projects/php/dist/files/EL5/i386

$ wget $DIST/php-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-cli-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-common-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-gd-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-mbstring-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-mysql-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-pdo-5.2.9-1.el5.i386.rpm

$ wget $DIST/php-xml-5.2.9-1.el5.i386.rpm

$ sudo rpm -ivh php-*.rpm

準備中... ########################################### [100%]

1:php-common ########################################### [ 13%]

2:php-cli ########################################### [ 25%]

3:php-pdo ########################################### [ 38%]

4:php ########################################### [ 50%]

5:php-gd ########################################### [ 63%]

6:php-mbstring ########################################### [ 75%]

7:php-mysql ########################################### [ 88%]

8:php-xml ########################################### [100%]



APC のインストール(オプション)

PHP の快適な動作にはアクセラレータの導入が欠かせません。ここではセットアップガイドでも推奨されている APC をインストールしてみます。



$ sudo yum install autoconf213 automake gcc make httpd-devel



$ wget $DIST/php-devel-5.2.9-1.el5.i386.rpm

$ sudo rpm -ivh php-devel-5.2.9-1.el5.i386.rpm



$ sudo yum install php-pear

$ sudo pear channel-update pear.php.net

$ sudo pear upgrade-all --ignore-errors

$ sudo pecl install APC

Use apxs to set compile flags (if using APC with Apache)? [yes] : yes

...

install ok: channel://pecl.php.net/APC-3.0.19

configuration option "php_ini" is not set to php.ini location

You should add "extension=apc.so" to php.ini

$ echo "extension=apc.so"
sudo tee /etc/php.d/apc.ini



ミドルウェアの設定

Apache の設定

VirtualHost の設定を httpd.conf の末尾に追加します。



$ sudo vi /etc/httpd/conf/httpd.conf



<VirtualHost *:80>

ServerName sns.example.com

DocumentRoot /var/www/sns/web

<Directory /var/www/sns/web>

AllowOverride All

</Directory>

</VirtualHost>



OpenPNE を設置するディレクトリを作成します。



$ sudo mkdir /var/www/sns

$ sudo chown admin. /var/www/sns



設定ファイルが間違っていないかどうかテストします。



$ sudo /etc/init.d/httpd configtest

Warning: DocumentRoot [/var/www/sns/web] does not exist

Syntax OK



/var/www/sns/web は後の手順で作成するので、この Warning が出るのはよしとして進めます。



デーモンの起動

$ sudo /etc/init.d/httpd start

$ sudo /etc/init.d/mysqld start

$ sudo /etc/init.d/postfix start



MySQL のユーザ設定

まず、root ユーザのパスワードを設定します。new-password の部分は変更してください。



$ mysql -u root



mysql> UPDATE mysql.user SET Password = PASSWORD('new-password') WHERE User = 'root';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3 Changed: 3 Warnings: 0



mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)



OpenPNE 用に openpne というユーザを作成し、openpne3 というデータベースに対するアクセス権限を与えます。pasuwado の部分は変更してください。



mysql> GRANT USAGE ON *.* TO 'openpne'@'localhost' IDENTIFIED BY 'pasuwado';

Query OK, 0 rows affected (0.00 sec)



mysql> GRANT ALL ON openpne3.* TO 'openpne'@'localhost';

Query OK, 0 rows affected (0.00 sec)



ファイアーウォールの設定

外部から HTTP でアクセスできるよう設定します。



$ sudo system-config-securitylevel-tui



「カスタマイズ」 → 「WWW (HTTP) 」にチェック → 「OK」 → 「OK」



OpenPNE 3.1 のインストール

ソースコードのダウンロード

SourceForge.net の OpenPNE プロジェクトのページから OpenPNE 3.1.0 の zip アーカイブをダウンロード・展開します。



$ sudo yum install unzip

$ cd /var/www/sns

$ wget http://nchc.dl.sourceforge.net/sourceforge/openpne/OpenPNE-3.1.0.zip

$ unzip OpenPNE-3.1.0.zip



キャッシュファイルの削除

OpenPNE 3.1.0 の zip アーカイブには誤ったキャッシュファイルが含まれている可能性があるので、念のためキャッシュファイルの削除をしてください。(3.1.0 バージョン固有の問題で、通常のインストールでは必要ありません)



$ cd OpenPNE-3.1.0

$ rm cache/*



プラグインインストール

OpenPNE 3.1.0 では初期データの登録処理の関係上、openpne:install タスクを実行する前に opPlugin:sync タスクを実行してあらかじめプラグインをインストールしておく必要があります。



せっかくなので、先日リリースされたばかりの opDiaryPlugin も一緒にインストールしておきましょう。



$ php symfony opPlugin:sync

$ php symfony opPlugin:install --stability=beta opDiaryPlugin



openpne:install タスクの実行

$ php symfony openpne:install



openpne:install タスクを実行すると DB のセットアップに必要な情報を聞かれるので、サーバ環境に合わせて入力していきます。



Choose DBMS (mysql, pgsql or sqlite)

使用する DBMS の種類を入力します。

ここでは、「mysql」と入力します。

Type database username

データベースのユーザ名を入力します。

作成した MySQL のユーザ名「openpne」を入力します。

Type database password (optional)

データベースのパスワードを入力します。

作成した MySQL ユーザのパスワード「pasuwado」を入力します。

Type database hostname

データベースサーバのホスト名を入力します。

ここでは「localhost」と入力します。

Type database port number (optional)

データベースのポート番号を入力します。未入力の場合は DBMS ごとのデフォルト値が使用されます。

ここでは未入力のまま Enter を押します。

Type database name

データベース名を入力します。

ここでは例として「openpne3」と入力します。

Type database socket path (optional)

データベース接続に使用するソケットのパスを入力します。

ここでは未入力のまま Enter を押します。

最後に入力した内容の確認をします。問題なければ「y」を入力します。



The DBMS mysql

The Database Username openpne

The Database Password ******

The Database Hostname localhost

The Database Port Number

The Database Name openpne3

The Database Socket



Is it OK to start this task? (y/n)y



公開ディレクトリの設定

ここまでの手順で OpenPNE 3 が動作する状態になっているので、公開ディレクトリにシンボリックリンクを作成します。



$ cd /var/www/sns

$ ln -s OpenPNE-3.1.0/web



ブラウザからアクセス

ブラウザから「http://sns.example.com/」にアクセスして OpenPNE 3 のログイン画面が表示されれば OK です。(初期アカウントはセットアップガイドにある通り、sns@example.com / password となっています。変更して使ってください)



また、管理画面は「http://sns.example.com/pc_backend.php」へアクセスすれば表示されます。(初期アカウントはセットアップガイドにある通り、admin / password となっています。変更して使ってください)



前のページ 次のページ

コメント:5

kawakami 09-06-02 (火) 20:00 すばらしいチュートリアルです。

私のようなスキルの人間でも、2時間くらいでインストールできました。

本当に助かりました。



手嶋守 09-08-02 (日) 18:26 20090802現在、パッケージの配置が変更されていました。



DIST=http://oss.oracle.com/projects/php/dist/files/EL5/i386



wget $DIST/php52-5.2.10-2.el5.i386.rpm

wget $DIST/php52-cli-5.2.10-2.el5.i386.rpm

wget $DIST/php52-common-5.2.10-2.el5.i386.rpm

wget $DIST/php52-gd-5.2.10-2.el5.i386.rpm

wget $DIST/php52-mbstring-5.2.10-2.el5.i386.rpm

wget $DIST/php52-mysql-5.2.10-2.el5.i386.rpm

wget $DIST/php52-pdo-5.2.10-2.el5.i386.rpm

wget $DIST/php52-xml-5.2.10-2.el5.i386.rpm



ゲン・テイ・チー 09-08-06 (木) 19:01 皆様



Openpne3.xを使いたいです。

携帯から画像の投稿などをできるようにしたいです。

メールサーバの設定がわかりませんでした。

教えていただけませんか。



(私はベトナム人ですから、日本語がまだ下手です)



よろしくお願いいたします。



John 09-09-10 (木) 17:47 現在はなぜかmbstringが見つからないですね。

wget $DIST/php52-mbstring-5.2.10-2.el5.i386.rpm



匿名 10-02-24 (水) 2:59 ギブアップ。

XOOPSにトライします。

Linux IP, PORT 열고 닫기 (iptables)

<port 1234 를 udp로 open>


# iptables -A INPUT -p udp --dport 1234 -j ACCEPT

<port 1234 를 close>

# iptables -A INPUT -p udp --dport 1234 -j DROP

ps.2 tcp로 열고 싶은경우 udp -> tcp 로 바꾸어 주면 된다.


iptables 를 사용하면 IP를 차단할 수 있습니다.

 # iptables -A INPUT -t filter -s 211.218.150.250 -j DROP

 # iptables -A INPUT -t filter -s 211.218.150.200 -j DROP

위와 같이 하면 211.218.150.250 , 211.218.150.200 에서 서버에 접근을 할 수 없습니다.


한개의 IP 대신에 211.218.150.0/24 라고 하면

211.218.150.0~255 까지 256개의 IP를 한꺼번에차단합니다.

 # iptables -A INPUT -t filter -s 211.218.150.0/24 -j DROP

211.218.0.0/16 이면 65536 개의 IP를

211.0.0.0/8 이면 167510016 개의 IP를 차단할 수 있습니다.