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