qmail 설치하기

qmail 따라잡기

Contents

1 qmail 따라잡기
1.1 1. 필요한 것들
1.2 2. patches
1.3 3. daemontools, ucspi-tcp
1.4 4. qmail 컴파일/설치
1.5 5. 스크립트 만들기
1.6 6. POP 서버
1.7 7. SMTP, POP 데몬 시작하기

1.1 1. 필요한 것들

1.2 2. patches

qmail.org에서 [http]추천하는 몇가지 패치들이 있습니다.

또는 http://qmail.org/netqmail/ 에서 netqmail 패키지를 받아 사용하셔도 됩니다.

  • glibc 2.3.1 이상에서는 컴파일이 제대로 되지 않습니다. 각각의 [http]패치 ([http]local)를 받아 적용 후 컴파일 합니다.
  • 0.0.0.0을 local IP 주소로 인식하게 하는 [http]패치 ([http]local)
  • qmail이 sendmail을 emulation할때 -f 옵션이 From: 헤더를 설정하도록 하는 [http]패치 ([http]local)
  • 위 패치를 설치하고, 칵테일 패치 적용시 실패합니다.
    qmail.org에서 권장하는 패치는 이미 칵테일 패치에 적용되어 있습니다. (칵테일 패치를 먼저 해놓고 권장패치를 일일이 비교해보니 이미 다 수정되어 있더군요.) 아마도 그래서 실패하는 것 같습니다. –kirrie
  • 데비안 사지에서는 칵테일 패치 적용후 컴파일이 되지 않습니다.
    왜 안되는지 알려 주실 수 있나요? — 은재 2004-04-20 02:04:51
    기존 칵테일 패치엔 auto_spawn.c 의 값이 255로 되어 있는 반면에 현재 패치에는 1000으로 되어 있습니다. 게시판 보고 참조했는데 아직 패치에 수정이 가해지지 않은 듯 하네요.
  • 칵테일 패치에 들어있는 TLS 기능을 완전히 세팅하지 않고 두면, thawte.com의 메일서버처럼 TLS로 접속을 시도하는 서버에서 아래와 같이 되어 버립니다.

