FreeBSD + qmail + qmail-smtp_auth+tls
copyleft 2003/08/15 - Powered by chabrothers.com
update 2005/01/17
최 대한 손쉽게 설치하는데 주안점을 두었으니 문제점이 있다고 생각되시는 분은 san@chabrothers.com 으로 연락주시기 바랍니다.
FreeBSD 4.11-stable 에서 설치운영중입니다.
1. ucspi-tcp
2. qmail
3. qmail-smtp_auth+tls
4. checkpassword
위 의 4가지만 설치하였습니다.
daemontools 를 설치하지 않은 것은 지적받을만 하고요
ports collection 을 이용한 설치는 프비를 사랑하기 때문입니다.
-------------------------------------------------------------------------------
0. 관련패키지 설치
0.1 ucspi-tcp ( UNIX Client-Server Program Interface)
# cd /usr/ports/sysutils/ucspi-tcp/
# make install clean
--------------------------------------------------------------------------------
1. qmail + man page 설치
# cd /usr/ports/mail/qmail/
# make install clean
# make disable-sendmail
# make enable-qmail
# echo "OPTIONAL_MANPATH /var/qmail/man" >> /etc/manpath.config
# makewhatis
# man qmail
1.1 qmail-smtp_auth+tls 설치
tls 부분의 설명이 없는 이유는 제가 이해하지 못하고 있는점과 /usr/ports/mail/qmail-smtp_auth 가 따로없기 때문입니다.
# cd /usr/ports/mail/qmail-smtp_auth+tls
# make install clean
1.2 유저인증을 위해서 checkpassword 설치 - 보내기,받기에 모두 사용
# cd /usr/ports/security/checkpassword
# make install clean
-----------------------------------------------------------------------------------
2. SMTP 에 접근가능한 IP 를 설정하고 cdb 파일을 만들어 줍니다
# echo 127.0.0.1:allow,RELAYCLIENT="" > /etc/tcp.smtp
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
--------------------------------------------------------------------------------
3. 관련 파일편집
3.1 새로생성되는 유저들은 홈디렉에 Maildir을 만들며 메일이 전달되게한다.
# cd /usr/share/skel
# vi dot.cshrc
아래의 라인을 찾아 주석처리를 하고
#set mail = (/var/mail/$USER)
아래의 라인을 추가한다
setenv MAIL ~/Mailbox
setenv MAILDIR ~/Maildir
setenv MAILTMP ~/Maildir/tmp/tmpfile
alias mail '/var/qmail/bin/maildir2mbox;/var/qmail/bin/qail'
alias pine '/var/qmail/bin/maildir2mbox;/var/qmail/bin/pinq'
alias elm '/var/qmail/bin/maildir2mbox;/var/qmail/bin/elq'
:wq
# vi dot.shrc
아래의 라인을 추가한다
MAIL=~/Mailbox
MAILDIR=~/Maildir
MAILTMP=~/Maildir/tmp/tmpfile
export MAIL MAILDIR MAILTMP
alias mail='/var/qmail/bin/maildir2mbox;/var/qmail/bin/qail'
alias pine='/var/qmail/bin/maildir2mbox;/var/qmail/bin/pinq'
alias elm='/var/qmail/bin/maildir2mbox;/var/qmail/bin/elq'
:wq
# echo ./Maildir/ > dot.qmail
# /var/qmail/bin/maildirmake /usr/share/skel/Maildir
3.2 이미 존재하는 유저에게 메일전달되게 만들기.
# cp -R /usr/share/skel/Maildir ~USERSNAME/Maildir/
# chown -R USERSNAME ~USERSNAME/Maildir/
# cp /usr/share/skel/dot.qmail ~USERSNAME/.qmail
# chown USERSNAME ~USERSNAME/.qmail
--------------------------------------------------------------------------------
4. /var/qmail/rc 큐메일 작동파일만들기
# vi rc
#!/bin/sh
Q_UID='id -u qmaild'
Q_GID='id -g qmaild'
#
# This script starts and stops the qmail mail functions.
#
# Suck in the configuration variables.
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
source_rc_confs
elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
case "$1" in
start)
case ${qmail_smtp_enable} in
[Yy][Ee][Ss])
# Start the qmail smtp daemon
/usr/local/bin/tcpserver -H -R -c 255 -x /etc/tcp.smtp.cdb \
-u Q_UID -g Q_GID 0 25 /var/qmail/bin/qmail-smtpd domain.name \
/usr/local/bin/checkpassword /usr/bin/true &
echo -n " qmail-smtp"
;;
esac
case ${qmail_pop_enable} in
[Yy][Ee][Ss])
# Start the qmail pop daemon
/usr/local/bin/tcpserver -H -R -c 255 0 110 \
/var/qmail/bin/qmail-popup domain.name \
/usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
echo -n " qmail-pop"
;;
esac
case ${qmail_enable} in
[Yy][Ee][Ss])
# Start qmail
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir splogger qmail &
echo -n " qmail"
;;
esac
;;
stop)
# Stop the smtp daemon
smtppid=`ps -axw | grep tcpserver | grep smtp | grep -v grep | awk '{ print $1 }'`
if [ "$smtppid" != "" ]; then
kill $smtppid
echo -n " qmail-smtp"
fi
# Stop the pop daemon
poppid=`ps -axw | grep tcpserver | grep popup | grep -v grep | awk '{ print $1 }'`
if [ "$poppid" != "" ]; then
kill $poppid
echo -n " qmail-pop"
fi
# Stop qmail
qmailpid=`ps -axw | grep qmail-send | grep -v grep | awk '{ print $1 }'`
if [ "$qmailpid" != "" ]; then
kill $qmailpid
echo -n " qmail"
fi
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0
실 행파일 모드로 바꾸어준다
# chmod 750 /var/qmail/rc
--------------------------------------------------------------------------------
5. control 파일만들기
# echo domain.name > /var/qmail/control/defaultdomain
# echo host > /var/qmail/control/defaulthost
# echo host.domain.name > /var/qmail/control/locals
# echo domain.name >> /var/qmail/control/locals
# echo host.domain.name > /var/qmail/control/me
# echo host > /var/qmail/control/plusdomain
# echo host.domain.name > /var/qmail/control/rcpthosts
# echo domain.name >> /var/qmail/control/rcpthosts
/var/qmail/configure/config-fast 를 이용해서 쉽게 만들수도 있으며 아래의 기본적인 파일들이 만들어졌는지를 확인하여야 한다.
/var/qmail/control/defaultdomain
/var/qmail/control/defaulthost
/var/qmail/control/locals
/var/qmail/control/me
/var/qmail/control/plusdomain
/var/qmail/control/rcpthosts
5.1 alias 파일만들기
# echo your-admin@email.address > /var/qmail/alias/.qmail-root
# echo your-admin@email.address > /var/qmail/alias/.qmail-postmaster
# echo your-admin@email.address > /var/qmail/alias/.qmail-mailer-daemon
--------------------------------------------------------------------------------
6. sendmail 죽이기
# killall sendmail
# rm /var/run/sendmail.pid
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
--------------------------------------------------------------------------------
7. qmail 가동하기
# /usr/local/etc/rc.d/qmail.sh start
--------------------------------------------------------------------------------
8. 작동여부 확인
# ps -ax | grep tcpserver
# ps -ax | grep qmail
--------------------------------------------------------------------------------
2012-09-16
2012-09-15
Mail]FreeBSD 5.4R에서 qmail big-concurrency 패치시 해결방안
qmail 에 big-concurrency 패치를 한 후 컴파일을 하면 아래와 같은 오류가
나올경우 아래의 2가지 방법이 제시 되었다...(아직 테스트 못해봤습니다.ㅜㅜ)
나올경우 아래의 2가지 방법이 제시 되었다...(아직 테스트 못해봤습니다.ㅜㅜ)
에러내용 :
Oops. Your system's FD_SET() has a hidden limit of 1024 descriptors.
This means that the qmail daemons could crash if you set the run-time
concurrency higher than 509. So I'm going to insist that the concurrency
limit in conf-spawn be at most 509. Right now it's 1000.
This means that the qmail daemons could crash if you set the run-time
concurrency higher than 509. So I'm going to insist that the concurrency
limit in conf-spawn be at most 509. Right now it's 1000.
방법 1 : 커널소스를 보면
sys/sys/select.h
파 일에
/*
* Select uses bit masks of file descriptors in longs. These macros
* manipulate such bit fields (the filesystem macros use chars).
* FD_SETSIZE may be defined be the user, but the default here should
* be enough for most uses.
*/
#ifndef FD_SETSIZE
#define FD_SETSIZE 1024U
#endif
* Select uses bit masks of file descriptors in longs. These macros
* manipulate such bit fields (the filesystem macros use chars).
* FD_SETSIZE may be defined be the user, but the default here should
* be enough for most uses.
*/
#ifndef FD_SETSIZE
#define FD_SETSIZE 1024U
#endif
라는 내용이 있습니다.
기본값이 1024인데, qmail의 big-concurrency 패치는 동시에 그 이상의 파일을 생성하는 것을 허용하는 것으로 보입니다.
커널에서 제한이 걸려 qmail이 crash가 일어날 수 있으니 동시에 열 수 있는 파일을 509 이하가 되도록 해야한다는 것입니다.
대규모의 메일을 주고받는 서버라면 select.h 파일을 수정하고 커널컴파일을 다시 하시거나, qmail의 big-concurrency 설정을 변경하세요.
방법 2 :
select.h를 수정할 필요 없이 FD_SETSIZE 만 어플리케이션에서
재정의하고(#define) 빌드하면 FD_SET의 최대 크기가 변경됩니다.
라벨:
유닉스,
big-concurrency,
BSD,
FreeBSD,
Mail,
Mail server,
qmail
2012-09-14
FreeBSD] 암호없이 ssh/scp사용방법
이 글은 암호없이 scp를 사용하는 방법을 설명한다.
리눅스 시스템 관리자는 자주 컴퓨터간에 파일을 복사하거나 파일을 여러 컴퓨터로 전송한다.
ftp를 사용해도 되지만, scp를 사용하면 많은 이점이 있다.
ftp는 LAN/WAN에 내용(심지어 암호도)을 그대로 전송하지만, scp는 암호화하여 전송하기때문에 ftp보다 안전하다.
scp 의 장점은 쉽게 스크립트에서 사용할 수 있는 점이다. 파일을 리눅스 컴퓨터 100대로 복사한다고 가정한다. 직접 100번 복사 명령어를 실행하는 것보다 스크립트를 작성하고 싶을 것이다.
스크립트에서 ftp를 사용하면 로그인할때마다 암호를 물어보기때문에 힘들다.
(역주; netrc 파일을 사용하여 암호를 자동으로 입력하게 만들 수 있지만 보안상 위험하다).
대 신 scp를 사용하는 경우 원격 리눅스 컴퓨터가 암호를 물어보지 않도록 설정할 수 있다. 믿거나 말거나 이 방법은 ftp보다 훨씬 더 안전하다!
scp의 기본 문법은 다음과 같다.
현재 컴퓨터에 있는 'abc.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사하려면:
scp abc.tgz root@bozo:/tmp
그러나 이 경우 bozo의 root 암호를 물어본다.
암호를 물어본다면 스크립트에서 쉽게 사용할 수 없다.
해결책은 다음과 같다 (한번만 해주면 "암호없이" 무제한 scp로 복사할 수 있다):
1. 나중에 scp를 사용하여 파일을 복사할 사용자를 결정한다.
물론 root가 가장 강력하고, 난 개인적으로 root를 사용한다.
여기서 root를 사용할때 발생할 수 있는 보안상 문제점을 강의할 생각은 없다.
내가 지금 무슨 말을 하는지 모르겠다면 root가 아닌 일반 사용자를 사용하라.
결정했다면 이제 그 사용자로 로그인하여 다음 단계를 진행한다.
2. 컴퓨터에 공개키(public key)와 비밀키(private key)를 만든다.
이 게 뭔가? 공개키 암호화 방식을 모른다면 15초간 설명하겠다.
공개키 암호화 방식은 수학적으로 연관된 공개키와 비밀키를 만든다.
그런 다음 공개키는 누구에게라도 줄 수 있지만, 비밀키는 아무에게도 알려주면 안된다.
키들의 수학적 구성상 신기하게도 누구나 공개키를 가지고 내용을 암호화할 수 있지만,
비밀키를 가진 당신만이 암호화한 결과를 해독할 수 있다. 어쨋든 두 키를 만드는 명령은:
ssh-keygen -t rsa
3. 다음과 같이 출력한다:
"Generating public/private rsa key pair"
"Enter file in which to save the key ... "
그냥 enter를 누른다.
4. 그러면 다음과 같이 출력한다:
"Enter passphrase (empty for no passphrase):"
passphrase 를 사용하지 않기때문에 enter를 두번 누른다.
5. 그러면 마지막으로:
"Your identification has been saved in ... "
"Your public key has been saved in ... "
방금 만든 공개키 파일명과 위치를 기억하라 (항상 파일명이 .pub로 끝난다).
6. 공개키를 파일을 복사할 모든 원격 리눅스 컴퓨터에 복사한다.
scp나 ftp를 사용하여 복사한다. root를 선택했다면 (다시 단계 1의 경고를 주의하라),
키는 /root/.ssh/authorized_keys (철자 조심!)에 있어야 한다. root가 아니고 예를 들어 clyde로 로그인한다면,
/home/clyde/.ssh/authorized_keys 에 있어야 한다. authorized_keys 파일이 다른 컴퓨터의 키를 저장하고 있을 수 있기때문에, 파일에 이미 내용이 있다면 (새파일을 덮어쓰지않고) 공개키 파일 내용을 뒤에 추가해야 한다.
이제 끝이다. 별다른 문제가 없다면 파일을 암호없이 원격컴퓨터로 scp할 수 있다. 다시 한번 테스트해보자.
컴퓨터에 있는 'xyz.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사한다
scp xyz.tgz root@bozo:/tmp
와 !!! 암호를 물어보지 않고 복사가 된다!!
일단 암호 하나로 컴퓨터에 로그인하면 모든 원격컴퓨터에 접근할 수 있기때문에 보안에 대해서 주의하라.
그래서 암호를 더 잘 보호해야 한다.
이제 즐길 차례다.
컴퓨터에 있는 'houdini'란 파일을 10개 도시에 흩어져있는 원격컴퓨터의 /tmp 디렉토리로 복사하는 짧은 스크립트를 (5분 안에)
작성해보자. 물론 원격컴퓨터가 100대거나 1000대라도 마찬가지다.
원격컴퓨터들의 이름은: brooklyn, oshkosh, paris, bejing, winslow, rio, gnome, miami, minsk, tokyo.
스크립트는 다음과 같다:
신기한 마술같다.
스크립트에서 echo 줄은 현재 진행상황을 알려준다.
혹 시 쉘스크립트가 생소하다면 좋은 투토리얼이 있다:
http://www.freeos.com/guides/lsst/.
알 다시피 scp는 더 강력한 ssh의 일부이다.
위의 6 단계를 마쳤다면 원격컴퓨터에서 명령어를 실행할 수 있다
(물 론 암호없이!). 예를 들어, brooklyn 이라는 원격컴퓨터의 시간을 보려면:
ssh brooklyn "date"
이제 두 개념을 합쳐서 진짜로 멋진 스크립트를 만들어보자. 모든 원격 리눅스 컴퓨터를 백업하기란 쉬운 일이 아니다. 아래 스크립트는 각 컴퓨터의 /home 디렉토리를 백업한다. 상용 백업 소프트웨어와 비교하면 기능은 매우 기본적이지만, 가격면에서는 따라올 수 없다. 대부분의 상용 백업 소프트웨어는 백업할 컴퓨터 대수대로 가격을 매긴다. 이런 패키지를 사용한다면 원격컴퓨터 100대에 대한 비용을 지불하는 대신 원격컴퓨터를 한 컴퓨터로 백업하는 스크립트를 사용한라. 그리고 그 컴퓨터에서만 상용 패키지를 사용하면 99대분 가격을 절약할 수 있다 ! 어쨌던 스크립트를 참고하여 자신의 상황에 알맞는 스크립트를 작성할 수 있다. 이 스크립트를 cron 작업에 걸어둔다 (원격컴퓨터에는 필요없다). 주석을 보면 자세한 내용을 알 수 있다:
출처 : linux gazette
리눅스 시스템 관리자는 자주 컴퓨터간에 파일을 복사하거나 파일을 여러 컴퓨터로 전송한다.
ftp를 사용해도 되지만, scp를 사용하면 많은 이점이 있다.
ftp는 LAN/WAN에 내용(심지어 암호도)을 그대로 전송하지만, scp는 암호화하여 전송하기때문에 ftp보다 안전하다.
scp 의 장점은 쉽게 스크립트에서 사용할 수 있는 점이다. 파일을 리눅스 컴퓨터 100대로 복사한다고 가정한다. 직접 100번 복사 명령어를 실행하는 것보다 스크립트를 작성하고 싶을 것이다.
스크립트에서 ftp를 사용하면 로그인할때마다 암호를 물어보기때문에 힘들다.
(역주; netrc 파일을 사용하여 암호를 자동으로 입력하게 만들 수 있지만 보안상 위험하다).
대 신 scp를 사용하는 경우 원격 리눅스 컴퓨터가 암호를 물어보지 않도록 설정할 수 있다. 믿거나 말거나 이 방법은 ftp보다 훨씬 더 안전하다!
scp의 기본 문법은 다음과 같다.
현재 컴퓨터에 있는 'abc.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사하려면:
scp abc.tgz root@bozo:/tmp
그러나 이 경우 bozo의 root 암호를 물어본다.
암호를 물어본다면 스크립트에서 쉽게 사용할 수 없다.
해결책은 다음과 같다 (한번만 해주면 "암호없이" 무제한 scp로 복사할 수 있다):
1. 나중에 scp를 사용하여 파일을 복사할 사용자를 결정한다.
물론 root가 가장 강력하고, 난 개인적으로 root를 사용한다.
여기서 root를 사용할때 발생할 수 있는 보안상 문제점을 강의할 생각은 없다.
내가 지금 무슨 말을 하는지 모르겠다면 root가 아닌 일반 사용자를 사용하라.
결정했다면 이제 그 사용자로 로그인하여 다음 단계를 진행한다.
2. 컴퓨터에 공개키(public key)와 비밀키(private key)를 만든다.
이 게 뭔가? 공개키 암호화 방식을 모른다면 15초간 설명하겠다.
공개키 암호화 방식은 수학적으로 연관된 공개키와 비밀키를 만든다.
그런 다음 공개키는 누구에게라도 줄 수 있지만, 비밀키는 아무에게도 알려주면 안된다.
키들의 수학적 구성상 신기하게도 누구나 공개키를 가지고 내용을 암호화할 수 있지만,
비밀키를 가진 당신만이 암호화한 결과를 해독할 수 있다. 어쨋든 두 키를 만드는 명령은:
ssh-keygen -t rsa
3. 다음과 같이 출력한다:
"Generating public/private rsa key pair"
"Enter file in which to save the key ... "
그냥 enter를 누른다.
4. 그러면 다음과 같이 출력한다:
"Enter passphrase (empty for no passphrase):"
passphrase 를 사용하지 않기때문에 enter를 두번 누른다.
5. 그러면 마지막으로:
"Your identification has been saved in ... "
"Your public key has been saved in ... "
방금 만든 공개키 파일명과 위치를 기억하라 (항상 파일명이 .pub로 끝난다).
6. 공개키를 파일을 복사할 모든 원격 리눅스 컴퓨터에 복사한다.
scp나 ftp를 사용하여 복사한다. root를 선택했다면 (다시 단계 1의 경고를 주의하라),
키는 /root/.ssh/authorized_keys (철자 조심!)에 있어야 한다. root가 아니고 예를 들어 clyde로 로그인한다면,
/home/clyde/.ssh/authorized_keys 에 있어야 한다. authorized_keys 파일이 다른 컴퓨터의 키를 저장하고 있을 수 있기때문에, 파일에 이미 내용이 있다면 (새파일을 덮어쓰지않고) 공개키 파일 내용을 뒤에 추가해야 한다.
이제 끝이다. 별다른 문제가 없다면 파일을 암호없이 원격컴퓨터로 scp할 수 있다. 다시 한번 테스트해보자.
컴퓨터에 있는 'xyz.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사한다
scp xyz.tgz root@bozo:/tmp
와 !!! 암호를 물어보지 않고 복사가 된다!!
일단 암호 하나로 컴퓨터에 로그인하면 모든 원격컴퓨터에 접근할 수 있기때문에 보안에 대해서 주의하라.
그래서 암호를 더 잘 보호해야 한다.
이제 즐길 차례다.
컴퓨터에 있는 'houdini'란 파일을 10개 도시에 흩어져있는 원격컴퓨터의 /tmp 디렉토리로 복사하는 짧은 스크립트를 (5분 안에)
작성해보자. 물론 원격컴퓨터가 100대거나 1000대라도 마찬가지다.
원격컴퓨터들의 이름은: brooklyn, oshkosh, paris, bejing, winslow, rio, gnome, miami, minsk, tokyo.
스크립트는 다음과 같다:
#!/bin/sh
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo
do
scp houdini root@$CITY:/tmp
echo $CITY " is copied"
done
신기한 마술같다.
스크립트에서 echo 줄은 현재 진행상황을 알려준다.
혹 시 쉘스크립트가 생소하다면 좋은 투토리얼이 있다:
http://www.freeos.com/guides/lsst/.
알 다시피 scp는 더 강력한 ssh의 일부이다.
위의 6 단계를 마쳤다면 원격컴퓨터에서 명령어를 실행할 수 있다
(물 론 암호없이!). 예를 들어, brooklyn 이라는 원격컴퓨터의 시간을 보려면:
ssh brooklyn "date"
이제 두 개념을 합쳐서 진짜로 멋진 스크립트를 만들어보자. 모든 원격 리눅스 컴퓨터를 백업하기란 쉬운 일이 아니다. 아래 스크립트는 각 컴퓨터의 /home 디렉토리를 백업한다. 상용 백업 소프트웨어와 비교하면 기능은 매우 기본적이지만, 가격면에서는 따라올 수 없다. 대부분의 상용 백업 소프트웨어는 백업할 컴퓨터 대수대로 가격을 매긴다. 이런 패키지를 사용한다면 원격컴퓨터 100대에 대한 비용을 지불하는 대신 원격컴퓨터를 한 컴퓨터로 백업하는 스크립트를 사용한라. 그리고 그 컴퓨터에서만 상용 패키지를 사용하면 99대분 가격을 절약할 수 있다 ! 어쨌던 스크립트를 참고하여 자신의 상황에 알맞는 스크립트를 작성할 수 있다. 이 스크립트를 cron 작업에 걸어둔다 (원격컴퓨터에는 필요없다). 주석을 보면 자세한 내용을 알 수 있다:
#!/bin/sh
# 변 수는 구별하기위해 대문자로 지었다
# 스크립트를 실행하기 전에 원격컴퓨터마다 '/tmp/backups'라는 디렉토리 를
# 만들고, 컴퓨터에는 '/usr/backups'라는 디렉토리를 만들어야 한다
# 컴퓨터에서,
# date 명 령어 결과를 보기 좋게 만들어서 "DATE" 변수를 설정한다
#
DATE=$(date +%b%d)
# 'for 반 복문'은 세가지 작업을 한다
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo
do
# 1) 원격컴퓨터의 하드디스크가 꽉차지 않도록 저번에 실행한 스크립트가 만든 tarball을 삭제하 고
# 확인을 위해 echo한다
#
ssh -1 $CITY "rm -f /tmp/backups/*.tgz"
echo $CITY " old tarball removed"
# 2) 원격컴퓨터마다 /home 디렉토리 를 tarball로 만들어서 /tmp/backups에 저장한다
# tarball 파일명은 구별하기위해 도시명과 시간으로 짓 는다
#
ssh $CITY "tar -zcvpf /tmp/backups/$CITY.$DATE.tgz /home/"
echo $CITY " is tarred"
# 3) 원격컴퓨터에 있는 tarball을 /usr/backups 디렉토리로 복사해온다
#
scp root@$CITY:/tmp/backups/$CITY.$DATE.tgz /usr/backups
echo $CITY " is copied"
done
# 나머지 부분은 오류검사용으 로 없어도 된다:
# 파일명에 날짜를 포함한 오류파일을 만든다.
# 백업이 안된 컴퓨터가 있다면 이 파일 에 기록한다
#
touch /u01/backup/scp_error_$DATE
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo
do
# tarball이 복사되었는지 검사한다. 없다면 오류파일에 기록한다
# '||'은 앞 에 있는 부분이 참이 아닐때만 뒤에 있는 부분을 실행한다는 뜻이다
#
ls /u01/backup/$CITY.$DATE.tgz || echo " $CITY did not copy" >> scp_error_$DATE
# tarball을 정상적으로 열 수 있는지 검사한다. 문제가 있다면 오류파일에 기록한다.
tar ztvf /u01/backup/$CITY.$DATE.tgz || echo "tarball of $CITY is No Good" >> scp_error_$DATE
done
출처 : linux gazette
FreeBSD] 아파치 서버과부하 해결책 - lingerd 설치법
작성 : 구자열 by webhost (danda@nate.com)
아파치에서 갑작스런 libhttpd.ep 혹은 httpd가 상승하여 cpu혹은 메모리를 과도하게 점유할 경우, 일정 튜닝으로 이를 막을 순 있지만, Dos상당의공격에서는 데먼은 저절로 죽어버린다.
이때, lingerd라는 엑셀레이트를 설치하면, 아파치는 해당 과부하 프로쎄서를 죽이면서 서버가 죽는 것을 방지할 수 있다.
http://www.iagora.com/about/software/lingerd/
mkdir -p /var/run/lingerd/
chown nobody.nobody /var/run/lingerd/
chmod 700 /var/run/lingerd/
tar xvzf lingerd-xxx.gz
cd lingerd-xxx
make
이렇게 하면 lingerd란 바이너리가 생긴다.
cp lingerd /usr/local/sbin
cp extra/lingerd.rc /etc/rc.d/init.d/lingerd
chkconfig --level 3 lingerd on
이렇게 해서 부트로더에 올린다.
/etc/rc.d/init.d/lingerd start
cp apache-1.3/ap_lingerd.c li_config.h $APACHE/src/main/
patch -p0 -d $APACHE/src/ < apache-1.3/aplinger.diff
이 과정은 아파치를 위한 과정이다.
아파치소스가 있는 폴더가 $APACHE라고 가정해서 입력하라.
즉 $APACHE는 님의 환경에 맞는 절대경로를 입력하면 된다.
이제 패치가 완료되면, APM설치과정과 같이
apache> ./configure --prefix=/usr/local/apache
apache> cd ../php-4.0.24
php> ...설치과정진행
php> cd ../apache
apache> 설치과정진행 ./configure....-> make -> make install
이렇게 하여 설치를 완료한다.
apache 재구동한다.
설치완료
- 이제부터 /var/log/messages 에 로그가 생성된다.
- /var/run/lingerd/에는 프로쎄서가 동작한다.
- /usr/local/apache/logs/error_log에는 문제발생시, 에러로그가 기록된다.
이렇게함으로써 아파치에 대한 안전한 운영이 가능해진다.
1. lingerd란 무엇일까?
아파치에서 갑작스런 libhttpd.ep 혹은 httpd가 상승하여 cpu혹은 메모리를 과도하게 점유할 경우, 일정 튜닝으로 이를 막을 순 있지만, Dos상당의공격에서는 데먼은 저절로 죽어버린다.
이때, lingerd라는 엑셀레이트를 설치하면, 아파치는 해당 과부하 프로쎄서를 죽이면서 서버가 죽는 것을 방지할 수 있다.
2. lingerd 구하기
http://www.iagora.com/about/software/lingerd/
3. 설치하기
mkdir -p /var/run/lingerd/
chown nobody.nobody /var/run/lingerd/
chmod 700 /var/run/lingerd/
tar xvzf lingerd-xxx.gz
cd lingerd-xxx
make
이렇게 하면 lingerd란 바이너리가 생긴다.
cp lingerd /usr/local/sbin
cp extra/lingerd.rc /etc/rc.d/init.d/lingerd
chkconfig --level 3 lingerd on
이렇게 해서 부트로더에 올린다.
/etc/rc.d/init.d/lingerd start
cp apache-1.3/ap_lingerd.c li_config.h $APACHE/src/main/
patch -p0 -d $APACHE/src/ < apache-1.3/aplinger.diff
이 과정은 아파치를 위한 과정이다.
아파치소스가 있는 폴더가 $APACHE라고 가정해서 입력하라.
즉 $APACHE는 님의 환경에 맞는 절대경로를 입력하면 된다.
이제 패치가 완료되면, APM설치과정과 같이
apache> ./configure --prefix=/usr/local/apache
apache> cd ../php-4.0.24
php> ...설치과정진행
php> cd ../apache
apache> 설치과정진행 ./configure....-> make -> make install
이렇게 하여 설치를 완료한다.
apache 재구동한다.
설치완료
- 이제부터 /var/log/messages 에 로그가 생성된다.
- /var/run/lingerd/에는 프로쎄서가 동작한다.
- /usr/local/apache/logs/error_log에는 문제발생시, 에러로그가 기록된다.
이렇게함으로써 아파치에 대한 안전한 운영이 가능해진다.
FreeBSD]rotatelog를 사용하여 아파치 로그 줄이기.
rotatelogs - 아파치 로그를 순환하기위해 파이프로 연결할 로그 프로그램
가능한 언어: en | ko
rotatelogs는 아파치의 파이프 로그파일 기능을 위한 간단한 프로그램이다. 예를 들어:
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
그러면 /var/logs/logfile.nnnn 파일을 만든다. nnnn은 로그를 시작한 시스템시간이다 (이 시간은 항상 순환기간의 배수이다. 그래서 cron 스크립트로 처리하기 쉽다). 순환기간 (여기서는 24 시간) 마다 새로운 로그를 시작한다.
CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
이 설정은 로그파일 크기가 5 메가바이트가 될때마다 순환한다.
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
이 설정은 오류로그 파일 크기가 5 메가바이트가 될때마다 errorlog.YYYY-mm-dd-HH_MM_SS와 같은 파일을 만들어서 오류로그 파일을 순환한다.
개요
옵션
포팅가능성
개요
rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]옵션
logfile로그파일의 경로와 이름. logfile에 '%' 문자가 있다면 strftime(3)의 형식문자열과 같이 처리한다. '%' 문자가 없다면 뒤에 초단위 시간 .nnnnnnnnnn을 자동으로 붙인다. 두 형식 모두 현재 기간부터 시작시간을 계산한다.
rotationtime
로그파일을 순환할 초단위 시간.
offset
UTC에서 분단위 시간차이. 생략하면 0으로 가정하여 UTC를 사용한다. 예를 들어, UTC -5 시간대의 지역시간을 사용한다면 아규먼트로 -300을 지정한다.
filesizeM
시간이 아닌 크기를 지정할때 메가바이트단위 최대 파일크기 뒤에 M을 붙인다. rotationtime과 offset 대신 이 파라미터를 사용한다.
포팅가능성
다음 로그파일 형식문자열 표현은 모든 strftime(3) 구현이 지원해야 한다. 라이브러리 특유의 확장은 strftime(3) manpage를 참고하라.
%A (지역화된) 완전한 요일 이름
%a (지역화된) 3-문자 요일 이름
%B (지역화된) 완전한 달 이름
%b (지역화된) 3-문자 달 이름
%c (지역화된) 날짜와 시간
%d 2-자리 일
%H 2-자리 시간 (24 시간 시계)
%I 2-자리 시간 (12 시간 시계)
%j 3-자리 날짜수
%M 2-자리 분
%m 2-자리 달
%p (지역화된) 12 시간 시계의 am/pm
%S 2-자리 초
%U 2-자리 주일수 (주의 첫번재 날은 일요일)
%W 2-자리 주일수 (주의 첫번재 날은 월요일)
%w 1-자리 요일수 (주의 첫번째 날은 일요일)
%X (지역화된) 시간
%x (지역화된) 날짜
%Y 4-자리 연도
%y 2-자리 연도
%Z 시간대 이름
%% 문자그대로 `%'
from: http://httpd.apache.org/docs-2.0/programs/rotatelogs.html
피드 구독하기:
글 (Atom)