如何搭建局域網(wǎng)的irc服務(wù)器
這幾周在公司里新加入的開發(fā)人員越來(lái)越多,而且都分布在不同的樓群里,為了大家能夠方便地交流sys admin就設(shè)置了一個(gè)IRC Server.所以周末有空的時(shí)候我也在家實(shí)驗(yàn)了一下,小編拿出來(lái)和大家分享!自己動(dòng)手搭建linux下的IRC服務(wù)器!
1.什么是IRC
IRC(Internet Relay Chat)是一種即時(shí)的網(wǎng)上聊天論壇。它可以支持用戶進(jìn)行一對(duì)一或者多對(duì)多的網(wǎng)上通信,以及文件的傳輸。一個(gè)IRC服務(wù)器還可以加入到其他的IRC服務(wù)器當(dāng)中從而不斷擴(kuò)充IRC服務(wù)器的數(shù)量和連接(當(dāng)然我自己的實(shí)驗(yàn)只是構(gòu)造一個(gè)在局域網(wǎng)中使用的IRC,所以這一點(diǎn)不加以討論)
2.服務(wù)器的選擇和安裝
因?yàn)槲易约菏荄ebian的用戶,所以我就選擇了在發(fā)行版中自帶的ircu (The Undernet Internet Relay Chat Daemo)(當(dāng)然還有其他很不錯(cuò)的server比如UnrealIRCd和ircd-hybrid)
以"root"用戶登錄執(zhí)行以下命令就可以了
# apt-get install ircd-ircu
如果想查看一下具體安裝了哪些文件可以使用dpkg命令
# dpkg -c ircd-ircu_.deb
或者你也可以去到官方網(wǎng)站下載源碼包然后自己編譯
3.服務(wù)器的配置
安裝完畢后我們就應(yīng)該可以在/etc/ircd目錄中找到ircu的配置文件了,其中包括了:
ircd.conf (主要的配置文件)
ircd.motd
oper.motd
remote.motd
這應(yīng)該是最關(guān)鍵的一步了。和其他的IRC服務(wù)器比較起來(lái)我覺得ircu的配置文件是最難讀懂的,因?yàn)槔锩鎺缀鯖](méi)有任何注釋,連man page也沒(méi)有。我想這是Undernet以后應(yīng)該改進(jìn)的地方。不過(guò)沒(méi)關(guān)系,在/usr/share/doc/ircd-ircu這個(gè)目錄中它還是給出了很多example的配置文件,里面的注釋就比較詳盡。這里再指出一點(diǎn)就是我是建立一個(gè)只供局域網(wǎng)內(nèi)部用戶使用的IRC服務(wù)器,所以任何涉及連接到外部服務(wù)器的配置都會(huì)不加以討論。好了,那我們來(lái)看一下如何配置ircd.conf文件吧。
打開這個(gè)文件后你會(huì)看到很多以子母打頭的line,每一個(gè)子母都代表了對(duì)服務(wù)器不同功能的配置,我們來(lái)逐一分析一下。
名稱: M line
格式: M:[server name]:[virtual host]:[description]::[numeric]
注釋: M line主要是用來(lái)定義服務(wù)器的信息
[server name]服務(wù)器的名字
[virtual host]連接外部的IP地址(可以設(shè)置成服務(wù)器主網(wǎng)卡的IP地址)
[description]對(duì)服務(wù)器的介紹
[numeric]定義服務(wù)器的數(shù)字ID,應(yīng)用于服務(wù)器與服務(wù)器之間的連接。必須是唯一的
舉例: M:leonard.home:192.168.1.7:Leonard's first IRC server::1
名稱: A line
格式: A:[line 1]:[line 2]:[line 3]
注釋: A line主要定義服務(wù)器的管理信息(也就是你登錄IRC之后輸入/Admin看到的信息)。
舉例: A:Administrator is Leonard:Please contact me using the following email:leonard@hotmail.com
名稱: Y lines
格式: Y:[class]:[ping frequency]:[connect frequency]:[maximum links]:[maximum sendq]
注釋: Y lines是來(lái)定義連接的類別,也就是說(shuō)給每個(gè)到我們服務(wù)器的連接分配不同的資源和設(shè)置
[ping frequency]服務(wù)器ping客戶端的頻率(以測(cè)試其是否alive),單位為秒
[class]這項(xiàng)類別的數(shù)字ID
[connect frequency]對(duì)于外部服務(wù)器的連接頻率,單位為秒
[maximum links]外來(lái)的最大連接數(shù)
[maximum sendq]外來(lái)的最大可以被積壓的傳輸數(shù)據(jù),單位為bytes
舉例: # A class for very welcome clients (users in LAN, for example)
Y:10:90:0:200:65536
# A class that will allow only a limited number of connections
Y:20:90:0:50:32768
名稱: I lines
格式: I:[address/hostmask]:[password/limit]:[hostmask]::[class]
注釋: I lines是用來(lái)對(duì)于每個(gè)試圖連接服務(wù)器的客戶進(jìn)行驗(yàn)證,并把他們歸入到Y(jié) lines的類別中去。驗(yàn)證方法如下:
1.對(duì)于任何試圖連接的IP,服務(wù)器會(huì)先做一個(gè)reverse lookup
2.如果得到了其hostname,那么將會(huì)去找對(duì)應(yīng)的hostmask
3.如果沒(méi)有找到hostname,那么將會(huì)去找對(duì)應(yīng)的ip mask
4.如果沒(méi)有一行I line與之相對(duì)應(yīng)那么連接將會(huì)被拒絕
[address/hostmask]客戶端的地址或域名??梢允褂脀ild card e.g. ?, *
[password/limit]設(shè)置密碼或者是連接數(shù)量。如果設(shè)為0的那話那么就是指沒(méi)有連接限制
[class]在Y lines中定義的class
舉例:這里需要指出的是I line中的配置文件都是倒過(guò)來(lái)驗(yàn)證的。所以我們應(yīng)該先定義gerneral rules再來(lái)定義more specific rules
#我將所有局域網(wǎng)的用戶歸為class 10,其他的歸為20
I:*@*::Unresolved::20
I:Resolved::*@*::20
I:*@192.168.1.*:2:Unresolved::10
名稱: K lines
格式: K:[mask]:["reason"]:[username]
注釋:雖然在I lines中也可以做到限制用戶的登錄,但是K lines才是真正用來(lái)屏蔽用戶登錄的
[mask]可以是IP地址或域名。注意如果使用IP的話需要用小寫的k.支持wild cards e.g. * 還可以使用$R來(lái)屏蔽用戶的real name
[reason]給出一個(gè)拒絕用戶登錄的理由。注意需要用雙引號(hào)。如果以!開頭,那么后面應(yīng)該跟文件名
[username]客戶端的用戶名
舉例:K:*.com:"Please leave us with peace":*
k:147.197.*"No connection from my uni":* #屏蔽IP的話需要用小寫的k
K:$R*sub7*:"You are infected with a Trojan":*
名稱: O lines
格式: O|o:[host|ip mask]:[password]:[nick]::[class]
注釋: O lines是用來(lái)使連接的用戶獲得管理員的權(quán)限。大寫的O使用來(lái)指定global operator也就是所有連接服務(wù)器的管理員。小寫的o是用來(lái)指定本地管理員
[host|ip mask] IP地址或者域名
[password]管理員密碼。使用tools/mkpasswd來(lái)生成(在新版本中已換成umkpasswd)
[nick]用戶連接使用的昵稱
[class]把用戶歸為此class
舉例: #只有在局域網(wǎng)中以leonard昵稱登錄并正確輸入密碼后才可以成為管理員
o:192.168.1.*:5rxV6zRJ8FgHE:leonard::1
名稱: P lines
格式: P:[IP-mask]:[address]:[status]:[port]
注釋: P lines是用來(lái)定義服務(wù)器綁定的端口以及其接受連接的類型
[IP-mask]定義了哪些IP地址可以連接到這個(gè)端口
[address]可以綁定端口的服務(wù)器本地IP address
[status] 客戶端為"C",服務(wù)器為"S".同時(shí)你還可以在后加上H用來(lái)代表status為隱藏
[port]服務(wù)器綁定的端口。必須大于1024。通常為6667
舉例: #設(shè)定一個(gè)只有局域網(wǎng)客戶可以連接的端口
P:192.168.1.*:192.168.1.7:CH:6667
名稱: T lines
格式: T:[hostmask|class]:[motd-file]
注釋:根據(jù)不同用戶的地址或者類別來(lái)決定顯示哪個(gè)motd(message of today)文件
[hostmaks] IP地址或者域名
[class] Y lines中的類別
[motd-file]指定motd文件
舉例: T:192.168.1.*:local.motd
T:20:external.motd
名稱: F lines
格式: F:[feature]:[value]
注釋:設(shè)置服務(wù)器的附加屬性。以前ircu需要你把很多的附加屬性在compile的時(shí)候就指定編譯,為了方便起見這里提供了F lines
舉例:由于可以指定的屬性比較多,這里就不一一列數(shù)了,可以參考/usr/share/doc/ircd-ircu/readme.features.gz
到此為止我羅列了一些需要搭建一個(gè)standalone IRC Server所需要的最基本的配置。還有很多l(xiāng)ine的用法這里沒(méi)有提到,因?yàn)樗麄冎写蠖鄷际巧婕暗竭B接其他的服務(wù)器
4.啟動(dòng)IRC Server
如果你是用apt安裝的話,那么在ircu的包中應(yīng)該已經(jīng)包括了一個(gè)rc script。你只需以"root"來(lái)執(zhí)行以下命令就可以了
# /etc/init.d/ircd-ircu start
如果改變了ircd.conf后想重載設(shè)置文件的話可以用
# /etc/init.d/ircd-ircu reload
如果你是用源代碼編譯的話,可以找到ircd的binary文件然后運(yùn)行。一定要注意的是千萬(wàn)不要用root來(lái)執(zhí)行ircd程序,這樣會(huì)給你的系統(tǒng)造成很大的安全隱患。在安裝的過(guò)程中ircu一般會(huì)在系統(tǒng)中建立一個(gè)名為irc的用戶,可以先su irc,然后再執(zhí)行ircd。(上面用rc script的時(shí)候會(huì)自動(dòng)以irc用戶來(lái)運(yùn)行服務(wù)器,所以沒(méi)有問(wèn)題)
5.安全設(shè)置
總的來(lái)說(shuō)IRC不是一個(gè)自身帶有很強(qiáng)安全性的service,所以我列舉幾條自己認(rèn)為需要注意的問(wèn)題:
1.剛才已經(jīng)提到過(guò)了用root啟動(dòng)ircu是不安全的,好在現(xiàn)在大多數(shù)的IRC服務(wù)器都不允許你直接以root來(lái)運(yùn)行,它會(huì)自行中止程序并給出提示。
2.另外盡量隱藏你服務(wù)器和客戶端的信息也是一個(gè)增強(qiáng)安全設(shè)置的好方法。Undernet自己就曾經(jīng)被DDos攻擊過(guò)。同時(shí)你也可以修改指定的端口(6667)
3.用Y lines和I lines來(lái)對(duì)用戶進(jìn)行嚴(yán)格分類
4.用P lines來(lái)限制用戶的連接
5.用K lines來(lái)屏蔽不信任的用戶
6.謹(jǐn)慎地給與用戶管理員的權(quán)利。把可以成為管理員的[hostmask]設(shè)置到越精確越好
7.安裝帶有SSL支持的IRC服務(wù)器
8.另外永遠(yuǎn)不要只依賴一項(xiàng)工具來(lái)保證你的安全性。我們還可以用iptables來(lái)禁止局域網(wǎng)以外的用戶來(lái)登陸IRC服務(wù)器
# iptables -A INPUT -s ! 192.168.1.0 -p tcp --dport 6667 -j DROP
6.日志文件
日志文件始終是我們監(jiān)測(cè)一個(gè)服務(wù)器運(yùn)行狀況的好工具。ircu提供了多種日志的方式,包括常規(guī)的syslog,自己設(shè)置的日志文件以及可以把日志記錄在另一臺(tái)服務(wù)器上。同時(shí)在F lines里我們也可以設(shè)置不同日志文件的名稱以及日志的級(jí)別。Default的日志文件都儲(chǔ)存在/var/log/ircd目錄下
7. IRC客戶端軟件
終于設(shè)置好了服務(wù)器,那么就找一些客戶端來(lái)測(cè)試以下吧
ircII (http://www.eterna.com.au/ircii/)
這個(gè)是linux下的終端樣式的IRC client.有著比較強(qiáng)大的命令行功能。還有就是也這是Debian發(fā)行版里有的軟件,所以偷懶一下的話又是apt就可以了
xchat (http://www.xchat.org)
老牌的linux下的IRC client,據(jù)說(shuō)功能十分強(qiáng)大,不過(guò)我沒(méi)有用過(guò)就不多加評(píng)論了
gaim (http://www.pidgin.im/)
我個(gè)人十分喜歡這個(gè)軟件,原因是因?yàn)間aim可以支持很多種protocol,這樣就可以同時(shí)運(yùn)行很多種不同的聊天工具。試想一下一款可以讓你同時(shí)開著msn, qq, google talk, yahoo messenger, icq and IRC的軟件會(huì)是多好啊(呵呵,當(dāng)然如果你開那么多的話一定忙死)。還有就是我感覺gaim在Windows下的穩(wěn)定性也很好
ChatZilla (http://www.mozilla.org/projects/rt-messaging/chatzilla/)
這是一款基于瀏覽器的IRC插件,用firefox的朋友可以輕松地安裝上它,這樣開著網(wǎng)頁(yè)的時(shí)候就可以和IRC上的朋友們交談了
至于IRC的命令我看論壇里很多好的貼子都介紹過(guò)了,我在這里就不重復(fù)了
如何搭建局域網(wǎng)的irc服務(wù)器
下一篇:如何搭建web局域網(wǎng)