635 > 454 TLS missing certificate: error:0200100D:system library:fopen:Permission denied (#4.3.0)
635 < QUIT

즉, 메일이 소리소문없이 배달되지 않습니다. 칵테일 패치 많이들 쓰시는데, 대부분의 qmail 문서들이 TLS세팅이나 certificate에 대해서는 언급이 없기 때문에 문제가 됩니다.
TLS로 접속하는 첨단(?) ESMTP서버들이 별로 없기에 망정이지… 완전히 episode 1 보이지 않는 위험 입니다.

1.3 3. daemontools, ucspi-tcp

필요한 파일들이 모두 준비되었나요? 받은 몇가지 파일들을 적당한 디렉토리에 옮겨 놓고 이제 설치를 시작합시다.
일단 daemontools, ucspi-tcp를 먼저 설치하도록 하죠 (daemontools는 시스템 서비스를 관리하기 위한 도구들의 모음으로 ucspi-tcp와 같이 사용하면 inetd/xinetd 같은 구시대 수퍼 데몬을 완전히 대체할 수 있습니다).
ucspi-tcp

$ tar xzf ucspi-tcp-0.88.tar.gz
$ cd ucspi-tcp-0.88
$ make
$ make setup check

daemontools

$ mkdir -p /package
$ chmod 1755 /package
$ mv daemontools-0.76.tar.gz /package
$ cd /package 
$ tar xzf daemontools-0.76.tar.gz
$ rm daemontools-0.76.tar.gz
$ cd admin/daemontools-0.76
$ package/install

daemontools의 설치가 끝나면 svscanboot가 자동으로 시작됩니다 (*BSD는 재부팅).

1.4 4. qmail 컴파일/설치

자, 이제 qmail을 설치 하도록 하지요.
qmail이 설치될 디렉토리를 만듭니다.

$ mkdir /var/qmail
$ mkdir /var/qmail/alias

(참고:디렉토리를 생성하지 않아도 자동으로 /var/qmail 안에 파일이 생성된다. 물론 make setup check가 선행되어야 한다)
qmail 소스를 풀고…

$ tar xzf qmail-1.03.tar.gz
$ cd qmail-1.03

Qmail 운영을 위한 유저,그룹을 만들어 주기 위해 다음 명령을 차례로 실행합니다 (운영체제가 리눅스가 아니라면 소스 디렉토리 안의 INSTALL.ids 를 참조하세요).

$ groupadd nofiles
$ useradd -g nofiles -d /var/qmail/alias alias
$ useradd -g nofiles -d /var/qmail qmaild
$ useradd -g nofiles -d /var/qmail qmaill
$ useradd -g nofiles -d /var/qmail qmailp
$ groupadd qmail
$ useradd -g qmail -d /var/qmail qmailq
$ useradd -g qmail -d /var/qmail qmailr
$ useradd -g qmail -d /var/qmail qmails

Qmail을 컴파일/인스톨 합니다.

$ make
$ make setup check

컴파일/설치가 끝나면 기본 control 파일들의 설정을 위해..

$ ./config

이것이 정상적으로 실행 되었다면 /var/qmail/control/ 안에는 qmail이 정상적으로 작동하기 위한 설정 파일들이 생길 것입니다. 만약 그렇지 않다면 DNS 설정에 문제가 있어 호스트 이름을 찾지 못한 것이니 다음과 같이 합니다. (foobar.org가 호스트 이름이라면…)

$ ./config-fast foobar.org

1.5 5. 스크립트 만들기

필요한 스크립트를 만듭니다.
/var/qmail/rc 파일

#!/bin/sh exec env – PATH=/var/qmail/bin:$PATH \ qmail-start ./Maildir/

이 파일에 실행 권한을 줍니다.

$ chmod a+x /var/qmail/rc

다음은 큐메일 데몬을 위한 디렉토리와 파일들을 생성…

$ mkdir -p /var/qmail/supervise/qmail-send/log
$ mkdir -p /var/qmail/supervise/qmail-smtpd/log
$ chmod +t /var/qmail/supervise/qmail-send
$ chmod +t /var/qmail/supervise/qmail-smtpd

/var/qmail/supervise/qmail-send/run 파일

#!/bin/sh exec /var/qmail/rc

/var/qmail/supervise/qmail-send/log/run 파일

#!/bin/sh exec /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t /var/log/qmail

/var/qmail/supervise/qmail-smtpd/run 파일

#!/bin/sh Q_UID=$(id -u qmaild) Q_GID=$(id -g qmaild) exec /usr/local/bin/softlimit -m 2000000 \/usr/local/bin/tcpserver -vHRl 0 -x /etc/tcp.smtp.cdb \ -u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1

참고: 솔라리스에서는 스크립트 내용을 다음과 같이 수정합니다.

Q_UID=`/usr/xpg4/bin/id -u qmaild`
Q_GID=`/usr/xpg4/bin/id -g qmaild`

스크립트를 만들때 인용 부호를 실수하는 경우가 많은데 [http]이 글을 참고하라.
/var/qmail/supervise/qmail-smtpd/log/run 파일

#!/bin/sh exec /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t /var/log/qmail/smtpd

지금 까지 만들어 놓은 파일들에 실행 권한을 줍니다.

$ chmod 755 /var/qmail/supervise/qmail-send/run
$ chmod 755 /var/qmail/supervise/qmail-send/log/run
$ chmod 755 /var/qmail/supervise/qmail-smtpd/run
$ chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

다음은 qmail-smtpd 를 위한 로그 디렉토리 만들기

$ mkdir -p /var/log/qmail/smtpd
$ chown qmaill /var/log/qmail /var/log/qmail/smtpd

마지막으로 릴레이를 위한 파일은 /etc/tcp.smtp를 수정하는데 일단 메일 서버 자신만의 릴레이가 허용되도록 하는 파일을 만듭시다. 서버의 ip가 192.168.1.1 이라고 한다면 다음과 같이 될것 입니다 ([http]릴레이에 관한 더 자세한 설명).
/etc/tcp.smtp 파일

127.0.0.1:allow,RELAYCLIENT=""
192.168.1.1:allow,RELAYCLIENT=""

이렇게 tcp.smtp를 수정한 후에는 항상 cdb 형식의 파일로 바꿔줘야 합니다.
$ tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

1.6 6. POP 서버

POP 서버는 메일 계정을 어떻게 운영할 것인가에 따라 달라지는데 개인적으로 vpopmail을 사용할 것을 권장합니다. vpopmail은 하나의 uid/gid로 무제한의 도메인, 메일 계정을 만들어 줄 수 있으며, 관리가 매우 편합니다. 만약 vpopmail을 사용할 것이라고 결정 했다면 다음 문서를 참고 하세요.

vpopmail을 사용하지 않고 시스템 로그인 계정을 사용할 것으로 결정 했다면 암호 인증을 위한 checkpassword를 받습니다.

checkpassword 설치

$ tar xzf checkpassword-0.90.tar.gz
$ cd checkpassword-0.90
$ make
$ make setup check

pop 서버 구동을 위한 디렉토리/파일 만들기

$ mkdir -p /var/qmail/supervise/qmail-pop3d/log
$ chmod +t /var/qmail/supervise/qmail-pop3d
$ mkdir /var/log/qmail/pop3d
$ chown qmaill /var/log/qmail/pop3d

/var/qmail/supervise/qmail-pop3d/run 파일

#!/bin/sh exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -H -l 0 0 110/var/qmail/bin/qmail-popup \ FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

FQDN은 서버의 호스트 이름(FQDN)을 적어줍니다.

/var/qmail/supervise/qmail-pop3d/log/run 파일

#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \ /var/log/qmail/pop3d

만들어진 파일에 실행 권한을 줍니다.

$ chmod 755 /var/qmail/supervise/qmail-pop3d/run
$ chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

1.7 7. SMTP, POP 데몬 시작하기

이미 설치되어 있거나 실행되고 있는 메일 서버나 POP 데몬이 있다면 중지 시키고, 시스템에서 삭제합니다.
  • sendmail 실행 파일
    sendmail 바이너리를 사용하는 다른 어플리케이션들을 위해 대신 qmail의 그것을 링크 해줍니다.

    $ ln -s /var/qmail/bin/sendmail /usr/lib
    $ ln -s /var/qmail/bin/sendmail /usr/sbin
    

  • 기본 alias 계정
    다음 세가지 기본 알리아스 계정은 반드시 만들어 줍니다.

    1. postmaster
    2. mailer-daemon
    3. root

    이 주소들로 도착하는 메일을 받아볼 일반 계정으로 알리아스를 만들어야 하는데, 만약 로컬 계정이 silver 라면 다음과 같이 만듭니다.

    $ echo silver > /var/qmail/alias/.qmail-root
    $ echo silver > /var/qmail/alias/.qmail-postmaster
    $ echo silver > /var/qmail/alias/.qmail-mailer-daemon
    $ cd /var/qmail/alias/
    $ chmod 644 .qmail-root .qmail-postmaster .qmail-mailer-daemon
    

  • qmail 시작하기
    다음과 같이 daemontools 서비스 디렉토리에 링크를 걸어주면 5초 이내에 qmail MTA가 시작됩니다.

    $ ln -s /var/qmail/supervise/qmail-send /service/
    $ ln -s /var/qmail/supervise/qmail-smtpd /service/
    

    이렇게 한번 링크를 걸어 두면 시스템을 재부팅 하더라도 daemontools에 의해 자동으로 재시작 됩니다.

    시작/정지등의 명령을 좀더 쉽게 하기위해 만들어진 스크립트를 사용할 수 도 있습니다. 다음 url의 파일을 적당한 이름으로 저장한 후 실행 권한을 주고 사용하시면 됩니다.

    [http]qmail-startup.txt

  • pop 서버 시작하기
    pop3 서버도 같은 요령으로 daemontools 서비스 디렉토리에 링크만 걸어주면 됩니다.

    $ ln -s /var/qmail/supervise/qmail-pop3d /service

Veeam Free버전을 이용한 Hyper-V Backup 시스템 구축

최근  hyper-v로 nuxinfo 시스템을 이전을 준비하면서 백업도 고려해야 하기에 좋은 방법이 없을까 하고 찾아보다가 알아낸 방법이다.

장점은 비용을 전혀 들이지 않고도 편하게 백업을 받을 수 있다는 것이다.
단점으로는 증분 백업이 안되서 백업유지기간이 길어질수록 공간을 많이 차지한다는것인데 무료이니 그냥 감수해야 할 것 같다.
준비물
– backup server: 운영중인 hyper-v의 가상머신들의 용량을 계산하고 저장할 기간을 고려해서 백업공간을 넉넉하게 가져가도록 한다.
– veeam backup  free version

작업 순서

  1. backup server를 설치한다. 가급적 안정적인 windows sever OS 를 권장함.
  2. veeam backup free version 설치
  3. VeeamZIP 파일을  다운로드 받아서 backup server에 적절한 위치에 저장 후  VeeamZip.ps1으로 파일명 변경
  4. VeeamZip.ps1파일 수정
    적당한 에디터를 이용해서 아래의 부분들을 수정하도록 한다.

    $VMNames = ""# 백업을 수행할  VM목록을 적어줍니다. 여러개의VM을 백업할 경우에는 "VM1","VM2" 이렇게 ,로 분리해 줍니다.
    $HostName = "" #hyper-v서버명을 적습니다. cluster가 구성이 되어있다면 반드시 클러스터명을 적어줍니다.
    $Directory = "" #백업데이터가 저장될 디렉토리를 정해 줍니다.
    $Retention = "Never" # 이 설정은 백업파일을 유지할 기간을 정해줍니다. 기본값으로 무조건 계속 저장합니다.
    파일을 열어보시면 아시겠지만  Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month  등의 값을 줄 수 있습니다.
    Never가 아닌 다른 값을 주면 정해준 기간 동안 만 백업 파일을 보관 합니다.
    $EnableNotification = $False # 백업결과에 대해 이메일 알람을 받을지 정합니다.  True 로 하실 경우 사용 할 메일 서버를 설정해줘야 합니다.
    $EnableEncryption = $False # 백업파일을 암호화 할 것인지 정합니다. 암호화 하는 경우 $EncryptionKey = "" 값을 정해줘야 합니다.

 

linux shell스크립트 기초

이번 장에서는 시스템 관리자라면 반드시 알아야 될 쉘 스크립트에 대해서 알아볼까 한다.
쉘 스크립트를 잘 활용하면 단순 반복적인 작업을 손쉽게 할 수 있다.
리눅스의 기본 쉘인 Bash 쉘을 기본으로 하여 설명을 진행할 것이며 csh,tcsh 등등의 다른 쉘은
거의 비슷한 구조을 가지고 있으므로 나중에 따로 공부해 보기 바란다.

 

환경 변수

먼저 기본 쉘 환경 변수에 대해서 알아보도록 하자. 현재 시스템에 로그인 한 상태에서 printenv 명령으로 확인해 볼 수 있다.
기본적으로 bash쉘은 /etc/profile,/etc/bashrc 파일에 시스템 전체 유저에 대한 설정이 들어있다.
각 유저는 본인의 홈디렉토리/.bashrc 나 .bash_profile 파일을 이용해서 개별적인 설정이 가능하다.
시스템 마다 약간씩 차이가 있을 것이다.

아래는 필자의 시스템에서 printenv 명령으로 살펴본 환경변수이다.

[stone@mail ~]$ printenv 
HOSTNAME=mail.nuxinfo.net
SHELL=/bin/bash
TERM=linux
HISTSIZE=1000
SVN_EDITOR=/usr/bin/vim
USER=stone
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01
MAIL=/var/spool/mail/stone
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/mysql/bin:/home/stone/bin
INPUTRC=/etc/inputrc
PWD=/home/stone
LANG=en_US
SHLVL=1
HOME=/home/stone
LOGNAME=stone
CVS_RSH=ssh
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/usr/bin/printenv
[stone@mail ~]$ 

 

변수 추가

쉘 스크립트에서 사용하는 변수를 추가하는 방법은 아래와 같다.

변수=변수값(변수와 변수값을 연결해주는 = 사이에는 절대로 공백이 있으면 안된다.)
ex)
EDITOR=/usr/bin/vim

