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