Contents
- 들어가면서
- FreeBSD라는 OS로 PF / NATD / DHCP/ BIND(DNS)가 돌아가는 Firewall Server, 그리고 Apache2 / PHP / MySQL / Postfix / ProFTPD가 돌아가는 DMZ / LAN Server 꾸미기
들어가면서
직지 Project homepage를 http://Kornet_Server(무슨 soback.)/~minsukim/의 꼴로 시작한 것이 1995년이었고, 1998년부터 http://www.jikji.org/, http://www.jikji.net/의 꼴로, server 계정을 받아 돌리기 시작했고, 그 이후 얼마 안 있다가, 독립 Server로 root 권한을 가지고 이런 저런 실험을 하게된다. 실험이란 것이 다름 아니라 다음 두 가지를 현실로 이루기 위한 것이었다.
- 어떻게 하면 여럿이서 동시에 일할 수 있는 공동 전산화 작업 환경을 만들 수 있을까?
- 어떻게 하면 옛한글을 자유롭게 쓰고, 나타낼 수 있는 환경을 꾸밀 수 있을까?
이상하게 들릴지 모르지만, 공동체, 열려있음, 자유, 이런 말을 듣고 있으면, 그리고 그것들을 입밖에 내면, 그 속에 있는 힘과 생명력이 느껴진다. 또한 역설적이게도 server를 돌리면서 갖고자 했던 공동체, 열려있음, 그리고 자유는 먼저 닫는 것에서 출발을 해야만 했다. 이 역설적 교훈은, 가난하게 server를 돌리던 시절, "열려있음"을 철학으로 했던 직지 project server의 공개 ftp server가 누군가에게 나쁜(?) 자료를 전파하는 중계창고가 되면서 얻는 것이다. 그 일로 인해, 직지 server가 둥지를 틀고 있던 N사 network에 엄청나게 많은 부하를 일으켰는데, 그로 인해서 벌금을 물어야 하는 처지가 되었다. N사측에서 어느 정도 직지 project의 뜻을 이해해 주어서 조금 깍아주기는 했지만, "닫혀있지 않은 자유"에 따르는 댓가를 그 당시 돈으로 엄청나게 비싸게 주고 치룬 것이다.
그 이후로, 집에서 Server를 돌리기 위한 노력을 하게 되는데, 이 글은 그 이후로 지금껏 행해온 실험을 정리하려는 의도로 쓰기 시작한 것이다. 돌이켜보면, 이러한 실험들 때문에 진정한 의미에서의 직지 project는 많이 못했지만, 후회는 없다. 10년 정도 걸렸지만, 처음 시작할 때 생각했던 server환경을 거의 온전하게 이루어냈기 때문이다. 직지 project도 내가 생각한 대로 될 날이 올테지만, 이제 직지 project의 개념 자체가 내 나이먹는 만큼 변했기에, 좀 더 두고 볼 일이다.
암튼, 내가 생각해온 server구성은 위에서 언급한 두 가지 환경을 제공하면서, 동시에 완벽(물론 완벽은 없다!)한 보안 환경, 닫힌 환경을 제공하여 실제 사용자들에게는 무한한 자유, 열린 환경를 주는 것을 우선으로 생각하게 되었다. 그러한 환경을 꾸미는 여정을 여기에 적는다. 근본적으로, 모든 사람들이 자기집 PC를 server로 꾸미고, 자신들의 자료를 자유롭게 공유하는 환경을 만드는 것 또한 원래 직지 project가, 그리고 금속활자가 이루고자 했던 뜻 중의 하나이다...
FreeBSD라는 OS로 PF / NATD / DHCP/ BIND(DNS)가 돌아가는 Firewall Server, 그리고 Apache2 / PHP / MySQL / Postfix / ProFTPD가 돌아가는 DMZ / LAN Server 꾸미기
Firewall(방화벽)설치는 사실 보안의 시작이다. 직지 server는 여지껏 - 사실 내가 보안을 잘 모르기 때문에 - 무조건 새로운 판수의 software로 올려서 썼다... 그러다보면 이상하게도 뭔가가 잘 안돌아가기 시작하고, 그걸 복구하다보면 정작 쓸데없는데 시간을 많이 쏟게 된다. 어느 순간 자료를 보관한 채 OS를 새로 깔고 있는 모습을 보곤한다. 최근에는 원치 않게 server OS가 갑작스레 hard disk문제로 인해 날라가서 다시 설치를 했지만서도, 그 어느때와는 다르게, 직지 server를 바로 살리는데 급급하지 않고 좀 느리게, 천천히 이런 저런 생각들을 정리하면서 그간 원했던 server 환경을 꾸밀 수가 있었다.
방화벽 설치는, 중요한 보안 patch는 방화벽이 돌아가는 server 한 군데서만 하고, 방화벽 안에 있는 server들에는 좀 느슨한 보안 정책을 적용할 수 있게 한다. 이에 따라, 그저 말단 사용자로서 끝없이 모든 software program 판수를 올려써버릇해온 습관을 고쳐서 시간을 좀 더 생산적으로 쓸 수 있도록 해 주는 첫 단추이다.
Domain 이름 / 고정 IP받기
집에서 server를 꾸며서 돌릴 생각이라면 domain 이름과 고정 IP를 받는 것이 좋다. 요즘은 유동 IP로도 DNS를 연결시켜주는 기능도 있다고 하지만, 개인적으로 유동 IP의 손님이 아니다. 이 글은, domain 이름과 그 이름으로 server를 돌릴 고정 IP가 있다고 가정한다.
OS 고르기
DOS 2.x때부터 Windows 3.1을 통해 지금의 Windows XP까지, Red Hat Linux, Alzza Linux, Power Linux, FreeBSD 4.1에서 지금의 FreeBSD 6.2에 이르기까지, 인간의 긴 역사에 비한다면 참 짧은 시간 동안에 많은 변화가 급격하게 일어났다. 그래서, OS를 하나 고르는 것에도 많은 노력을 들여야 한다. Apple MAC OS가 좋다는 말은 많이 들었지만, 실제로 써본적이 없고, 너무 비싸서 감당하기 힘든고로 고려에서 제외하기로 한다.
결론부터 이야기하면, 나는 Windows 계열이 싫다. Unix계열을 좋아한다. 아마, 직지 project가 열려있음을 높이 치고 있다는 사실 하나만으로도 알 사람은 다 알 결론이겠지만, 그래도 내 생각의 흐름을 나름대로 정리해서 그 결론을 합리화하고자 한다.
Unix와 Windows
A Taste of Computer Security에 있는 Unix vs. Microsoft Windows가 좋은 출발점일 것 같다.
내 나름대로 나열한 차이점은 다음과 같다.
Unix - http://www.levenez.com/unix/
- 열려있다.
- 안정적이다.
- 싸다 (비싼 Unix도 있지만서도).
- 보안이 좋다.
- 탄력적이다.
- 썩 좋은 network환경을 제공한다.
- perl, php, python, gcc, ruby 들같은 훌륭한 programming 환경을 제공한다.
UTF8을 꾸미기 쉽지 않다.
Windows - http://www.levenez.com/windows/
닫혀있다.
- 쓰기 편하다.
비싸다.
보안 관련 patch를 자주해주어야한다.
유연성이 없다.
- 집에서 Desktop으로 쓰기에 좋다.
asp, programming 환경을 꾸미기에 돈이 많이 든다.
- Windows XP에서 UTF8은 참 쉽게 구현된다. 하지만, 난 아직도 Windows 98 SE을 쓴다.
물론 비싼 것은 불법복사해서 쓰면 싸지겠지만, 그것도 젊을때 한때지, 나이들면 다 제값주고 사는 것이 옳다. 그게 세상돌아가는 이치인듯 하니, 결론은 당연히 Unix로 난다.
어떤 Unix가 좋을까?
이제 중요한 질문에 대한 답을 해야한다. 그보다는, 내가 처한 경제적 처지를 똑바로 바라봐야 한다.
- 현재로서는 값비싼 IBM, HP, Sun에서 돌아가는 Unix와 그 hardware를 감당하기에는 역부족이다.
이러한 처지에서 선택할 수 있는 것은 공짜(영어의 free라는 단어때문에 실제 공짜를 자유와 착각하는 사람도 있을 수 있지만, 공짜와 자유는 그 무게가 다르다.)로 받아 설치할 수 있는 BSD계열과 Linx계열 Unix기반 OS로 선택의 폭이 좁아진다.
BSD와 Linux
내가 나름대로 나열한 BSD와 Linux의 차이점은 다음과 같다. 이 모든 차이가, Alzza Linux에서는 잡히지 않는 3com NIC가 FreeBSD에서는 잡혀서 결국 Apache web server를 설치할 수 있었다는 사소한(?) 차이에서 출발했다고 하면 "이 세상 모든 일에는 다 이유가 있답니다."라는 말이 이해가 될듯도 하다. 이 또한 인연이라면 인연인 것이다.
이 부분을 쓰면서 FreeBSD vs. Linux vs. Windows 2000, Is FreeBSD a Superior Server Platform to Linux?, BSD or Linux, 그리고 특히나 BSD vs Linux를 많이 참고했다.
- BSD
- 어느정도 익숙하다.
- 일관성 있는 개발 방침.
- 개발team에 의한 동일한 배포판 발표.
- BSD License.
다양한 응용 program을 지원할 수 있다.
- Linux 응용 program을 사용할 수 있다.
- "base"가 있다.
- ports에 의한 soure tree 관리 방식.
- Linux
- 익힐수 있겠지만, 편하지 않다.
- 무정부적 개발 방침.
- 다양한 배포판(Redhat, SuSE, Debian, Mizi, Alzza, ...)
- GPL License.
- 다양한 응용 program을 지원한다.
- FreeBSD 응용 program을 사용할 수 없다.
- "kernel"이 있다.
- rpm에 의한 binary 설치 방식.
이렇게 나열하고 나면, 결론은 역시 BSD계열 Unix다.
그럼 어떤 BSD?
BSD는 크게 세 가지다. Alphabet 순서대로 내가 아는 바를 나열하겠다.
FreeBSD - http://www.FreeBSD.org/, http://www.kr.FreeBSD.org/
- "The Power To Serve"
- 응용, application에 강하며, 가장 많이 알려져있다.
- SMP 지원
- 최신 판수 6.1
- Logo 꼬마 악마(?)가 예쁘다.
NetBSD - http://www.NetBSD.org/
- "Of course it runs NetBSD."
- 확장성, 호환성에 중점을 두고 있다.
SMP 지원 (> 2.0)
- 최신 판수 3.0.1
- Logo가 깃발.
OpenBSD - http://www.OpenBSD.org/
"FREE, FUNCTIONAL & SECURE"
- 보안에 중점을 두고 있다.
- SMP 지원
- 최신 판수 3.9
- Logo는 물고기(복어?).
원하는 network 구성과 개인 선호도에 따라 선택이 달라지겠지만, 심정적으로는 다음과 같은 구성이 제일 구미가 당긴다.
- 방화벽(Firewall) - OpenBSD
- 으뜸 Server - FreeBSD, 그리고 주로 web server로 사용.
- 버금 Server - NetBSD, 그리고 Desktop으로 사용하고, back-up web server(mirror).
하지만, 이 구성 중 1. 번은 OpenBSD가 ftp server(/pub/OpenBSD-ISO)를 통해 3.1-CD4.ISO만 제공하고, /pub/OpenBSD/3.9/i386/에 여러가지 iso image가 있었지만, 결정적으로 FreeBSD 6.1 booting disk를 CD로 구워놓고 여분의 공CD가 없어서 - 한 마디로 귀찮고, 바쁘고, 돈 쓰기는 싫고 - 포기했다. 이런 것이 인연이라면 인연이겠지 뭐. 비슷한 이유로 NetBSD는 /pub/NetBSD/iso/3.0.1에 "bootonly"가 들어가는 이름이 없고, 남는 공CD도 없고 해서 포기했다. 아마도 제일 중요한 이유는, FreeBSD에 너무 익숙해져 있다는 것일 것이다. 그리고, Free라는 것도 좋고...
사실, 처음에는 FreeBSD로 빨리 직지 server기능을 살리고, 저런 이상적 구성을 실천에 옮기고 싶었는데, 개인적으로 시간이 너무 없고, server 두 대가 서로 mirroring을 해야하는데, 동일한 OS를 설치하는 것이 여러모로 편하겠다 싶어서 결국 FreeBSD로 낙점을 찍었다. FreeBSD는 ftp:/ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.1/6.1-RELEASE-i386-bootonly.iso 문서가 있어서 나같은 단순한 사용자에게 길을 쉬 알려주고 있다.
Server Hardware
다음으로 FreeBSD를 설치할 굳은모(Hardware)에 대한 내용을 정리해보자. 내 경우에는, 사실 기존에 있는 것들을 짜깁기 해서 만들거기 때문에 별 선택의 여지가 없다. 그래도, 나름대로 조건을 늘어보겠다. 따지고 보면 286급 PC로도 참 많은 일을 할 수 있는데, 뭐 때문에 이렇게 끝같데 없는 속도, 밀도 경쟁을 하는지 잘 모르겠다. 잘 돌아볼 일이다.
최소한의 Computer Hardware 사양
CPU 연산 속도: >= 400MHz
BUS 속도: >= 100MHz
RAM: >= CPU하나당 128Mb
EIDE: >= UDMA33
HDD: >= 80Gb, RAID1을 권장하지만, 필수는 아니다. Firewall Server HDD는 >= 5Gb이상.
- Tape Drive: 선택 사항.
- UPS Power: 선택 사항. 지금 있는 곳이 자주 전기가 나가는 곳이라서, 있었으면 하지만, 비싸다.
LAN: >= 10/100Mbps
Power Supply: >= 250Watt
- Cooling Fan: Case 하나당 3개, HDD 하나당 1개.
- OS: FreeBSD
방화벽(Firewall) Server 실제 사양
- CPU: Single Intel Pentium III 755MHz CPU, ASUS P3V4X Mother Board.
- BUS 속도: 100MHz
- RAM: 383Mb
- EIDE: UDMA33
- HDD: IBM DTTA-350840 8063Mb (8Gb)
- Tape Drive: 없음.
- UPS Power: 없음.
LAN: 3Com 3C905B-TX, 3Com 3C905C-TX, Accton EN2242, RealTek 8139 (다해서 4 NICs)
- NIC는 각각 xl0, xl1, dc0, rl0
- Power Supply: 250Watt
- Cooling Fan: Case에 3개, HDD에 1개.
- OS: FreeBSD 6.1-STABLE
- 그밖에: Sound card 있음.
으뜸 Server 실제 사양(DMZ Server) -- http://www.jikji.org/phpsysinfo/
- CPU: Dual Intel Pentium III 733MHz CPU, ASUS P3C-D Mother Board.
- BUS 속도: 130MHz
- RAM: 255Mb
- EIDE: UDMA66
- HDD: 1) WD800JB-00JJA0 76319Mb (80Gb) 2) Segate ST3160021A 152627Mb (150Gb)
- Tape Drive: 없음.
- UPS Power: 없음.
- LAN: 3Com 3C905C-TX
- NIC는 xl0
- Power Supply: 310Watt
- Cooling Fan: Case에 3개, HDD에 1개.
- OS: FreeBSD 6.2-PRERELEASE
- 그밖에: Sound card 없음.
버금 Server 실제 사양(LAN Server) -- Internet에 안 물려있음.
- CPU: Hyper Thread Intel Pentium 4 2.8GHz CPU, Super Micro P4SCE Mother Board.
- BUS 속도: 800MHz
- RAM: 1023Mb
- EIDE: UDMA100
- HDD: 1) Segate ST3160812A 152627Mb (150Gb) 2) Segate ST3160021A 152627Mb (150Gb)
- Tape Drive: 없음.
- UPS Power: 없음.
- LAN: Dual On Board Intel POR/1000 Netwrok Connection
- NIC는 em0, em1
- Power Supply: 500Watt
- Cooling Fan: Case에 3개, HDD에 1개.
- OS: FreeBSD 6.2-PRERELEASE
- 그밖에: Sound card 없음.
그 밖에 Network 장비들
- Compaq 10/100Mbps Dual Speed Hub HB3220
3COM 10Mbps OfficeConnect Ethernet Hub 4 3C16704A
- Linksys 54Mbps 2.4GHz Wireless-G Boradband Router WRT54GL
WESTELL WireSpeed DSL Modem
- Iogear 4 PORT KVM Switch
FreeBSD 받아놓기
다음은 Windows에서 한 일이다.
WS FTP LE를 써서 ftp:/ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.1/6.1-RELEASE-i386-bootonly.iso 문서를 내려받는다.
- Nero, EasyCD Creator같은 CD 굽는 software로 위 문서를 CD로 굽는다. Bootable FreeBSD CD가 만들어진다.
- CD겉에 판수를 써주고, 흠집이 생기지 않게 잘 보관한다.
참고로, 내가 FreeBSD 6.1을 선택한 이유는 Unicode Support on FreeBSD에 있는 " If you are using a version of 6.1-stable CVS'd later than 2006/08/03 08:07 UTC, this patch is already present and you do not need it." 내용 때문이다. 나이가 들어가면서 역시나 복잡한거 싫어하게 되나보다. 사실, 어떤 판수의 FreeBSD를 설치할 것인가도 server의 hardware 구성, 그리고 원하는 service에 따라서 심각한 고민거리일 수 있는데, 나는 그냥 Unicode, UTF-8만 보고 6.1을 선택한 것이다.
FreeBSD 설치의 기본
Bootable CD를 만들어 놓고, 외부 internet과 연결된 IP만 있으면 FreeBSD를 network를 통해서 설치할 수 있다. BIOS 설정에서 "Booting 순서"를 CD -> HDD 로 해 놓고, FreeBSD CD를 CD-ROM Drive에 넣은 후에, PC를 다시 시작하면 FreeBSD 설치 program인 sysinstall이 자동으로 실행된다. 다음과 같은 화면이다.
나는 여기서 대부분 "Custom"을 설치해서 원하는 대로 설치를 한다. 설치에 대한 자세한 내용은 http://www.kr.freebsd.org/handbook/install.shtml, http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/install.html에 있는 내용을 참고하기 바란다. 여기서는 network로 설치하는데 반드시 필요한 설정만 얘기하고 넘어가겠다. 차림판에서 Configure -> Networking -> Interfaces -> NIC# (아래 화면에서는 em1)를 선택하고, IPv6에 [Yes/No]를 답하고, DHCP에 [Yes/No]를 답하면 다음과 같은 화면을 만나게 된다. DHCP에 [Y]라고 답했다면, 아래 질문 중에 1번, 2번만 답하면 된다.
- Host: 보통 localhost를 써준다.
- Domain: 보통 localdomain을 써준다.
- IPv4 Gateway: ISP에서 받은 gateway IP주소를 넣어준다.
- Name server: 보통 ISP에서 받은 DNS server IP주소를 넣어준다.
- IPv4 address: IPS에서 받은 정적 IP 주소를 넣어준다.
- Netmask: 보통의 경우 255.255.255.0를 넣어주면 된다.
그러고 나서, 설치할 매체를 FTP로 하면 network를 통해 FreeBSD를 설치할 준비가 다 된 것이다.
FreeBSD 설치 후에 기본 마당을 만들어 놓자
여기 내용은 어떤 경우의 설정이든지간에, 해두면 좋은 기본적인 설치다. 내 경우에는 이 정도면 기본인데, 쓰는 사람 입맛이나, hardware에 따라 다르게 마당을 꾸밀 수도 있다. 여기부터는 FreeBSD를 /usr/ports/를 포함하여 성공적으로 설치했으며, root권한으로 그 PC에 login할 수 있다고 가정한다.
cvsup / lynx 설치
우선, cvsup을 설치한다.
cd /usr/ports/net/cvsup-without-gui make all install clean
CVS(Concurrent Versioning System)up는 주로 FreeBSD 판수를 올리거나, 응용 program을 설치하는 /usr/ports/의 내용을 새로고친다거나 할 때 쓴다. 여기서도 stable source를 내려받고, ports를 고치기 위해서 깔았다.
다음으로, lynx를 설치한다.
cd /usr/ports/www/lynx make all install clean
Lynx는 문자기반의 web browser이다. 특정 web site에 접속이 가능한지 간단히 확인하는 용으로 쓴다. lynx .해서 내 PC에 있는 문자기반의 문서를 보고 돌아다닐 수도 있다.
STABLE source 내려 받기
다음과 같이 해서 source tree를 최신것으로 받을 준비를 한다. *-supfile 문서를 /usr/local/etc/에 꼭 복사할 이유는 없지만, 세상만들기(make world)할 때마다 새 문서로 덮어써지기 때문에 어디가 되었든 다른 곳으로 옮겨놓는 것이 좋다.
cp /usr/share/example/cvsup/stable-supfile /usr/local/etc/stable-supfile cp /usr/share/example/cvsup/ports-supfile /usr/local/etc/ports-supfile vi /usr/local/etc/stable-supfile /usr/local/etc/ports-supfile ## 다음은 vi 내에서 하는 명령들이다. :%s/CHANGE_THIS/cvsup11/g [enter] :w! [enter] :n [enter] :%s/CHANGE_THIS/cvsup12/g [enter] :wq!
다음과 같이해서 실제로 새 source를 내려받는다. Ports tree를 새로 내려받는 것은 make world, kernel 꾸미기에 꼭 필요한 것은 아니지만, 해두면 좋다.
cvsup -g -L 2 /usr/local/etc/stable-supfile cvsup -g -L 2 /usr/local/etc/ports-supfile
내 입맛에 맞는 kernel 꾸미기
다음으로, kernel을 내 입맛에 맞게 꾸민다. 여기에서는 방화벽 server와 그밖의 server경우로 나누어서 설정하는 경우를 보여주겠다.
방화벽 server kernel 꾸미기
이 글은 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html 다음과 같이 해서 kernel 설정 문서 내용을 고친다. SUN-JIKJI-FW대신 원하는 이름을 넣어주면 된다.
cd /usr/src/sys/i306/conf cp GENERIC SUN-JIKJI-FW vi SUN-JIKJI-FW
다음은 diff GENERIC SUN-JIKJI-FW 의 결과이다. "<"가 GENRIC, ">"가 SUN-JIKJI-FW의 내용이다. "#"은 주석처리한 내용인데, 얼마나 이런 저런 방화벽 program을 실험해보았는지를 보여주기 위해서 그냥 있는 것이다. 여기서 제일 중요한 것은 PF(PacketFilter)에 대한 내용이다. 이 내용을 통해 직지 방화벽 server는 PF를 선택했음을 알 수 있다. 이에 대한 자세한 내용은 나중에 방화벽(Firewall) Server 설치에서 쓰겠다.
22,23d21 < cpu I486_CPU < cpu I586_CPU 25c23 < ident GENERIC --- > ident SUN-JIKJI-FW 30c28,45 < makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols --- > #makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols > > #options IPFIREWALL > #options IPFIREWALL_VERBOSE > #options IPFIREWALL_VERBOSE_LIMIT=10 > #options IPDIVERT > > #options IPFILTER > #options IPFILTER_LOG > #options IPFILTER_DEFAULT=OPEN > > options ALTQ > options ALTQ_CBQ > options ALTQ_RED > options ALTQ_RIO > options ALTQ_HFSC > options ALTQ_PRIQ > options ALTQ_NOPCC 36c51 < options INET6 # IPv6 communications protocols --- > #options INET6 # IPv6 communications protocols 61a77,83 > > # PF devices, added by minsukim, 2006 9/16 > device pf > device pflog > device pfsync > # end of PF devices > 144a167,169 > > options VESA > options SC_PIXEL_MODE
이제 /etc/make.conf에 다음과 같은 내용을 넣어서 매번 kernel을 만들 때마다 SUN-JIKJI-FW가 쓰이도록 한다.
KERNCONF=SUN-JIKJI-FW
그런 다음에 다음과 같이 하면 된다.
cd /usr/src make buildworld make buildkernel make installkernel fastboot mergemaster -p cd /usr/src make installworld mergemaster reboot
위의 명령은 kernel뿐 아니라, FreeBSD 판수도 바꾸어준다. kernel만 바꾸어주는 경우라면, *world와, mergermaster는 필요없다.
Reboot(재시동)을 한 다음에 uname -a로 FreeBSD 판수와 kernel 정보를 확인해본다. 직지 방화벽 server는 다음과 같다. 17번이나 kernel을 만들었다는 것을 알 수 있다.
FreeBSD SUN-JIKJI-FW 6.1-STABLE FreeBSD 6.1-STABLE #17: Sun Sep 17 22:51:52 EDT 2006 root@SUN-JIKJI-FW:/usr/obj/usr/src/sys/SUN-JIKJI-FW i386
으뜸, 버금 server kernel 꾸미기
방화벽을 꾸민것과 비슷하게 꾸민다. 하지만, 여기서는 PF관련한 것은 더할 필요가 없다.
다음은 으뜸, 버금 server의 kernel 설정 문서에서 바뀐 내용만 뽑은 것이다. 으뜸은 dual CPU, 버금은 HT CPU라서 SMP를 사용했고, IPv6 기능은 껏다.
- 으뜸 server
다음과 같이 해서 kernel 설정 문서 내용을 고친다. MECURY-NA-KIMS대신 원하는 이름을 넣어주면 된다.
cd /usr/src/sys/i306/conf cp GENERIC MECURY-NA-KIMS vi MECURY-NA-KIMS
다음은 고친 부분이다.
machine i386 cpu I686_CPU ident MECURY options SMP # Symmetric MultiProcessor Kernel #makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols #options INET6 # IPv6 communications protocols
그리고 나서, /etc/make.conf에 'KERNCONF=MECURY-NA-KIMS' (문서 이름)를 넣어주었다.
- 버금 server
다음과 같이 해서 kernel 설정 문서 내용을 고친다. JUPITER-NA-KIMS대신 원하는 이름을 넣어주면 된다.
cd /usr/src/sys/i306/conf cp GENERIC JUPITER-NA-KIMS vi JUPITER-NA-KIMS
다음은 고친 부분이다.
machine i386 cpu I686_CPU ident JUPITER options SMP # Symmetric MultiProcessor Kernel #makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols #options INET6 # IPv6 communications protocols
그리고 나서, /etc/make.conf에 'KERNCONF=JUPITER-NA-KIMS' (문서 이름)를 넣어주었다.
어떤 경우이든지, cd /usr/src && make buildkernel && make installkernel 해서 입맛에 맞는 kernel을 만든다. 오류없이 잘 만들어졌으면 reboot을 해서 원하는 대로 잘 되었는지를 확인하다.
Network 설계
이 글은 Designing and Using DMZ Networks to Protect Internet Servers, Dupm Your DMZ!, http://www.openbsd.org/faq/pf/queueing.html#example2, http://www.jpsdomain.org/infosec/home_networks.html에서 영감을 얻어서 쓴 것이다.
내가 구성한 network 얼개는 다음과 같다.
으뜸 Server(FreeBSD) ---------\ (아직 없음)
| | |
[ 3Com Hub - DMZ Network: 172.16.11.0/24]
|
(dc0)
DSL Modem |
(Internet) ------------- (xl0) [ Firewall Server(FreeBSD) ]
| |
(xl1) (rl0)
| |
[Compaq Hub - LAN1 Network: 192.168.4.0/24] |
| | | | | | | |
| | | | | | | [LinkSys Router - LAN2 / WIFI: 192.168.5.0/24]
| | | | | | | | | | *** Wireless-G
버금 Server(FreeBSD)/ | | | | | | (아직없음) *** client with wireless NIC.
| | | | | |
(아직없음) \ \----------------- Windows XP Client (집사람 PC)
\------------------- Windows98 SE Client (내 PC)- DMZ Network에는 주로 internet에 service를 제공하는 server들이 들어간다.
- LAN1 Network에는 DMZ에 있는 server를 back-up 하는 server와, window 기반 clients들이 들어간다.
- LAN2 / WIFI에는 주로 줄없는 (Wireless) client들이 들어간다.
참고로, Microsoft사는 http://v4.windowsupdate.microsoft.com/ko/default.asp에서 다음과 같이 windows 98, 98SE에 대한 지원 종료를 발표했다.
10년 넘게 지원해 온 것 같은데, 그래도 참 잘 해왔다. 이 시점에서, 나도 Windows XP를 사서 깔 수도 있겠지만, 늘 새 판수의 Windows를 깔면 더 좋은 hardware를 사야만 하는 것으로 귀결이 나기 때문에, 그 끝없는 소비, 확대재소비의 굴레에서 벗어나고자 Windows는 이제 그만 쓰려고 마음 먹었다. 선택하지 않을 자유, 그도 또한 엄청나게 중요한 자유이다.
그러다보니, 아직도 Windows98 SE에서 돌아가는 IE6.0으로 주로 on-line 은행 계좌 관리를 하는데, 행여 있을지도 모르는 허술한 보안에서 내가 쓰는 Windows98 SE PC를 보호해야할 필요성이 생겼다. 이러한 network 설계는 그러한 필요성을 반영한다. 물론 제일 중요하게는, 그동안 늘 생각해왔던 network 구성이기도 하다.
버금 Server는 으뜸 Server를 mirroring하는 것 외에, Unicode를 쓸 수 있는 환경을 갖춘 내 Desktop, 그리고 Samba server로 꾸며서, LAN1에 물려있는 clients들이 마치 자기 hard disk를 쓰듯이 자료를 network상의 공간에 올려놓고 쓸 수 있도록 한다. 모든 것이 다 직지 porject를 하는데 시간을 더 많이, 효율적으로 쓰기 위한 환경을 꾸미기 위해서다.
방화벽(Firewall) Server 설치
방화벽 server에 성공적으로 FreeBSD 배포판(내 경우 FreeBSD 6.1-RELEASE)을 설치하고 나면, 어떤 도구로 방화벽을 만들것인가와 어떤 service들을 설치해서 제공할것인가를 결정해야한다. 대부분의 경우, 두 가지 선택이 서로 밀접하게 연결되어 있다.
나는 기본적으로, PF(Packet Filter), DHCP(Dynamic Host Configuration Protocol), NAT(Network Address Translation), BIND(Berkely Internet Dname Domain = DNS[Doman Name System]) 세 가지 정도를 필수 service로 생각을 했다. 전자우편 기능을 넣을까도 해봤는데, 요즘에는 하도 전자우편으로 보내는 광고가 많아서, 그로인해 방화벽에 부담이 갈까봐 넣지 않기로 했다.
애초에 직지 server가 죽어서 이 모든 일이 시작된 것인데, 이런 network 구성으로 방화벽 server를 설치하고 나서 제일 먼저 설치한 것이 BIND와 Apache13이었다. 방화벽에서 모든 것이 되는것을 확인한 후 Apache13은 중지시키고 DMZ 안으로 옮겼다. 하지만, BIND 관련해서는, 일단 DMZ 안으로 옮기기도 불편하고, 정확히 어떻게 해야 하는지 잘 감도 잡히지 않고 해서 그냥 방화벽 server에서 제공하는 기능으로 나뒀다. 뭐 모로 가도 서울만 가면 된다지 않는가.
다음에 방화벽 server를 어떻게 설치했는지에 대해서 쓰겠다. 기본적으로, 앞절에 있는 kernel을 설정했다고 가정한다.
BIND (Berkely Internet Name Domain) 설정
BIND(Berkely Internet Name Domain)는 사실 방화벽 설정과 무관하게 설정할 수 있다. 나는, 직지 server가 죽어있다는 절박한 상황으로, 급히 살렸을 뿐, 그 돌아가는 속내를 속속들이 알지 못한다. 그냥 쓰면 되지, 뭐...돌아가는데 문제는 없지만, 혹시라도 틀린곳이 있거나, 보안상 문제가 있는 설정이라면 알려주기 바란다. 여럿이서 고치면서 발전할 수 있다는 가능성이야말로 열려있음의 큰 장점이라고 생각한다.
이 글은 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-dns.html, http://www.kr.freebsd.org/doc/PoweredByDNS/, http://www.faqs.org/docs/Linux-HOWTO/DNS-HOWTO.html 1, 예전에 찍어둔 http://kisc.net/~jhkim/dns.htm의 내용, 이전에 독립 Server를 돌리던 N사에서 설정해준 문서, http://www.tuxweb.net/howto/dns/bsd/bind-89-bsd4x.html, http://www.cymru.com/Documents/secure-bind-template.html, http://www.zytrax.com/books/dns/ch6, http://www.zytrax.com/books/dns/ch4, 들의 내용을 참조하면서 쓴 것이다. BIND같은 program은 그저 돌아가면 감사히 쓴다. 아니면 몇 날 몇 밤을 삽질하는 거고. 그래도 그전에 있던 설정 문서들이 있어서 실제 돌아가는 바닦을 이해하지 못해도 설정하는데 별 문제가 없었다.
다음은 내가 설정한 내용들이다.
cd /etc/namedb sh make-localhost Enter your domain name: NA-KIMS cp named.conf named.conf.dist vi named.conf
/etc/namedb/named.conf
/etc/named.conf의 내용이다. 여기에서, 내가 쓰고 있는 고정 IP 제공 회사의 DNS IP는 151.199.0.39; 151.199.0.38이고, 직지 server가 할당받아 쓰고 있는 IP는 70.105.63.XXX이다.
// $FreeBSD: src/etc/namedb/named.conf,v 1.21.2.1 2005/09/10 08:27:27 dougb Exp $ // // Refer to the named.conf(5) and named(8) man pages, and the documentation // in /usr/share/doc/bind9 for more details. // // If you are going to set up an authoritative server, make sure you // understand the hairy details of how DNS works. Even with // simple mistakes, you can break connectivity for affected parties, // or cause huge amounts of useless Internet traffic. options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 151.199.0.39; 151.199.0.38; }; */ /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND versions 8 and later * use a pseudo-random unprivileged UDP port by default. */ query-source address * port 53; }; // If you enable a local name server, don't forget to enter 127.0.0.1 // first in your /etc/resolv.conf so this server will be queried. // Also, make sure to enable it in /etc/rc.conf. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "master/localhost.rev"; }; zone "63.105.70.IN-ADDR.ARPA" { type master; file "master/63.105.70.IN-ADDR.ARPA.rev"; }; zone "jikji.org" { type master; file "master/jikji.org"; }; zone "jikji.net" { type master; file "master/jikji.net"; };
/etc/namedb/master/localhost.rev
다음은 /etc/namedb/master/localhost.rev의 내용이다.
; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90 ; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $ ; ; This file is automatically edited by the `make-localhost' script in ; the /etc/namedb directory. ; $TTL 3600 @ IN SOA SUN-JIKJI-FW.NA-KIMS. root.SUN-JIKJI-FW.NA-KIMS. ( 20060915 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS SUN-JIKJI-FW.NA-KIMS. 1 IN PTR localhost.NA-KIMS.
/etc/namedb/master/63.105.70.IN-ADDR.ARPA.rev
다음은 /etc/namedb/master/63.105.70.IN-ADDR.ARPA.rev의 내용이다.
; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90 ; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $ ; ; This file is automatically edited by the `make-localhost' script in ; the /etc/namedb directory. ; $TTL 3600 @ IN SOA ns.jikji.org. root.jikji.org. ( 20060909 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS ns.jikji.org. IN NS ns.jikji.net. XXX IN PTR ns.jikji.org. XXX IN PTR ns.jikji.net. XXX IN PTR jikji.org. XXX IN PTR jikji.net.
/etc/namedb/master/jikji.org
다음은 /etc/namedb/master/jikji.org의 내용이다.
; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90 ; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $ ; ; This file is automatically edited by the `make-localhost' script in ; the /etc/namedb directory. ; $ORIGIN jikji.org. $TTL 3600 jikji.org. IN SOA SUN-JIKJI-FW.NA-KIMS. root.jikji.org. ( 20060909 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum @ IN NS ns.jikji.org. IN A 70.105.63.XXX ns.jikji.org. IN A 70.105.63.XXX pop3.jikji.org. IN A 70.105.63.XXX smtp.jikji.org. IN A 70.105.63.XXX old.jikji.org. IN A 70.105.63.XXX wiki.jikji.org. IN A 70.105.63.XXX *****.jikji.org. IN A 70.105.63.XXX *****.jikji.org. IN A 70.105.63.XXX jikji.org. IN MX 10 pop3.jikji.org. www.jikji.org. IN A 70.105.63.XXX
/etc/namedb/master/jikji.net
다음은 /etc/namedb/master/jikji.net의 내용이다.
; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90 ; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $ ; ; This file is automatically edited by the `make-localhost' script in ; the /etc/namedb directory. ; $ORIGIN jikji.net. $TTL 3600 jikji.net. IN SOA SUN-JIKJI-FW.NA-KIMS. root.jikji.net. ( 20060909 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum @ IN NS ns.jikji.net. IN MX 20 nmtp.jikji.net. IN A 70.105.63.XXX ns.jikji.net. IN A 70.105.63.XXX nmtp.jikji.net. IN A 70.105.63.XXX ;old.jikji.net. IN A 70.105.63.XXX wiki.jikji.net. IN A 70.105.63.XXX *****.jikji.net. IN A 70.105.63.XXX *****.jikji.net. IN A 70.105.63.XXX jikji.net. IN A 70.105.63.XXX www.jikji.net. IN A 70.105.63.XXX
DHCP(Dynamic Host Configuration Protocol) 설정
이 글은 Setting up a quick-and-dirty DHCP server under FreeBSD, HOWTO - Setting Up ISC-DHCP 3.x Under FreeBSD, http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-dhcp.html, 특히 http://understudy.net/dhcp.html들의 내용을 참조했다.
DHCP는 하위 network clinent에게 알아서 IP를 할당해주는 기능을 한다. 다음 설정은 유선 Network LAN1에 192.168.4.0/24 IP주소를 주고, 유무선 Network LAN2에 192.168.5.0/24 IP주소를 준 것이다. 기본적으로, DHCP는 dynamic IP를 할당하는데, 이 설정에서는 버금 server를 위해서 192.168.4.12를 따로 고정 IP처럼 할당했다. 이는 버금 server를 늘 같은 IP 주소로 접근하기 위해서이다.
# dhcpd.conf # # Sample configuration file for ISC dhcpd # # option definitions common to all supported networks... option domain-name "NA-KIMS"; option domain-name-servers 151.199.0.39, 151.199.0.38; # give 24 hours, maximum 1 week default-lease-time 86400; max-lease-time 604800; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. authoritative; # ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates. # ddns-update-style ad-hoc; ddns-update-style none; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility syslog; # This is a very basic subnet declaration. subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.13 192.168.4.254; option routers 192.168.4.1; option broadcast-address 192.168.4.255; } subnet 192.168.5.0 netmask 255.255.255.0 { range 192.168.5.13 192.168.5.254; option routers 192.168.5.1; option broadcast-address 192.168.5.255; } host JUPITER.NA-KIMS { hardware ethernet 00:30:48:xx:yy:zz; fixed-address 192.168.4.12; }
이런 후에, /etc/rc.conf에 DHCP관련 설정을 하면, booting시마다 자동으로 DHCPd(여기서 d는 daemon)가 시작된다. 방화벽 server의 /etc/rc.conf 내용은 나중에 한꺼번에 보여주겠다.
방화벽 program 선택
이거 관련해서 참 많은 것을 찾아본 것 같다. 내가 알아본 것들은 PF(Packet Filter), IPFW(IPFireWall), IPFilter 들이다. 어떠한 것을 선택하느냐에 따라 아래에서 얘기할 NAT 설정도 많이 달라지기 때문에, 어떤 방화벽 program을 선택했는지 나름대로 정리해보겠다.
먼저, 각각에 대한 정보를 얻을 수 있는 곳은 다음과 같다.
- 방화벽 일반
- IPFW
- IPFilter
PF (PacketFilter)
NAT (Network Address Translation)
이 글은 http://www.jpsdomain.org/networking/nat.html, http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-natd.html에 영감을 받아 썼으며, 사실 내가 왜 NATd를 원하는지는 너무나도 분명했기 때문에, 뭐 망설일 필요도 없이 NATd를 쓰기로 했다.
개인집에서 쓰는 하나의 internet 연결회선을 집안에 있는 여러 PC들이 나눠서 쓸 수 있도록 하려면 NATd(여기서 d는 daemon)는 거의 필수적이라고 할 수 있다. 요즘 많은 장비들이 이런 기능을 지원하고 제공하지만, FreeBSD를 쓰면 여려가지 면에서 편하고 자유롭다.
자주 쓰는 program 설치
xinetd
xinetd는 기본으로 설치된 inetd를 대치하며, 유연한 보안 설정을 제공한다.
xinetd Home쪽: http://www.xinetd.org/
FreeBSD에서는 다음과 같이 해서 설정한다.
cd /usr/ports/security/xinetd make all install clean
그리고, /etc/rc.conf 에 다음 내용을 더한다.
### xinetd / inetd inetd_enable="NO" xinetd_enable="YES"
다음은 /usr/local/etc/xinetd.conf의 내용이다.
나중에
ssh2
직지 server는 ssh2를 쓴다.
ssh(2) Home쪽: http://www.ssh.com/
FreeBSD에서는 다음과 같이 해서 설정한다.
cd /usr/ports/security/ssh2 make all install clean
그리고, /etc/rc.conf 에 다음 내용을 더한다.
### sshd2 sshd2_enable=YES
다음은 /usr/local/etc/ssh/sshd2_config의 내용이다.
나중에
ProFTPd
ProFTPd Home쪽: http://www.proftpd.org/
FreeBSD에서는 다음과 같이 해서 설정한다.
cd /usr/ports/ftp/proftpd make all install clean
그리고, /etc/rc.conf 에 다음 내용을 더한다.
### ProFTPd proftpd_enable=YES
다음은 /usr/local/etc/proftpd.conf의 내용이다.
나중에
NFS (Network File System) 설치
참조한 자료.
으뜸 / 버금 server설정은 다음 장에서 다루지만, 여기서는 일단 일을 좀 편하게 하기 위해서 NFS를 먼저 설정한다. 실제로는 한참을 불편하게 작업하다가 필요에 의해서 이 기능을 먼저 설치하게 된 것이다.
으뜸(Mercury)과 버금(Jupiter) server를 깔아놓으니 두 server간에 왔다갔다 하면서 설정할 일이 많다. 초기단계에서는 FTP를 써서 버금에서 으뜸, 또는 으뜸에서 버금 server로 문서를 옮겨서 설정하거나, Gnome에서 SSH2를 통해서 다른 server로 접속해서 두 terminal 화면을 열어놓고 "잘라서 복사하기" 방법으로 설정을 할 수 있다. 그도 아니라면, 예전에 적어놨던 설정을 어찌어찌 찾아서 직접 두 server에 입력하는 방법도 있다. 따지고 보면 이 모두가 "머리가 나쁘면 손발이 피곤하다", 는 우스갯소리를 진정으로 실천하고 있는 꼴이다. 그동안 늘 이런식으로 해왔는데, :-Q 용기를 내어 NFS (Network File System)을 설치해보기로 했다. 생각보다 쉬었고, 방화벽으로 닫혀있는 비교적 안정적인 환경이라서 더 쉽게 마음을 먹을 수 있었다.
다음 설정은 버금 server인 Jupiter가 NFS Server를 돌리면서, NFS 손님들(Clients)인 Mercury, Sun에게 /home/, /home2/, /samba2/, /usr와 그들의 하위 가지들까지 접근할 수 있도록 한 것이다. 하지만, 실제 쓰고 있는 설정은 모든 서버가 NFS server이면서 동시에 client이다. 이 내용을 이해하고 나면, 그 다음 단계는 쉽게 할 수 있다. 모든 server의 IP 주소와 애칭은 /etc/hosts에 이미 들어있다.
일단 Jupiter NFS server의 /etc/rc.conf에 다음 내용을 더한다.
- {{{# NFS Server Setting, minsukim Tue Oct 24 22:43:33 2006
rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r"}}}
그런다음 Jupiter NFS server의 /etc/exports를 만들어서 다음과 같은 내용을 더한다. 여기서 -maproot=root는 NFS 손님들에서 root 권한을 가진 사용자가 Jupiter server내 문서 내용을 고칠 수 있도록 한 것이다. 보통은 이렇게 설정하지 않겠지만, 혼자쓰는 것이므로, 그저 편한것을 추구하는 것 뿐이다.
- {{{#The following examples export /usr to 3 machines named after ducks,
#/usr/src and /usr/ports read-only to machines named after trouble makers #/home and all directories under it to machines named after dead rock stars #and, /a to a network of privileged machines allowed to write on it as root. #/usr huey louie dewie #/usr/src /usr/obj -ro calvin hobbes #/home -alldirs janice jimmy frank #/a -maproot=0 -network 10.0.1.0 -mask 255.255.248.0 # # You should replace these lines with your actual exported filesystems. # Note that BSD's export syntax is 'host-centric' vs. Sun's 'FS-centric' one. /home -alldirs -maproot=root mercury sun /home2 -alldirs -maproot=root mercury sun /samba2 -alldirs -maproot=root mercury sun /usr -alldirs -maproot=root mercury sun}}}
이렇게 NFS server쪽 설정이 끝났으면, NFS 손님에 다음과 같이 설정한다.
일단 Mercury NFS 손님의 /etc/rc.conf에 다음 내용을 더한다.
- {{{# NFS Clinet, minsukim, Tue Oct 24 22:43:33 2006
nfs_client_enable="YES"}}}
다음으로, Mercury NFS 손님의 /mnt 밑에 다음과 같은 folder를 만든다. (꼭 /mnt 일 필요는 없으며, 아무데나 된다).
- {{{mkdir /mnt/home
mkdir /mnt/home2 mkdir /mnt/samba2 mkdir /mnt/usr}}}
그런 이후에, Mercury NFS 손님의 /etc/fstab에 다음을 더하면, 새로 booting할 때마다 알아서 쓸수 있도록 올려준다.
- {{{jupiter:/usr /mnt/usr nfs rw 0 0
jupiter:/home /mnt/home nfs rw 0 0 jupiter:/home2 /mnt/home2 nfs rw 0 0 jupiter:/samba2 /mnt/samba2 nfs rw 0 0}}}
이제 Jupiter NFS server를 먼저 booting하고, Mercury NFS 손님을 다음으로 booting 해주면, FTP나 SSH2를 통하지 않고도 Jupiter (NFS server)내용을 /mnt/ 아래에서 마치 Mercury(NFS 손님)내의 문서처럼 쓸 수 있다.
인쇄기 설치하기
으뜸 Server Mercury(DMZ Server) / 버금 Server Jupiter(Lan Server) 설치
직지는 으뜸 server와 버금 server로 돌아가는데, 각각의 기능은 다음과 같다.
- 으뜸 Server (DMZ Server)
- Internet에 연결되어 있으면서, 직지 project를 유지하기 위한 다음과 같은 기능을 제공한다.
- Apache2 http server
- postfix 전자우편
- teapop
ProFTPd
- PHP
MySQL
MoinMoin wiki
- phpbb2
- drupal
- zope / plone
- Mailman
- Internet에 연결되어 있으면서, 직지 project를 유지하기 위한 다음과 같은 기능을 제공한다.
Drupal, an open source content management platform
누리터: http://drupal.org {{{cd /usr/ports/www/drupal
make all install clean}}} 설치한 후에 설명이 나오는데, 다음은 MySQL을 깔아쓰는 나에게 필요한 내용을 갈무리한것이다.
- {{{You now need to create the DB where Drupal is going to live
- MySQL
- mysqladmin -u dba_user -p create drupal mysql -u dba_user -p GRANT ALL PRIVILEGES ON drupal.* TO drupal@localhost IDENTIFIED BY 'passwd';
mysql -u drupal -p drupal < /usr/local/www/drupal/database/database.mysql"
- mysqladmin -u dba_user -p create drupal mysql -u dba_user -p GRANT ALL PRIVILEGES ON drupal.* TO drupal@localhost IDENTIFIED BY 'passwd';
Then edit the /usr/local/www/drupal/sites/default/settings.php to your needs. Once you have done that you must add appropriate configuration directives to your apache configuration file (/usr/local/etc/apache(2)/httpd.conf). A typical configuration would be:
- Alias /drupal "/usr/local/www/drupal"
<Directory "/usr/local/www/drupal">
Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all
</Directory>}}}
Zope, an open source application server for building content management systems, intranets, portals, and custom applications
쓰다보면 입맛에 맞는 program이 있고, 안맞는 것도 있고 하다. 이도 어쩌보면 인연! 사실은 좋은 blog program을 찾다가 plone이 딱 입맛이 당기는데, 이놈이 zope위에서 돌아가기에 zope / plone을 한짝으로 같이 설치하기에 이르렀다.
다음과 같이 설치한다. 가장 기본적인 설치이며, 원한다면 /usr/ports/www/zope-* 중에서 골라서 설치할 수 있다.
- {{{cd /usr/ports/www/zope
make all install clean
cd /usr/ports/www/plone make all install clean}}}
정작 중요한 것은 설치이후의 설정들이다. 다음의 예는, http://www.jikji.org:8080/Plone 을 http://plone.jikji.org/로 되먹임하는 이야기이다.
이 설정을 위해 참고한 쪽은 다음과 같다.
- 설치한 후 관리자 화면에서 보여지는 Virtual Host Monster at /virtual_hosting
위 내용을 참조하여 다음과 같은 설정문서를 만들었다.
- {{{act /usr/local/etc/apache2/Includes/zope.conf
# Virtual hosts for Zope sites <VirtualHost *:80>
ServerAdmin webmaster@jikji.org ServerName plone.jikji.org ProxyPass / http://127.0.0.1:8080/VirtualHostBase/http/plone.jikji.org:80/Plone/VirtualHostRoot/ ProxyPassReverse / http://127.0.0.1:8080/VirtualHostBase/http/plone.jikji.org:80/Plone/VirtualHostRoot/
</VirtualHost>}}}
Mailman, the GNU Mailing List Manager
다음은 전자우편을 Postfix로 돌리는 경우에 설정하는 방법이다.
http://www.gnu.org/software/mailman/index.html {{{cd /usr/ports/mail/mailman
make patch make confgiure --with-mail-gid=nobody make install clean}}} 그런 후에 다음 문서들을 참조해서 /usr/local/mailman/Mailman/Defaults.py, /usr/local/mailman/Mailman/mm_cfg.py를 고쳐주었다.
- 버금 Server (LAN Server)
- Intranet에 연결되어 있으면서, 으뜸 server를 그림자처럼 따라다니면서 그 내용을 배끼는 기능을 한다. 그리고, LAN에서 필요한 기능을 제공한다. 따라서, 으뜸 Server에 설치한 모든 program 위에 다음과 같은 기능을 추가로 제공한다.
- Samba
- NFS
- CUPS
- Intranet에 연결되어 있으면서, 으뜸 server를 그림자처럼 따라다니면서 그 내용을 배끼는 기능을 한다. 그리고, LAN에서 필요한 기능을 제공한다. 따라서, 으뜸 Server에 설치한 모든 program 위에 다음과 같은 기능을 추가로 제공한다.
이 문서는 늘 살아있는 형태로 http://wiki.jikji.org/moin.cgi/FreeBSD에서 볼 수 있다.
내가 참고한 것은 사실 여기의 v9.0이 아니라, 1999년에 인쇄한 v2.2이다. 그때에는 http://www.linuxdoc.org/ 였는데, 이제는 연결이 안된다. 그래도, 뭐 별반 바뀐게 있나 싶다. (1)