즉 여러분이 원하는 변수는 쉘 프롬프트 상태에서 입력하면 바로 인식이 가능하다.
아래 예제를 보도록 하자.

[root@mail ~]# my_name="Kim Gyeong Min"
[root@mail ~]# echo $my_name
Kim Gyeong Min
[root@mail ~]#

설명을 하자면 my_name 이라는 변수에 Kim Gyeong Min 이라는 문자열을 추가했으며
echo 라는 명령어로 my_name 이라는 변수를 출력해 본 것이다.
변수를 호출할때는 반드시 $ 을 붙여주어야 한다.
로그아웃 할때까지는 저 변수는 계속 적용이 될 것이다. 하지만 로그아웃을 하는 순간 저 변수는 더이상 소용이 없게 된다.
따라서 항상 변수를 사용하고자 한다면 여러분의 홈디렉토리에 .bashrc 나 .bash_profile 에 추가해줘야 한다. 그러면 언제라도 사용이 가능하다.

기본적인 쉘 스크립트 이해하기

아래는 본인의 홈디렉토리에 test 디렉토리를 만드는 쉘 스크립트의 예제이다.
아래와 같은 내용으로 test.sh 파일을 생성해 보도록 하자.
vi test.sh
#!/bin/sh 또는 #!/bin/bash
mkdir $HOME/test

