구축환경: Ubuntu 14.04 LTS


1.

https://packages.ubuntu.com/source/trusty/sendmail

위 사이트에서 소스를 다운로드했다.


2.

tar -xvzf sendmail_8.14.4.orig.tar.gz

안에 압축파일이 또 있어서

tar -xvzf sendmail.8.14.4.tar.gz

한번 더 압축을 푼 후,

sendmail-8.14.4 디렉터리를 사용자의 홈 디렉터리로 옮겼다.


3.

sendmail 디렉터리로 이동해,

./Build

위 명령어로 빌드해준다.

이 때, 'undefined reference to~' 오류가 나서

sendmail-8.14.4/ 디렉터리 안의 devtools/Site/에

APPENDDEF(`confLIBS', `-lresolv')

위 내용만을 가진 site.config.m4 파일을 생성하여

./Build -c

명령어로 다시 빌드했다.


4.

cf/cf/ 디렉터리에서

cp generic-linux.mc sendmail.mc

명령어로 sendmail.mc 파일을 만들어준 후,

./Build sendmail.cf

명령어로 sendmail.cf 파일을 생성한다.


5.

mkdir /etc/mail

명령어로 디렉터리를 만들어주고

./Build install-cf

명령어를 입력하면

/etc/mail/sendmail.cf

/etc/mail/submit.cf

두 파일이 생성된다.


6.

sendmail/ 디렉터리 내에서

./Build install

명령어를 이용해 sendmail을 설치한다.

(설치 전, smmsp 그룹과 smmsp 사용자를 생성해야한다고 해서 만들었다.)

위 명령어를 사용하니 /usr/man/man8 디렉터리가 없다고 해서,

mkdir /usr/man/man8 /usr/man/man5 /usr/man/man1

세 디렉터리를 만들고 다시 명령어를 이용했다.


7.

touch /etc/mail/local-host-names

mkdir /var/spool/mqueue

두 명령어로 필요한 파일과 디렉터리 생성


8.

/usr/sbin/sendmail -L sm-mta -bd -q30m

위 명령어로 데몬을 실행하고, 25번 포트가 열려있는지 확인한다.

명령어 옵션은 https://www.computerhope.com/unix/usendmai.htm 참고


9.

sendmail xxx@gmail.com

위 명령어를 사용한 후, 메일 내용을 적고 .을 누르면 메일이 전송된다.

Gmail의 정크 메일함에서 발송한 메일을 확인할 수 있었다.

구축환경: Ubuntu 14.04LTS


Ubuntu에 DNS 서버 구축을 하기 위해, BIND9 소스 패키지를 빌드하여 설치하였다.


https://packages.ubuntu.com/trusty/bind9


먼저, BIND9의 소스 패키지는 위 링크에서 다운 받았다.

다운 받은 압축 파일을

tar -xvzf bind9_9.9.5.dfsg.orig.tar.gz

명령어를 사용해 압축 해제한 후, bind9-9.9.5.dfsg 디렉터리로 이동하여

./configure --without-openssl

명령어를 사용해 빌드에 필요한 프로그램을 확인했다. OpenSSL을 사용하지 않으려고 옵션을 주었다.

따로 필요한 프로그램은 없어 바로 빌드했다.

make

명령어를 이용하여 빌드를 한 후,

make install

명령어로 설치해주었다.


설치가 끝나면 /usr/local/sbin에 named를 비롯한 여러 BIND 9 라이브러리들의 실행파일이 생성되어,

명령어만 입력해도 프로그램들을 실행시킬 수 있다.


named로 DNS 서버를 켜기 전, 먼저 DNS 서버를 설정해야한다.

http://zytrax.com/books/dns/ch7/

위 링크를 참고하여 설정하였다. (configuration 파일과 zone 파일 작성법이 나와있다.)

(이 글은 내 컴퓨터의 IP가 192.168.0.101, 호스트 컴퓨터의 IP가 192.168.0.27이라고 가정하고 작성함)



먼저, /etc/hosts 파일을,

127.0.0.1 my.local localhost

127.0.0.1 ns

위와 같이 수정하였다.


apt-get 명령어로 BIND9를 설치하면 자동으로 /etc/named.conf 파일, /etc/bind/named.conf.options 등이 생성되는 것 같은데,

소스 패키지를 빌드하여 설치한 경우엔 생성되지 않는다. (bind9-9.9.5.dfsg 디렉터리의 FAQ 참고)

그렇기 때문에 디렉터리와 파일을 생성하여 설정해주었다.


/etc/bind/named.conf.options 파일을,

options {

 directory "/var/cache/bind";

 

 forwarders {

 ##KT 네임서버 IP 

 168.126.63.1; 

 168.126.63.2;

 };


 listen-on-v6 { any; };

};

다음과 같이 만들어, 내부 도메인이 아닌 경우 KT 네임서버에 묻게 했다.

여기서, options는 DNS 서버의 전체적인 제어에 대한 설정을 하는 절이며,

listen-on-v6는 BIND가 IPv6 쿼리 listen 여부를 설정하는 문장이다.(IP나 Port 설정도 가능)


/etc/bind/named.conf.local 파일을,

zone "my.local" IN {

 type master;

 file "/etc/bind/zones/my.local.db";

};


zone "0.168.192.in-addr.arpa" {

 type master;

 file "/etc/bind/zones/rev.0.168.192.in-addr.arpa";

};

다음과 같이 만들어, zone을 추가하였다.

여기서, zone은 네임서버가 지원할 zone을 정의하는 절이며,

type은 zone의 type을 설정하는 문장이다. (type에 대한 정의는 위 링크에서 참고)

file은 zone에 의해 사용될 파일을 설정하는 문장이다.


/etc/named.conf 파일은 다음과 같이 간단하게 만들었다.

include "/etc/bind/named.conf.options";

include "/etc/bind/named.conf.local";

보다시피, 위에서 만든 파일들을 include 했다.


그 후, named.conf.options에 정의한 zone에 대한 zone 파일을 생성한다.

/etc/bind/zones라는 디렉터리를 만들어서, 그 안에 zone 파일들을 생성했다.


먼저, my.local.db 파일을 다음과 같이 만들었다.

;

; BIND data file for local loopback interface

;

$ORIGIN my.local.

$TTL 604800

@ IN SOA ns.my.local. master.my.local. (

 10 ; Serial

 604800 ; Refresh

 86400 ; Retry

 2419200 ; Expire

 604800 ) ; Negative Cache TTL

;

; name servers - NS records

my.local. IN NS ns.my.local.


; name servers - A records

localhost IN A 127.0.0.1

gateway IN A 192.168.0.1

ns IN A 192.168.0.101


; hosts - A records

testcom IN A 192.168.0.27

여기서, SOA는 zone에 대한 설정을 하는 레코드고,

NS는 도메인에 대한 네임서버를 정의, A는 호스트에 대한 아이피를 설정하는 레코드다.


rev.0.168.192.in-addr.arpa 파일은 다음과 같이 만들었다.

;

; BIND reverse data file for broadcast zone

;

$TTL 604800

@ IN SOA ns.my.local. master.my.local. (

 14 ; Serial

 604800 ; Refresh

 86400 ; Retry

 2419200 ; Expire

 604800 ) ; Negative Cache TTL

;

; name server

@ IN NS ns.my.local.

; PTR Records

1 IN PTR gateway.my.local.

27 IN PTR testcom.my.local.

101 IN PTR ns.my.local.

여기서 PTR은 아이피에 대한 도메인을 설정하는 레코드다.



설정이 다 끝나면,


named-checkconf 명령어로 configuration에 구문 에러가 있는지 확인하고,

zones 디렉터리로 이동하여, named-checkzone을 사용해 zone 파일이 정확하게 작성되었는지 확인한다.

ex) named-checkzone my.local my.local.db

