본문
1 아키텍쳐
이 글에서 구성하려는 메일 시스템 아키첵처.
http://www200.pair.com/mecham/spam/spamfilter20050626.htm
1.1 준비
대상 OS: Ubuntu 8.04, 8.10
host name(FQDN): example.com
host ip address: 192.168.0.1
루트 사용자로 작업을 진행한다.
sudo su
sudo bash
It is very important that you make /bin/sh a symlink to /bin/bash...
ln -sf /bin/bash /bin/sh
disable AppArmor:
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get remove apparmor apparmor-utils
3 Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
To install Postfix, Courier, Saslauthd, MySQL, and phpMyAdmin, we simply run
sudo apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl apache2 apache2.2-common apache2-utils phpmyadmin libapache2-mod-php5 php5 php5-mysql libpam-smbpass
MySQL, Courier 등의 설정 질문에 아래와 같이 비밀번호 등을 입력한다.
- New password for the MySQL "root" user: <-- root sql password
Repeat password for the MySQL "root" user: <-- root sql password
Create directories for web-based administration? <-- No
General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com
SSL certificate required <-- Ok
Web server to reconfigure automatically: <-- apache2
Postfix reconfigure
postfix 재설정을 할 경우 도메인 이름과 포스트마스터에 대한 alias 설정을 꼭 한다.
- sudo dpkg-reconfigure postfix
- domain name
- postmaster
3 Apply The Quota Patch To Postfix
sudo apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-server-dev-8.3 po-debconf dpatch libmysqlclient15-dev lsb-release libcdb-dev libdb-dev hardening-wrapper
3.1 Postfix patch
Postfix sources에 quota patch를 해주어 새로운 Postfix .deb packages 만들어 설치한다:
source 다운로드
cd /usr/src
sudo apt-get source postfix
Postfix 버전을 확인해 해당 버전의 패치를 다운 받는다.
- sudo postconf -d | grep mail_version
우분투 8.04의 경우 postfix-2.5.1이 설치되고, 우분투 8.10은 postfix-2.5.5가 설치된다.
http://vda.sourceforge.net/VDA/postfix-2.5.6-vda-ng.patch.gz
http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng-64bit.patch.gz
http://vda.sourceforge.net/VDA/postfix-2.5.1-vda-ng.patch.gz
sudo wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
sudo gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
sudo patch -p1 < ../postfix-2.5.1-vda-ng.patch
sudo dpkg-buildpackage
dpkg-buildpackage 실행시 아래와 같은 경고는 무시해도 좋다.
- dpkg-buildpackage: warning: Failed to sign .dsc and .changes file
소스 디렉토리를 빠져나가
새로운 패키지가 만들어 졌다.
- cd ..
- ls -l
- -rw-r--r-- 1 root src 41190 2009-03-04 14:10 postfix-cdb_2.5.5-1_i386.deb
-rw-r--r-- 1 root src 140516 2009-03-04 14:10 postfix-dev_2.5.5-1_all.deb
-rw-r--r-- 1 root src 913088 2009-03-04 14:10 postfix-doc_2.5.5-1_all.deb
-rw-r--r-- 1 root src 48716 2009-03-04 14:10 postfix-ldap_2.5.5-1_i386.deb
-rw-r--r-- 1 root src 42734 2009-03-04 14:10 postfix-mysql_2.5.5-1_i386.deb
-rw-r--r-- 1 root src 42644 2009-03-04 14:10 postfix-pcre_2.5.5-1_i386.deb
-rw-r--r-- 1 root src 42866 2009-03-04 14:10 postfix-pgsql_2.5.5-1_i386.deb
-rw-r--r-- 1 root src 1228516 2009-03-04 14:10 postfix_2.5.5-1_i386.deb
postfix 와 postfix-mysql packages 를 설치한다:
sudo dpkg -i postfix_2.5.5-1_i386.deb postfix-mysql_2.5.5-1_i386.deb
4 Create The MySQL Database For Postfix/Courier
Now we create a database called mail:
mysqladmin -u root -p create mail
Next, we go to the MySQL shell:
mysql -u root -p
select, insert, update, delete 권한을 mail_admin에 준다.
- mysql> grant select, insert, update, delete on mail.* to 'mail_admin'@'localhost' identified by 'password';
mysql> grant select, insert, update, delete on mail.* to 'mail_admin'@'192.168.1.%' identified by 'password'; - mysql> flush privileges;
- 'mail_admin'@'localhost' 은 localhost 에서 db 접근을 허용
- 'mail_admin'@'192.168.1.%' 은 192.168.1 네트워크에서 db 접근을 허용
table 생성
mysql> USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
domain 테이블 : 가상 도메인 이름
domain |
example.com |
forwarding 테이블: 포워딩으로 설정된 이메일 alias
source | destination |
info@example.com | sales@example.com |
user 테이블: 사용자 이메일과 암호화된 패스워드, quota의 기본 값은 10485760로 10Mb이다.
password | quota | |
sales@example.com | No9.E4skNvGa. ("secret" in encrypted form) | 10485760 |
transport 테이블: 옵션으로 It allows to forward mails for single users, whole domains or all mails to another server.
domain | transport |
example.com | smtp:[1.2.3.4] |
- 위 사례는 도메인 exmaple.com으로 오는 모든 메일이 smtp를 이용해 1.2.3.4로 전달한다.
- the square brackets [] mean "do not make a lookup of the MX DNS record"
- 도메일 명을 이용하면 []를 사용하지 말라.
예제
- mysql> INSERT INTO 'domains' ('domain') VALUES ('exmaple.com');
- mysql> INSERT INTO users('email', 'password', 'quota') VALUES ('user_id@example.com', ENCRYPT('012345'), 104857600);
테스트를 위해 example.com을 hosts에 등록.
sudo vi /etc/hosts
192.168.1.23 example.com
GUI 환경에서 사용은 웹브라우저를 이용해 phpMyadmin을 이용한다.
http://192.168.0.100/phpmyadmin/
5 Configure Postfix
postfix와 mysql의 통신은 127.0.0.1을 통해 이루어지고, mysqld 데몬에서 127.0.0.1주소와 바인딩을 해야한다.
vi /etc/mysql/my.cnf
bind-address = 127.0.0.1
- /etc/init.d/mysql restart
- sudo dpkg-reconfigure postfix ;
postconf -e 'home_mailbox = Maildir/'
Postfix와 mysql 설정을 위한 여섯개의 파일을 만든다.
혹은 첨부된 자료를 이용: postfix-mysq-cf.tar.bz2
vi /etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
관련링크
댓글목록
등록된 댓글이 없습니다.