첫 라인에 있는 #!/bin/sh 또는 #!/bin/bash 는 아래에 나오는 스크립트를 /bin/sh 쉘이나 /bin/bash 쉘에서 해석하라는 이야기 이다.
참고로 기타 시스템에 설치된 여러가지 스크립트 언어도 사용이 가능하다.

#!/usr/bin/perl
#!/usr/bin/python
#!/usr/bin/php

 

쉘 스크립트를 실행하는 방법은 파일에 실행권한을 주는 방법과 쉘프롬프트에서 sh 파일명 형태로
직접 실행할 쉘을 명시해주는 방법이 있다.
실행 권한 주기

chmod 700 test.sh
./test.sh

./ 를 넣어주는 이유는 test.sh 파일은 PATH에 없기 때문에 현재 디렉토리라고 정확히 명시해주기 위해서이다.

쉘 프롬프트상에서 바로 실행하기

sh test.sh

 

이처럼 쉘 스크립트는 항상 똑같은 작업을 해야되는 경우 간단하게 스크립트를 실행함으로써 간편하게 작업을 할 수 있도록 도와준다.
기본적인 구조를 알았다면 다음장에서는 실제로 스크립트를 작성하는 방법에 대해서 알아보도록 하자.

linux LVM

LVM(Logical Volume Manager)
LVM이란 디스크 파티션이나 디스크 자체를 볼륨 그룹으로 만들고 그 위에 Logical 파티션을 생성해서
사용하도록 해주는 프로그램이다.
복잡하게 들릴지 모르겠지만 아래와 같은 상황이 발생했을 경우를 생각해 보도록 하자.
여러분의 리눅스 시스템이 /home 파티션을 10G로 할당을 했다. 그런데 유저들이 늘어나고 디스크 사용량이 많아져서 10G 로는 부족한 상황이 되었다.
이런 경우 여러분은 좀더 여유가 있는 디스크를 추가로 증설을 할 것을 고려할 것이다.
물론 디스크 추가를 위해서 시스템을 셧다운 시켜야 될 것이다.
LVM으로 시스템을 구축하면 이러한 경우 시스템을 셧다운 하지 않고서도 여러분은 /home 파티션을 쉽게 늘려줄 수가 있다.
LVM은 디스크나 파티션을 하나의 가상 디스크로 만들어서 디스크를 관리하는 시스템이다 라고 이해를 하면 된다.

 

앞장에서 배운 RAID과 데이터의 안정성에 기반을 두고 있다면 LVM은 디스크 관리의 효율성에 기반을 두고 있다고 보면 되겠다.
효과적인 디스크 관리를 원한다면 LVM을 사용해 보도록 하자.

 

먼저 아래의 그림을 보도록 하자.

lvm.jpg


용어 설명.

PV Physical Volume 으로 파티션 또는 디스크를 의미한다.
VG Volume Group으로 PV을 그룹화 한것이다.
LV Logical Volume으로 볼륨그룹(VG)에 가상의 파티션을 이야기한다.

LVM 생성

PV 생성하기

PV는 파티션이나 디스크 자체가 될 수 있다. 파티션을 PV로 만들기 위해서는 파티션 타입을 8e(Linux LVM)으로 설정해 주면 되겠다.
아래의 예를 보도록 하자.
/dev/sdb 에 각각 2G,1G 의 LVM 파티션을 설정하는 과정이다.