ex) named-checkzone 0.168.192.in-addr.arpa rev.0.168.192.in-addr.arpa


그 후 named 명령어를 입력하면, DNS 서버가 켜진다.


host 컴퓨터에선, DNS 서버로 192.168.0.101을 사용하게 한 후, DNS 서버가 잘 기능하는 지 테스트했다.

telnet ns.my.local, ftp ns.my.local등의 명령어로 DNS 서버에 등록된 도메인으로 IP를 잘 찾아 접속하는 지 확인했고,

내부 도메인이 아닌 경우를 테스트 하기 위해 google 등의 일반 사이트에 웹 브라우저를 사용해 접속해보았다.

구축 환경 : VirtualBox / ubuntu 14.04 LTS

(17.11.29 VirtualBox가 아닌 환경에서 테스트 완료)


ubuntu에 telnet과 ftp 서버 구축을 하기 위해, 소스 패키지를 빌드하여 설치하였다.

여태 많은 시도를 해봤는데, 항상 같은 소스 패키지를 받았던 게 문제였나보다. 버전은 달리 해봤지만..

계속 netkit-telnet, netkit-ftp를 받아서 시도했는데 항상 이것저것 에러가 뜨면서 빌드가 되지 않았다.

(vsftpd도 시도 했었는 지는 기억이 나지 않음)

