Android, Oracle, MS-SQL, PHP, JAVA, XML, C#, php, memcache, linux, centos6, mysql, mongodb
Memcached 설치 및 설정하고 테스트 하기 by Vins
memcached (서버 데몬)
memcache (php-memcache 클라이언트) 이 두개의 버젼을 일치해야 한다
설치 진행은
먼저 서버 memcached 1.4.5
클라이언트 memcache 2.2.5를 사용하였다
버젼이 안 맞으면 테스트가 되지 않는다
memcached
•memcached: 基本情報
•memcacheセットアップ
◦memcacheセットアップ[peclパッケージ編]
■memcacheインストール
■PECL::memcacheパッケージコンパイル
■PHP設定
•memcachedセットアップ
◦memcachedセットアップ[peclパッケージ編]
■memcached実行ユーザー作成
■memcachedインストール
■memcachedコンパイル
■memcached動作確認
■memcachedの設定確認
■自動起動設定
■サービスの起動
◦memcachedインストール[yum編]
■yumのリポジトリ更新
■memcachedのインストール
■memcachedの起動
•[資料]セッションセーブハンドラに登録
◦php.iniの場合
◦.htaccessの場合
◦プログラムの場合
memcached: 基本情報 †
http://memcached.org/
特集:memcachedを知り尽くす
http://gihyo.jp/dev/feature/01/memcached
memcacheはデーモン(deamon):memcached
クライアント(client):memcache
で構成されています。
↑
memcacheセットアップ †
↑
memcacheセットアップ[peclパッケージ編] †
↑
memcacheインストール †
参照PHP インストール手順
memcacheのパッケージをダウンロードする
# echo "http_proxy=http://192.168.34.2:8080/" >> /etc/wgetrc
# #IDC以外の時は必要ない
# #間違えて作ってしまった場合は
# #rm /etc/wgetrc で消しておく
# cd /usr/local/src
# wget http://pecl.php.net/get/memcache-2.2.5.tgzダウンロードしたパッケージを解凍する
# tar -zxvf memcache-2.2.5.tgz
# cd memcache-2.2.5↑
PECL::memcacheパッケージコンパイル †
phpizeを使ってPECL::memcacheのパッケージをコンパイル
# /usr/local/php/bin/phpize && ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config && makememcacheのモジュールをphpのモジュールにコピーします。
# cp modules/memcache.so /usr/lib/php/modules/↑
PHP設定 †
php.iniに次の設定を行う。
※phpがrpmもしくyumインストールの場合は
memcached.iniを追加して設定を書きこみます。
# vi /etc/php.d/memcached.ini■設定内容
[memcache]
extension=memcache.so
memcache.allow_failover = 1
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
session.save_handler = memcache
session.save_path = tcp://127.0.0.1:11211
↑
memcachedセットアップ †
↑
memcachedセットアップ[peclパッケージ編] †
↑
memcached実行ユーザー作成 †
memcached用のアカウント「memcached」を作成する
# sudo groupadd memcached
# sudo useradd -g memcached -s /sbin/nologin -d /nonexistent memcached↑
memcachedインストール †
memcachedのパッケージをダウンロードする
# cd /usr/local/src
# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
# tar zxvf memcached-1.4.5.tar.gz
# cd memcached-1.4.5↑
memcachedコンパイル †
コンパイルします。
# ./configure
# make
# make install※パッケージがない場合はyumでインストール
# yum install -y libevent-devel.i386↑
memcached動作確認 †
# memcached -d -m 64 -p 11211 -l 127.0.0.1 -u memcached↑
memcachedの設定確認 †
/etc/init.dにスクリプトを書く
# vi /etc/init.d/memcached#!/bin/bash
#
# memcached
#
# chkconfig: - 55 45
# description: The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# Source function library.
. /etc/rc.d/init.d/functions
#Config
TARGET=memcached
DSN_BIN=/usr/local/bin/${TARGET}
PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=768
OPTIONS="-l 127.0.0.1"
if [ -f /etc/sysconfig/memcached ]; then
. /etc/sysconfig/memcached
fi
start()
{
echo -n "Starting ${TARGET}: "
daemon ${DSN_BIN} -d -p ${PORT} -u ${USER} -m ${CACHESIZE} ${OPTIONS}
echo
touch /var/lock/subsys/memcached
}
stop()
{
echo -n "Shutting down ${TARGET}: "
killproc ${DSN_BIN}
echo
rm -f /var/lock/subsys/memcached
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status ${TARGET}
;;
restart|reload)
stop
start
;;
*)
echo "Usage: `basename $0` {start|stop|status|reload|restart}" >&2
exit 1
esac
exit 0
権限を変更する
# chmod 777 /etc/init.d/memcached↑
自動起動設定 †
# chkconfig --add memcached
# chkconfig memcached on
# chkconfig --list memcached↑
サービスの起動 †
/etc/init.d/memcached restart↑
memcachedインストール[yum編] †
↑
yumのリポジトリ更新 †
標準ではmemcachedが追加されていないのでのリポジトリを更新する。
# cd /usr/local/src
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpmこれでリポジトリにmemcachedが追加される
↑
memcachedのインストール †
yumで必要なパッケージをインストール
# yum -y install libevent memcached php-pecl-memcache zlib-devel re2cmemcachedの設定は/etc/sysconfig/memcachedを編集する。動かすだけならデフォルトのままでOK。
↑
memcachedの起動 †
/etc/init.d/memcached startサービスを自動起動にしておく。
chkconfig memcached on↑
[資料]セッションセーブハンドラに登録 †
↑
php.iniの場合 †
session.save_handler = memcache
session.save_path = tcp://127.0.0.1:11211↑
.htaccessの場合 †
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"↑
プログラムの場合 †
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
다 설정 하였다면 ..
telnet 127.0.0.1 11211 접속하여
stats <-- 입력해 보라
응답이 있다면 아래 목록이 출력 될 것이다 .
이하는 ssh의 까만 화면이라고 생각해자
# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
stats
STAT pid 22991
STAT uptime 1612
STAT time 1271830666
STAT version 1.4.5
STAT pointer_size 32
STAT rusage_user 0.000999
STAT rusage_system 0.008998
STAT curr_connections 11
STAT total_connections 16
STAT connection_structures 13
STAT cmd_get 4
STAT cmd_set 4
STAT cmd_flush 0
STAT get_hits 3
STAT get_misses 1
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 3080
STAT bytes_written 2975
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 744
STAT curr_items 1
STAT total_items 4
STAT evictions 0
STAT reclaimed 0
봤으면 quit !!
Memcached 설치 및 설정하기 그리고 주의 사항
- libevent 설치
Memcached 는 libevent 를 필요로 하므로 먼저 설치를 진행하겠습니다.
http://monkey.org/~provos/libevent/
[root@yongobk ~]# cd /usr/local/src
[root@yongobk ~]# wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
[root@yongobk ~]# tar xzvf libevent-1.4.13-stable.tar.gz
[root@yongobk ~]# cd libevent-1.4.13-stable
[root@yongobk ~]# ./configure
[root@yongobk ~]# make ; make install
- Memcached 설치
아래 주소에서 최신버전을 다운로드 하고 설치를 진행합니다.
http://code.google.com/p/memcached/downloads/list
[root@yongobk ~]# cd /usr/local/src
[root@yongbok ~]# wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
[root@yongbok ~]# tar xzvf memcached-1.4.4.tar.gz
[root@yongbok ~]# cd memcached-1.4.4
[root@yongbok ~]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local
[root@yongbok ~]# make ; make install
- Memcached 실행
[root@yongbok ~]# /usr/local/memcached/bin/memcached -u nobody &
- Memcached PHP Extension 설치
http://pecl.php.net/package/memcache
[root@yongobk ~]# cd /usr/local/src
[root@yongbok ~]# wget http://pecl.php.net/get/memcache-2.2.5.tgz
[root@yongbok ~]# tar xzvf memcache-2.2.5.tgz
[root@yongbok ~]# cd memcache-2.2.5
[root@yongbok ~]# /usr/local/php5/bin/phpize
[root@yongbok ~]# ./configure --with-php-config=/etc/php/bin/php-config
[root@yongbok ~]# make ; make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
php.ini 파일에 아래 내용 추가 합니다.
[root@yongbok ~]# vi /usr/local/apache2/conf/php.ini
[memcache]
extension_dir=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
extension=memcache.so
memcache.allow_failover=1
memcache.max_failover_attempts=100
memcache.chunk_size=32768
memcache.default_port=11211
- Apache 재시작
[root@yongbok ~]# /usr/local/apache2/bin/apachectl restart
- PHP 에 Memcached 가 적용 되어 있는지 확인
[root@yongbok ~]# echo '' > /var/www/phpinfo.php
참고
http://www.ibm.com/developerworks/kr/library/os-php-fastapps3/
[세션을 메모리캐싱을 사용할 경우 주의 사항 ]
memcache를 사용하는 중 세션 정보가 유지되지 않아 그것을 해결하는데
많은 시간을 소비하였습니다. 저의 경우 모델자체를 세션에 저장하였었는데 그것의 데이터가 많아지면 저절로 기존 데이터가 사라지는 것이었습니다. 그래서 필요한 데이터만 저장하니까 그러한 문제는 발생되지 않았습니다
memcached + Session Database
- memcached의 원래 목적이 데이터베이스나 파일 데이터를 캐시하는 것임
- 세션 데이터를 데이터베이스로 만들어 넣고, session handler 부분에서 memcached를 호출하게 만들면 될 듯.
- 데이터베이스를 사용하는 안정성 + 세션 공유 문제 해결 + memcached에 의한 성능 향상까지 기대할 수 있지 않을까?
- 이 부분은, 좀더 생각해보면서, 방법을 찾아봐야 할 듯...
<- 곰곰히 생각해보니, 약간 부정적. 세션 데이터는 read보다는 update가 압도적으로 많음. 따라서, 캐시 효과는 작음.
Memcache & MySQL PHP Session Handler PHP code for session db + memcached
http://www.softwareprojects.com/resources/programming/t-php-sessionsave_handler-and-database-sessions-debu-1797.html
http://www.softwareprojects.com/resources/programming/t-memcached-for-php-sessions-1654.html
OpenSSL + Apache 2.0.X (RPM설치시 예제)
■mod_sslインストール
|
■WebサーバーSSL設定
| (1)サーバー用秘密鍵・証明書作成 |
|
| ※パスワードを削除するのは、Webサーバー起動時にパスワードを要求されないようにするため |
(2)SSL設定 |
|
■Apache設定反映
| (1)Apache設定反映 |
|
(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に変換するのが一般的である |
|
(2)sendmail設定 |
|
(3)SMTP-Auth設定 SMTP-Auth用ユーザ名、パスワードにシステムのユーザ名、パスワードを使用する場合 |
|
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合 |
|
(4)Maildir形式メールボックス作成 sendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行する。 【既存ユーザ対処】 既存ユーザのホームディレクトリにMaildir形式のメールボックスを作成して、蓄積済のメールデータを当該メールボックスへ移行する⇒メールデータ移行を参照 【新規ユーザ対処】 新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする |
|
(5)Maildir形式メールボックス対応 sendmailはMaildir形式メールボックスに対応していないため、ProcmailでMaildir形式メールボックスへ配送するようにする。 |
|
(6)未承諾広告メールの削除 未承諾広告メール(件名に「未承諾広告※」と表示されているメール)は受信せずに削除するようにする。 |
|
■sendmail再起動
| (1)sendmail再起動 |
|
(2)ポート25番のOPEN ルーター側の設定でポート25番をOPENする。 ※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照 ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に25と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=25 にアクセスできました。」と表示されることを確認。 |
■OP25B対策
| OP25B(Outbound Port 25 Blocking)対策参照 |
■Dovecotインストール
|
■Dovecot設定
|
■Dovecot起動
| (1)Dovecot起動 |
|
(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とする |
|
(2)メールユーザ追加(SSHによるリモート接続もできるようにする場合) ※例としてユーザ名をcentosとする |
|
(3)既存ユーザをメールユーザとする場合 ※例としてユーザ名をcentosとする |
|
■メールソフト設定(受信メールサーバーを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。 |
Linux IP, PORT 열고 닫기 (iptables)
# 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를 차단할 수 있습니다.
리눅스 sendmail 설정 완벽 가이드
메일서버의 구성을 놓고 얘기하자면 센드메일 서버만으로 이루어 지는것이 아니다.
정확히 말해 센드메일서버는 보내는 메일서버 즉 메일을 받기위함이 아닌 보내기위한 서버 SMTP(Simple Mail Transfer Protocol) 서버를 얘기 하는것이다.
메일서버에 대한 이해가 잡혀있지 않는 상태에서는 센드메일 서버를 논하기가 어렵다.
일반적인 메일서버의 구성을 보자면 메일을 메일을 보내기위한 SMTP 서버와 반대로 메일을 받기위해 존재하는 POP3서버나 IMAP 서버로 나뉜다.
이중 센드메일은 SMTP 서버에 속하며 받는 메일서버의 경우 위에서 언급한대로 따로 구성된다.
물론 클라이언트(사용자) 입장에서 보면 이들은 하나로 뭉처진 동일한 시스템으로 인식될수 있다.
예를 들어 인터넷이 보급되면서 이제는 너무도 일반화된 웹메일 서비스(다음메일 혹은 핫메일등) 또한 이 메일서버의 구성을 기본으로 웹상에서 메일의 송수신을 제어할수 있도록 PHP나 ASP등의 서버기반 프로그램 언어를 통해 이루어지는 서비스이다.
웹 메일의 관점에서 보자면 사용자들은 별도의 설정없이 메일의 보내기와 받기 서비스를 동시에 마치 하나의 시스템 처럼 생각하며 이용할수 있지만 실제의 구성은 앞에서 언급한대로 각각의 나누어진 서비스 들이다.
자 이제부터 센드메일 관련된 파일들을 알아보고 하나하나 세팅해나가 보자.
▶ 센드메일 서버 주요 설정파일과 관련 파일 및 디렉토리의 쓰임세
/var/spool/mqueue ------------------ ①
/var/spool/mail ------------------ ②
/etc/mail/access ------------------ ③
/etc/aliases ------------------ ④
/etc/mail/local-host-names ------------------ ⑤
/etc/mail/sendmail.mc ------------------ ⑥
/etc/mail/sendmail.cf ------------------ ⑦
/etc/mail/virtusertable ------------------ ⑧
① mqueue 는 사용자가 메일을 보낼때 사용하는 SMTP 서버에서 메일을 발송하기전 임시적으로 사용자의 메일을 보관하는 곳이다.
② mail은 다른사용자에 의해 전송된 메일이 내 내 SMTP 서버에 임시적으로 저장되는곳이며 POP3 서버에 의해 메일이 전달될때까지 보관하게 된다. 즉 어떻게 보면 SMTP서버는 우체통과 우체부의 역활을 모두 수행하면서 한편으로는 POP3라는 메일 전달자가 메일을 가져가기 전까지의 우편함의 역활도 수행하게 되는것이다.
③ access 파일은 SMTP 서버의 이용을 제한하는 설정파일로서 다음과 같은 설정형식을 보인다.
# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
mail.xfeelis.pe.kr RELAY
xfeelis.pe.kr RELAY
xfeel@xfeelis.pe.kr RELAY
211.188.120.198 RELAY
211.188.120.0 RELAY
spam.pe.kr REJECT
admin@spam.pe.kr REJECT
spamer@spam.pe.kr DISCARD
xfeel@spam.pe.kr OK
- 보기에서와 같이 RELAY 설정한 부분들은 메일의 수발신을 허용하는 설정이다. 다만 access 파일에서의 RELAY 설정은 우선순위를 정하자면 2순위로 생각해야 한다.
그 이유를 설명하자면 뒤에서 다시 언급할 부분인 sendmail.mc 파일과 sendmail.cf 파일의 설정 내역에 따라 외부 네트워크에서의 접근 즉 내부가 아닌 외부에서 smtp를 이용하고자 자신의 메일계정이나 IP를 RELAY 해두었다고 해도 인증 및 제한에 걸려 접근거부 처리가 되는 경우가 있다.
그 이유는 레드헷 계열 7.1 이상의 배포 버전에 설치된 센드메일의 경우 기본적인 설정이 localhost 127.0.0.1 즉 로컬 네트워크나 로컬서버를 통한 메일의 발신을 제외하고 모두 거부하도록 정하고 있다.
이유는 샌드메일서버가 외부 스패머에 의해 스팸메일이 뿌려지는 경유지가 되는것을 막고자 하는 스팸 거부/보안정책 때문이다.
이 제한을 풀어주기 위해서는 다음과 같이 sendmail.mc 파일의 'DAEMON_OPTIONS' 부분을 수정하거나 해당 지시자 자체를 삭제하여야 한다.
[root@xfeelis /]# vi /etc/mail/sendmail.mc
...
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
...
센드메일의 설치 버전에 따라 약간의 기본 설정값이 다를수 있으나 레드헷 배포판에 포함되어 있는 샌드메일의 경우 위지시자 자체를 삭제하거나 Addr 부분의 IP를 0.0.0.0 으로 수정해주면 된다. 단 절대 #처리는 하지말라. 서버관리자 그룹 슈퍼유저코리아 센드메일 관련 문서를 보면 주석 #처리시 오류가 날수 있음을 알리고 삭제나 변경을 권장하고 있다.
이유는 sendmail.mc 파일의 경우 주석구문 앞에 dnl을 같이 표기하도록 하고 있지만 위의 옵션의 경우 기본값이 활성화인 이유로 행의 첫부분에 dnl 처리가 되지 않아있다. 그렇기에 해당 사항을 잘 모르는 관리자의 경우 그냥 주석처리만 해버리고 설정오류를 찾지못해 애를 먹는 경우가 있다.
이제 본 강좌에서 다루고 있는 Kore 리눅스 배포판에 설치된 센드메일의 sendmail.mc 파일의경우를 보자. 다음과 같은 기본값을 가지고 있을것이다.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
이미 기본 설정값이 Addr 부분을 변경해주고 있음으로 당연히 뒷부분의 dnl 부분만 삭제해주면 되는것이다. 역시 릴리즈 버전인 국내 배포판이 좋기는 좋다. 알아서 이런 부분들을 염두해두어 수정해 주고있으니... >_<
자 이제 다시 access 파일의 설정으로 돌아가보자 자세한 sendmail.mc 파일의 설정에 관해서는 뒤에서 다시 다룰것이니 조급해 하지말자 ㅡㅡa
RELAY 설정에 해당하는 값은 위에서 보는바와 같이 해당 도메인, 해당 이메일, 해당 IP, 해당 네트워크 등으로 허용할수 있다. 위의 설정을 참조하여 자신만의 릴레이 설정을 해보도록 하자.
다음은 REJECT 설정이다. REJECT 설정은 RELAY 설정과 반대로 수/발신 거부 설정이다.
이역시 해당 도메인, 해당 이메일, 해당 IP, 해당 네트워크등으로 나누어 설정할수 있다.
다음은 DISCARD 설정이다. 이는 스팸에일을 받되 받은후 POP3 서버가 메일을 가져가지 않도록 바로 폐기해 버리며 메일을 발신한 스패머에게는 폐기통보를 하지않는다 즉 스패머는 메일이 정상적으로 발신된줄 알것이다.. 바보처럼... ㅡ_ㅡ;
다음 설정은 OK 값이다. OK는 특정 도메인 또는 특정 IP나 네트워크 그룹이 REJECT 처리 되어있다고 하더라고 지정한 이메일주소나 IP등에 관계된 메일은 예외적으로 허용처리를 한다는 뜻이다.
예를 들면 이런경우가 있다. 만약 필자가 악명높은 스패머라고 치자. ㅡㅡ;;
필자는 관련 스패머 그룹에서 관련 스팸기법등을 공유할것이다. 어떤 새로운 스패머가 필자의 스팸기법에 관련한 메일링 리스트에 가입하여 필자의 이메일을 받기위해서는 스패머 그룹의 도메인 자체는 거부되어 있겠지만 필자의 이메일 만은 예외로 처리해야 할것이다.
이럴때 쓰는것이 OK 설정 값이다.
물론 OK 설정값을 다른 용도로 활용할수도 있지만 통상적으로 예외처리에 관련된 설정을 주고자 할때 쓰이게 되는것이다.
④ aliases 파일은 말그대로 별칭 설정파일이다. 즉 root 에게로 온 메일을 다른 사용자 계정으로 돌리고 싶다던가 할때 쓰는 것이다.
이 기법을 잘 이용하면 소규모의 메일링 리스트도 운용할수 있다.
자 그 기법을 한번 둘러보자.
[root@xfeelis /]# vi /etc/aliases
...
# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root
root: xfeel
...
위 설정을 살펴 보자. 위 설정은 mailer-daemon 이라는 계정 즉 sendmail 데몬의 제어를 위해 만들어진 mailer-daemon 계정으로 오는 관련 로그메일을 최종적으로 xfeel 계정 사용자에게 보내주고 있는것이다.
즉 mailer-daemon 은 postmaster 로 별칭 설정 되었으며 다시 postmaster 는 root 로 또 다시 root 는 xfeel 사용자에게 별칭 설정 되어진것이다.
기본적인 설정값에 의한다면 root: xfeel 의 설정은 없기 때문에 sendmail 에 관련된 로그 메일은 root 계정으로 보내어 지겠지만 필자는 이를 다시 xfeel 계정으로 돌려주고 있는것이다.
뭐 굳이 이렇게 까지 설정할 필요가 있느냐고 반문하는 독자가 있다면 뭐라 할말은 없지만 보안적인 요소를 위해 필자는 이렇게 조치하고 있다.
메일을 확인하기 위해서라면 서버에 직접 원격접속 혹은 콘솔상에서 확인하지 않는이상 대부분의 사용자가 Outlook Express 등을 이용할것이다.
만약 root로 보내어진 메일을 Outlook Express등의 메일 확인 프로그램에서 보고자 한다면 해당 프로그램에 root 계정의 패스워드를 사용해야 할것이다.
일반적으로 root 패스워드의 경우 사전상의 단어나 연속적인 숫자등으로 이루어진 패스워드를 사용하지 않는것이 원칙이기에 매우 길고 복잡하게 설정되는것이 일반적이다.
때문에 대부분의 사용자의 경우 계정과 패스워드를 아웃룩에 저장하여 바로 사용하는 경우가 많다. 그럼 root 패스워드를 Outlook Express 따위의 프로그램에 저장하여 사용할것인가?
만약 이런 발상을 하고있는 리눅서가 있다면 당장에 버려라...
보안에 매우 취약하다.
Outlook Express 프로그램은 MS 에서도 인정한 보안 취약점을 가지고 있는 매우 귀여운 놈이다.. ㅡ_ㅡ
만약 크래커가 독자들이 사용하는 윈도우PC를 크래킹 하여 Outlook Express 에 저장된 root 계정의 패스워드를 습득한다면?
혹은 독자들이 사용하는 그밖에 메일확인 프로그램을 크랙킹하여 root 패스워드를 습득한다면?
생각하기 싫다.. 더설명할 이유가 없을것이라고 보며 다음으로 넘어가자 ㅡㅡa
자 이제 소규모 메일링 리스트 운용에 대해서 다뤄 보자.
독자들이 운영하는 리눅스 서버에 다음과 같은 계정들이 생성되어 있다고 가정해 보자.
[root@xfeelis /]# vi /etc/passwd
root
admin
adminuser1
adminuser2
adminuser3
user1
user2
user3
만약 메일을 보내고자 하는사람이 support@xfeelis.pe.kr 에 메일을 보낼때 각각 admin, amdinuser1,2,3 계정에 모두 메일이 가도록 설정하고 싶다면 어떻게 해야 할것인가?
물론 보는것과 같이 support 란 계정은 따로 생성되어 있지 않은 상황이다. (뭐 생성되어 있다고 해도 결과에는 차이가 없으나.. 일단 그렇다고 가정하자)
별칭기능을 활용한 소규모 메일링 리스트 기법이 이것이다.
[root@xfeelis /]# vi /etc/aliases
...
# Person who should get root's mail
support: admin,adminuser1,adminuser2,adminuser3
...
어떤가 대단하지 않은가? 이렇게 간단한 설정으로 메일 그룹을 지정하고 운용할수 있다니..
잘활용하면 여러모로 쓰임세가 많다. 연구해 보자.
⑤ local-host-names 파일은 메일의 최종 수신지를 지정하는 곳이다. 즉 쉽게 얘기하자면 이런경우가 있다. 독자들의 샌드메일 서버를 거처가는 메일중 최종 수신지가 독자들의 서버인 메일이 서버에 저장되기 위해서 독자들의 도메인 목록을 등록하는것이다. 만약 독자들이 웹호스팅 을 위한 서버를 운영하고 있다고 가정하면 독자 자신의 도메인 뿐만 아니라 고객의 도메인까지 등록해두어야 메일이 정상적으로 전달되는 것이다.
설정은 다음과 같다.
[root@xfeelis /]# vi /etc/mail/local-host-names
# local-host-names - include all aliases for your machine here.
xfeelis.pe.kr
xfeelis.co.kr
xfeelis.or.kr
userdomain.pe.kr
userdomain.co.kr
그냥 위와 같이 도메인만 설정해 주면 된다.
⑥ sendmail.mc 파일은 샌드메일 서버의 주요 설정파일중 하나이며 /etc/mail/sendmail.mc 파일을 바탕으로 M4 유틸을 이용하여 /etc/mail/sendmail.cf 파일을 생성하게 된다.
sedmail.mc 파일중 가장 중요한 지시자는 역시 앞부분에서 언급한 외부네트워크에 대한 smtp 이용 제한을 풀어주는 부분과 지금부터 다뤄가고자 하는 SMTP 인증에 관한 부분이다.
앞에 access 부분에서 잠시 거론한대로 외부네트워크에 대한 smtp 이용을 풀어주었다면 샌드메일 서버가 가지고 있는 취약점을 이용하여 스팸메일의 경유지 혹은 스팸서버가 될수 있는 가능성이 존재하는것이다.
이부분을 그냥 넘겨버린다면 심각한 상황이 초래된다. 스팸메일에 의해 샌드메일서버는 과부하가 걸려 시스템의 자원을 모두 고갈시킬것이며 그것마저 다된다면 메일서버는 다운되고 말것이다.
이런것을 막기위한 방법중 하나가 바로 앞에서 언급한 access 파일 운영정책과 지금부터 거론할 SMTP 인증에 대한 부분이다.
사용자가 smtp 서버를 이용하여 외부 네트워크로 메일을 발신하고자 할때 인증절차를 거처서 이용하도록 하는것이다.
실제로 대부분의 메일 호스팅이나 웹호스팅 제공하는 업체에서 이 SMTP 인증 기법을 사용하며 해당 사용자들에게 Outlook Express 등의 메일 송수신 프로그램 옵션에서 SMTP 인증부분을 체크 할것을 공지하고 있다.
그럼 SMTP 인증부분을 활성화 해보자.
[root@xfeelis /]# vi /etc/mail/sendmail.mc
...
define(`confAUTH_OPTIONS', `A')dnl
...
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl <- dnl 부분 삭제
...
...
위 설정에서 define(`confAUTH_OPTIONS', `A') 부분은 dnl 처리를 해줘야 하며 define(`confAUTH_MECHANISMS' 부분은 맨뒤에 dnl을 삭제해야 SMTP 인증기능이 활성화 된다.
위와 같이 설정해 주었다면 이제 다음과 같이 m4 유틸명령어를 사용하여 sendmail.cf 파일을 생성해 보자.
[root@xfeelis /]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
⑦ sendmail.cf은 전자에 sendmail.mc 파일을 통하여 생성된 세부 설정파일 정도로 이해하면 될것이다.
sendmail.cf 파일에서 눈여겨 봐야할 지시자들은 다음과 같다.
FW 지시자 : FW 지시자는 메일의 최종수신지 설정파일에 경로를 지정하는 곳으로서 sendmail 8.9.x 버전까지는 sendmail.cw 의 값으로 되어있지만 8.10.x 이후 버전부터는 local-host-names 파일로 설정되어 있다. 독자들이 사용하는 배포판에 포함된 센드메일의 버전을 확인후 local-host-names 로 변경해주자.
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names
MaxMessageSize : 첨부파일을 포함한 메일 메시지 최대크기 제한 설정 부분
# maximum message size
O MaxMessageSize=20000000
메일의 크기가 20M를 넘는다면 메일은 발신되지 못한다.
MinQueueAge : 임시보관 최소 시간 설정 부분
뒤에서 언급하게 될 Timeout 설정값 이전에 적용될 우선적인 옵션으로 발송에 실패한 메일이 다시 재발송을 시도하기까지의 대기 시간을 설정 한다.. 기본값은 30분이며 기본적으로 서버부하를 줄이기 위해 # 주석처리 되어있지만 필요로 한다면 사용하여도 무방하다.
# minimum time in queue before retry
O MinQueueAge=30m
LogLevel : sendmail 이 가동되면서 발생되는 로그의 기록에 관련한 레벨을 설정
# log level
O LogLevel=9
각종 TimeOut 값 : 센드메일 서버의 각종 Timeout 값을 설정.
# timeouts (many of these)
#O Timeout.initial=5m
O Timeout.connect=1m
- 사용자가 샌드메일 서버에 접속하여 작업하는 최대시간을 설정것으로 기본값은 1분이다.
#O Timeout.aconnect=0s
#O Timeout.iconnect=5m
#O Timeout.helo=5m
#O Timeout.mail=10m
#O Timeout.rcpt=1h
#O Timeout.datainit=5m
#O Timeout.datablock=1h
#O Timeout.datafinal=1h
#O Timeout.rset=5m
#O Timeout.quit=2m
#O Timeout.misc=2m
#O Timeout.command=1h
O Timeout.ident=0
#O Timeout.fileopen=60s
#O Timeout.control=2m
O Timeout.queuereturn=5d
- 특정한 사유로 인해 메일이 전달되지 못하고 mqueue 에보관되고 있을시 보관 기간을 지정하는것으로 기본값은 5일이다. 이기간을 넘길경우 메일은 자동적으로 최초 발신지로 되돌려져 반송처리가 된다.
#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d
#O Timeout.queuereturn.dsn=5d
O Timeout.queuewarn=4h
- 역시 특정한 사유로 인해 메일이 전달되지 못할시 최초 발신자에게 메일이 전달되지 못하고 있음을 경고하는 경고메일이 발송 되기까지의 대기 시간을 지정하며 기본값은 4시간이다.
#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h
#O Timeout.queuewarn.dsn=4h
#O Timeout.hoststatus=30m
#O Timeout.resolver.retrans=5s
#O Timeout.resolver.retrans.first=5s
#O Timeout.resolver.retrans.normal=5s
#O Timeout.resolver.retry=4
#O Timeout.resolver.retry.first=4
#O Timeout.resolver.retry.normal=4
#O Timeout.lhlo=2m
#O Timeout.auth=10m
#O Timeout.starttls=1h
기타 지시자들은 필자또한 사용하지 않으며 또 자세한 그 쓰임을 알고 있지 못하다. 좀더 자세한 사항은 sendmail.org 의 지시자 관련 문서를 참조바라며 실제로 위 3가지 정도의 옵션으로도 충분히 센드메일 서버에 운영에 있어 부하를 최소화 할수 있다.
⑧ virtusertable 파일은 가상메일 설정파일이라고 부르며 다음과 같은 상황에 사용된다.
만약 필자가 웹호스팅 서버를 운영하고 있다고 가정하자.
admin 이란 계정은 당연히 서버에 하나 밖에 존재 할수 없다.
하지만 필자의 서버에서 웹호스팅을 받고 있는 사용자들은 자신들의 도메인을 가지고 메일을 운영할때 실계정명은 user1 등이지만 admin@userdomain.pe.kr 이란 도메인으로 메일을 받고자 요청한다.
일반적인 생각이라면 admin 이란 계정은 단 하나만 존재하기 때문에 필자의 서버에 매칭된 도메인만이 admin@xfeelis.pe.kr 이란 메일을 사용할수 있다.
이를 해결하기 위한 파일이 바로 /etc/mail/virtusertable 파일인 것이다.
다음과 같이 /etc/mail/virtusertable 파일을 편집해 보자.
[root@xfeelis /]# vi /etc/mail/virtusertable
admin@xfeelis.pe.kr xfeel
admin@userdomain1.pe.kr user1
admin@userdomain2.pe.kr user2
admin@userdomain3.pe.kr user3
[root@xfeelis /]# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
어떤까? 매우 쉽지 않은가? 알고 보면 매우 쉬우며 간단한 설정들이 이런 유용한 기능을 발휘하고 있다. 이것이 오픈소스 진영과 리눅스의 힘인것이다.
자 이제 모든 파일의 설정을 마쳤자. 이제 실제로 샌드메일의 가동여부를 테스트 해봐야 할것이다. 우선 샌드메일을 가동 시켜보자.
[root@xfeelis /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail: [ OK ]
Shutting down sm-client: [ OK ]
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
[root@xfeelis /]#
이제 샌드메일이 정상적으로 가동하는지 확인해 봐야겠다.
[root@xfeelis /]# telnet 211.188.120.198 25
Trying 211.188.120.198...
Connected to 211.188.120.198.
Escape character is '^]'.
220 xfeelis.pe.kr ESMTP Sendmail 8.13.0/8.13.0; Tue, 9 Nov 2004 14:18:10 +0900
HELP
214-2.0.0 This is sendmail version 8.13.0
214-2.0.0 Topics:
214-2.0.0 HELO EHLO MAIL RCPT DATA
214-2.0.0 RSET NOOP QUIT HELP VRFY
214-2.0.0 EXPN VERB ETRN DSN AUTH
214-2.0.0 STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0 sendmail-bugs@sendmail.org.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
QUIT
221 2.0.0 xfeelis.pe.kr closing connection
Connection closed by foreign host.
[root@xfeelis /]#
25번 포트 즉 SMTP 서버인 샌드메일 서버에 이상없이 접속하였음을 통해 샌드메일이 제대로 가동되고 있음을 확인할수 있다.
[sendmail] sendmail + dovecot 리눅스 sendmail
[sendmail] sendmail + dovecot
# yum install -y sendmail
# yum install -y sendmail-cf
# yum install -y mailx cyrus-imap
(설치)
# cd /etc/mail
# cp sendmail.mc sendmail.mc.default
# cp sendmail.cf sendmail.cf.default
(sendmail.mc > sendmail.mc_default 복사
sendmail.cf > sendmail.cf_default 변경)
# vi sendmail.mc
(라인 52, 53 수정)
:52 / 53
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
>>
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
(라인 116 수정)
:116
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
>>>
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
(저장)
:wq!
#vi sendmail.cf
(라인 95 수정)
:95
#Dj$w.Foo.COM
>>>
Dj도메인 주소
#vi access
(라인 추가)
connect:도메인주소 relay (추가)
#vi local-host-names
(내용 추가)
도메인 주소
#service sendmail restart (메일 서비스 리스타트)
# telnet localhost 25
(메일 보낼때 사용되는 포트 확인)
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 nanuminet.com ESMTP Sendmail 8.13.8/8.13.8; Wed, 6 Jan 2010 11:03:00 +0900
quit
221 2.0.0 gntv.or.kr closing connection
Connection closed by foreign host.
### 외부에서 25번 포트 열리는 지 확인(cmd 이용)
(참고 : iptables 에서 해당 포트 개방)
=======================dovecot 설정(받는 메일)========================================
#yum install dovecot
#vi /etc/dovecot.conf
:21
protocols = imap imaps pop3 pop3s
>>>
protocols = imap pop3
:39
#listen = [::]
>>>
listen = *
:85
#ssl_disable = no
>>>
ssl_disable = yes
:141
#login_user = dovecot
>>>
login_user = dovecot
:509
#login_executable = /usr/libexec/dovecot/imap-login
>>>
login_executable = /usr/libexec/dovecot/imap-login
:574
#login_executable = /usr/libexec/dovecot/imap-login
>>>
login_executable = /usr/libexec/dovecot/imap-login
:680
#auth_executable = /usr/libexec/dovecot/dovecot-auth
>>>
auth_executable = /usr/libexec/dovecot/dovecot-auth
:828
#args = dovecot
>>>
args = doveco
(대부분 주석 제거 작업임)
### /etc/pam.d > dovecot 파일 확인(폴더 내용 확인- 대부분은
정상적으로 설치 되므로 캔슬 해도 무방함)
#service dovecot start
### 방화벽 110 / 143 포트 열기
서버 리스타트 시에도 자동 실행 되기 위해
# chkconfig sendmail on
# chkconfig dovecot on
** 여기서 일반적으로 리눅스 서버의 사용자 계정을 만들고 아웃룩에 그 계정으로 설정을 하면
아웃룩을 통한 메일 주고 받기도 가능하다.
설치 부분에 관해서는 아래 내용을 참고하면 더 정확할 것이다
하지만 설정 부분은 크게 자세하지 않다
http://mcpicdtl.blogspot.com/2010/02/centos-5x-sendmail-pop3-imap.html
CentOS 5.X sendmail, pop3, imap 설치 및 설정
- 먼저 rpm -qa |grep sendmail 명령으로 sendmail이 설치되어 있는지 확인,
- 설치할 팩키지 -> yum install sendmail-cf-8.13.8-2.el5
- Pop3를 사용할려면 imap 팩키지가 설치되어 있어야 함(dovecot) -> 기본 imap에 비해 보안향상
- yum install dovecot-1.0.7-7.el5.i386
2. dovecot 설정
**/etc/dovecot.conf 화일 변경
20라인 protocal = pop3 pop3s imap imaps 주석제거
39라인 listen = [::] 주석제거
[test]# service dovecot start
Dovecot Imap (을)를 시작 중: [ OK ]
[test]# telnet localhost 110 => 110번 pop3 접속확인
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
3. sendmail 설정파일 위치
*smtp인증기능 추가위해 /etc/mail/sendmail.mc 52,53라인 주석제거 확인 후
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ->바뀐것을 적용한다.
*적용한후
- /etc/mail/sendmail.cf : 센드메일의 가장 기본적인 설치파일 -> 265라인에 addr 제거
(O DaemonPortOptions=Port=smtp, Name=MTA 수정후임)
- 89라인 Cwlocalhost => 주석처리
- /etc/mail/access : 릴레이 허용파일,기본적으로 로컬만 허용, 허용할 IP,domain추가 한다.
*엑세스 파일 교체되면 makemap hash /etc/mail/access < /etc/mail/access 실행 - /etc/mail/local-host-names : 메일을 수신할 호스트이름 결정 (a.co.kr or mail.a.co.kr)
* 인증을 위한 SASL 라이브러리가 설치되어 있어야 함
cyrus-sasl-md5-2.1.19-5.EL4
cyrus-sasl-2.1.19-5.EL4
cyrus-sasl-plain-2.1.19-5.EL4
cyrus-sasl-devel-2.1.19-5.EL4
[root@test]# service saslauthd restart 실행
4. sendmail 데몬 시작 / 확인
- service sendmail start 또는 init/sendmail start
- 마지막으로 telnet localhost 25 로 접속해서 아래와 같은 화면이 나오면 정상적으로 SMTP데몬이 돌고 있다.
* 인증확인
[test]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 test ESMTP Sendmail 8.13.8/8.13.8; Sun, 26 Jul 2009 10:03:01 +0900
ehlo localhost
250-test Hello hong [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
centOS 5 네임서버 설치 및 운영 (bind server, name server, DNS)
1. BIND 설치
환경 파일 경로
2. 기본 환경 설정
(1) named.conf – options
(2) named.conf – logging
(3) named.conf – view
(4) named.conf – int. view
(5) named.conf – ext. view
3. 존 정보(internal/external) 설정
(1) 존 정보(internal) 설정
(2) 존 정보(external) 설정
(3) RNDC (Name Server Control Utility)
4. DNS 운영 명령어
(1) 기본 명령어
(2) 도메인 존 설정 정보 확인
5. BIND 보안설정
(1) TSIG (Transaction Signature)
TSIG Key 생성
(2) 기타 보안 설정
•최종 수정일 : 2008년 11월 3일
1. BIND 설치
•설치 환경 : CentOS 5.2 (http://www.centos.org/)
•설치 프로그램 : ISC BIND (http://www.isc.org/)
◦버전 : BIND 9.3.4-P1
•설치 방법 (yum 자동 설치 권장)
◦Bind 관련 모든 패키지 설치
# yum install –y bind-*
# yum install –y bind bind-utils bind-chroot bind-libs bind-devel bind-libbind-devel bind-sdb
•기본으로 chroot 환경으로 설치됨
◦“/var/named/chroot/” 디렉토리를 “/” 로 인식
◦chroot 상위 디렉토리에 대한 허가권을 가질 수 없음
◦설정 파일은 수동으로 설정해야 함
◦제공되는 샘플 설정 파일 사용 : /usr/share/doc/bind-9.3.4/sample/
환경 파일 경로
•환경 파일 : /var/named/chroot/etc/
•존 정보 파일 : /var/named/chroot/var/named/
•샘플 파일 경로
◦/usr/share/doc/bind-9.3.4/sample/etc/
◦/usr/share/doc/bind-9.3.4/sample/var/named
•모든 샘플 파일을 기본 경로로 복사
cp -rf /usr/share/doc/bind-9.3.4/sample/etc/ /var/named/chroot/
cp -rf /usr/share/doc/bind-9.3.4/sample/var/named/ /var/named/chroot/var/
--------------------------------------------------------------------------------
2. 기본 환경 설정
•Options
•View (internal)
•View (external)
•Key
(1) named.conf – options
•기본 설정
◦recursive-clients
■DNS 질의 처리 가능 최대 클라이언트 설정 값
■Cache DNS 설정 시 가용 메모리 용량에 따라 상향 조정 필요
■기본값 : 1000, 클라이언트 당 20kb - 총 19.5Mb
options
{
directory "/var/named“; // Zone 파일 기본 디렉토리
dump-file "data/cache_dump.db"; // Dump 파일 생성 경로
statistics-file "data/named_stats.txt"; // 통계 파일 생성 경로
memstatistics-file "data/named_mem_stats.txt"; // 메모리 사용 통계
recursive-clients 10000;
};
(2) named.conf – logging
•기본 로그 옵션 설정
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
category default { default_syslog; default_debug; }; // 기본 설정
category unmatched { null; }; // 기본 설정 (로그를 남기지 않음)
};
(3) named.conf – view
•View 설정
◦Cache DNS 전용 서버는 localhost_resolver view만 설정
◦내부 네트워크 클라이언트 전용 internal과 외부 클라이언트 external 로 구분 가능
view "localhost_resolver"
{
match-clients { localhost; };
match-destinations { localhost; };
recursion yes;
include "/etc/named.root.hints"; // 루트 서버 정보 파일
include "/etc/named.rfc1912.zones"; // RFC1912 권장 localhost 존 정보
};
(4) named.conf – int. view
•내부 네트워크 클라이언트 전용 View
view "internal"
{
match-clients { localnets; };
match-destinations { localnets; };
recursion yes; // 내부 네트워크 클라이언트 recursive 질의 허용
include "/etc/named.root.hints";
zone "cslab.kr" {
type master;
file “cslab.kr.internal.zone.db";
};
};
(5) named.conf – ext. view
•외부 네트워크 클라이언트 전용 View
view "external"
{
match-clients { any; };
match-destinations { any; };
recursion no; // 외부 네트워크 클라이언트 recursive 질의 금지
include "/etc/named.root.hints";
zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
};
};
--------------------------------------------------------------------------------
3. 존 정보(internal/external) 설정
•SOA (Start Of Authority) 필드 정보
◦Serial : 1 ~ 24,294,967,295(10자리) YYYYMMDDNN 권장
◦Refresh : Slave의 업데이트 여부 검사 간격
◦Retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
◦Expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
◦Negative TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
(1) 존 정보(internal) 설정
•/etc/named/chroot/var/named/cslab.kr.internal.zone.db
$TTL 86400
@ IN SOA ns1.cslab.kr domain.cslab.kr (
2008102601 ; serial - 1 ~ 24,294,967,295(10자리) YYYYMMDDNN
3H ; refresh – Slave의 업데이트 여부 검사 간격
15M ; retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
1W ; expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
1D ) ; neg. TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
IN NS ns1.cslab.kr
IN NS ns2.cslab.kr
IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1
mysql IN A 192.168.0.2 // 내부 네트워크 전용
oracle IN A 192.168.0.3 // 내부 네트워크 전용
(2) 존 정보(external) 설정
•/etc/named/chroot/var/named/cslab.kr.external.zone.db
$TTL 86400
@ IN SOA ns1.cslab.kr domain.cslab.kr (
2008102601 ; serial - 1 ~ 24,294,967,295(10자리) YYYYMMDDNN
3H ; refresh – Slave의 업데이트 여부 검사 간격
15M ; retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
1W ; expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
1D ) ; neg. TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
IN NS ns1.cslab.kr
IN NS ns2.cslab.kr
IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1
IN MX 10 mail.cslab.kr
IN TXT “v=spf1 a mx ip4:127.0.0.1 ~all”
(3) RNDC (Name Server Control Utility)
•rndc 명령을 통해 DNS 제어가 가능하며, 기본적으로 953번 포트를 사용
•DNS로 제어 메시지를 보내려면 인증 암호키가 필요
◦rndc-confgen 을 실행하여, 인증 암호키 및 환경 파일 생성
◦/var/named/chroot/etc/rndc.conf 을 생성 후 내용 복사
# /usr/sbin/rndc-confgen
key "rndckey" {
algorithm hmac-md5;
secret "xxxxxxxxxxxx";
};
options {
default-key "rndckey";
default-server 127.0.0.1;
default-port 953;
};
•named.conf 파일에 rndc 설정 추가
key "rndckey" {
algorithm hmac-md5;
secret “xxxxxxxxxxxx ";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndckey"; };
};
--------------------------------------------------------------------------------
4. DNS 운영 명령어
(1) 기본 명령어
•설정 파일 이상유무 확인
# named-checkconf named.conf
•서비스 시작
# service named start
•서비스 재시작
# service named restart
•설정 변경 사항 반영
# service named reload
•서비스 종료
# service named stop
•Bind 버전 확인
# named –v
•BIND 로그 모니터링
# tail -f /var/log/messages
(2) 도메인 존 설정 정보 확인
•.kr 도메인 확인
# dig @g.dns.kr. cslab.kr any
•.com/.net 도메인 확인
# dig @a.gtld-servers.net. cslab.net any
•.asia 도메인 확인
# dig @a0.asia.afilias-nst.info. relief.asia any
--------------------------------------------------------------------------------
5. BIND 보안설정
(1) TSIG (Transaction Signature)
* TSIG는 shared secret key와 단방향 hash 함수를 이용해 DNS 응답/업데이트 메시지를 인증
* TSIG 설정 시 DNS의 Additional Section에 TSIG 레코드가 추가됨
TSIG Key 생성
•dnssec-keygen 프로그램으로 키 생성
◦-a hmac-md5 : 알고리즘 종류
◦-b 128 : 키 길이(128 bit) / 최대값 : 512 bits
◦-n HOST : 키 종류(HOST)
# /usr/sbin/dnssec-keygen –a hmac-md5 –b 128 –n HOST cslab.kr.
•생성 파일 확인
◦아래 2개의 파일이 생성됨(숫자 157은 DNSSEC 알고리즘(HMAC-MD5) 번호/숫자 XXXXX 키의 지문)
◦K{name}.+157.+{random}.key
Kcslab.kr.+157+XXXXX.key
Kcslab.kr.+157+XXXXX.private
•named.conf 수정
zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
// TSIG Key Based Access Control
allow-update { key key.cslab.kr.; };
};
key "key.cslab.kr" {
algorithm hmac-md5;
secret "XXXXXXXXXXXXXXXXXXXX";
};
•key 부분은 별도로 /var/named/chroot/etc/dns.keys.conf 로 저장하여, named.conf 에 include 구문으로 삽입 권장
include "/etc/dns.keys.conf";
(2) 기타 보안 설정
•BIND 버전 정보 숨기기
named.conf 설정 추가
options { version "DNS";
};
rndc reload 후 dig 명령어로 확인
# dig version.bind txt chaos
•allow-query : 존 쿼리 제한
•allow-transfer : 존 전송 제한
•allow-update : 존 업데이트 제한
zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
allow-query { 127.0.0.1; 192.168.0.0/24; };
allow-transfer { 127.0.0.1; 192.168.0.0/24; 164.125.36.31; };
allow-update { 127.0.0.1; 192.168.0.0/24; 164.125.36.31; };
};
reference : http://bind.cslab.kr/#toc0
[리눅스 시간설정/CentOS] 현재시간설정
2005. 01. 07. (금) 00:18:16 KST
[root@test ~]# date -s 2008-06-14
2008. 06. 14. (금) 00:00:00 KST
[root@test ~]# date -s 08:38:40
2008. 06. 14. (금) 08:38:40 KST
또는 rdate -s "time server ip or domain"
만일 정기적으로 시간을 설정하고 싶은 경우
/etc/crontab 에 rdate -s "time server ip or domain"을 정기적으로
실행하도록 설정한다
crontab 사용법
crontab파일은, cron 을 조작할 때에 작성하고, 프로세스를 정기적으로 실행하기 위한 파일로, crontab커맨드로 작성합니다. 서식은, 아래와 같습니다.
# crontab [- u user] {-l|-r|-e} 한편, 지정가능한 옵션에 대해서는, 하의 겉면을 참조해 주십시오.
옵션-e crontab을 대화적으로 편집합니다.
보통은, vi에디터가 기동하고, 설정 파일의 편집을 행합니다.
-l crontab파일의 내용을 표시합니다.
-r crontab파일을 삭제합니다.
-u user user에서 지정한 사용자의 crontab파일을 조작의 대상으로 삼습니다.
한편, 이 옵션은, root사용자만 사용할 수 있습니다.
■crontab커맨드의 사용 예
이하에, crontab커맨드의 사용 예를 소개합니다.
root사용자가, test사용자의 crontab파일을 표시할 경우.
# crontab -l -u test
자기 자신의 crontab파일을 편집할 경우.
$ crontab -e
crontab 시간 설정 법
분, 시, 일, 월, 요일, 사용자, 실행 커맨드
0 14 * * 0 root /usr/bin/webalizer
분:01∼59
시:1∼24
일:1∼31
요일:0(일요일)∼6(토요일)
리눅스 파일 검색 예제 linux file find sample
파일 찾기 (파일명 검색)
현재 디렉토리에서, pl 확장자를 가진 모든 파일 찾기
find -name '*.pl'
(현재 디렉토리 밑의 하위 디렉토리까지 다 찾습니다.)
루트에서부터, 즉 전체 하드에서, pl 확장자를 가진 모든 파일 찾기
find / -name '*.pl'
전체 하드 디스크에서, 파일명이 ab 로 시작하는 모든 파일 찾기
find / -name 'ab*'
전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기
find / -name '.bash*'
전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기
+ ls 명령 형식으로 출력
find / -name '.bash*' -ls
뒤에 -ls 라는 옵션을 붙이면 됩니다.
디렉토리명 찾기
전체 하드 디스크에서, 디렉토리 이름이 et 로 시작하는 모든 디렉토리 찾기
find / -name 'et*' -type d
주의! 옵션 순서를 바꾸면 에러가 납니다.
사쿠라 인터넷 cron 설정법 (さくらインタナットのcron設定方法)
CRON 設定ファイルの編集CRON 設定ファイルの編集
- まずは 『さくらインターネット』 の 『サーバーコントロールパネル』 まで進む
- 画面右にある 『CRON設定ファイルの編集』 をクリック
- 表示された画面にある 『新規項目の追加』 をクリック
- 表示された画面は以下のようになっているものと思われる
- 『実行するコマンド』 に以下を入力
- /home/*****/www/cron.sh
- ***** は自分に割り当てられたディレクトリ名
- E-mail を受け取りたくない(ページ最下部参照)場合はコマンドの最後に 1> /dev/null を追加
- /home/*****/www/cron.sh 1> /dev/null
- /home/*****/www/cron.sh
- 『月』 は必要に応じて入力
- サイトマップを毎月更新するのであれば修正の必要なし
- 決まった月にしか更新しない場合は、その月を入力
- 5月に更新するのであれば、『5』 を入力
- 1、3、5、7月に更新するのであれば、カンマ(,)区切りで『1,3,5,7』 を入力
- 5月に更新するのであれば、『5』 を入力
- サイトマップを毎月更新するのであれば修正の必要なし
- 『日』 も必要に応じて入力
- サイトマップを毎日更新するのであれば修正の必要なし
- 決まった日にしか更新しない場合は、その日を入力
- 10日に更新するのであれば、『10』 を入力
- 5、10、15、20日に更新するのであれば、カンマ(,)区切りで『5,10,15,20』 を入力
- 10日に更新するのであれば、『10』 を入力
- サイトマップを毎日更新するのであれば修正の必要なし
- 『時』 を入力
- 10時に更新するのであれば、『10』 を入力
- 朝の 10時と夜の 10時に更新するのであれば、カンマ(,)区切りで『10,22』 を入力
- 2時間ごとに更新するのであれば(*/)を入れて『*/2』 を入力
- 10時に更新するのであれば、『10』 を入力
- 『分』 を入力
- 〇時 30分に更新するのであれば、『30』 を入力
- 数分ごとに更新するのであれば(*/)を入れて『*/20』 と入力できるが、あまり頻度が多いと 『さくらインターネット』 から叱られるか、設定を削除されてしまうので注意が必要
- 〇時 30分に更新するのであれば、『30』 を入力
- 『曜日』 を指定
- 毎週月曜日に更新するのであれば、『月』 を選択
- その他の曜日も指定するのであれば、隣に指定
- 毎週月曜日に更新するのであれば、『月』 を選択
- 入力が完了したら [送信する] ボタンをクリック
- 『保存しました』 というメッセージが表示されれば成功
動作の確認動作の確認
- 大方の作業は終わりだが、上記 『CRON 設定ファイルの編集』 で指定した時間まで正常に動作するか確認できないので
- 『実行するコマンド』 部分をクリックして 『CRON 設定ファイルの編集』 を開き
- 実行する日時と分を 5分後くらいにし、じっと 5分間くらい待ってみる
- FTP でウェブサーバに接続し、指定した時間に sitemap.xml.gz が作成されている(書き替わっている)か見たりしてみる
- 正常に動作していることが確認できれば実行日時と分を元に戻して 「あ~良かった」 と深くため息をついてコーヒーなんか飲んでみたりする
E-mail の受信E-mail の受信
(さくらインターネットの場合)- CRON が sitemap_gen.py を実行すると、
差出人 : Cron Daemon から
件名 : Cron <*****@*****> /home/*****/www/cron.sh
という E-mail が postmaster 宛に送信されてくる - 普段から postmaster 宛の E-mail を受信している人であれば問題ないが、受信していない場合はメールボックスにゴソゴソと溜まっていくので注意が必要
- E-mail を postmaster に送りたくない場合はコマンドの最後に 1> /dev/null を追加
- これで 『さくらインターネットのCRON設定を可能な限り簡単に解説したい』 は終わり
- 本当にお疲れ様でございました
- 疲れきってしまった人は気晴らしに Flash の簡単なゲームでも
[ Google Sitemap 利用への道 TOP ]
http://senrioka-info.net/0_google_sitemap/cron.htm
LINUX Simple Guide
##########################################################
[spac] ln [option] [what] [where]
[EX] ln -s /www_mw/inc inc
-s ==> softlink
APACHE REBOOT
##########################################################
- /usr/local/apache/bin/apachectl graceful
crontab -e
##########################################################
/var/spool/cron
how to cron write
##########################################################
/usr/local/Zend/Core/bin/php-cli /www_mw/html/tool/affiliate/tagflush_cron.php > /www_mw/html/tool/affiliate/result.txt
file & folder permmision control
##########################################################
chmod 755 mydir
chmod 755 myfile.txt
오라클 및 리스너 재부팅 for LUNUX
root 계정으로 접속
오라클 로 권한 변경
~]$ su - oracle
오라클 폴더로 이동
~]$ cd /oracle
sqlplus 로 노로그인 상태로 접속
~]$ sqlplus /nolog
sysdba 접속
SQL> connect /as sysdba
중지시키기
SQL> shutdown abort
시작
SQL> startup
종료
SQL> exit
리스너 종료
~]$ lsnrctl stop
리스너 재시작
~]$ lsnrctl start
## 그래도 시작이 안될 경우 top 에서 리스너의 갯수 확인 해보고
## 1개 보다 많으면 kill -signal번호[또는 시그널 이름] PID
CASE 2. 리스너 개수 확인(리스너가 2개 이상 떠 있을 경우)
1. oracle 개정으로 접근 한 후
2. ps -ef
3. oracle 계정으로 실행된 리스트 중
oracle 20514 1 0 Sep24 ? 01:30:35 /opt/oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit
............................ 중략.........................................
oracle 2205 1 0 Sep24 ? 01:30:35 /opt/oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit
4. 인스턴스 번호를 확인 한 후 프로세스 하나을 kill (ex: kill 2205)
5. 리스너가 하나만 남은 상태임을 확인하고 디비 접속 테스트를 해 보면 성공
6 CASE 2를 성공하였음에도 불구하고 복구 되지 않는 경우 CASE 1의 전 과정을 다시 실행
리눅스 트래픽 사용량 출력하기
아래는 리눅스에서 동작하는 트래픽 사용량을 초단위로 출력하는 perl 프로그램 소스입니다. 소스에서 eth0 만 검사하게 되어 있으므로 다른 디바이스를 점검하고 싶으시면 관련된 부분을 수정해 주셔야 합니다.
=======================================================================================================================
#!/usr/bin/perl
use strict;
my $iPeriod = 1;
my $strDevice = "eth0";
# 32bit 뺄셈
sub Minus32bit()
{
my ( $iFirst, $iSecond ) = @_;
my $iResult;
if( $iFirst >= $iSecond )
{
$iResult = $iFirst - $iSecond;
}
else
{
$iResult = ( 4294967296 - $iFirst ) + $iSecond;
}
return $iResult;
}
# 전역변수
my $bIsFirst = 1;
my ( $iRecvBytes, $iRecvPackets, $iSendBytes, $iSendPackets );
my ( $iOldRecvBytes, $iOldRecvPackets, $iOldSendBytes, $iOldSendPackets );
my ( $iRecvBps, $iRecvPps, $iSendBps, $iSendPps );
my @arrSplit = ();
my @arrList = ();
my @arrTime;
my $strText;
while(1)
{
@arrTime = localtime(time);
open(FILE,"/proc/net/dev") or die "/proc/net/dev open error: $!";
while(<FILE>)
{
next if( !($_ =~ $strDevice) );
@arrSplit = split( /:/, $_ );
$arrSplit[1] =~ s/^\s*(.*?)\s*$/$1/;
@arrList = split( /\s+/, $arrSplit[1] );
if( $bIsFirst == 1 )
{
$iOldRecvBytes = $arrList[0];
$iOldRecvPackets = $arrList[1];
$iOldSendBytes = $arrList[8];
$iOldSendPackets = $arrList[9];
$bIsFirst = 0;
last;
}
$iRecvBytes = &Minus32bit( $arrList[0], $iOldRecvBytes );
$iRecvPackets = &Minus32bit( $arrList[1], $iOldRecvPackets );
$iSendBytes = &Minus32bit( $arrList[8], $iOldSendBytes );
$iSendPackets = &Minus32bit( $arrList[9], $iOldSendPackets );
$iOldRecvBytes = $arrList[0];
$iOldRecvPackets = $arrList[1];
$iOldSendBytes = $arrList[8];
$iOldSendPackets = $arrList[9];
$iRecvBps = ( $iRecvBytes * 8 ) / $iPeriod;
$iRecvPps = $iRecvPackets / $iPeriod;
$iSendBps = ( $iSendBytes * 8 ) / $iPeriod;
$iSendPps = $iSendPackets / $iPeriod;
$strText = sprintf( "%04d-%02d-%02d %02d:%02d:%02d [in] %9d bps %6d pps [out] %9d bps %6d pps\n"
, $arrTime[5] + 1900, $arrTime[4] + 1, $arrTime[3]
, $arrTime[2], $arrTime[1], $arrTime[0]
, $iRecvBps, $iRecvPps, $iSendBps, $iSendPps );
print "$strText";
last;
}
close(FILE);
sleep(1);
}
[출처] 리눅스 트래픽 사용량 출력하기 |작성자 까미유
리눅스 CPU 사용량 출력하기
리눅스 OS 에서 동작하는 초단위로 CPU 사용량을 출력하는 프로그램을 perl 로 작성하였습니다. 소스 코드는 아래와 같아요.
================================================================================================================
#!/usr/bin/perl
use strict;
# 변수 선언
my $bIsFirst = 1;
my ( $iUser, $iSystem, $iIdle, $iSum );
my ( $iOldUser, $iOldSystem, $iOldIdle );
my @arrList = ();
my @arrTime;
my $strText;
while(1)
{
# 현재 시간을 구한다.
@arrTime = localtime(time);
# /proc/stat 파일에서 최상위 CPU 정보를 가져와서 현재의 CPU 사용량을 구한다.
open(FILE,"/proc/stat") or die "/proc/stat open error: $!";
while(<FILE>)
{
@arrList = split( /\s+/, $_ );
if( $bIsFirst == 1 )
{
$iOldUser = $arrList[1];
$iOldSystem = $arrList[3];
$iOldIdle = $arrList[4];
$bIsFirst = 0;
last;
}
$iUser = $arrList[1] - $iOldUser;
$iSystem = $arrList[3] - $iOldSystem;
$iIdle = $arrList[4] - $iOldIdle;
$iOldUser = $arrList[1];
$iOldSystem = $arrList[3];
$iOldIdle = $arrList[4];
$iSum = $iUser + $iSystem + $iIdle;
# CPU 사용량의 퍼센트 단위로 계산한다.
$iUser = ( $iUser * 100 ) / $iSum;
$iSystem = ( $iSystem * 100 ) / $iSum;
$iIdle = ( $iIdle * 100 ) / $iSum;
$strText = sprintf( "%04d-%02d-%02d %02d:%02d:%02d %.1f%%us %.1f%%sy %.1f%%id\n"
, $arrTime[5] + 1900, $arrTime[4] + 1, $arrTime[3]
, $arrTime[2], $arrTime[1], $arrTime[0]
, $iUser, $iSystem, $iIdle );
print "$strText";
last;
}
close(FILE);
sleep(1);
}
[출처] 리눅스 CPU 사용량 출력하기|작성자 까미유
man 사용법
man 프로그램을 이용하면 각종 프로그램 사용법 및 함수 사용법을 알 수 있다. 만약 man 프로그램 사용법을 알고 싶으면 아래와 같이 실행하면 된다.
# man man
man(1) man(1)
NAME
man - format and display the on-line manual pages
SYNOPSIS
man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file]
[-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list]
[section] name ...
DESCRIPTION
man formats and displays the on-line manual pages. If you specify sec-
tion, man only looks in that section of the manual.<<생략>>
C 언어의 printf 사용법을 알고 싶어서 아래와 같이 실행하면 C 언어의 printf 사용법이 아닌 printf 프로그램의 man 페이지를 보여준다.
# man printf
PRINTF(1) User Commands PRINTF(1)
NAME
printf - format and print data
SYNOPSIS
printf FORMAT [ARGUMENT]...
printf OPTION
DESCRIPTION
Print ARGUMENT(s) according to FORMAT. <<생략>>
C 언어의 printf 사용법을 보려면 man 프로그램을 아래와 같이 실행해 주어야 한다.
# man 3 printf
PRINTF(3) Linux Programmer's Manual PRINTF(3)
NAME
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
vsnprintf - formatted output conversion
SYNOPSIS
#include <stdio.h>
int printf(const char *format, ...); <<생략>>
이는 유닉스 매뉴얼에는 섹션 번호가 있기 때문이다. 상단에 위치한 man 프로그램의 man 페이지를 보면 굵은 색으로 표시한 것이 섹션 번호를 이용하여서 man 페이지를 보는 방법이 기술된 곳이다.
man 사용법
man 프로그램을 이용하면 각종 프로그램 사용법 및 함수 사용법을 알 수 있다. 만약 man 프로그램 사용법을 알고 싶으면 아래와 같이 실행하면 된다.
# man man
man(1) man(1)
NAME
man - format and display the on-line manual pages
SYNOPSIS
man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file]
[-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list]
[section] name ...
DESCRIPTION
man formats and displays the on-line manual pages. If you specify sec-
tion, man only looks in that section of the manual.<<생략>>
C 언어의 printf 사용법을 알고 싶어서 아래와 같이 실행하면 C 언어의 printf 사용법이 아닌 printf 프로그램의 man 페이지를 보여준다.
# man printf
PRINTF(1) User Commands PRINTF(1)
NAME
printf - format and print data
SYNOPSIS
printf FORMAT [ARGUMENT]...
printf OPTION
DESCRIPTION
Print ARGUMENT(s) according to FORMAT. <<생략>>
C 언어의 printf 사용법을 보려면 man 프로그램을 아래와 같이 실행해 주어야 한다.
# man 3 printf
PRINTF(3) Linux Programmer's Manual PRINTF(3)
NAME
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
vsnprintf - formatted output conversion
SYNOPSIS
#include <stdio.h>
int printf(const char *format, ...); <<생략>>
이는 유닉스 매뉴얼에는 섹션 번호가 있기 때문이다. 상단에 위치한 man 프로그램의 man 페이지를 보면 굵은 색으로 표시한 것이 섹션 번호를 이용하여서 man 페이지를 보는 방법이 기술된 곳이다.
VI Editor Simple Ver / VI 에디터 초간단 Ver
Esc키를 한번 눌러준 후
:q
라고 하면 됩니다. 그러나 파일을 수정했다면
E37: No write since last change (add ! to override)
이런 에러가 납니다. 그럴 경우에는 다음과 같이 합니다:
파일 저장 후, 종료 명령어
:wq
라고 하면 저장(Save)과 동시에 빔 에디터가 종료됩니다.
새 이름으로 저장 후, 종료 명령어
파일명이 없는 새 파일을 편집 중이었다면
:w test.txt
이런 식으로 우선 파일명을 정해 주고 저장한 후, 다시 ":q" 명령으로 종료합니다.
만약 test.txt 라는 파일이 이미 존재한다면 E13: File exists (add ! to override) 이런 에러가 납니다. 이때는
:w! test.txt
이렇게 w 뒤에 느낌표를 붙이면 강제로 덮어쓸 수 있습니다.
텍스트를 저장하지 않고, 그냥 종료 명령어
텍스트를 수정했지만, 저장하지 않고 끝내려면
:q!
이렇게 합니다. 이러면 파일의 수정한 내용이 모두 사라지고 원본 그대로 남습니다.
주의! ":q!" 이런 명령으로 종료하면, 끝낼 때 아무것도 물어보지 않고 그냥 끝냅니다. 위험할 수도 있습니다.