[서비스] IRC 서버 구축 방법
IRC 서버 구축
아래에 쓰는 모든 내용은 어디든지 공개하셔도 좋고, 수정하셔도 좋습니다.
다른 곳에 올리시는 분은 저에게 메일을 주시면 고맙겠습니다.
1. IRC 란… – 기본적인 IRC 지식. 명령어는 소개 안합니다.
2. IRC 서버 설치 – 컴파일 및 인스톨
3. IRC 서버 환경 설정 – ircd.conf, ircd.motd 만들기, ircd daemon 실행
4. IRC 클라이언트 설치 – 서버에 접속하기 위한 클라이언트 설치
5. 마치며…
==========================
1. IRC 란…
==========================
우선 기본적인 IRC 에 대해서 얘기를 하겠습니다.
IRC(Internet Relay Chaty) 가 무엇인지는 아시죠. 인터넷 채팅입니다. 88년도
핀란드의 자코 오이카리넨이란 학생이 만들어서 지금은 인터넷에서 인기있는
서비스가 되었습니다.
IRC 는 서버들간의 연계가 가능합니다. 보통 통신망(여기서는 BBS)에서는 각
통신망에 있는 사람들끼리만 채팅이 가능한데 IRC 는 그렇지 않습니다. IRC 서버
끼리 연계가 되어있다면 서로 다른 서버에 접속해 있는 유저들도 같이 채팅이
가능한 겁니다. 참고로 아래는 IRC 서버들의 연계도(?) 입니다.
┌── mail.kornet.nm.kr
├── procsys.kwangwoon.ac.kr
├── geo.skku.ac.kr
├── bubble.yonsei.ac.kr
irc.kornet.nm.kr ──┼── dragon.yonsei.ac.kr
│ ├── cosmoas.kaist.ac.kr
│ ├── bora.dacom.co.kr
│ ├── orange.interpia.net
│ ├── goldey.gbc.edu
│ ├── hong.tower.wayne.edu
│ └── irc.netizen.net
│
hanabbs.com ────┬── cafe.iworld.net
└── korea.usc.edu
위에서 보면 irc.kornet.nm.kr 에 접속한 유저나 cafe.iworld.net 으로 접속한
유저나 똑같은 방을 볼 수 있고, 동시에 채팅도 같이 할 수가 있습니다.
==========================
2. IRC 서버 설치
==========================
이제 IRC 서버 구축얘기를 하겠습니다.
2-1. IRC 서버 프로그램 구하기
ftp://ftp.kornet.nm.kr/pub/Hangul/network/HanIRC/server 에서 아래의 세개
파일을 받습니다.
1. README.irc2.8.20.HAN 636 바이트
2. example.conf.han 6362 바이트
3. irc2.8.21.HAN2.tgz 316677 바이트
첫 번째 파일은 안 받으셔도 좋습니다. 두 번째 파일(example.conf.han) 은
ircd 의 환경파일인 ircd.conf 파일의 예입니다. 안에 ircd.conf 설정에 대해
한글로 설명이 되어 있습니다. 마지막 파일이 서버 프로그램입니다.
2-2. 컴파일
아무디렉토리에나 irc2.8.21.HAN2.tgz 파일을 풀고 만들어진 디렉토리로
갑니다.
————————————————————————
—
freenet:~/new# tar xvfz irc2.8.21.HAN2.tgz
freenet:~/new# cd irc2.8.21.HAN2
freenet:~/new/irc2.8.21.HAN2#
————————————————————————
—
그리고 README.HAN 과 doc/INSTALL 파일(영어임)을 읽어 보시면 설치에 도
움
이 될겁니다. 꼭 읽어보세요.
1) include/config.h 부터 수정을 수정을 합니다.
디버그 모드를 쓰기를 원하신다면,
#undef DEBUGMODE 을
#define DEBUGMODE 으로 지정을 하세요.
아래는 ircd 관련 파일들의 경로 지정 부분입니다. 꼭 아래와 같이 안으셔도
됩니다. ( 아래는 저의 경우입니다.)
#define DPATH “/usr/local/lib/ircd”
#define SPATH “/usr/local/bin/ircd”
#define CPATH “/usr/local/lib/ircd.conf”
#define MPATH “/usr/local/lib/ircd.motd”
#define LPATH “/tmp/ircd.log” /* debug모드때 저장 파일 */
#define PPATH “/var/run/ircd.pid”
DPATH = 서버를 위해 사용할 디렉토리입니다.
SPATH = ircd daemon 이 있는 디렉토리를 지정합니다.
엄밀히 말하면 디렉토리와 ircd daemon 파일
CPATH = ircd daemon 의 환경파일입니다.
MPATH = irc client 가 접속한 후에 보여 줄 motd(Message Of The Day) 파일
을 지정합니다. telnet 의 경우를 예로 들면, telnet 으로 접속을 할
경우 login 후에 보여주는 메시지와 같은 역할을 하는 파일이라고
생각 하시면 됩니다.
LPATH = 디버그모드일 때 사용할 log 파일을 지정합니다. 디버그모드를 지정
하지 않았으면 /dev/null 을 넣으시기 바랍니다.
PPATH = ircd daemon 이 실행될 때 PID 가 저장될 파일입니다.
config.h 의 아래 부분은 고칠 것이 특별히 없습니다.
2) 이제 ircd/ircd.c 파일을 수정합니다.
이 것은 ircd daemon 을 root 로 실행하기 위한 것입니다. 보안을 위해 root
로 실행하기를 바라지 않을 수도 있습니다. 하지만 저의 경우 /etc/rc.d/rc.local
에서 부팅시에 바로 ircd daemon 이 실행 되도록하기 위해서 수정을 했습니다.
if ((int)getuid() == 0) 을
if ((int)getuid() == 1) 으로 고치면 됩니다.
3) Makefile 파일을 수정합니다.
위의 config.h 파일에서 지정한 곳(SPATH= 에서 지정한 곳)에 ‘ircd’ 파일이
install 되도록 하기위해서 고치는 겁니다.
IRCDDIR=/usr/local/src/ircd 을
IRCDDIR=/usr/local/lib/ircd 으로 고치면 됩니다.
4) make; make install 을 합니다.
make 을 하게되면 자동으로 ./Config 파일이 실행이 되고, 컴파일하기 위한
환경을 설정하게 됩니다.
Which compiler do you use, gcc or cc or…?
[cc] -> gcc
위의 경우만 gcc 로 하고, 나머지는 엔터만 쳐도 컴파일이 잘 됩니다. 그리고
컴파일할 때 발생하는 몇몇 경고는 무시하기 바랍니다. (경고도 없앨 수 있는
실력자(?)이면 더욱 좋겠지만…)
다 컴파일이 끝나면 make install 을 합니다.
5) 이제 맨페이지를 인스톨 합니다.
이게 참 귀찮더군요. 4 번에서 make install 하면 알아서 맨페이지도 설치
까지 해 주면 좋은데, 그렇지 못합니다. 그래서 우선 doc 디렉토리에 가서
make install 을 하시기 바랍니다. irc.1, ircd.8 맨페이지가 설치됩니다.
컴파일하는데 도움을 주신 김광욱(arsenel@arsenel.paichai.ac.kr, 나우 ID도
arsenel)님께 감사드립니다.
ircd.conf 및 ircd.motd 만드는 것과 클라이언트 설치하는 것은 다음강좌에…
==========================
3. IRC 서버 환경 설정
==========================
3-1. ircd.conf 만들기
include/config.h 에서 CPATH 로 지정한 곳에 down 받은 example.conf.han
을
ircd.conf 이름으로 복사를 합니다. 이 ircd.conf 파일은 모두 13가지(더 정확히
는 14가지)를 지정을 해주어야 합니다. 하지만 보통 5- 7가지 정도만 지정하면
됩니다. 각 지정 값들은 /etc/passwd 파일과 같이 ‘:’ 문자로 구분을 합니다.
example.conf.han 에는 설정할 내용을 한글로 설명이 되어 있습니다. 아래는
이 파일을 토대로 설명하겠습니다.
1) M: 서버 이름을 정합니다.
필드의 순서는 ‘호스트이름’, 공란, ‘서버 이름’, ‘포트번호’입니다.
포트번호는 일반적으로 6667로 하면 된다.
M:203.232.99.228:*:FreeNetworK:6667
‘*’ 표가 있는 3번째 필드는 사용하지 않는 부분입니다. 그냥 아무것도 쓰지
않아도 됩니다.
2) A: 관리자 정보를 지정합니다.
세개의 필드로 되어 있으며, 어떠한 텍스트가 들어가도 된다.
A:FreeNetworK:전남 나주 – Naju, Chonnam, KR:Jinho Hwangbo
(길어서 두 줄로 나눕니다.)
어떻게 쓰셔도 상관이 없습니다. 위의 내용은 client (linux 용IRC client나
mIRC 등을 말합니다.) 에서 /admin 명령으로 볼 수 있는 내용을 지정하는 것
입니다. 아래는 IRC client 에서 /admin 할 때 나오는 내용입니다.
————————————————————————
—
*** Administrative info about 203.232.99.228
*** FreeNetworK
*** 전남 나주 – Naju, Chonnam, KR
*** Jinho Hwangbo
————————————————————————
—
3) Y: 커넥션 클래스를 지정합니다.
서버의 클래스는 여기서 정해줍니다. 필드의 순서는 클래스 번호, ping
frequency (초단위), connection frequency(초단위), 최대 서버 링크 갯수,
최대 클라이언트 링크 갯수입니다. 저는 특별히 고치지 않았습니다. 링크 갯수
를 조정할 분은 하시기 바랍니다.
# 클라이언트용.
Y:0:900:0:10:10000
# 이 아랫 라인은 허브용.. 링크의 갯수가 50개.
Y:1:1700:90:50:10000
# 이 아랫 라인은 리프용.. 링크의 갯수를 30개로.
Y:2:1000:90:30:10000
4) I: 접속이 가능한 클라이언트를 정의합니다.
도메인 이름이나, IP 주소, 또는 와일드카드를 사용할 수 있고, 두번째 필드
는 암호, 생략가능한 다섯번째 필드는 클래스를 정의합니다.
(첫번째는 보통 숫자, 세번째는 보통 글자 주소를 씁니다.)
I:*::*:0
위의 것은 모든 곳에서 이 IRC 서버에 접속할 수 있도록 한 것입니다. 특별히
제한할 IP, 도메인이 없는 경우 그대로 쓰시면 됩니다. 아래는 168.126.63.*,
*.kornet.nm.kr 에서 들어오는 것을 막는 것입니다.
I:168.126.63.*::*.kornet.nm.kr::1
5) O: 아이알씨 오퍼레이터를 지정합니다.
필드는 순서대로 오퍼레이터의 호스트 이름, 암호, 오퍼레이터의 별명(보통
IRC 에서는 ‘닉’이라고 영어로 짧게 말합니다.)입니다.
O:203.232.108.1:2VAGf9rQ91LcU:truefeel
위의 경우 203.232.108.1 에서 들어오는 truefeel 이 암호화된 위의 암호를
쓰는 사람이 오퍼레이터라는 것을 지정합니다. 위의 것은 /etc/passwd 나
/etc/shadow 와 같이 암호화 된 것입니다. 암호화를 지정할 것인지 안할 것인지
는 include/config.h 에서 CRYPT_OPER_PASSWORD 로 합니다.
#define CRYPT_OPER_PASSWORD (초기값)으로 암호화되어 쓰도록 지정한 것
이며,
암호화를 쓰지 않을 것이면 #undef 으로 지정을 하면 됩니다.
오퍼레이터의 passwd를 암호화하여 ircd.conf 에 저장하는 방법은
irc2.8.21.HAN2.tar.gz 을 풀었을 때 ircd/crypt/crypter 을 이용합니다. 단지
암호가 abcd 일 때 위에서,
O:203.232.108.1:abcd:truefeel
라고 쓰고 crypter 프로그램을 이용하면 자동으로 바꿔줍니다. 하지만 저의 경우
이렇게 안되더군요. ircd/crypt/Makefile 파일을 수정해 봤지만 안되었습니다.
그래서 ircd/crypt/mkpasswd.c 파일을 컴파일해서 만들어진 암호화된
passwd 를
직접 ircd.conf 파일에 써 주었습니다.
————————————————————————
—
freenet:~/new/irc2.8.21.HAN2/ircd/crypt# ls
. Makefile crypter mkpasswd mkpasswd.o
.. README exec mkpasswd.c sums
freenet:~/new/irc2.8.21.HAN2/ircd/crypt# rm -f mkpasswd
freenet:~/new/irc2.8.21.HAN2/ircd/crypt# gcc mkpasswd.c -o mkpasswd
freenet:~/new/irc2.8.21.HAN2/ircd/crypt# ./mkpasswd
plaintext: <- 여기에 오퍼레이터가 사용할 passwd 를 씁니다.
vh3JG0hIzc3Wk <- 암호화된 passwd 출력
————————————————————————
—
6) L: 리프 노드를 지정합니다.
이 것은 IRC 서버들 끼리 연계를 하기 위해서 사용합니다. 저는 comment 처리
를 했습니다. 첫번째 ‘1. IRC 란…’ 에서 연계도에서 오른쪽에 표시한 서버들
이 리프 서버들입니다. 나무에서 나무가지라고 생각하면 됩니다.
자기가 연결할 호스트가 리프 노드임을 명시해 줍니다. 첫번째 필드에 리프에
접속이 가능한 마스크, 두번째는 안쓰임, 세번째 필드는 리프 노드의 서버 이름,
생략가능한 네번째 필드는 그 리프가 가질 수 있는 트리의 깊이 (depth)를 나타
냅니다.
# korea.slip.umd.edu 는 단순 리프로 지정이 됨.
L:::korea.slip.umd.edu
7) H: 허브를 지정합니다.
이 것도 위의 6번과 마찬가지로 서버끼리 연계를 하기 위해서 사용을 합니다.
첫번째 ‘1. IRC 란…’ 에서 연계도에서 왼쪽에 표시한 서버들이 허브 서버들
입니다. 이 것도 저는 comment 처리 했습니다.
자기가 연결할 호스트가 허브일 경우 꼭 기술해 줘야합니다.
(자신이 허브일 경우.)
H:*::korea.stanford.edu
여기서 부터는 일반적으로 거의 쓰지 않거나 수정할 필요가 없는 설정이어서
example.conf.han 내용을 그대로 아래에 옮깁니다.
#
# U: 옛날 irc 의 경우 어느 서버로 접속해라 정보인데 쓸디없음.
# (안해도 됨.)
#
# U:hayes.ims.alaska.edu:password:hayes.ims.alaska.edu:6667
#
# C: [NETWORKED]. 우리 서버 보고 어디로 접속해라고 갈쳐주는 것.
# N: [NETWORKED]. 어느 서버에서 우리 서버로 접속해도 된다고 갈쳐주는 것.
#
# 참고로 요 두개는 쌍으로 보통 쓴다.
#
# 에또, 그럼 두개의 형식은..
#
# C:연결할 서버 주소:암호:연결할 서버 이름:포트:연결클래스
# N:연결될 주소:암호:연결될 서버 이름:호스트마스크:클래스
#
# 호스트 마스크는 자기 호스트 이름을 다르게 보이고 싶을때, 그 갯수를 쓴다.
# 예를 들면 ara.kaist.ac.kr 일때 호스트 마스크가 1이면 *.kaist.ac.kr 이
# 되고, 2이면 *.ac.kr 로 표시가 된다. (내 서버가 그쪽에 그렇게 알려짐.)
#
# 보안을 위해서 암호 두개는 다르게 씁시다. 음냐.
#
# 다음 두 줄은 korea.slip.umd.EDU에 접속을 자동으로 이루자고 하는
# 내용이다. (뭐 별거 없음.)
# 클래스를 2번으로 정했음. (리프노드)
#C:korea.slip.umd.EDU:BigCheese:korea.slip.umd.EDU:6667:2 <- 저는 이부
분을
#N:korea.slip.umd.EDU:CheeseBig:korea.slip.umd.EDU::2 <- comment 함.
# 요 아랫 부분은 별로 중요하지 않으니까 관심있으면 해석해서 써먹으세요.
#
# K: kill a user automatically upon connecting. This is used to deny
# troublesome users access to your server. The fields are, in order,
# hostname (wildcards are allowed), time of day, and username.
#K:*.alaska.edu::FSSPR
#K:acad3.alaska.edu:0900-1200,1400-1700:*
#R:kaja.gi.alaska.edu:/usr/local/lib/irc/does-eric-get-in:ejo
#Q::server is run by weenies:poe.acc.virginia.edu
P:*:::6666
3-2. ircd.motd 만들기
이 것도 ircd.conf 와 마찬가지로 include/config.h 에서 MPATH 로 지정한 곳
에 만들면 됩니다.
저의 ircd.motd 내용입니다.
————————————————————————
—
안녕하세요. 여기는 Linuxer 들을 위한 IRC 서버입니다.
* IP : 203.232.99.228 or 168.126.127.226
사정에 따라 바뀔 수 있습니다.
* Port : 6667
* 기본적인 irc 명령어입니다.
– /help 도움말 보기
– /nick <별명> 닉네임을 변경.
– /list 방이름, 사람수, 제목을 보여줍니다.
– /who -here IRC 서버에 접속한 모든 사용자 목록
/who * 현재 방에 있는 모든 사용자 목록
– /join <#방명> ‘#방명’ 으로 들어갑니다.
– /leave * 현재 방을 나갑니다.
– /quit IRC 종료
* 문의는 bluefine@nownuri.net
truefeel@arsenel.paichai.ac.kr
————————————————————————
—
실제 irc client 로 서버에 접속했을 때 처음에 나오는 화면은 다음과 같습니다.
————————————————————————
—
*** Connecting to port 6667 of server 203.232.108.1
*** Welcome to the Internet Relay Network truefeel (from 203.232.99.228)
*** If you have not already done so, please read the new user information
with /HELP NEWUSER (길어서 두 줄로 씁니다.)
*** Your host is 203.232.99.228, running version 2.8.21.HAN2
*** This server was created Tue Jun 24 1997 at 00: 53:54 KST
*** umodes available oiws, channel modes available biklmnopstv
*** There are 1 users and 0 invisible on 1 servers
*** This server has 1 clients and 0 servers connected
*** – 203.232.99.228 Message of the Day –
*** – 25/6/1997 18:09
*** –
*** – 안녕하세요. 여기는 Linuxer 들을 위한 IRC 서버입니다.
*** –
*** – * IP : 203.232.99.228 or 168.126.127.226
*** – 사정에 따라 바뀔 수 있습니다.
*** – * Port : 6667
*** –
*** – * 기본적인 irc 명령어입니다.
*** – – /help 도움말 보기
*** – – /nick <별명> 닉네임을 변경.
*** – – /list 방이름, 사람수, 제목을 보여줍니다.
*** – – /who -here IRC 서버에 접속한 모든 사용자 목록
*** – /who * 현재 방에 있는 모든 사용자 목록
*** – – /join <#방명> ‘#방명’ 으로 들어갑니다.
*** – – /leave * 현재 방을 나갑니다.
*** – – /quit IRC 종료
*** –
*** – * 문의는 bluefine@nownuri.net
*** – truefeel@arsenel.paichai.ac.kr
[1] truefeel * type /help for help
————————————————————————
—
3-3. ircd daemon 실행
단순히 ircd 라고만 하면 됩니다. 저는 리눅스 부팅시 실행되도록 하기 위해서
/etc/rc.d/rc.local (저는 슬랙유저입니다.) 에 등록을 했습니다.
# IRC Server
# echo “IRC Server starting…”
/usr/local/bin/ircd
제대로 IRC 서버가 동작하는지 보기 위해서는
freenet:~# irc truefeel localhost 을 하면 됩니다. truefeel 은 IRC 에서 사용
할 닉네임입니다. 즉, IRC 에서 사용하는 이름을 나타냅니다. 만약 irc client
가 설치가 되어 있지 않다면 다음 강좌를 읽어보시기 바랍니다.
==========================
4. IRC 클라이언트 설치
==========================
단순히 나열식으로 쓰겠습니다. 어제(?) 제가 han.comp.os.linux 에 답변으로
포스팅한 내용을 약간 수정한 것입니다.
ftp://ftp.kornet.nm.kr/pub/Hangul/network/HanIRC 에서 파일 두개를 받습니
다.
1. ircii-2.8.HAN2-roman.tar.gz <- 클라이언트
2. ircii-2.8help.tar.gz <- 도움말 파일
(클라이언트에서 /help 했을 때 나오는 것들입니다.)
1) 적당한 곳에 압축을 풉니다.
tar xvfz ircii-2.8.HAN2-roman.tar.gz
INSTALL, README.korean 파일을 읽으면 도움이 될 겁니다.
2) include/config.h 을 수정합니다.
#define DEFAULT_SERVER “36.16.0.36” 을
#define DEFAULT_SERVER “168.126.63.15” 으로 고칩니다.
위의 경우 irc client 를 실행하면 디폴트로 irc.kornet.nm.kr
(168.126.63.15)로 접속하도록 설정한 것입니다. IRC 서버를 자체에 만들었
다면 그 IP 나 도메인을 쓰면 좋겟죠. (도메인도 지정 가능)
아래는 이미 되어 있으니 수정할 것이 특별히 없습니다.
#define DEFAULT_EIGHT_BIT_CHARACTERS 1
3) configure
4) make; make install
설치는 /usr/local/bin 과 /usr/local/lib/irc/* 에 됩니다.
5) 도움말은 /usr/local/lib/irc 에서 풀면 됩니다.
tar xvfz ircii-2.8help.tar.gz
도움말 경로는 irc client 내에서 /set HELP_PATH 으로 변경가능합니다.
==========================
5. 마치며…
==========================
끝까지(끝에만 읽으셨을지도 모르지만. 하하) 읽어주셔서 감사합니다. 꼭
성공하기를 바라며, IRC 의 매력를 느끼시길 바랍니다. 이번에 IRC 붐이 일어날
것 같은 느낌도 들군요. 김상기(gelo@nownuri.net) 님이 power.taegu.net 에
IRC
서버를 구축하실꺼라고 하셨는데 이 글이 좋은 길잡이가 되었으면 합니다.
아울러, 리눅스사용자모임의 서버에 IRC 서버가 설치(하드웨어가 여러 서비스
를 하고 약간의 힘이 남아 IRC 서버까지 할 정도가 된다면…) 되기를…
이미 irc.kornet.nm.kr 에 #linux 방이 있는데 그럴 필요가 있을까 하고 생각
되시면 직접 가서 구경해보면 알겁니다. 히히.
저는 임시로 203.232.99.228 에서 서비스를 하고 있습니다. 이 컴은 집에 있는
컴이라서 항상 켜놓지는 않습니다. 또한 IP 가 바뀔 수도 있습니다.
잘 못된 곳이나 궁금한 점(궁금한 것 질문하기 전에 INSTALL 파일을 읽어보고,
man ircd 도 해보기 바람)이 있으면 아래 주소로 메일 주시기 바랍니다.