그러다가, 마지막이다! 하는 맘으로 inetutils라는 소스 패키지를 받게 되었다.

https://www.gnu.org/software/inetutils/ 에 올라온 설명에 따르면,

inetutils는 telnet client/server, ftp client/server, rsh client/server 등의 보편적인 네트워크 프로그램들의 모음이라고 한다.

그래서, 이 패키지를 설치하면 telnet도 ftp도 설치할 수 있다.

telnet 설치하고 다음에 ftp도 따로 설치하려고 했는데 의도치 않게 한꺼번에 하게 되었다.


inetutils 소스 패키지는 위 링크에서도 받을 수 있지만 나는,

https://packages.ubuntu.com/source/trusty/inetutils

여기서 다운 받았다.


다운 받은 압축 파일을

tar -xvJf inetutils_1.9.2.orig.tar.xz

명령어를 사용해 압축 해제한 후, inetutils-1.9.2 디렉터리로 이동하여

./configure

명령어를 사용해 빌드에 필요한 프로그램을 확인했다. 나의 경우엔 따로 필요한 프로그램이 없어서,

make

명령어를 이용하여 빌드를 한 후,

make install

명령어로 설치해주었다.


설치하고 나니 ftp와 telnet 클라이언트는 그냥 ftp, telnet 명령어로 실행이 되었는데

서버의 데몬을 켜는 법을 몰라서 정말 한참 헤매다가 겨우 찾아냈다.

설치를 하고 나면 inetutils-1.9.2 디렉터리에 있는 telnetd와 ftpd 디렉터리 안에

executable 파일이 생긴다는 것을 몰랐던 것이다..

ftpd의 standalone 데몬이기 때문에, ftpd 디렉터리로 이동하여

ftpd --daemon

명령어를 사용하면 데몬이 켜진다.

netstat -ano | grep 21

명령어를 사용하면 포트가 열렸는지 확인할 수 있고, 그 후

ftp localhost 명령어를 사용하거나, 파일질라를 사용하여 접속 테스트를 할 수 있다.


telnetd의 경우, 슈퍼데몬 xinetd를 사용해야 하기 때문에

/etc/xinetd.conf 파일에,

service telnet

{

disable = no

flag = REUSE

socket_type = stream

wait = no

user = root

server = [telnetd executable 파일의 절대 주소. 나의 경우엔 /home/testuser/inetutils-1.9.2/telnetd/telnetd]

log_on_failure += USERID

}

를 추가한 후, (apt-get으로 telnet을 설치했을 땐, server = /usr/sbin/in.telnetd 라고 썼었다.)

service xinetd restart

명령어로 xinetd를 재시작해서 23번 포트를 열어주었다.

netstat -ano | grep 23

명령어를 사용해 포트가 열렸는지 확인한 후,

telnet localhost 명령어를 사용하거나, PuTTY를 사용하여 접속 테스트를 할 수 있었다.


(inetutils 패키지의 telnet과 ftp를 사용한 경우, 별다른 설정 없이 root 로그인이 가능했다.)

+ Recent posts