당신은 당신의 네트웍에 연결된 컴퓨터가 이름만으로도 나타낼 수 있기를 바랄 것이다. 그리고 외부의 사람 역시 ip 주소를 치고 들어가는 것 보다는 이름으로 연결하기를 바랄 것이다. 다음은 그리 하기 위한 몇몇 가지 방법이다.
[ 참고 : 만약 당신이 사설 네트웍을 충족시키지 않는 것을 선택해야 한다면 ``ISP에 의해 호스팅 되는 노출된 네트웍''의 섹션을 참고하라.]
이 설정에서 당신은 당신의 도메인에 대한 1차 DNS의 권한을 위임하게 된다. 당신은 당신의 사설 네트웍에서 컴퓨터가 다른 컴퓨터와 talk 를 하기를 원할 때에나 DNS 를 이용하고 있다. 당신은 당신의 ISP에 당신의 외부로 노출시키기를 원하는 컴퓨터들의 IP주소 목록을 알려 주어야 한다. 만약 당신이 betty.example.com 이라는 컴퓨터를 웹과 FTP 서버로서 외부에 노출시키기를 원한다면, ISP에 www.example.com과 ftp.example.com을 betty.example.com으로 연결하도록 해 줄 CNAME 목록을 작성해 줄 것을 요청하라.
당신의 사설 네트웍 게이트웨이 머신 상의 DNS 을 설정하라. 이것은 보안상의 문제이며 또한 당신의 DNS 접근 문제에 대한 해결로서 업그레이드를 용이하게 한다.
나는 당신이 사설 네트웍 게이트웨이의 dns.example.com라는 기계를 DNS로 사용함을 가정하고 이것이 192.168.2.1의 IP를 가진 fred.example.com 으로 알리아스 됨을 가정하겠다. 상황에 따른 약간의 수정이 필요하다. 나는 이 HOWTO에서 그런 점까지 다룰 것은 아니라고 생각한다.
당신은 BIND 즉 버클리 인터넷 네임 도메인의 최근의 버전을 다운로드 받아 야 한다. 그것은 BIND 웹 사이트 www.isc.org/products/BIND/에서 찾아 볼 수 있다. 다음으로 당신은 데몬을 설정해야 한다. 다음의 /etc/named.conf 라는 파일을 생성하여라.
options {
directory "/var/named";
listen-on { 192.168.1.1 };
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "pz/1.168.192";
};
zone "example.com" {
type master;
notify no;
file "pz/example.com";
};
우리가 example.com 도메인의 주인임을 선언했다는 것을 기억하라. 이것은 우리의 ISP 역시 어떤 도메인의 주인임을 선언하고 있다는 것과 같다. 이것은 당신이 셋업에 주의하는 한 전혀 문제가 되지 않는다. 사설 네트웍 상의 모든 컴퓨터들은 dns.example.com을 네임 리솔루션으로서 사용한다. 그들은 ISP의 네임 서버가 당신이 등록한 도메인들에 대하여 신뢰도를 유지하는 한 ISP상의 네임 서버를 사용할 필요가 없는 것이다. 그러나 ISP의 네임 서버는 당신의 사설 네트웍 상의 컴퓨터들이 가진 IP번호에 관해서는 아는 바가 없다. 간단히 말하자면 ISP의 네임 서버가 아는것은 당신의 외부로 노출되어 있는 컴퓨터의 IP 번호인 것이다. dns.example.com 아래에 있는 사설 네트웍에 관한 것이 아니라.
/var/named 밑에 변수 파일을 생성하라.
root.hints 파일은 BIND 문서에서 기술하는 것이다. 혹은 DNS HOWTO metalab.unc.edu/pub/Linux/docs/HOWTO/DNS-HOWTO에서도 유효한 roo.hints 파일을 만드는것에 관해 자세히 나와 있다.
H.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.63.2.53 C.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.33.4.12 G.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.112.36.4 F.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.5.5.241 B.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.9.0.107 J.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.41.0.10 K.ROOT-SERVERS.NET. 6d15h26m24s IN A 193.0.14.129 L.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.32.64.12 M.ROOT-SERVERS.NET. 6d15h26m24s IN A 202.12.27.33 I.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.36.148.17 E.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.203.230.10 D.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.8.10.90 A.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.41.0.4
pz/127.0.0 파일은 다음과 같다.:
$TTL 86400
@ IN SOA example.com. root.example.com. (
1 ; Serial
8H ; Refresh
2H ; Retry
1W ; Expire
1D) ; Minimum TTL
NS dns.example.com.
1 PTR localhost.
pz/1.168.192 파일은 다음과 같다:
$TTL 86400
@ IN SOA dns.example.com. root.dns.example.com. (
1 ; Serial
8H ; Refresh 8 hours
2H ; Retry 2 hours
1W ; Expire 1 week
1D ; Minimum 1 day
)
NS dns.example.com.
1 PTR fred.example.com.
PTR dns.example.com.
PTR mail.example.com.
2 PTR barney.example.com.
3 PTR wilma.example.com.
그리고 당신이 사설 네트웍의 각각의 컴퓨터에 생성하는 PTR 레코드들이 있다. 이 예에서 fred.example.com의 IP 주소는 192.168.1.1이고 이것은 dns.example.com과 mail.example.com으로 알리아스 된다. 192.168.1.2의 IP 주소를 가진것은 barney.example.com이고 다른 것들도 마찬가지이다.
pz/example.com 파일은 다음과 같다.:
$TTL 86400
@ IN SOA example.com. root.dns.example.com. (
1 ; Serial
8H ; Refresh 8 hours
2H ; Retry 2 hours
1W ; Expire 1 week
1D ; Minimum 1 day
)
NS dns.example.com.
IN A 192.168.1.1
IN MX 10 mail.example.com.
IN MX 20 <ISP mail machine IP>.
localhost A 127.0.0.1
fred A 192.168.1.1
A 10.1.1.9
dns CNAME fred
mail CNAME fred
barney A 192.168.1.2
wilma A 192.168.1.3
betty A 10.1.1.10
www CNAME betty
ftp CNAME betty
우리는 사설 네트웍상의 컴퓨터들과 외부로 나가는 IP들에 대한 목록을 모두 생성했다는 것을 기억하라. 이것은 당신의 ISP 네임 서버에는 당신의 사설 네트웍상의 컴퓨터에 대한 기록이 없기 때문이다. 이것은 다시 말해서 사설 네트웍상의 betty.example.com이 외부로 노출된 fred와 같은 IP를 사용할 수도 있다는 것을 의미한다.
/etc/named.conf의 한 줄에 대해서는 옵션 섹션을 참고하라.:
listen-on { 192.168.1.2 };
이것은 당신의 네임 데몬이 외부에서의 DNS 질의에 대답하는것을 예방하는 것이다.(외부에서의 모든 질의는 ISP의 네임 리졸버가 해결할 문제인 것이다.)
[ 참고: 만약 당신이 사설 네트웍을 사용하지 않을 것이라면, ``ISP에 호스팅 되는 노출된 네트웍'' 섹션을 참조하라.] 이와 같은 설정에서 당신은 당신의 사설 네트웍을 웬만큼 작게 그리고 수시로 바꿀 수 있음을 결정하는 것이다. 당신은 DNS의 중추적인 데이터 베이스를 사용하지 않음을 결심해야 하는것은 물론이다. 그리고 각각의 컴퓨터에 대한 리솔루션 역시 기대하지말기 바란다. 이 사설 네트웍에 연결된 모든 컴퓨터들은 그 네트웍의 게이트웨이가 되는 그들의 호스트 네임을 DNS에서 인식하는것이 전부인 것이다. 사설 네트웍에 있어서의 네임 리솔루션에 있어서 호스트 테이블이 생성되어야만 한다. 리눅스에서는 이것은 사설 네트웍 상의 각각의 컴퓨터의 /etc/hosts 파일 안에 각각의 컴퓨터의 IP 주소와 이름이 기록되어 있어야 한다는 뜻이다. 언제라도 새로운 컴퓨터를 추가할 수 있고 이름이나 IP 주소를 멋대로 바꿀 수도 있는 이 파일은 리눅스 컴퓨터에 의해 업데이트 된다.
이 섹션에서 외부로 나가는 IP번호를가진 컴퓨터의 목록은 반드시 ISP로 보내어진다. 그리고 모든 알리아스(www와 ftp 등에서의) 상에서는 CNAME 을 ISP에 생성하는 특별한 방법을 이용하게 된다.
당신이 외부로 노출된 네트웍을 위해 그리고 사설 네트웍을 위해 네임 리솔루션을 설정할 수 있는 상황이라면 이 글은 필요가 없을 것이다. 만약 당신이 한 대의 컴퓨터를 이용하여 두 가지 일을 모두 해결하고 싶다면 그것은 간단한 설정으로 해결될 수 있다. 이 섹션에서는 사설 네트웍 게이트웨이 머신으로 내부와 외부 모두의 요청을 처리할 수 있는 방법을 말하겠다.
이 글을 쓰고 있는 시점인 BIND 8.2.2가 나와 있는 상황에서 하나의 데몬을 요청이 도착하는 상황에서 서로 다른 설정에 의한 요청에의 답변을 하게 할 수는 없다. 우리는 네임 리솔루션이 내부의 네트웍의 IP 번호가 밖으로 노출되지 않았기 때문에 생기는 외부의 요청과, 그리고 대답해야만 하는 내부의 요청이라는 서로 다른 두 가지 요구를 모두 처리하기를 원한다. 이것은 BIND의 미래 버전에서 ``view''라는 키워드를 통해 발견할 수 있게 될 것이다. 그러나 아직까지는 서로 다른 설정의 두 가지의 데몬을 띄우는 방법을 통해 해결하게 될 것이다.
첫 번째로, ``사설 네트웍 상에서 도메인을 지휘하는 DNS, ISP '' 섹션 을 참고하여 사설 네트웍의 도메인을 설정하라. 이것은 내부 네트웍에서 네임 리솔루션을 수행하게 한다.
다음으로, 당신의 외부로 노출되어 있는 도메인을 위한 DNS를 설정하라. 첫 번째로, 당신의 인터넷 공급자에게 당신의 IP를 대리로 처리하게 하라. 원래의 표준적인 DNS가 C클래스이하의 서브넷에서의 역변환 조정을 지원 하지 않는 동안, 주의는 DNS 클라이언트의 불만에 대한 일들을 발전시키고, RFC2317의 개요를 따른다. www.ietf.org/rfc/rfc2317.txt만약 당신의 공급자가 당신의 IP블록에 대한 조정을 할 수 있다면, 당신은 그들에게 그들이 위임할 -RFC는 그들이 매일 사용할 수 있게 되는 것에 대한 약정을 제시하는데 대한 제언을 하지 않았다.-가상 도메인을 요구할 것을 결정해야 한다. 나는 공급자가 당신에게 위임받은 상태임을 가정하고 가상의 도메인은 8.1.1.10.in-addr.arpa.라고 해 두겠다. 공급자는 CNAME 목록을 다음과 같은 형식으로 생성할 것이다.
8.1.1.10.in-addr.arpa. 2H IN CNAME 8.8.1.1.10.in-addr.arpa. 9.1.1.10.in-addr.arpa. 2H IN CNAME 9.8.1.1.10.in-addr.arpa. 10.1.1.10.in-addr.arpa. 2H IN CNAME 10.8.1.1.10.in-addr.arpa. etc.1.1.10.in-addr.arpa 도메인을 위한 이와 같은 파일에 말이다. 이와 같은 설정에 관해서는 다음 섹션에서 거론될 것이다.
만약 당신의 공급자가 당신에게 역 DNS를 관리해 줄 수 있다면 그들은 당신의 보여지는 가상 도메인의 기록과 일치하는 것을 지정해 내어 당신이 관리하는 IP에 대한 역 DNS 범위의 테이블에 대해 CNAME 순서를 생성할 것이다. 만약 그들이 당신에게 그런 일을 해 주지 않는다면,당신은 그들에게 당신의 도메인 중에서 외부로 보여지는 것을 순서에 추가하거나, 지우거나, 이름을 바꾸는 것을 일일히 요청해야 한다. 역 DNS 테이블이 당신의 외부로 노출되어 있는 DNS 들과 동시에 일어나지 않는다면, 어떤 서비스들은 장애를 일으킬 것이고, 그렇지 않은 것들은 잘못된 처리를 하게 될 것이다.
당신은 이제 사설 네트웍의 게이트웨이이며 외부의 요구 상황에 응하도록 설정할 컴퓨터의 두번째 이름을 셋업해야 한다. 이 설정 리스트는 오직 외부로 노출되어 있는 컴퓨터들과 외부 요청을 받아 처리하는 사설 네트웍 게이트 웨이에 관한 호스트와 IP주소만을 요구한다.
먼저, 외부 요청에 대한 설정인 /etc/named.ext.conf라는 두 번째의 설정 파일을 생성하라. 우리의 예에서는 다음과 같이 나타난다.:
options {
directory "/var/named";
listen-on { 10.1.1.9; };
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
zone "8.1.1.10.in-addr.arpa" {
type master;
file "ext/8.1.1.10";
};
zone "example.com" {
type master;
notify no;
file "ext/example.com";
};
/var/named 밑에 있는 root.hints 와 pz/127.0.0 파일은 실행되는 데몬을 공유한다. ext/8.1.1.10 파일은 다음과 같다.:
$TTL 86400
@ IN SOA fred.example.com. root.fred.example.com. (
1 ; Serial
10800 ; Refresh 3 hours
3600 ; Retry 1 hour
3600000 ; Expire 1000 hours
86400 ) ; Minimum 24 hours
NS dns.example.com.
9 IN PTR fred.example.com.
PTR dns.example.com.
PTR mail.example.com.
10 IN PTR betty.example.com.
PTR www.example.com.
PTR ftp.example.com.
ext/example.com 파일은 다음과 같은 내용이다.:
$TTL 86400
@ IN SOA example.com. root.fred.example.com. (
10021 ; Serial
8H ; Refresh 8 hours
2H ; Retry 2 hours
1W ; Expire 1 week
1D ; Minimum 1 day
)
NS fred.example.com.
IN A 209.217.100.58
IN MX 10 mail.example.com.
IN MX 20 <ISP Mail Machine>.
localhost A 127.0.0.1
fred A 10.1.1.9
betty A 10.1.1.10
dns CNAME fred
mail CNAME fred
www CNAME betty
ftp CNAME betty
사설 네트웍 게이트 웨이에서 2개의 데몬을 기동시켜라. 다음을 당신의 네트웍 데몬의 시동 스크립트에 추가하라.
/usr/sbin/named -u dnsuser -g dnsgroup /etc/named.conf
/usr/sbin/named -u dnsuser -g dnsgroup /etc/named.ext.conf
나는 당신이 별 특권이 없는 유저인 ``dnsuser''와 그가 소속되어 있는
특권 없는 그룹인 ``dnsgroup''을 생성했다고 가정한다. 만약 이 안의,
외부의 공격자가 네임 데몬을 통해 들어올 버그가 있을 때, 공격자는
운영이 제한되는 별 특권 없는 유저의 권한을찾게 될 것이다. /var/named
디렉토리와 그 안의 파일들은 ``dnsuser''와 같은 일반 유저에게 기록
권한을 주어서는 안 되는것이다.
사설 네트웍 상의 컴퓨터는 dns.example.com (우리의 예에서 192.168.1.1의 주소를 가진)로 설정된 네임리솔루션을 가진다. 또한 외부로 노출된 컴퓨터는 외부 인터페이스의 네트웍 게이트웨이 (우리의 예에서는 10.1.1.9 였다.)나 혹은 ISP의 DNS 서버에 질의할 수 있다.
이 설정에서 당신은 당신의 호스트 아래 있는 모든 네트웍을 노출시킨다. 당신은 당신의 컴퓨터 각각에 할당할 당신의 ISP에 컴퓨터의 이름과 IP가 기록되어 있는 실재하는 IP주소를 가지고 있을 것이다. ISP는 당신에게 최소 한 개 이상의 IP주소를 등재해 두었을 것이다. 당신의 리눅스 박스는 /etc/resolv.conf에서 네임 리솔루션을 위한 설정이 이루어져야 한다.:
search example.com
nameserver <DNS host 1>
nameserver <DNS host 2>
윈도가 깔려 있는 컴퓨터는 네트웍 설정에서 같은 방식으로 설정할 수 있다.
당신이 당신의 도메인을 새로운 IP로 옮기기를 원한다면 당신은 그 전에 준비 사항으로서 몇 가지 할 일이 있다.
당신은 IP번호를 DNSlookup에서 가져와 다른 외부의 연결되는 고유의 IP로 옮기기를 원하고, 옮기자마자 빠르게 사용하기를 원할것이다. 원결의 사이트는 당신의 IP번호를 캐시에 저장하고 있을 것이므로 사용자의 요청에 의해 당신의 이전 IP번호를 제공할 수 있다. 이와 같은 현상은 최근에 당신의 사이트를 방문한 사람들이 연결을 회피하게 하는 원인이 된다. 새로운 방문자, 즉 캐시가 저장되어 있지 않은 사람들에게는 이와 같은 일은 문제가 되지 않는다. 일을 복잡하게 되도록 조장하는 것은 사실은 최상위 레벨의 서버가 하루에 두 번 밖에 갱신이 되지 않는 다는 것엔데다가 당신의 DNS서버가 최상위 레벨의 서버와 동시에 갱신되게 하기 위해 시간을 맞추는 것은 쉬운 일이 아니라는 점에 있다.
옮기는 작업에 있어 가장 쉬운 방법이라는 것은 거의 사이트를 복제하는 것이 가장 좋은 해법일 것이다. 혹은 눈에 보이는 부분만이라도. 새로은 IP번호로 바뀌어지는 일이 전달되고 그리고 잠시 기다리면 새로운 IP번호로 연결된다. 이것이 가장 어렵지 않은 방법이다.
당신이 당신의 새로운 ISP에 대하여(혹은 IP 번호만 새로운 것을 이용하고 기존의 ISP를 그대로 이용할 수도 물론 있다.) 처음으로 해야 하는 일은 1차 및 2차 DNS를 갱신하는 것이다. 이런 작업은 IP를 옮기기 하루 전에는 해 주는 것이 좋다. 그들에게 레코드 상에 적당히 작은 어떤 것인 TTL을 설정할 것을 주문하라. (5분이면 할 수 있을 것이다. 역자 주: 근데 TTL이 뭔지 잘 모르겠네요...... 대충 찍기로 이해해 보는 거죠, 뭐! ^^;;;) DNS의 샘플 파일은 TTL값을 86400 초 , 그러니까 하루로 설정하는 것을 빠르게 한다. 만약 당신이 이것보다 TTL값을 길게 잡기를 원한다면 당신은 빠른 시일 내에 다른 것들을 더 옮길 생각인 것이어야 옳다. 궁극적으로 이것은 당신의 성취이다. 만약 당신의 현재의 도메인 정보의 TTL이 N시간으로 되어 있다면, N시간이 다 지나기 전에 옮기는 작업을 하도록 하라.:
당신의 도메인 등록은 새로운 공급자의 1차와 2차 DNS의 루트 데이터 베이스에서 이루어 져야 한다. 이 작업을 하기 최소 하루 전에 데이터 베이스에 변경 사항과 시간을 알려야 한다.
새로운 1차와 DNS 서버는 아주 적은 TTL로 당신의 사이트의 실제의 IP를 찍어 낼 수 있어야 한다.
당신은 지정한 N시간 안에 작업을 다 마쳤다고 하더라도 당신의 현재 도메인의 TTL값을 가속시켜서는 안 된다.
자, 당신은 이제 옮길 준비가 다 되었다. 당신의 컴퓨터를 새로운 IP주소로 갱신하라. 당신의 ISP의 DNS 레코드가 그와 함께 갱신된다. 5분 안에 (당신이 옮기기 위해 설정할 짧은 TTL) 연결이 새로운 사이트로 이루어진다. 당신은 DNS의 저작을 당신의 연결된, 당신이 원한다면 만들 수 있는 당신 자신의 서버에도 옮길 수 있지만 그러기 위해서는 진작에 TTL 값을 크게 잡았어야 했을 것이다.
이 설정은 ``네임 리솔루션의 셋업'' 섹션의 MX 레코드 포인트인 ``mail.example.com'' 컴퓨터를 초점으로 하여 설명하다. 가장 작은 번호로서 우선권을 갖는 MX 레코드는 메일을 보낼 원격 사이트를 받는다. 뒷순위를 갖는 다른 MX 레코드는 종종 받아진 메일을 백업한다. 이런 백업들은 때때로 1차의 메일을 받는 컴퓨터가 어떤 이유로 그 메시지를 받을 수 없을 경우의 시간의 경과에 메일들을 유지시킨다. 이 섹션의 주어지는 예에서는 fred.example.com 이라는, mail.example.com의 앨리어스를 받는 도메인에 의한 E-Mail을 사용하는 컴퓨터를 가정하자. 당신이 당신의 메일 호스팅을 ISP를 사용할 것을 선택한다면, 당신은 MX 레코드를 ISP의 컴퓨터로 돌릴 수 있다. 당신의 ISP의 기술적인 지원으로 당신은 MX 레코드를 가지각색의 파일들 안에서 전형적으로 사용할 수 있다.
당신이 당신의 도메인 하에 E-MAIL을 완전히 설정하여 호스팅 할 것이라면, 당신은 사설 네트웍 상에서 메일을 받아 네트웍상의 어느 컴퓨터 상에서도 읽을 수 있게 하기 위해 특별한 방법들을 사용하여야 한다. 당신의 주의 없이는 메시지들은 호스트에 아닌 컴퓨터에만 로그인 하는 그 메일의 수신자에게 오랫동안 전달되지 못한 채 호스트에서 대기할 지도 모른다. 보안의 차원에서, 나는 도착되는 메일이 외부의 눈에 띄이는 컴퓨터(그것들은 아마 실제 IP를 자신의 데스크탑 컴퓨터에서 사용하기를 원하는 PHB를 낙심시키는 대신 그가 하루에 두 번 죽음의 ping을 보내더라도 놀랄 수만은 없게 할 것이다.) 전송된 메일은 가장 깔끔한 방법인 semdmail에서의 포워딩을 통해 사설 네트웍 내에서만 공유되어야 한다. 어떤 다른 메일 핸들링 데몬을 위한 해법 테스트를 제공하기를 원하는 사람이 있다면 감사히 첨부하겠다.
하나의 호스트에 도착한 메일을 다른 모든 컴퓨터에서 읽게 하는 가장 간단한 방법은 메일 스풀 디렉토리를 내부 네트웍 상에서 읽고 쓰기가 자유롭게 하는 것이다. 사설 네트웍의게이트웨이 컴퓨터는 사설 네트웍 전체를위해 메일을 보내고 받는 작업을 수행할 것이다. 그리고 루트는 메일 스풀 드라이브에 대한 쓰는 권한을 가질 수 있고 다른 클라이언트들은 루트가 금지하지 않는 이상은 재량껏 그런 권한을 누릴 수도 있을것이다. 나의 일반적인 보안 철학이라는것은 권한이라는 것은 되도록 주지 않는 데 있으므로 나는 사설 네트웍의 게이트웨이 머신이 받아들이는 메일 스풀이 되어 있는 네트웍 드라이브에 대한 권한을 제한하는 쪽이다. 이것은 루트는 오직 자신에게 도착한 메일들을 읽을 수 있을 뿐이지만 이것은 특별히 중요한 문제점은 아니다. 메일 스풀 드라이브는 NFS를 거쳐 사설 네트웍 게이트웨이 컴퓨터 안의 디렉토리로서 존재하거나 혹은 내부의 서버 상에 디렉토리로서 존재해야 한다. 만약 메일 스풀 드라이브가 사설 네트웍 게이트웨이 컴퓨터 상에 존재한다면 그 컴퓨터에 관한 루트의 제한이 발생 될 수 없다. 만일 이것이 다른 서버에 위치한다면, 메일이 서버나, 게이트웨이 컴퓨터나, 혹은 네트웍 연결로 넘겨지지 않아 다운될 것임을 기억하라.
사설 네트웍 상의 윈도 머신에 대해, 메일 스풀 호스트에 POP서버를 설치하거나 혹은 삼바를이용하여 메일 스풀을 보내 줄 수 있다. 윈도 머신은 메일을 리눅스 상의 유저로 받는 것과 되돌려 보내는 것에 관해 설정되어야 한다. 예를 들어 joeuser@example.com와 같은 유저의 메일 주소는 유저 네임과, barney.example.com와 같은 컴퓨터 이름이 아닌 도메인 네임으로 된 호스트 명으로 구성되어 있는 것이다. 외부로 나가는 SMTP 호스트는 내부에서의 주소를 반송받을 수 있는 주소로 재작성하여 내보내는 것이다.
다음으로 당신은 사설 네트웍에서 메일을 포워딩하고 메일 주소를 재작성하기 위해 센드메일을 설정해야 한다. 가장 최근의 센드메일 소스는 sendmail.org의 웹 사이트인 www.sendmail.org/에서 얻을 수 있다. 컴파일 된 바이너리를 얻고 싶다면 센드메일 소스들이 있는곳의 cf/domain 디렉토리에서 받고, 이제 다음의 example.com.m4와 같은 새로운 파일을 생성하라.:
divert(-1) # # Copyright (c) 1998 Sendmail, Inc. All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # By using this file, you agree to the terms and conditions set # forth in the LICENSE file which can be found at the top level of # the sendmail distribution. # # # # The following is a generic domain file. You should be able to # use it anywhere. If you want to customize it, copy it to a file # named with your domain and make the edits; then, copy the appropriate # .mc files and change `DOMAIN(generic)' to reference your updated domain # files. # divert(0) define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward')dnl FEATURE(redirect)dnl MASQUERADE_AS(example.com)dnl FEATURE(masquerade_envelope)dnl
이것은 ``example.com''의 도메인을 정의한다. 다음으로 당신은 메일 호스트로 사용되고(사설 네트웍 게이트웨이 머신) 사설 네트웍 상의 다른 리눅스 머신들과 연결되어 있는 곳에 sendmail.cf 파일을 생성해야 한다.
다음과 같은 파일을 센드메일 소스 트리 상에 cf/cf에, example.master.m4 로서 생성하라.:
divert(-1) # # Copyright (c) 1998 Sendmail, Inc. All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # By using this file, you agree to the terms and conditions set # forth in the LICENSE file which can be found at the top level of # the sendmail distribution. # # # # This is the prototype file for a configuration that supports nothing # but basic SMTP connections via TCP. # # You MUST change the `OSTYPE' macro to specify the operating system # on which this will run; this will set the location of various # support files for your operating system environment. You MAY # create a domain file in ../domain and reference it by adding a # `DOMAIN' macro after the `OSTYPE' macro. I recommend that you # first copy this to another file name so that new sendmail releases # will not trash your changes. # divert(0)dnl OSTYPE(linux)dnl DOMAIN(example.com)dnl FEATURE(nouucp) FEATURE(relay_entire_domain) FEATURE(`virtusertable', `hash /etc/sendmail/virtusertable')dnl FEATURE(`genericstable', `hash /etc/sendmail/genericstable')dnl define(`confPRIVACY_FLAGS', ``noexpn,novrfy'')dnl MAILER(local) MAILER(smtp) Cw fred.example.com Cw example.com
이 예에서 우리는 ``expn'' 과 ``vrfy'' 명령을 사용 불가능하게 해야 한다. 공격자는 ``expn''을 이용하여 앨리어스에 대한 낚시질(적당한 단어가 생각이 나지않는군요.....)을 그가 외부의 그의 계정에서 공격을 할 때 까지 ``staff'', ``allstaff'', ``office'' 등의 이름으로 할 수 있기 때문이다. 그는 그가 얻어내기 쉬운 취약한 패스워드를 지닌 계정을 얻으려 할 것이다. (그의 앞에 로그인 화면이 뜰 때 를 가정하자 - 보안 설정의 설명은 ``당신의 도메인에 대한 보안'' 에서 외부의 공격자에게 로그인 프롬프트를 띄우지 않는것에 관해 말하며 하겠다.)
당신이 마저 생성해야 하는 예를 들어 example.slave.m4라는 종속된 컴퓨터를 위한 sendmail.cf는 다음과 같다.
divert(-1) # # Copyright (c) 1998 Sendmail, Inc. All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # By using this file, you agree to the terms and conditions set # forth in the LICENSE file which can be found at the top level of # the sendmail distribution. # # # # This the prototype for a "null client" -- that is, a client that # does nothing except forward all mail to a mail hub. IT IS NOT # USABLE AS IS!!! # # To use this, you MUST use the nullclient feature with the name of # the mail hub as its argument. You MUST also define an `OSTYPE' to # define the location of the queue directories and the like. # In addition, you MAY select the nocanonify feature. This causes # addresses to be sent unqualified via the SMTP connection; normally # they are qualified with the masquerade name, which defaults to the # name of the hub machine. # Other than these, it should never contain any other lines. # divert(0)dnl OSTYPE(linux) FEATURE(nullclient, fred.$m) Cm example.com
이제 당신은 다음의 명령을 이용하여 sendmail.cf 파일을 생성해야 한다.:
make example.master.cf example.slave.cf
그리고 이 파일들을 각각의 고유한 컴퓨터마다 sendmail.cf 라는 이름으로
복사해 넣어야 한다.
대부분의 sendmail의 설정 파일은 /etc/sendmail 밑에서 설정이 놓여진다. sendmail에 대하여 virtusertable.db와 genericstable.db의 2가지 다른 파일을 사용하는 것은 이 설정의 이유이다. 이와 같은 특별한 파일들을 이용하여, 그들의 모 파일을 생성할 수 있다. 첫번째로 virtusertable.src 를 살펴 보자.:
John.Public@example.com jpublic
Jane.Doe@example.com jdoe@somemachine.somedomain
abuse@example.com root
Pointyhaired.Boss@example.com #phb#@hotmail.com
이것은 새로운 목적지로 보낸 메일 주소의 목록이다. John.Public@example.com 으로 메일을 보내는 것은 jpublic이라는 리눅스의 계정으로 넘겨 주는 것을 의미한다. Jane.Doe@example.com으로 보내어진 메일은 다른 메일 계정인 jdoe@somemachine.somedomain로 넘겨지고 이것은 외부 서버로도 메일을 되보내는 것이 가능함을 의미한다. abuse@example.com로 보내어진 메일들은 같은 방식으로 root에게 보내어진다. 다른 파일인 genericstable.src를 살펴보자.:
jpublic John.Public@example.com
janedoe Jane.Doe@example.com
whgiii Pointyhaired.Boss@example.com
이 파일은 네트웍에서 생성된 메일을 외부로 나갈 수 있는 메일로 이름을 바꾸는 역할을한다. 이것은 메일 발신을 위해 메일 주소를 내부에서 통용되는 당신이 선택한 계정 이름 대신 jdoe@somemachine.somedomain 식으로 바꾸는 작업을 수행한다. 마지막으로, 다음의 Makefile을 /etc/sendmail/ 안에 생성하자.:
all : genericstable.db virtusertable.db
virtusertable.db : virtusertable.src
makemap hash virtusertable < virtusertable.src
genericstable.db : genericstable.src
makemap hash genericstable < genericstable.src
make를 기동시켜 sendmail을 사용할 수 있게 하는 해쉬 파일을 생성하라. 그리고 설정 파일을 바꾼 후에는 언제라도 다시 make 를 한 후 sendmail을 재시작해야 한다는 것을 기억하라.
개인적으로는 sendmail만을 사용하고 있다. 이 섹션을 자신이 쓰기를 원하는 누구라도 좋으니 연락을 주기 바란다. 다시 말해서 나는 MTAs 와 같은 Postfix, Exim, 혹은 smail 등에 대한 더 자세한 것은 나중에 말하겠다는 것이다. 물론 나는 그런 프로그램들을 사용해 본 다른 누군가가 이 섹션을 맡아 써 주는 것이 낫다고 생각한다.
당신은 당신의 보안을 위해 게이트 웨이의 뒤쪽으로 사설 네트웍의 외부에서 보이는 웹 서버를 셋업하게 된다. 만약 웹 서버가 사설 네트웍 안의 다른 컴퓨터의리소스로서 사용되는 데이터베이스에 접근하는 것이 필요 하다면, 이 상황은 네트웍에서 부터의 보안상 좀 더 복잡한 상황이다. 그런 상황의 설정은 이 문서의 범위를 벗어나는 것이다.
서버 설정의 세부적인 내용은 리눅스 WWW HOWTO의 아파치 문서를 찾아 보는 것이 좋다. 그 문서는 metalab.unc.edu/pub/Linux/docs/HOWTO/WWW-HOWTO 에서 찾을 수 있다. (그러나 우리 나라에서는 KLDP에서 찾아 보면 되겠죠?)
다시 한 번 말해 두지만, 당신의 FTP 서버는 외부로 노출된 컴퓨터여야만 하지, 사설 네트웍 게이트웨이 하의 컴퓨터여서는 안 될 것이다. 당신의 FTP 데몬 패키지의 수송에 따라 셋업의 방향을 따르도록 하다. 오래된 버전에서의 알려진 보안상의 약점에 대비하기 위해 최신 버전을 다운로드 받아 설치하도록 하라. 만약 당신의 FTP가 익명 사용자의 파일 업로드를 지원하지 않을 것이라면 데몬의 일부 옵션을 꺼야 한다는 것을 주지하자. 나는 승인된 사용자의 FTP 로그인이 FTP 호스트에 허락되지 않게 하고 당신이 필요로 하는 사용자만을 scp, 어떤 파일이 업데이트 되었을 때 그들이 FTP 호스트에 접속해 있어야만 하는 보안 쉘 원격 복사 명령을 사용할 것을 추천한다. 이것은 사용자에 대한 보안 설정에 대한 것이고 기타의 것이나 문제점들에 관한 것은 ``당신의 도메인에 대한 보안''을 참고하라.
``방화벽 설정''부분에 자세한 내용이 있다.