[root@linuxstudy ~]# fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n 
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-783, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-783, default 783): +2000M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  8e  Linux LVM
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
2
Invalid partition number for type `2'
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (245-783, default 245): 
Using default value 245
Last cylinder or +size or +sizeM or +sizeK (245-783, default 783): +1000M

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p
Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  8e  Linux LVM
/dev/sdb2             245         367      987997+  8e  Linux LVM

 

준비가 되었다면 이제 PV 을 생성해 보도록 하자.
pvcreate 라는 명령을 이용하면 되겠다.

[root@linuxstudy ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@linuxstudy ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
[root@linuxstudy ~]# 

참고로 fdisk 과정을 거치지 않고 디스크를 통째로 사용도 가능하다..^^;

디스크를 통째로 PV로 만들기.

[root@linuxstudy ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
[root@linuxstudy ~]# 

 

생성된 PV를 보고 싶다면 pvdisplay 명령을 수행하면 된다.

[root@linuxstudy ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "1.87 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.87 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               LIzfUV-g1dF-17ze-8xxC-DI8H-I96k-eR86wA
   
  "/dev/sdb2" is a new physical volume of "964.84 MB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               964.84 MB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               XbYFbH-3bzf-a0EL-Jt0c-B0Sn-32Sy-dh3eSS
   
  "/dev/sdc" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               8.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               L7wDn7-Pi5t-RnM3-LX5R-cCJ1-j8H9-xDEjOV
   
[root@linuxstudy ~]# 

 

VG 생성

vgcreate.

vgcreate 볼륨그룹이름 PV PV PV ...

이제 앞에서 만든 PV들을 묶어서 하나의 볼륨그룹(VG)로 생성해 보도록 하겠다.
/dev/sdb1 파티션과 /dev/sdb2 파티션을 VG0 이라는 이름으로 생성하는 예제이다.

[root@linuxstudy ~]# vgcreate VG0 /dev/sdb1 /dev/sdb2
  Volume group "VG0" successfully created
[root@linuxstudy ~]# 

 

생성된 VG를 확인해 보도록 하자.

[root@linuxstudy ~]# vgdisplay 
  --- Volume group ---
  VG Name               VG0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.81 GB
  PE Size               4.00 MB
  Total PE              719
  Alloc PE / Size       0 / 0   
  Free  PE / Size       719 / 2.81 GB
  VG UUID               Xyye0d-VZGJ-gFfX-KLhU-LSe4-KK6r-2HkGP1
   
[root@linuxstudy ~]# 

 

LV 생성

이제 볼륨그룹(VG)에 LV를 생성해 보도록 하자.
LV생성.

lvcreate -L 용량 -n LV이름 VG이름

만들어진 볼륨그룹에 가상의 파티션을 생성하는 과정이라고 이해하면 되겠다.

[root@linuxstudy ~]# lvcreate -L 1.5G -n lvm_home VG0
  Logical volume "lvm_home" created
[root@linuxstudy ~]# 

VG0 볼륨그룹에 lvm_home 이라는 LV를 생성했다.
이제 일반적인 파티션처럼 mkfs 명령으로 포맷을 하고 사용하면 된다.
생성된 장치는 보통 /dev/VG명/LV명 형태로 생성이 된다.

LV 포맷 및 마운트

[root@linuxstudy ~]# mkfs /dev/VG0/lvm_home 
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
[root@linuxstudy ~]# mount /dev/VG0/lvm_home /home

 

제대로 mount가 되었다면 아래와 같이 나올것이다.

/dev/mapper/VG0-lvm_home on /home type ext2 (rw)

 

이렇게 생성된 LV는 차후에 자유롭게 용량을 늘렸다가 줄였다가 할 수 있다.
자세한 사용법은 다음장에서 진행하도록 하겠다.

linux기초강좌

리눅스 설치하기

Contents

1 CentOS 설치 준비
2 CentOS 설치 하기
2.1 설치 CD를 이용한 리눅스 설치
2.1.1 설치 시작
2.1.2 CD 체크
2.1.3 환영 메시지
2.1.4 설치 언어 선택
2.1.5 키보드 선택
2.1.6 파티션 설정

 

 

앞에서 말했듯이 강좌는 CentOS기준으로 작성이 될 것이며 최대한 설명을 많이 하는 형태로 진행해 볼까 한다.

 

* 주의 사항

만약에 PC에 리눅스를 설치하고자 한다면 기존에 설치되어 있는 OS를 실수로 삭제할수 있기 때문에 주의를 기울여서 설치를 해야 한다.
또한 Windows OS가 이미 설치된 PC에 리눅스를 설치하고자 한다면 리눅스 설치를 위한 파티션이 남아 있어야 한다.

 

 

1 CentOS 설치 준비

먼저 [http]http://ftp.daum.net/centos/5/isos/i386/ 에서 CentOS-5.4-i386-bin-*.iso 파일들을 다운로드 받는다.
총 6장의 CD가 있으며 어떤 용도로 리눅스를 설치하느냐에 설치CD개수가 틀려진다.일단 1~3번 CD 정도만 준비하자.
혹시 DVD 레코더를 가지고 있다면 [http]http://ftp.jaist.ac.jp/pub/Linux/CentOS/5/isos/i386/ 에서 DVD 이미지를 받을 수 있다.
본인의 위치에 따라서 속도가 빠른 미러서버를 [http]http://www.centos.org/modules/tinycontent/index.php?id=15 에서 찾을 수 있을것이다.
파일을 받았다면 CD 레코딩 프로그램을 이용해서 CD를 제작하도록 하자. CD레코딩하는 과정은 생략하도록 한다.

2 CentOS 설치 하기

리눅스를 설치하는 방법은 아주 여러가지가 있다.
플로피 디스크를 이용한는 방법,CD를 이용하는 방법,네트워크를 이용하는 방법,USB를 이용하는 방법 등등 수많은 설치 방법이 있다.
예전에는 플로피 디스크를 이용해서 많이들 설치했지만 현재는 플로피 디스크는 사라져가는추세이므로
가장 보편적인 방법인 설치 CD를 이용하는 방법을 먼저 설명하도록 하겠다.
CentOS 5.4를 기준으로 하면 총6장의 CD가 필요하지만 귀찮다면 네트워크 설치용 CD이미지를 받아서
네트워크를 이용해서 설치할수도 있다.
우리나라처럼 네트워크 속도가 빠른 경우에는 ftp,http 등을 이용해서 설치해도 30분 정도면 설치가 가능하다.
또한 로컬 네트워크가 구성되어 있는 환경이라면 pxe 부팅을 통해서 아무 설치 매체 없이도 네트워크 부팅을 통해서 리눅스를 설치할 수 있다.
PXE(Pre-boot eXecution Environment)란 네트워크 인터페이스를 통해 컴퓨터를 부팅할 수 있게 해주는 환경이다.
요즘의 대부분의 PC나 서버는 네트워크 부팅(PXE)환경을 지원한다.
이런 경우 네트워크에 네트워크 설치를 위한 서버들이 준비가 되어 있어야 한다.
예전에 작성한 [http]http://wiki.nuxinfo.net/wiki.php/kickstart 에서
대략적인 과정을 살펴볼 수 있을 것이다.

2.1 설치 CD를 이용한 리눅스 설치

설치CD를 만들었다면 PC를 켜고 Bios 셋업에 들어가서 CD로 부팅하도록 해두고 설치CD를 넣고 부팅하도록 하자.
참고:각 메뉴들의 이동은 Tab키와 커서키로 이동하면 된다.
정상적으로 진행이 되었다면 아래와 같은 화면을 볼 수 있을 것이다.

2.1.1 설치 시작

install_1.jpg


화면을 잘 보면서 설치를 시작해 보도록 하자.
boot: 상태에서 단순히 Enter 키를 입력하면 GUI환경에서 설치를 진행하게 된다.
사양이 낮거나 그래픽 카드가 잡히지 않는 경우에는 설치를 하지 못하는 경우가 있으므로
필자는 Text 모드에서 설치를 진행할 것을 권장한다.
또한 앞으로 리눅스를 공부하기 시작하면 대부분의 작업들이 Text모드에서 진행이 될것이라서
약간은 생소할지도 모르지만 text환경에 익숙해져 보도록 하자.
아래쪽에 보이는 F1~5까지의 function 키는 특별한 경우에 사용하는 옵션들이다.
설치할때 드라이버들이 필요한 경우나 시스템이 깨져서 복구가 필요한 경우등 처음 리눅스를 설치하는 경우라면 그냥 linux text 입력해서 설치부터 진행해 보도록 하자.

2.1.2 CD 체크

install_2.jpg


설치CD를 자주 사용하다 보면 스크래치가 생겨서 정상적으로 설치가 안되는 경우나 잘못 만들어진
설치CD에 대해서 점검을 하는 부분이다. 시간이 약간 걸릴 수 있으므로 만들어진 CD가 정상이라고 생각하고 Skip하도록 하자.

2.1.3 환영 메시지

install_3.jpg


환영메시지..^^;

2.1.4 설치 언어 선택

install_4.jpg


설치를 진행할 동안 사용할 언어 선택이다.
리눅스에서 사용할 언어를 선택하는것이 아니다..^^;

2.1.5 키보드 선택

install_5.jpg


리눅스에서 사용할 키보드 타입을 선택한다.기본적으로 us 를 선택하도록 한다.

2.1.6 파티션 설정

install_6.jpg


설치 과정중에서 가장 중요한 부분이다. 바로 파티션을 설정하는 부분이다.
나중에도 설명을 더 하겠지만 유닉스 계열들의 시스템은 안정성과 보안 또는 관리를 위해서
파티션을 많이 나눠서 사용하는 편이다.
잘못된 파티션은 나중에 리눅스를 재설치하거나 비효율적으로 사용하게 되는 경우가 있다.
따라서 파티션 계획은 실제 서버를 구동할 때 아주 중요하다.
예를 들면 리스 서버처럼 많은 계정 사용자들에게 공간을 할당해줘야 되는 경우 /home 파티션이
많이 필요한데(사실 반드시 home 파티션이어야 할 필요는 없다..^^) /home 파티션을 작게 잡은 경우 다른 여유 공간에 사용자 계정을 생성해야 되고
그렇게 되면 이곳 저곳에 사용자 계정들이 나눠지게 되어 관리 측면에서 귀찮게 될것이다.

*설명

  1. 선택한 드라이브의 모든 파티션을 삭제하고 기본 layout 으로 파티션 설정(주의-이미 설치된 OS파티션도 모두 삭제한다)
  2. 선택한 드라이브의 리눅스 파티션을 삭제하고 기본 layout으로 파티션 설정
  3. 선택한 드라이브의 남은 공간을 이용해서 기본 layout으로 파티션 설정
  4. 사용자 선택

 

[참고]
리눅스의 하드 디스크 장치는 IDE 타입의 하드 디스크의 경우에 hdX,sata 타입 또는 scsi타입의 하드 디스크일 경우에 sdX 의 형태로 구분이 된다.(X는 알파벳a~z)
시스템의 첫번째 하드 디스크는 a, 두번째 하드 디스크라면 b 가 되는것이다.
가끔은 c0d0 의 형태들도 볼 수 있을 텐데 보통 HP서버의 경우에서 볼 수 있다.
간단히 설명하자면 controller 번호(채널),디스크 번호 이렇게 보면 된다.
대형 시스템은 디스크 컨트롤 채널이 아주 많고 많은 디스크들을 컨트롤 하게 된다.

 

리눅스 파티션에 대한 이해가 조금 필요하므로 사용자 선택을 해보도록 한다.

install_7.jpg

 

새 파티션을 만들어야 하므로 New 를 선택해보자

install_8.jpg

 

Mount Point: 마운트 란 나중에 알게 되겠지만 장치를 연결하는 과정을 이야기 한다.
유닉스 계열들의 장치들은 파일로 이뤄져 있고 그 장치를 사용하기 위해서는 반드시 mount 과정을 거쳐야 사용할 수 있다. 유닉스 계열의 시스템은 반드시 / 가 존재해야 하므로 / 를 입력하도록 하자.
File system type: 만들 파티션의 파일시스템을 정해준다. 보통 많이 사용하는 ext3로 하자.
Allwable Drives: 파티션을 만들 하드 디스크를 선택한다.
Size: 파티션 사이즈를 정해준다.
Fixed Size: Size 에서 정해준 크기로 파티션을 설정한다.
Fill maximum size of: Size 에서 정해준 크기의 최대값을 정해준다. 즉 Size 에서 1000M를 잡아두고 여기에서 1500M 를 잡았다면 1500M로 지정이 된다.
Fill all available space: 하드 디스크의 남은 공간을 모두 사용한다.
Force to be a primary partition: 강제로 primary 파티션으로 설정한다.
[참고]
리눅스에서는 기본적으로 4개의 primary 파티션을 생성할 수 있다.
4개 이상의 파티션이 필요한 경우에는 extended 파티션을 만들고 그 안에 logical 파티션을 생성해서 많은수의 파티션을 사용할 수 있다.
IDE타입이 하드 디스크의 경우에 63개까지 생성이 가능하며
SCSI 타입의 경우 11~17개 까지 생성이 가능하다고 되어 있다.

 

일단 처음으로 리눅스를 설치한다면 간단히 / 와 swap 파티션만 만들어서 사용하도록 하자.
필자의 경우 8G 하드 디스크 이므로 / 파티션에 7G swap파티션에 1G정도를 할당하겠다.
실제 리눅스 서버의 경우에는 용도에 많게 많이 파티션을 나누어서 사용한다.
 swap 파티션이란?
swap파티션은 시스템에 설치된 물리적인 메모리(흔히 말하는 램)보다 큰 어플리케이션을 구동할때
램처럼 사용할수 있도록 해주는 특별한 파티션이다. 따라서 모든 시스템에 swap파티션이 필요한것은 아니지만 만약을 위해서 반드시 swap파티션을 설정해 주는것이 좋다.
보통의 책에서는 메모리의 2배로 설정하라고 하고있지만 시스템의 용도에 따라서 아주 많이 잡아줘야 되는 경우도 있으니 참고 하기 바란다.

 

install_8.jpg

 

install_9.jpg


/ 파티션과 swap 파티션만 설정했다. 다 되었다면 OK 실행해서 다음으로 가도록 하자

install_10.jpg


부트로더 설치 할 것인지 물어보고 있다. 사용한다고 선택하자.
부트로더란 말그대로 OS를 부팅 시켜주는 역할을 하는 프로그램이다.
리눅스의 대표적인 부트로더인 grub 을 사용하도록 하자.

install_11.jpg


부트로더에 특별한 설정을 하고자 할 경우에 사용한다.
일단 아무것도 넣지 않고 넘어가도록 하자

[참고]
리눅스 서버에 키보드 마우스가 없는 경우에 serial 케이블을 이용해서 console 에 접근 할 수도 있다.
네트워크쪽에서 일하거나 일하는 모습을 본적이 있는 사람이라면 노트북 가지고 와서 장비와 연결해서 뭔가 작업하는 모습을 본적이 있을것이다. 그게 보통 serial 통신으로 시스템 콘솔에 접속하는 것이다.
아래는 grub에 serial 설정을 하는 경우이다.
title My Linux
  root (hd0,0)
  kernel /vmlinuz-2.6.31 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8
  initrd /initrd-2.6.31.img

 

install_12.jpg


Grub 에 패스둬드 설정을 하는 부분이다. grub의 경우에 부팅 하기전에 여러가지 설정을 변경하면서
부팅할수 있는 잇점이 있다. 위에서 GRUB 패스워드를 정해준다면 grub 부팅 설정을 변경하기 위해서는
패스워드를 입력해야만 수정이 가능하다.

install_13.jpg


기본적으로 부팅할 커널에 대한 설정이다. 부팅시 보여줄 이름과 부팅시킬 파티션에 대한 설정이다.
기본값으로 그냥 두도록 하자.

install_14.jpg


부트로더를 어디에 설치할것인지에 대한 설정이다. 특별한 경우를 제외하고는 MBR에 설치하도록 한다.

install_15.jpg


네트워크 인터페이스를 설정하는 곳이다. 리눅스 시스템이 사용할 IP address 및 gateway,subnetmask 를 설정할 수 있다.
잘 모른다면 일단 No 를 선택해서 설정하지 말기 바란다. 나중에 원하는대로 설정이 가능하다.

install_17.jpg


리눅스 시스템의 이름을 정해준다.

install_18.jpg


시스템 날짜를 설정한다.

install_19.jpg


root 사용자의 패스워드를 설정한다. 설정한 패스워드를 잊어먹지 않도록 주의하자.

install_20.jpg


리눅스의 용도에 맞게 선택하면 된다. 리눅스 시스템을 이해하기 위해서는 최소한으로만 일단 설치하도록 하자. 설치 시간도 아낄겸..^^;
Server 를 선택해서 설치해보도록 하자.

install_22.jpg


install 시작.

install_23.jpg


리눅스 패키지 설치.

install_24.jpg


설치 완료. 재부팅을 선택하면 이제 리눅스의 세계로 들어갈 것이다.^^;

 

rbldns 를 사용하여 스팸메일 줄이기

Contents

1 RBLDNS란?
2 메일서버에 rblsmtpd 설정하기
2.1 SendMail
2.2 Qmail

1 RBLDNS란?

먼저 rblsmtpd 를 사용하기 위해서는 먼저 rbldns를 이해할 필요가 있다.
RBLDNS 란 IP-address-listing DNS server 로 간단히 설명하자면 IP 리스트를 가진 DNS서버라고 이해하면 된다.
즉 IP address 가 RBLDNS 서버에 존재하는지 안하는지만 응답을 해주는 서버인 것이다.
RBLDNS 는 메일서버 뿐만이 아니라 웹서버 또는 기타 다른 서비스에서도 활용이 가능한 시스템이다.
예를 들자면 보통 특정 호스트의 웹사이트의 접속을 막고자 할 경우
아파치의 경우에 httpd.conf 파일에서 접속하는 ip를 적어서 막는 경우가 있다.
하지만 웹서버가 수십 혹은 수백대라고 가정해 본다면 그 많은 웹서버의 환경설정을 지속적으로 업데이트를 해줘야 하는 번거러움이 있다.
이런 경우 rbldns 를 활용한다면 아주 편하게 그러한 작업들이 이루워 질수가 있는것 이다.
우리는 단순히 rbldns 에 접속을 막을 ip만 적고 rbldns 만 갱신해주면 되는 것이다.
대략적으로 아래와 같은 프로세서에 의해서 동작을 하게 되는것이다.

1. Client 는 서버(웹서버,메일서버 기타 등등)에 접근시도
2. Server 는 RBLDNS 에 접속하는 Client의 IP address를 RBLDNS에 조회
3. RBLDNS 서버는 조회 결과를 Server 에 전송
4. Serve 는 결과에 따라서 접속 허용 유무를 결정

2 메일서버에 rblsmtpd 설정하기

2.1 SendMail

sendmail의 경우에는 RPM버전으로 설치가 되어 있다는 가정으로 한다.
1. /etc/mail/sendmail.mc 파일에 아래와 같은 라인을 추가한다.
주) sendmail.mc 파일이 없다면 sendmail-cf 패키지가 설치되어 있는지 확인 할 것.
예제)

FEATURE(dnswl,`trust.nuxinfo.net')
FEATURE(dnsbl,`rbl.nuxinfo.net,`553 Blocked - see http://spamlist.nuxinfo.net/lookup?$&{client_addr}')

설명.
* dnswl은 white list를 가지고 있는 서버에 대한 설정이다.
* dnsbl은 black list를 가지고 있는 서버에 대한 설정이다.
* 컴마(,)로 분리된 각각은 white list인지 아닌지 구분,질의를 보낼 rbldns 서버, 반송시 보내줄 메시지 를 담고 있다.
고 RBLDNS 서버는 무료로 제공해주는 곳들이 몇군데 있으니 찾아보기 바란다.

spamlist.or.kr
bl.spamcop.net
rbl.nuxinfo.net :-)

2. sendmail.cf 파일 생성하기

 Shell> m4 sendmail.mc>sendmail.cf

3. sendmail 재시작

 Shell> /etc/init.d/sendmail restart

2.2 Qmail

1. Qmail run 파일 수정
변경 전)

#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 100000000 \
/usr/local/bin/tcpserver -vRHl0 -x/home/vpopmail/etc/tcp.smtp.cdb \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1

변경 후)

#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 100000000 \
/usr/local/bin/tcpserver -vRHl0 -x/home/vpopmail/etc/tcp.smtp.cdb \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -t 30 -b -r bl.spamcop.net -r rbl.nuxinfo.net \
/var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1

설명)
Qmail의 경우에는 rblsmtpd 프로그램이 ucspi-tcp 패키지에 기본적으로 포함이 되어 있다.
따라서 -r 옵션뒤에 사용할 rbldns 서버를 쭉 적어주면 된다.

white list를 적용하고자 한다면 -a 옵션과 rbldns 서버를 적어주면 된다.
2. Qmail 재시작

svc -t /service/qmail-smtpd