IT. POST LIST
[ sendmail + saslauthd = starttls + 사용자 인증 구성 ]
** 패키지설치
** sendmail 설정
** 인증서 경로 디렉토리 생성 및 권한 할당
**** 제일 중요!! 열심히 설정하고 인증서 권한 할당(디렉토리 포함) 안하면 삽질합니다.... ****
** saslauthd 설정
** sendmail, saslauthd 재시작
** sendmail 재시작 후 로그 상태
** telnet 확인
** mail 테스트
** openssl 로 콘솔에서 테스트
** 송신 메시지 로그. 정상확인
** TCP DUMP 확인
** 매니지드 서비스를 하고 있는 고객 mail 서버에 ssl 인증할 수 있도록 구성 요청이 들어 왔습니다.해당 작업 후 구성 내용들 입니다.
** 패키지설치
yum install -y sendmail* cyrus-sasl*
** sendmail 설정
[root@cm mail]# vi /etc/mail/sendmail.mc define(`confLOG_LEVEL', `14')dnl ==> 자세한 로그 분석 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl ==> 사용자 인증 관련 define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl ==> 사용자 인증 관련 define(`confCACERT_PATH', `/etc/mail/certs')dnl ==>ssl 인증서 경로 define(`confCACERT', `/etc/mail/certs/AddTrustExternalCARoot.crt')dnl ==>CAroot.crt 인증서 define(`confSERVER_CERT', `/etc/mail/certs/xx_xxxxxx_co_kr.crt')dnl ==> server.crt 인증서 define(`confSERVER_KEY', `/etc/mail/certs/xx_xxxxxx_co_kr_SHA256WITHRSA.key')dnl ==> server.key 인증서 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0 Name=MTA')dnl ==> 기본 25port DAEMON_OPTIONS(`Port=submission,Addr=0.0.0.0 Name=MSA, M=Ea')dnl => 25 대신 587 오픈. 안해도 무방 DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl ==> 465 port starttls 사용포트 [root@cm mail]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ==> sendmail.cf 재생성 [root@cm mail]# vi /etc/mail/sendmail.cf O Timeout.starttls=1h ==> 주석해제
** 인증서 경로 디렉토리 생성 및 권한 할당
**** 제일 중요!! 열심히 설정하고 인증서 권한 할당(디렉토리 포함) 안하면 삽질합니다.... ****
[root@cm mail]# mkdir /etc/mail/certs [root@cm mail]# cp -arp {인증서path} /etc/mail/certs/ [root@cm mail]# chmod 600 -R /etc/mail/certs
** saslauthd 설정
[root@cm mail]# vi /etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on. This directory must already exist.
SOCKETDIR=/var/run/saslauthd
# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam ==> 사용자 인증 pam으로 사용
# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.
# DAEMONOPTS=--user saslauth
# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
# for the list of accepted flags.
FLAGS=
기본 적용되있으면 그냥 두면됨
vi /etc/sasl2/Sendmail.conf
pwcheck_method:saslauthd
mech_list:LOGIN PLAIN ==> 삽입. "pwcheck_method:saslauthd" 내용은 입력 되어 있음. 없다면 해당 내용 두 줄 입력
** sendmail, saslauthd 재시작
[root@cm mail]# /etc/init.d/sendmail restart [root@cm mail]# /etc/init.d/saslauthd restart
** sendmail 재시작 후 로그 상태
[ 정상 로그 ] Jul 19 14:36:02 cm sendmail[10822]: NOQUEUE: stopping daemon, reason=signal Jul 19 14:36:02 cm sendmail[11019]: starting daemon (8.14.4): SMTP+queueing@01:00:00 Jul 19 14:36:02 cm sendmail[11019]: STARTTLS: CRLFile missing Jul 19 14:36:02 cm sm-msp-queue[11027]: starting daemon (8.14.4): queueing@01:00:00 Jul 19 14:36:03 cm sendmail[11019]: STARTTLS=server, Diffie-Hellman init, key=1024 bit (1) Jul 19 14:36:03 cm sendmail[11019]: STARTTLS=server, init=1 Jul 19 14:36:03 cm sendmail[11019]: started as: /usr/sbin/sendmail -bd -q1h
[ 에러 로그 ] Jul 19 13:31:08 cm sendmail[6837]: NOQUEUE: stopping daemon, reason=signal Jul 19 13:31:08 cm sendmail[8925]: starting daemon (8.14.4): SMTP+queueing@01:00:00 Jul 19 13:31:08 cm sendmail[8925]: STARTTLS: CRLFile missing Jul 19 13:31:08 cm sendmail[8925]: STARTTLS=server: file /etc/mail/certs/COMODORSADomainValidationSecureServerCA.crt unsafe: World writable directory Jul 19 13:31:08 cm sendmail[8925]: started as: /usr/sbin/sendmail -bd -q1h Jul 19 13:31:08 cm sm-msp-queue[8933]: starting daemon (8.14.4): queueing@01:00:00 - 해당 인증서 디렉토리 권한 문제. 위 권한 설정 진행하지 않으면 발생됨.
** telnet 확인
[root@cm mail]# telnet xx.xxxxxx.co.kr 25 Trying 115.xx.xxx.xxx... Connected to xx.xxxxxx.co.kr. Escape character is '^]'. 220 xx.xxxxxx.co.kr ESMTP Sendmail 8.14.4/8.14.4; Wed, 19 Jul 2017 14:51:39 +0900 ehlo localhost ==> 명령어로 확인 250-xx.xxxxxx.co.kr Hello [115.xx.xxx.xxx], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN ==> 사용자 인증 250-STARTTLS ==> 패킷 암호화 패치 250-DELIVERBY 250 HELP
** mail 테스트
php mail test source
<?php
$smtp_mail_id = "smtp 메일계정";
$smtp_mail_pw = "패스워드";
$to_email = "받는 사람 메일";
$to_name = "받는 사람 이름";
$from_name = "보내는 사람 이름";
$from_email = "보내는 사람 메일";
$smtp_use = 'xx.xxxxxx.co.kr';
$title = "서버 메일테스트입니다.";
$content = "서버 메일테스트입니다..";
//메일러 로딩
require_once("./class.smtp.php");
require_once("./class.phpmailer.php");
$mail = new PHPMailer(true);
$mail->IsSMTP();
try {
$mail->Host = $smtp_use; // email 보낼때 사용할 서버를 지정
$mail->SMTPAuth = true; // SMTP 인증을 사용함
$mail->CharSet = 'utf-8';
$mail->Port = 465; // email 보낼때 사용할 포트를 지정
$mail->SMTPSecure = "ssl"; // SSL을 사용함
$mail->Username = $smtp_mail_id; // 계정
$mail->Password = $smtp_mail_pw; // 패스워드
$mail->SetFrom($from_email, $from_name); // 보내는 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)
$mail->AddAddress($to_email, $to_name); // 받을 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)
$mail->Subject = $title; // 메일 제목
$mail->MsgHTML($content); // 메일 내용 (HTML 형식도 되고 그냥 일반 텍스트도 사용 가능함)
$mail->Send(); // 실제로 메일을 보냄
$ok_msg = iconv('utf-8','euc-kr','메일을 전송하였습니다.');
echo "<script>alert('".$ok_msg."');</script>";
} catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
?>
** openssl 로 콘솔에서 테스트
[root@cm mail]# openssl s_client -host cm.aumlee.co.kr -port 465 ==> telnet처럼 openssl 메일 송신 테스트 CONNECTED(00000003) depth=0 OU = Domain Control Validated, OU = "Hosted by Korea Information Certificate Authority, Inc.", OU = PositiveSSL, CN = xx.xxxxxx.co.kr verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 OU = Domain Control Validated, OU = "Hosted by Korea Information Certificate Authority, Inc.", OU = PositiveSSL, CN = xx.xxxxxx.co.kr verify error:num=27:certificate not trusted verify return:1 depth=0 OU = Domain Control Validated, OU = "Hosted by Korea Information Certificate Authority, Inc.", OU = PositiveSSL, CN = xx.xxxxxx.co.kr verify error:num=21:unable to verify the first certificate verify return:1 --- Certificate chain 0 s:/OU=Domain Control Validated/OU=Hosted by Korea Information Certificate Authority, Inc./OU=PositiveSSL/CN=xx.xxxxxx.co.kr i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA --- Server certificate -----BEGIN CERTIFICATE----- MIIFlTCCBH2gAwIBAgIRAKypsELizD0ZoyKs7S3XU5IwDQYJKoZIhvcNAQELBQAw gZAxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTYwNAYD . . .(중략) -----END CERTIFICATE----- subject=/OU=Domain Control Validated/OU=Hosted by Korea Information Certificate Authority, Inc./OU=PositiveSSL/CN=xx.xxxxxx.co.kr issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA --- Acceptable client certificate CA names /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root Server Temp Key: DH, 1024 bits --- SSL handshake has read 2564 bytes and written 449 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : DHE-RSA-AES256-GCM-SHA384 . . . . .(중략) Start Time: 1500445618 Timeout : 300 (sec) Verify return code: 21 (unable to verify the first certificate) === > 인증서 정상적으로 받아온뒤 아래 처럼 메일 테스트 진행 220 xx.xxxxxx.co.kr ESMTP Sendmail 8.14.4/8.14.4; Wed, 19 Jul 2017 15:26:58 +0900 mail from : test@xx.xxxxxx.co.kr 250 2.1.0 test@xx.xxxxxx.co.kr... Sender ok rcpt to : hoguinside@naver.com 250 2.1.5 hoguinside@naver.com... Recipient ok data 354 Enter mail, end with "." on a line by itself test test test . 250 2.0.0 v6J6Qw4O012558 Message accepted for delivery
** 송신 메시지 로그. 정상확인
[ 송신 메시지 정상 로그] Jul 19 14:50:49 cm sendmail[11761]: NOQUEUE: connect from [115.xx.xxx.xxx] Jul 19 14:50:49 cm sendmail[11761]: AUTH: available mech=LOGIN PLAIN, allowed mech=EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN Jul 19 14:50:49 cm sendmail[11761]: v6J5on71011761: Milter: no active filter Jul 19 14:50:49 cm sendmail[11761]: STARTTLS=server, relay=[115.xx.xxx.xxx], version=TLSv1/SSLv3, verify=NO, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256 Jul 19 14:50:49 cm sendmail[11761]: STARTTLS=server, cert-subject=, cert-issuer=, verifymsg=ok Jul 19 14:50:49 cm sendmail[11761]: AUTH: available mech=LOGIN PLAIN, allowed mech=EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN Jul 19 14:50:49 cm sendmail[11761]: AUTH=server, relay=[115.xx.xxx.xxx], authid=xxxxxxxxx@xx.xxxxxx.co.kr, mech=LOGIN, bits=0 Jul 19 14:50:49 cm sendmail[11761]: v6J5on71011761: from=, size=876, class=0, nrcpts=1, msgid=<68d3d47a954e5b85425017e349f44ae6 cm.aumlee.co.kr="">, proto=ESMTP, daemon=TLSMTA, relay=[115.xx.xxx.xxx] Jul 19 14:50:49 cm sendmail[11763]: v6J5on71011761: SMTP outgoing connect on [115.xx.xxx.xxx] Jul 19 14:50:49 cm sendmail[11763]: STARTTLS: ClientCertFile missing Jul 19 14:50:49 cm sendmail[11763]: STARTTLS: ClientKeyFile missing Jul 19 14:50:49 cm sendmail[11763]: STARTTLS: CRLFile missing Jul 19 14:50:49 cm sendmail[11763]: STARTTLS=client, init=1 Jul 19 14:50:49 cm sendmail[11763]: STARTTLS=client, start=ok Jul 19 14:50:49 cm sendmail[11763]: STARTTLS=client, relay=mx2.naver.com., version=TLSv1/SSLv3, verify=OK, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256 Jul 19 14:50:49 cm sendmail[11763]: STARTTLS=client, cert-subject=/C=KR/postalCode=13561/ST=Gyeonggi-do/L=Seongnam-si/O=NAVER+20Corp./OU=Information+20Security+20Team/OU=Hosted+20by+20Korea+20Information+20Certificate+20Authority,+20Inc./OU=Unified+20Communications/CN=mail.naver.com, cert-issuer=/C=GB/ST=Greater+20Manchester/L=Salford/O=COMODO+20CA+20Limited/CN=COMODO+20RSA+20Organization+20Validation+20Secure+20Server+20CA, verifymsg=ok Jul 19 14:50:49 cm sendmail[11763]: v6J5on71011761: to= , ctladdr= 68d3d47a954e5b85425017e349f44ae6>(514/514), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120876, relay=mx2.naver.com. [125.209.238.137], dsn=2.0.0, stat=Sent (OK EPcdYHmZSTK2BKWSkYyj0g - nsmtp) Jul 19 14:50:49 cm sendmail[11763]: v6J5on71011761: done; delay=00:00:00, ntries=1 Jul 19 14:50:49 cm sendmail[11763]: STARTTLS=client, SSL_shutdown failed: -1
** TCP DUMP 확인
[root@cm mail]# tcpdump -A '(src host 115.xx.xxx.xxx and dst port 25) or (dst host 115.xx.xxx.xxx and src port 25 )'
E.....@.3...}...sDrz.......#.G.f...r4......
...D.b..250-mx.naver.com Pleased to meet you
250-SIZE 41943040
250-8BITMIME
250-PIPELINING
250-STARTTLS
250 ENHANCEDSTATUSCODES
15:32:55.840996 IP 115.xx.xxx.xxx.57773 > mx3.naver.com.smtp: Flags [P.], seq 23:33, ack 182, win 115, options [nop,nop,TS val 23263012 ecr 350875460], length 10
E..>;a@.@...sDrz}........G.f.......sA......
.b.$...DSTARTTLS
15:32:55.844716 IP mx3.naver.com.smtp > 115.xx.xxx.xxx.57773: Flags [P.], seq 182:243, ack 33, win 114, options [nop,nop,TS val 350875466 ecr 23263012], length 61
E..q..@.3...}...sDrz.........G.p...r.......
...J.b.$220 2.0.0 Ready to start TLS QOMq+FWTSAmCLRMKTcK2QQ - nsmtp
.... 중략중략
** top으로 프로세스 현황을 보면 가끔 좀비 프로세스가 있습니다. 해당 포스팅은 좀비 프로세스 확인 및 제거를 진행합니다.
[root@localhost ]# top
top - 13:21:53 up 362 days, 12:51, 2 users, load average: 0.36, 0.51, 0.60
Tasks: 544 total, 1 running, 541 sleeping, 0 stopped, 2 zombie
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 2.0%us, 0.3%sy, 0.0%ni, 97.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 10.4%us, 0.7%sy, 0.0%ni, 88.3%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st
Mem: 8017812k total, 5458432k used, 2559380k free, 586348k buffers
Swap: 4194300k total, 9648k used, 4184652k free, 1795476k cached
좀비 찾기
** 명령어ps -ef | grep defunct | grep -v grep
[root@localhost ]# ps -ef | grep defunct | grep -v grep root 8019 8017 0 12:01 ? 00:00:00 [unknown-error-t]root 8020 8017 0 12:01 ? 00:00:00 [unknown-error-t]
좀비 죽이기
** 명령어[root@localhost ]# kill -9 8017 root 8019 8017 0 12:01 ? 00:00:00 [unknown-error-t]root 8020 8017 0 12:01 ? 00:00:00 [unknown-error-t]
** 좀비 모두 죽이기
ps -ef | grep defunct | awk '{print $3}' | xargs kill -9
스크립트 작성 (cron 등록후 사용해도됨)
[root@localhost]# vi zombie_kill.sh #! /bin/bash date="$(date "+%Y-%m-%d_%H:%M:%S")" log_dir="경로입력" zombie_check=`ps -ef | grep defunct | grep -v grep | grep -v "\[sh\]"| wc -l` if [ $zombie_check == '0' ]; then exit 0; else echo "==============================================================" >> /$log_dir/zombie_kill.txt ps -ef | grep defunct | grep -v grep | grep -v "\[sh\]" >> /{path}/zombie_kill.txt ps -ef | grep defunct | grep -v grep | grep -v "\[sh\]" | awk '{print $3}' | xargs kill -9 echo "kill zombie process_$date " >> /$log_dir/zombie_kill.txt if [ $zombie_check == '0' ]; then exit 0; else /bin/sh /$log_dir/zombie_kill.sh fi fi
로그 확인
[root@localhost ]# cat zombie_kill.txt ============================================================== root 8019 8017 0 12:01 ? 00:00:00 [unknown-error-t]root 8020 8017 0 12:01 ? 00:00:00 [unknown-error-t] kill zombie process_2017-12-07_13:38:01
phpize. 에러 " Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script. "
By 때찌때찌맴매 - 11월 29, 2017
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.
autoconf 를 설치 하라고 합니다.
** m4설치
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
** autoconf 설치
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
해당 패키지들을 설치 후 phpize 실행. 별 코멘트가 없다면 모듈 컴파일 진행 하면 됩니다.
To capture only TCP SYN packets:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-syn) != 0"
To capture only TCP ACK packets:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-ack) != 0"
To capture only TCP FIN packets:
# tcpdump -i <interface> "tcp[tcpflags] & (tcp-fin) != 0"
To capture only TCP SYN or ACK packets:
# tcpdump -r <interface> "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
** FTP 한글명 파일 깨짐 현상 * feat. PROFTP, CONVMV
[ 원인 발생 ]
어느 고객의 ftp서버를 관리 하던 도중 하드디스크 용량 부족으로 인해 디스크 교체 작업을 진행
리눅스 서버에 하드 디스크 용량 증설 및 데이터 이전 작업은 정상적으로 처리 되었습니다.
하지만, 이전 후 파일들의 한글명들이 깨지는 현상이 발행.... 원인은 기존 디스크를 도킹장치로 물려서 신규 디스크로 데이터 이전이 었던거 같습니다.
ftp를 리눅스 서버로 사용 하고 언어 셋 또한 EUC-KR, 주 고객들은 윈도우에서 해당 서버로 탐색기FTP 를 사용하여 한글명의 파일들을 전송..(무조건 탐색기를 이용한 FTP사용...)
파일은 윈도우 ===> 리눅스
이전은 리눅스 ===> 리눅스
이런 과정으로 인해 서버 내부에서 부터 한글명들 이 깨지는 현상이 발행...
기존에 사용하던 VSFTP로는 답이 나오질 않아서 PROFTP로 변경 하였습니다.
[ 언어셋 설정 ]
# vi /etc/sysconfig/i18n
LANG="ko_KR.eucKR"
SUPPORTED="ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
** 해당 서버는 기존에 사용하던 EUC-KR로 해뒀습니다. 따로 시스템 언어셋은 바꾸지 않음
[ PROFTP 설치 및 설정 ]
** 해당 서버는 centos 6에서 작업 하였습니다.
** yum 설치 **
# yum install proftp* -y
# vi /etc/proftpd.conf
** 소스 설치 **
# ./configure –prefix=/usr/local/proftpd –enable-nls
# make && make install
# vi /usr/local/proftpd/etc/proftpd.conf
UseEncoding utf8 cp949
ServerName "ProFTPD server"
ServerIdent on "FTP Server ready."
ServerAdmin root@localhost
DefaultServer on
** proftd.conf 파일에 UseEncoding utf8 cp949 추가등록.
[ 파일명 한글화 ]
** 서버에 접근을 할때 역시 euc-kr 로 ssh 접근 후 작업 진행 합니다.
# convmv --notest -f euckr -t utf8 파일명
# convmv --notest -f euckr -t utf8 -r 디렉토리명
--notest : 테스트모드가 아닌 직접 적용. 당연히 이 옵션을 빼면 테스트 모드로 동작하여 실제 인코딩 변 환은 일어나지 않는다.
-f : 현재 euckr의 인코딩
-t : 변환될 utf8 인코딩
-r : 디렉토리의 하위 파일, 디렉토리 포함
[ PROFTP 구동 및 확인 ]
# /etc/init.d/proftpd start
**client 윈도우 탐색기에서 ftp://url 접근 후 확인 결과 한글 정상 확인
** 해당 작업은 PDF파일등 약 1TB가까이 되어서 많은 시간이 소모 하였고, 해당 문제는 처리되었습니 다.
yum 국내 미러사이트
[ 다음 카카오 ]
echo '[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.daumkakao.com/centos/$releasever/os/$basearch/
gpgcheck=0
[updates]
name=CentOS-$releasever - Updates
baseurl=http://ftp.daumkakao.com/centos/$releasever/updates/$basearch/
gpgcheck=0
[extras]
name=CentOS-$releasever - Extras
baseurl=http://ftp.daumkakao.com/centos/$releasever/extras/$basearch/
gpgcheck=0' > /etc/yum.repos.d/daumakako.repo
yum repolist
[ 카이스트 ]
http://ftp.kaist.ac.kr/CentOS
[ 네이버 ]
http://mirror.navercorp.com/centos
[ 네오위즈 ]
http://ftp.neowiz.com/centos
해당 레드컬러 url 만 위의 국내 미러 사이트로 변경 후 사용합니다. (모두 등록가능)
yum 해외 미러사이트 (구버젼 포함)
** 해당 미러 사이트는 현재 2.1 ~ 7.4 까지 확인됨
echo '[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/[버젼]/os/$basearch/
gpgcheck=0
[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/[버젼]/updates/$basearch/
gpgcheck=0
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/[버젼]/extras/$basearch/
gpgcheck=0' > /etc/yum.repos.d/Centos.repo
yum repolist
** libmcrypt 설치 장애시
1. Download the latest atomic-release rpm from
# wget http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/atomic-release-1.0-21.el7.art.noarch.rpm
2. Install atomic-release rpm:
# rpm -Uvh atomic-release*rpm
3. Install libmcrypt rpm package:
# yum install libmcrypt*
기본 메일 설치는 dovecot+sendmail 이곳을 참조
* dovecot 2.0 이상에서 설정이 조금 바뀌었음
* apm 은 설치가 되어 있다는 조건으로 작업 진행
#### 설정
# cd /etc/dovecot
# vi dovecot.conf
protocols = imap pop3 lmtp
listen = *
# cd conf.d
# vi 10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-system.conf.ext
# 10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
first_valid_uid = 500
first_valid_gid = 500
# /etc/init.d/dovecot start
* RoundCube 설치
1. 우선 파일을 다운
http://www.roundcube.net 또는 sourceforge.net 에서 다운
* php 5.2 까지는 roundcubemail-0.8.x 버전으로
php 5.3 부터는 roundcubemail-0.9.x 버전으로 설치 하자
2. 압축해제, 이름변경
tar zxvf roundcubemail-0.8.5.tar.gz
mv roundcubemail-0.8.5.tar.gz mail
cd mail
chmod 707 logs temp 또는 chmod 777 logs temp
3. 버추얼호스트등록
<VirtualHost *:80>
ServerAdmin hoguking@hoguinside.com
DocumentRoot “/home/유저/mail”
ServerName webmail.hoguinside.com
</VirtualHost>
4. MySQL DB 및 사용자 생성
# mysql -p (mysql root 암호 입력 후, 엔터)
mysql> create database hoguking;
mysql> GRANT ALL PRIVILEGES ON hoguking.* TO hoguking@localhost IDENTIFIED BY ‘password';
mysql> flush privileges;
mysql> exit
*web과 db가 분리 되어 있을경우 사용자 생성 할때 localhost 를 web 아피로 적어 준다
ex)mysql> GRANT ALL PRIVILEGES ON hoguking.* TO hoguking@192.168.125.23 IDENTIFIED BY ‘password';
5. 웹에서 설치 시작
http://webmail.hoguinside.com/installer url 입력시 roundcube 설치가 등장!!!!!
설치가 안되어 있는 모듈들이 있으면 phpize 등으로 모듈 설치
[Check environment]
> [NEXT] 클릭
필요 부분만 체크 하겠음
> Database setup
[Create config] 부분에서 해당 항복은roundcube와 db 연동을 위해 설정한다
위 사진은 로컬 호스트로 되어 있지만, web서버와 db서버가 다를 경우 db 서버의 ip를 입력 하면됨
순서대로 host, DB명, 계정명, 계정암호를 입력
> IMAP Settings
: default_host 에 사용할 도메인을 입력
*주의 : 여기서 입력하는 hoguinside.com 이 @뒤에 오는 주소가 됨
hoguinside.com이 메일서버와 같은 IP가 아닐 경우에 로그인이 되지 않는 현상이 발생하며,
이 경우 메일서버의 도메인(webmail.hoguinside.com)을 입력해서 설치를 진행
그리고 나중에 웹메일 로그인할때 ‘개인 설정’ 에서 신원 email 주소를 변경.(최초에 접근하면 test@webmail.hoguinside.com
으로 되어 있음. 변경은 test@hoguinside.com 으로 변경 하면됨)
> SMTP Settings
> Display settings & user prefs
> creating config
creating config 누르면 위와 같은 내용들이 보인다. 내용들을 복사해서 main.inc.php, db.inc.php 파일에 넣는다.
위치는 roundcube 압푹 해제 한 디렉토리 안에 config 디렉토리가 있음
# cd /home/hoguking/mail/config
# cp -arp db.inc.php.dist db.inc.php
# cp -arp main.inc.php.dist main.inc.php
작업 후 해당 파일 내용 삭제 및 위에 사진에 보이는 내용들을 삽입
> [CONTINUE] 클릭
> [Test config]
위 사진에는 모든 체크 항목이 OK 로 되어 있는데 최초에 db tables 넣지 않았기 때문에 에러가 뜰것임
그럼 db schema initalize 버튼이 활성화 될 것인데 요고 클릭하믄댐 ㅇㅇ
아니면 수동으로 하고 싶으면
#cd /home/hoguking/mail/SQL
# mysql -u root -p hoguking < mysql.initial.sql (mysql root 암호 입력 후, 엔터)
요래 하면됨
전부 ok가 뜨면 메일 보내는 테스트와 시스템 계정의 로그인 테스트를 하믄댐
실제 로그인 페이지에서 로그인이 되지만 imap 서버 인증 실패 받은 메일함을 구독 할 수 없으면
해당 작업 진행
# cd /var/mail
# chmod 600 hoguking
설치가 끝났음. 메일 테스트를 해보센~ㅂ2
* dovecot 2.0 이상에서 설정이 조금 바뀌었음
* apm 은 설치가 되어 있다는 조건으로 작업 진행
#### 설정
# cd /etc/dovecot
# vi dovecot.conf
protocols = imap pop3 lmtp
listen = *
# cd conf.d
# vi 10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-system.conf.ext
# 10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
first_valid_uid = 500
first_valid_gid = 500
# /etc/init.d/dovecot start
* RoundCube 설치
1. 우선 파일을 다운
http://www.roundcube.net 또는 sourceforge.net 에서 다운
* php 5.2 까지는 roundcubemail-0.8.x 버전으로
php 5.3 부터는 roundcubemail-0.9.x 버전으로 설치 하자
2. 압축해제, 이름변경
tar zxvf roundcubemail-0.8.5.tar.gz
mv roundcubemail-0.8.5.tar.gz mail
cd mail
chmod 707 logs temp 또는 chmod 777 logs temp
3. 버추얼호스트등록
<VirtualHost *:80>
ServerAdmin hoguking@hoguinside.com
DocumentRoot “/home/유저/mail”
ServerName webmail.hoguinside.com
</VirtualHost>
4. MySQL DB 및 사용자 생성
# mysql -p (mysql root 암호 입력 후, 엔터)
mysql> create database hoguking;
mysql> GRANT ALL PRIVILEGES ON hoguking.* TO hoguking@localhost IDENTIFIED BY ‘password';
mysql> flush privileges;
mysql> exit
*web과 db가 분리 되어 있을경우 사용자 생성 할때 localhost 를 web 아피로 적어 준다
ex)mysql> GRANT ALL PRIVILEGES ON hoguking.* TO hoguking@192.168.125.23 IDENTIFIED BY ‘password';
5. 웹에서 설치 시작
http://webmail.hoguinside.com/installer url 입력시 roundcube 설치가 등장!!!!!
설치가 안되어 있는 모듈들이 있으면 phpize 등으로 모듈 설치
[Check environment]
> [NEXT] 클릭
필요 부분만 체크 하겠음
> Database setup
[Create config] 부분에서 해당 항복은roundcube와 db 연동을 위해 설정한다
위 사진은 로컬 호스트로 되어 있지만, web서버와 db서버가 다를 경우 db 서버의 ip를 입력 하면됨
순서대로 host, DB명, 계정명, 계정암호를 입력
> IMAP Settings
: default_host 에 사용할 도메인을 입력
*주의 : 여기서 입력하는 hoguinside.com 이 @뒤에 오는 주소가 됨
hoguinside.com이 메일서버와 같은 IP가 아닐 경우에 로그인이 되지 않는 현상이 발생하며,
이 경우 메일서버의 도메인(webmail.hoguinside.com)을 입력해서 설치를 진행
그리고 나중에 웹메일 로그인할때 ‘개인 설정’ 에서 신원 email 주소를 변경.(최초에 접근하면 test@webmail.hoguinside.com
으로 되어 있음. 변경은 test@hoguinside.com 으로 변경 하면됨)
> SMTP Settings
> Display settings & user prefs
creating config 누르면 위와 같은 내용들이 보인다. 내용들을 복사해서 main.inc.php, db.inc.php 파일에 넣는다.
위치는 roundcube 압푹 해제 한 디렉토리 안에 config 디렉토리가 있음
# cd /home/hoguking/mail/config
# cp -arp db.inc.php.dist db.inc.php
# cp -arp main.inc.php.dist main.inc.php
작업 후 해당 파일 내용 삭제 및 위에 사진에 보이는 내용들을 삽입
> [CONTINUE] 클릭
> [Test config]
위 사진에는 모든 체크 항목이 OK 로 되어 있는데 최초에 db tables 넣지 않았기 때문에 에러가 뜰것임
그럼 db schema initalize 버튼이 활성화 될 것인데 요고 클릭하믄댐 ㅇㅇ
아니면 수동으로 하고 싶으면
#cd /home/hoguking/mail/SQL
# mysql -u root -p hoguking < mysql.initial.sql (mysql root 암호 입력 후, 엔터)
요래 하면됨
전부 ok가 뜨면 메일 보내는 테스트와 시스템 계정의 로그인 테스트를 하믄댐
실제 로그인 페이지에서 로그인이 되지만 imap 서버 인증 실패 받은 메일함을 구독 할 수 없으면
해당 작업 진행
# cd /var/mail
# chmod 600 hoguking
설치가 끝났음. 메일 테스트를 해보센~ㅂ2
Telegram_CLI install & lua_scripts 모니터 활용
약 4개월 전에 Telegram 사용이 핫 할때 사용하다가 2개월 전에 cli 사용 법을 알아서 이것 저것 좀 해보다가 이제 올림 ㅇㅇ;
1. telegram_cli 설치
* 패키지, 소스 설치 및 설정
yum install libevent-devel openssl-devel readline-devel libconfig-devel lua lua-devel -y ln -sf /usr/lib64/libncursesw.so /usr/lib/libncursesw.so mkdir /tele cd /tele git clone –recursive https://github.com/vysheng/tg telegram_cli export LDFLAGS=”-lncursesw” ./configure && make cp /root/tele/telegram_cli/tg-server.pub /root/tele/telegram_cli/bin/ cd /root/tele/telegram_cli/bin/ ./telegram-cli -k tg-server.pub
– 구동이 시작되면 본인 폰인증 시작~~
* 설치 및 구동이 완료 되었고 명령어를 통해 사용이 가능 합니다.
* help를 입력하면 해당 명령어 등으로 메시지를 전달할 수 있습니다.
* help에 있는 contact_list 명령어를 사용하게 되면 텔레그램에 등록되어 있는 유저 목록을 출력합니다.
* user_info 사용시 해당 계정정보가 출력 됩니다.
* 여기서 중요한점은 텔레그램 명령어 사용시 공백이 불가 합니다. 대신 계 정등에 공백이 확인 되는 경우에는 “ _” (언더바)를 통해 유져명을 이어갑 니다.(현재는 공식한글이 지원되서 정상적으로 된다고 합니다.)
* 그리고 계정뒤에는 “ #코드넘버”가 보이는데 코드넘버로 메세지 전송이 가 능합니다.
“msg user#코드넘버 ”
* 메세지 전송은 계정으로 가능하지만 계졍명은 핸드폰의 주소록을 통해 확인 됨으로 코드 넘버로 하는게 정확한것 같습니다.
* ex) msg 길동_홍 안녕하세요
msg user#코드넘버 안녕하세요
둘다 동일 인물에게 같은 내용이 전달 됩니다.
2. Telegram send, receive sample source
* sample source ====================================================================================== #!/usr/bin/lua dir_cmd="/tele/telegram_cli/bin/sh" auth_phone={ ["82본인폰번호"] = true } function on_msg_receive (msg) if ( msg.text == 'date' ) then send_msg(msg.from.print_name, os.date(), ok_cd, false) return end local recv_msg = msg.text local result = {} function split(str, delim) local i=1 if ( str ~= nil ) then for tmp in string.gmatch(str, "[^%s]+") do table.insert( result, tmp ) i = i+1 end end return result end r = split(recv_msg," ") cmd = r[1] cmd2 = r[2] print("receive : ", cmd, "\n") print("Name : ", msg.from.print_name) print("Phone : ", msg.from.phone) print("Msg Num : ", msg.id) print("to.Name : ", msg.to.print_name) if (msg.to.id == our_id) then user_id = msg.from.print_name else user_id = msg.to.print_name end if auth_phone[msg.from.phone] then print "auth : OK " else print "auth : invalid user" return end mark_read(user_id, ok_cb, false) if ( cmd == 'Help' ) then send_text(user_id, dir_cmd ..'/help.txt', ok_cd, false) return end end function ok_cb(extra, success, result) end ======================================================================================
* telegram_cli를 통해 메세지 전송시 답문을 받게 만들었습니다.
* 모티브는 http://truefeel.tistory.com/ 바탕으로 진행 하였으며, 해당 홈페이지의 내용대 로 진행시 변수 다루는 부분에서 정상적으로 구동 되지 않아 수정 하였습니다.
* source 분석
============================================================
#!/usr/bin/lua dir_cmd="/tele/telegram_cli/bin/sh" auth_phone={ ["82본인폰번호"] = true }
– 실행할 스트립트의 경로와 본인의 폰번호를 삽입하여 본인의 명령에만 실 행 가능하도록 하였습니다.
==================================================================
function on_msg_receive (msg) if ( msg.text == 'date' ) then send_msg(msg.from.print_name, os.date(), ok_cd, false) return end local recv_msg = msg.text local result = {} function split(str, delim) local i=1 if ( str ~= nil ) then for tmp in string.gmatch(str, "[^%s]+") do table.insert( result, tmp ) i = i+1 end end return result end r = split(recv_msg," ") cmd = r[1] cmd2 = r[2] function on_msg_receive (msg)
– Cli 메신저로 송신을 할 때 변수 처리할 내용들을 저장하는 소스입니다.
Ex) ping 8.8.8.8
– 예제 실행시 cmd=ping cmd2=8.8.8.8 변수처리가 되어 구문을 진행 합니다.
– 변수 값들이 늘어나면 cmd3,cmd4 로 늘려도 되고, 간단하게는 cmd를 배열 처리 하면 될 것 같습니다.
==================================================================
print("receive : ", cmd, "\n") print("Name : ", msg.from.print_name) print("Phone : ", msg.from.phone) print("Msg Num : ", msg.id) print("to.Name : ", msg.to.print_name)
– 텔레그램에서 문자 입력시 상대의 상대이름, 번화번호, 메시지넘버, 본인이 름, 메시지내용이 출력 됩니다.
==================================================================
if (msg.to.id == our_id) then user_id = msg.from.print_name else user_id = msg.to.print_name End
– secret chat을 지원합니다. msg.to.id == our_id 라면, 즉 받는 사람과 Cli 메신 저 유저가 같다면 일반대화창으로 대화중이고, 그렇지 않는 것은 비밀대화 이다. 비밀대화는 msg.from.print_name이 아닌 msg.to.print_name 에게 메시 지를 보내야 합니다. 아래 루틴이 없다면 폰에서 비밀대화로 메시지를 보 냈더라도 CLI에서는 응답을 일반대화창으로 보냅니다.
==================================================================
if auth_phone[msg.from.phone] then print "auth : OK " else print "auth : invalid user" return end mark_read(user_id, ok_cb, false)
– auth_phone={ [“82본인폰번호“] = true } 지정한 번호와 Cli 메신저로 보낸 번 호와 대조하여 해당 명령어를 수행할지 말지를 결정 합니다.
– 지정된 번호가 아니라면 Cli 메신저 내부에서만 해당 내용을 “auth : invalid user” 출력하고, 메시지만 전송합니다.
==================================================================
if ( cmd == 'Help' ) then send_text(user_id, dir_cmd ..'/help.txt', ok_cd, false) return end end function ok_cb(extra, success, result) end
– 위 지정된 번호로 정상 비교시, 해당 구문을 구동합니다.
– 여러개의 비교문을 넣어 스크립트 및 mrtg 사진등을 불러와 모니터링이 가 능합니다.
==================================================================
3. Telegram-Cli test
* # ./telegram-cli -k tg-server.pub -s test.lua ==> 명령어를 입력하면 루아 스크 립트와 같이 실행이 됩니다.
* # ./telegram-cli -k tg-server.pub -s test.lua -d & ==> 명령어를 입력 하면 데몬 형태로 구동이 가능 합니다.
* 핸드폰에서 Help입력시 수신으로 메시지가 날라옵니다.
* Cli 에서는 수신 받은 메시지와 송신한 메시지를 출력합니다.
* 한글역시 출력이 됩니다.
* ping, nslookup 역시 가능 하고, 이는 사용될 쉘 스크립트를 간단 하게 작성 해 놓은 상태이고, 자동으로 실시간 모니터링을 원한다면, echo를 이용합니다.
* 예를들어 포트 체크시 오픈과 클로즈를 비교 하는 쉘 스크립트 작성 후
echo “msg 이름 할말 ” | /tele/telegram_cli/bin/telegram-cli -k /tele/telegram_cli/bin/tg-server.pub -W
또는
echo “msg user#코드넘버 할말 ” | /tele/telegram_cli/bin/telegram-cli -k /tele/telegram_cli/bin/tg-server.pub -W
내용을 삽입 하면 됩니다. 물론 크론텝에 등록 하여 1분에서 5분 주기로 등록 합니다.
* Telegram-Cli 의 장,단점
* 장점
반복 되는 단순한 작업은 외부에서 쉘 스크립트 작성을 통해 빠르게 작업이 가능 하고, 쉘스크립트 작성자의 역량에 따라 편리하고 쉽게 작업 및 모니터링이 가능합니다.
* 단점
1) centos 5.x 어떤버젼 에서는 프로그램 실행을 종료 했다가 다시 들어가면 구동하는데 시간이 오래 걸리는 반면 5.11에서는 또 정상적으로 구동되는 부분 (그래서 centos 6.5를 사용. 정확하게 파악은 하지 않았습니다.)
2) 본인 휴대폰으로 인증시 수신 메시지가 알람이 안울린 다는 점. 그래서 작업 폰으로 등록 하고, 본인 폰으로 받아야 되는것 같습니다.
3) 리시브 받기 위해 데몬 형태로 구동을 하는 방법과, 크론에 등록 하여 에코로 발송하는 방법은 한 계정에서는 같이 사용을 할 수 없습니다.
테스트 결과 데몬형태 구동 후 에코를 날려보니 처음에는 메시지가 정상적으로 가지만 다음부터는 구동을 하지 않았습니다.
동시에 사용하려면 폰이 두대 있어야 된다는 점.(데몬은 본인 폰으로, 에 코는 작업폰으로 하면 될 것 같습니다.)
4) root에서 두개 이상을 인증해서 사용해 볼려고 했습니다. /bin 디렉토리 밑 에 generate 파일이 있어서 키값을 생성 해볼려고 했으나 실패 하였고,
프로그램 다운시 제공하는 키는 한개지만, 같은 서버, 다른 계정으로는 구동이 가능 합니다.(로컬에서 작업 공간 바꿔서 해도 될 것 같습니다. 테스 트는 해보지 않았습니다.)
* 텔레그램 접해보면서 재미있는 생각들이 좀 떠올랐는데 막상 해볼려고 하니, 회사에 사용은 간단한 작업이나 모니터링 이외에 없을 것 같습니다. 잘못하면 위험할 수도 있을꺼 같아서 나중에 다시 구상해 봐야할 것 같습 니다.
*해당 자료는 회사에서 서버 모니터링 텔레그램으로 해봐라 해서 메뉴얼 식으로 만든 내용임 그리고 한글은.. 테스트결과 정상적으로..ㅇㅇ;;
* 한참 이슈일때 해봤으나 나쁜 관계로..이제 올림;; 시간 날때 iscsi 이미지 튜닝도 올리겠음니다.
☆참고 자료☆
좋은진호님 블로그 – http://truefeel.tistory.com/224
텔레그램 README-LUA – https://github.com/vysheng/tg/blob/master/README-LUA
Lua Check if a file exits – http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists
텔레그램 Messenger Client – http://www.forum-raspberrypi.de/Thread-tutorial-telegram-messenger-client-auf-dem-raspberry?page=2
[root@localhost ]# lspci -vv | grep LSI |grep Logic
01:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
Subsystem: LSI Logic / Symbios Logic Device 9361
pci 에서 인식을 해야 시스템 상에서 정상 적으로 확인 가능
=======================================================================================
#more /proc/scsi/scsi 정보로 레이드 카드 종류를 확인할수 있다
3ware 레이드 카드
./tw_cli info c0
./tw_cli /c0/u0 show
./tw_cli /c0/u1 show
./tw_cli maint rescan c0 디스크 교체전 교체후 상태 다시 보기
./tw_cli maint deleteunit c0 u1 유닛제거하기
./tw_cli maint remove c0 p1 디스크 제거하기 (포트번호확인)
./tw_cli maint createunit c0 rspare p15 (스페어 디스크 지정)
areca 레이드카드
파일다운위치
wget ftp://60.248.88.208/RaidCards/AP_Drivers/Linux/CLI/v1.82_81103.zip
./cli32 disk info
./cli32 vsf info
HP 레이드카드
wget ftp://ftp.hp.com/pub/softlib2/software1/pubsw-linux/p414707558/v59422/hpacucli-8.50-6.0.noarch.rpm
hpacucli ctrl all show (장착된 슬롯 정보 보기)
hpacucli ctrl slot=2 pd all show status 물리적상태
hpacucli ctrl slot=2 ld all show status 논리적상태
hpacucli ctrl slot=2 show config 정보보기
hpacucli ctrl slot=2 show config detail 상세정보보기
hpacucli ctrl slot=2 show status
hpacucli ctrl all show status
hpacucli ctrl all show config
아답텍 레이드카드
wget http://www.andico.co.kr/files/adaptec/asm/650_2/asm_linux_x86_v6_50_18579.tgz
./arcconf getconfig 1 ld 논리적상태
./arcconf getconfig 1 pd 물리적상태
./arcconf getconfig 1 ad 요약정보
MegaRAID
wget -O MegaCLI.zip http://www.lsi.com/DistributionSystem/User/AssetMgr.aspx?asset=5661
./MegaCli -pdlist -a0 | grep Count
./MegaCli -pdlist -a0 물리적 디스크 정보
./MegaCli -ldinfo -lall -all 논리적 디스크 정보
./MegaCli -AdpAllInfo -aall 레이드카드 정보
출처 : http://lamerced.tistory.com
01:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
Subsystem: LSI Logic / Symbios Logic Device 9361
pci 에서 인식을 해야 시스템 상에서 정상 적으로 확인 가능
=======================================================================================
#more /proc/scsi/scsi 정보로 레이드 카드 종류를 확인할수 있다
3ware 레이드 카드
./tw_cli info c0
./tw_cli /c0/u0 show
./tw_cli /c0/u1 show
./tw_cli maint rescan c0 디스크 교체전 교체후 상태 다시 보기
./tw_cli maint deleteunit c0 u1 유닛제거하기
./tw_cli maint remove c0 p1 디스크 제거하기 (포트번호확인)
./tw_cli maint createunit c0 rspare p15 (스페어 디스크 지정)
areca 레이드카드
파일다운위치
wget ftp://60.248.88.208/RaidCards/AP_Drivers/Linux/CLI/v1.82_81103.zip
./cli32 disk info
./cli32 vsf info
HP 레이드카드
wget ftp://ftp.hp.com/pub/softlib2/software1/pubsw-linux/p414707558/v59422/hpacucli-8.50-6.0.noarch.rpm
hpacucli ctrl all show (장착된 슬롯 정보 보기)
hpacucli ctrl slot=2 pd all show status 물리적상태
hpacucli ctrl slot=2 ld all show status 논리적상태
hpacucli ctrl slot=2 show config 정보보기
hpacucli ctrl slot=2 show config detail 상세정보보기
hpacucli ctrl slot=2 show status
hpacucli ctrl all show status
hpacucli ctrl all show config
아답텍 레이드카드
wget http://www.andico.co.kr/files/adaptec/asm/650_2/asm_linux_x86_v6_50_18579.tgz
./arcconf getconfig 1 ld 논리적상태
./arcconf getconfig 1 pd 물리적상태
./arcconf getconfig 1 ad 요약정보
MegaRAID
wget -O MegaCLI.zip http://www.lsi.com/DistributionSystem/User/AssetMgr.aspx?asset=5661
./MegaCli -pdlist -a0 | grep Count
./MegaCli -pdlist -a0 물리적 디스크 정보
./MegaCli -ldinfo -lall -all 논리적 디스크 정보
./MegaCli -AdpAllInfo -aall 레이드카드 정보
출처 : http://lamerced.tistory.com
raid 컨트롤러 9650se-8lpml 에서 해당 작업 진행 하였습니다.
3ware BIOS Manager 접근 합니다.
RAID 셋팅은 3ware에서 제공하는 3ware BIOS Manager (이하 3BM)를 이용하여 진행
부팅후 왼쪽 화면이 출력될 때 <ALT+3> 키를 눌러 3BM 으로 ㄱㄱ
RAID 구성 하드 Type, 모델명, 용량, 포트 등의 정보가 출력된 화면
아무키나 눌러 다음으로 진행 ㅇㅇ;;
RAID 컨트롤러에 연결된 하드의 정보가 출력
Space Bar 를 눌러 RAID를 구성할 하드를 선택.
선택을 하면 하드디스크 앞에 * (별) 표시가 됨.
※ 8개 RAID 하드가 서버에 장착되어 있고, 6개는 RAID5, 2개는 RAID0 (Mirror) 구성을 하는 예를 듬
※ 하단 메뉴키 설명
Alt+F1 도움말 ↔↕ 이전/다음 Alt+a 전체 드라이브 선택 Alt+r 드라이브 재검색
Enter 선택/선택취소 F6 복원 Esc 취소 F8 종료
– 다음 하단 Create Unit 를 누르게 되면 선택한 하드디스크가 리스트로 표시됨
– Array Name : 구분 가능한 이름을 입력
– RAID Configuration : 구성할 RAID 종류를 선택
※ 하드 3개 이상부터 RAID 5 구성이 가능
– Write Cache Setting : Enabled 상태로 둠
– 나머지 설정은 기본 값대로 두면 되고 오른쪽 OK 를 눌러 설정을 저장
– 설정후 경고 메세지창이 뜨게 되는데 Batter backup unit (BBU) 장치가 설치되어 있지
않은 상태에서 Write Cache 기능을 활성화 했을때 나타나는 경고 메세지로
BBU가 설치되지 않은 채 이 기능을 활성화하면 전원에 문제가 생겼을 시 데이터 유실 가능성이
있음을 경고하고 있슴. y 키를 눌러 기능을 활성화 ㄱㄱ
– Exportable Units 에 6개의 드라이브가 RAID5 구성이 되어 있고 전체 용량은 2.27 TB,
Array Name은 raid1 로설정되어 있음을 확인할 수 있음
– RAID 구성이 되지 않은 나머지 2개의 하드 정보 는 Available Drives에 출력됨
RAID 구성된 유니트에서 + (플러스) 버튼을 누르 게 되면 상세한 하드 정보가 출력
마찬가지로 나머지 하드 드라이브들에 대한 RAID 구성을 마치고 다음과 같이 F8키를 눌러
설정을 완료!!
– 마지막으로 나가기 전 지금까지 설정한 정보를 저장하겠냐고 물어보는데 y키 를 눌러서
진행. 리빌드 작업후 설정 이전의 데이터는 없어짐을
경고하고 있음메
– 다음 화면에서 초기화 화면이 나오는데 빠른 작업처리를 위해 skip해서 넘어가도 됨
RAID 설정화면
모델에 따라 상의한데… 9650의 경우
RAID 0
RAID 1
RAID 5
RAID 6
RAID 10
RAID 50 구성이 가능
– 리부팅후 설정한 RAID 정보가 출력
RAID 삭제 (Delete Unit)
– Delete Unit 메뉴에서 삭제할 RAID 를 선택합니다. 선택한 Unit는 * (별) 표시가 됨
– 삭제할 RAID 정보가 맞는지 확인 후 OK 를 누릅니다.
– 설정했던 RAID 정보가 삭제되어 있는 것을 확인할 수 있음
3ware BIOS Manager 접근 합니다.
RAID 셋팅은 3ware에서 제공하는 3ware BIOS Manager (이하 3BM)를 이용하여 진행
부팅후 왼쪽 화면이 출력될 때 <ALT+3> 키를 눌러 3BM 으로 ㄱㄱ
RAID 구성 하드 Type, 모델명, 용량, 포트 등의 정보가 출력된 화면
아무키나 눌러 다음으로 진행 ㅇㅇ;;
RAID 컨트롤러에 연결된 하드의 정보가 출력
Space Bar 를 눌러 RAID를 구성할 하드를 선택.
선택을 하면 하드디스크 앞에 * (별) 표시가 됨.
※ 8개 RAID 하드가 서버에 장착되어 있고, 6개는 RAID5, 2개는 RAID0 (Mirror) 구성을 하는 예를 듬
※ 하단 메뉴키 설명
Alt+F1 도움말 ↔↕ 이전/다음 Alt+a 전체 드라이브 선택 Alt+r 드라이브 재검색
Enter 선택/선택취소 F6 복원 Esc 취소 F8 종료
– 다음 하단 Create Unit 를 누르게 되면 선택한 하드디스크가 리스트로 표시됨
– Array Name : 구분 가능한 이름을 입력
– RAID Configuration : 구성할 RAID 종류를 선택
※ 하드 3개 이상부터 RAID 5 구성이 가능
– Write Cache Setting : Enabled 상태로 둠
– 나머지 설정은 기본 값대로 두면 되고 오른쪽 OK 를 눌러 설정을 저장
– 설정후 경고 메세지창이 뜨게 되는데 Batter backup unit (BBU) 장치가 설치되어 있지
않은 상태에서 Write Cache 기능을 활성화 했을때 나타나는 경고 메세지로
BBU가 설치되지 않은 채 이 기능을 활성화하면 전원에 문제가 생겼을 시 데이터 유실 가능성이
있음을 경고하고 있슴. y 키를 눌러 기능을 활성화 ㄱㄱ
– Exportable Units 에 6개의 드라이브가 RAID5 구성이 되어 있고 전체 용량은 2.27 TB,
Array Name은 raid1 로설정되어 있음을 확인할 수 있음
– RAID 구성이 되지 않은 나머지 2개의 하드 정보 는 Available Drives에 출력됨
RAID 구성된 유니트에서 + (플러스) 버튼을 누르 게 되면 상세한 하드 정보가 출력
마찬가지로 나머지 하드 드라이브들에 대한 RAID 구성을 마치고 다음과 같이 F8키를 눌러
설정을 완료!!
– 마지막으로 나가기 전 지금까지 설정한 정보를 저장하겠냐고 물어보는데 y키 를 눌러서
진행. 리빌드 작업후 설정 이전의 데이터는 없어짐을
경고하고 있음메
– 다음 화면에서 초기화 화면이 나오는데 빠른 작업처리를 위해 skip해서 넘어가도 됨
RAID 설정화면
모델에 따라 상의한데… 9650의 경우
RAID 0
RAID 1
RAID 5
RAID 6
RAID 10
RAID 50 구성이 가능
– 리부팅후 설정한 RAID 정보가 출력
RAID 삭제 (Delete Unit)
– Delete Unit 메뉴에서 삭제할 RAID 를 선택합니다. 선택한 Unit는 * (별) 표시가 됨
– 삭제할 RAID 정보가 맞는지 확인 후 OK 를 누릅니다.
– 설정했던 RAID 정보가 삭제되어 있는 것을 확인할 수 있음
[U]CBL 스펨메일 문제 해결(localhost.localdomain)[/U]
어제 마이크로소프트로 메일을 전송시키다 보니 http://www.spamhaus.org/lookup.lasso 에 등록되어 스펨 처리가 되어 메일이 리턴이 되었다.
http://cbl.abuseat.org/lookup.cgi?ip=xxx.xxx.xxx.xxx 문서를 살펴보니 아래와 같은 내용이 있다.
This IP address is HELO’ing as “localhost.localdomain” which violates the relevant standards (specifically: RFC5321).
Sendmail에서 메일을 보낼때 HELO localhost.localdomain 로 보내기 때문인 것 같다..
이는 서버 Hostname이 localhost.localdomain로 등록 되어 있기 때문이다.
그래서 hostname을 변경 해주면 해결이 된다.
HostName 도메인 추가
[CODE]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=yesyo.com[/CODE]
Hosts 아이피 도메인 추가
[CODE]# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
xxx.xxx.xxx.xxx yesyo.com[/CODE]
HostName 바로 적용
[CODE]# hostname yesyo.com[/CODE]
참조 : http://unix.co.kr/bbs/board.php?bo_table=91_3&wr_id=18
어제 마이크로소프트로 메일을 전송시키다 보니 http://www.spamhaus.org/lookup.lasso 에 등록되어 스펨 처리가 되어 메일이 리턴이 되었다.
http://cbl.abuseat.org/lookup.cgi?ip=xxx.xxx.xxx.xxx 문서를 살펴보니 아래와 같은 내용이 있다.
Sendmail에서 메일을 보낼때 HELO localhost.localdomain 로 보내기 때문인 것 같다..
이는 서버 Hostname이 localhost.localdomain로 등록 되어 있기 때문이다.
그래서 hostname을 변경 해주면 해결이 된다.
HostName 도메인 추가
[CODE]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=yesyo.com[/CODE]
Hosts 아이피 도메인 추가
[CODE]# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
xxx.xxx.xxx.xxx yesyo.com[/CODE]
HostName 바로 적용
[CODE]# hostname yesyo.com[/CODE]
참조 : http://unix.co.kr/bbs/board.php?bo_table=91_3&wr_id=18
1. logrotate 설치정보 확인 (CentOS에서는 기본으로 설치되어 있음)
[root@moon]# rpm -qa | grep logrotate
logrotate-3.7.4-12
[root@moon]# rpm -ql logrotate
/etc/cron.daily/logrotate // cron.daily 디렉토리에 포함되어 하루에 한번 실행 됩니다.
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.4
/usr/share/doc/logrotate-3.7.4/CHANGES
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
2. logrotate 환경설정
2-1. 로그로테이트 환경 설정 파일에 대한 설명 입니다.
[root@moon]# cat /etc/logrotate.conf
# see “man logrotate” for details
# rotate log files weekly
weekly // 로그파일을 변경할 기간을 설정합니다.
daily : 매일 변경
weekly : 매주 변경
monthly : 매달 변경
yearly : 매년 변경
# keep 3 weeks worth of backlogs
rotate 4 // 순환될 파일의 개수를 설정합니다. 0부터 시작하게 되며 위에서 weekly로 설정 시 4주간 보관합니다.
# create new (empty) log files after rotating old ones
create // 로그파일을 백업하고 새로운 파일을 생성할 것인지 설정합니다.
# uncomment this if you want your log files compressed
#compress // 순환(백업)된 로그파일을 압축하도록 변경합니다. 주석을 해제하면 백업
파일을 gzip으로 압축 합니다.
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d // 로그 순환 정보를 가진 파일들이 저장된 디렉토리를 불러옵니다. 이 디렉토리에 있는 파일들이 모두 포함됩니다.
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp //소유자 root, 그룹 utmp
rotate 6
} // wtmp (접속로그파일, 명령어 last)에 대한 설정을 합니다. 한달 단위로 순환을 하
며 백업은 한달을 보관하고, 백업파일은 root 사용자와 utmp그룹의 소유로644퍼미션
부여합니다.
# system-specific logs may be also be configured here.
2-2 /etc/logrotate.d 디렉토리에 내용을 추가하여 파일로 만들어 사용합니다. 대표적으로 몇개만 살펴보겠습니다.
[root@moon]# cat /etc/logrotate.d/yum
/var/log/yum.log {
missingok // 로그파일이 없어도 그냥 진행합니다.
notifempty // 로그파일이 비어있는 경우 순환을 하지 않습니다.
size 30k // 로그파일의 크기가 30k를 넘으면 순환합니다. 단위 K, M 사용이 가능합니다.
yearly
create 0600 root root // 순환되어 생성된 파일을 root 소유자 및 그룹으로 설정하
고 600퍼미션을 부여합니다.
}
[root@moon]# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts // 와일드카드로 지정된 여러파일에 적용 합니다.
postrotate // logrotate 작업 이후에 지정된 작업(스크립트)를 실행 합니다. 시작점
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript // 종료점
}
2-3. 위에서 안내하지 못한 옵션에 대한 설명
1) compress : 순환(백업)된 로그파일을 압축합니다.
1) nocompress : 순환된 로그파일을 압축하지 않습니다. (기본값)
1) compresscmd : gzip 이외의 압축 프로그램을 지정 합니다.
1) uncompresscmd : 압축해제 명령을 지정합니다. 디폴트는 gunzip 입니다.
1) compressext : 압축된 백업 로그파일에 지정할 확장자를 설정 합니다.
1) compressoptions : 압축 프로그램에 옵션을 설정 합니다. 디폴트로 gzip인 경우 ‘-9′
지정. (-9 옵션은 압축률 최대로)
1) dateext : 매일 처리되는 로그파일에 YYYYMMDD 형식으로 확장자를추가 합니다.
1) error [] : logrotate 작업시에 에러가 발생한다면 지정된 메일주소로 메일을 보냅니다.
1) extention : 순환된 로그파일의 확장자를 지정 합니다.
1) ifempty : 로그파일이 비어있는 경우에도 순환(로테이트)처리 합니다. (기본값)
1) noifempty : 로그파일이 비어있는 경우 순환(로테이트)처리 하지 않습니다.
1) mail [] : logrotate 작업 이후에 이전로그파일을 지정된 메일주소로 메일을 발송합니
다. (특정한 경우의 포르가일은 보내지 않을 수 있습니다.)
1) nomail : 메일을 발송하지 않습니다.
1) mailfirst [] : logrotate 작업시 신규파일 이전의 로그파일을 지정된 메일주소로 메일
을 발송합니다.
1) maxage [] : count로 지정된 날수가 지난 백업 로그파일을 삭제 합니다.
1) missingok : 로그파일이 없을 경우에도 에러로 처리하지 않습니다.
1) prerotate / endscript : logrotate 작업 이전에 지정된 작업(스크립트)를 실행 합니다.
2-4. 기본예제
apache 모든 log 파일
– 주기 : 매일 또는 로그 용량이 10M 가 되었을때
– 결과 : 파일 백업 후, 새 로그파일 생성
– 보관 : 3개 까지 보관
# vi /etc/logrotate.d/apache
/usr/local/apache/logs/*_log {
daily
rotate 3
size=10M
missingok
create 0600 root root
postrotate
/bin/kill -HUP `cat /usr/local/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
위의 내용을 logrotate.conf 에 추가를 하거나, logrotate.d 디렉토리에 파일로 만들면 됩니다.
위의 apache 로그는 용량에 따라 rotation이 일어난다.
3. 디폴트 로그 순환 상태 파일 확인
[root@moon]# cat /var/lib/logrotate.status
4. 실행 TEST
cron 설정으로 매일 또는 일정 시간에 실행 되도록 합니다. (기본 설정)
강제 실행으로 정상적으로 작동하는지 바로 확인이 가능합니다.
> 로그파일 용량 보다 작게 설정하여 (사이즈 변경) 실행하면 확인이 쉽습니다.
# logrotate -f /etc/logrotate.d/apache
[root@moon]# rpm -qa | grep logrotate
logrotate-3.7.4-12
[root@moon]# rpm -ql logrotate
/etc/cron.daily/logrotate // cron.daily 디렉토리에 포함되어 하루에 한번 실행 됩니다.
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.4
/usr/share/doc/logrotate-3.7.4/CHANGES
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
2. logrotate 환경설정
2-1. 로그로테이트 환경 설정 파일에 대한 설명 입니다.
[root@moon]# cat /etc/logrotate.conf
# see “man logrotate” for details
# rotate log files weekly
weekly // 로그파일을 변경할 기간을 설정합니다.
daily : 매일 변경
weekly : 매주 변경
monthly : 매달 변경
yearly : 매년 변경
# keep 3 weeks worth of backlogs
rotate 4 // 순환될 파일의 개수를 설정합니다. 0부터 시작하게 되며 위에서 weekly로 설정 시 4주간 보관합니다.
# create new (empty) log files after rotating old ones
create // 로그파일을 백업하고 새로운 파일을 생성할 것인지 설정합니다.
# uncomment this if you want your log files compressed
#compress // 순환(백업)된 로그파일을 압축하도록 변경합니다. 주석을 해제하면 백업
파일을 gzip으로 압축 합니다.
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d // 로그 순환 정보를 가진 파일들이 저장된 디렉토리를 불러옵니다. 이 디렉토리에 있는 파일들이 모두 포함됩니다.
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp //소유자 root, 그룹 utmp
rotate 6
} // wtmp (접속로그파일, 명령어 last)에 대한 설정을 합니다. 한달 단위로 순환을 하
며 백업은 한달을 보관하고, 백업파일은 root 사용자와 utmp그룹의 소유로644퍼미션
부여합니다.
# system-specific logs may be also be configured here.
2-2 /etc/logrotate.d 디렉토리에 내용을 추가하여 파일로 만들어 사용합니다. 대표적으로 몇개만 살펴보겠습니다.
[root@moon]# cat /etc/logrotate.d/yum
/var/log/yum.log {
missingok // 로그파일이 없어도 그냥 진행합니다.
notifempty // 로그파일이 비어있는 경우 순환을 하지 않습니다.
size 30k // 로그파일의 크기가 30k를 넘으면 순환합니다. 단위 K, M 사용이 가능합니다.
yearly
create 0600 root root // 순환되어 생성된 파일을 root 소유자 및 그룹으로 설정하
고 600퍼미션을 부여합니다.
}
[root@moon]# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts // 와일드카드로 지정된 여러파일에 적용 합니다.
postrotate // logrotate 작업 이후에 지정된 작업(스크립트)를 실행 합니다. 시작점
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript // 종료점
}
2-3. 위에서 안내하지 못한 옵션에 대한 설명
1) compress : 순환(백업)된 로그파일을 압축합니다.
1) nocompress : 순환된 로그파일을 압축하지 않습니다. (기본값)
1) compresscmd : gzip 이외의 압축 프로그램을 지정 합니다.
1) uncompresscmd : 압축해제 명령을 지정합니다. 디폴트는 gunzip 입니다.
1) compressext : 압축된 백업 로그파일에 지정할 확장자를 설정 합니다.
1) compressoptions : 압축 프로그램에 옵션을 설정 합니다. 디폴트로 gzip인 경우 ‘-9′
지정. (-9 옵션은 압축률 최대로)
1) dateext : 매일 처리되는 로그파일에 YYYYMMDD 형식으로 확장자를추가 합니다.
1) error [] : logrotate 작업시에 에러가 발생한다면 지정된 메일주소로 메일을 보냅니다.
1) extention : 순환된 로그파일의 확장자를 지정 합니다.
1) ifempty : 로그파일이 비어있는 경우에도 순환(로테이트)처리 합니다. (기본값)
1) noifempty : 로그파일이 비어있는 경우 순환(로테이트)처리 하지 않습니다.
1) mail [] : logrotate 작업 이후에 이전로그파일을 지정된 메일주소로 메일을 발송합니
다. (특정한 경우의 포르가일은 보내지 않을 수 있습니다.)
1) nomail : 메일을 발송하지 않습니다.
1) mailfirst [] : logrotate 작업시 신규파일 이전의 로그파일을 지정된 메일주소로 메일
을 발송합니다.
1) maxage [] : count로 지정된 날수가 지난 백업 로그파일을 삭제 합니다.
1) missingok : 로그파일이 없을 경우에도 에러로 처리하지 않습니다.
1) prerotate / endscript : logrotate 작업 이전에 지정된 작업(스크립트)를 실행 합니다.
2-4. 기본예제
apache 모든 log 파일
– 주기 : 매일 또는 로그 용량이 10M 가 되었을때
– 결과 : 파일 백업 후, 새 로그파일 생성
– 보관 : 3개 까지 보관
# vi /etc/logrotate.d/apache
/usr/local/apache/logs/*_log {
daily
rotate 3
size=10M
missingok
create 0600 root root
postrotate
/bin/kill -HUP `cat /usr/local/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
위의 내용을 logrotate.conf 에 추가를 하거나, logrotate.d 디렉토리에 파일로 만들면 됩니다.
위의 apache 로그는 용량에 따라 rotation이 일어난다.
3. 디폴트 로그 순환 상태 파일 확인
[root@moon]# cat /var/lib/logrotate.status
4. 실행 TEST
cron 설정으로 매일 또는 일정 시간에 실행 되도록 합니다. (기본 설정)
강제 실행으로 정상적으로 작동하는지 바로 확인이 가능합니다.
> 로그파일 용량 보다 작게 설정하여 (사이즈 변경) 실행하면 확인이 쉽습니다.
# logrotate -f /etc/logrotate.d/apache