XMPP + I2P 實現匿名加密通信
匿名通訊是保障言論自由的重要手段,但是某些個人或組織對於獲取信息的貪婪也使匿名通訊愈發困難。好在捍衛自由的道路並不是孤獨的,如今的我們可以站在巨人的肩膀上使用 XMPP + OMEMO 進行加密通訊,也可以使用 Tor 或者 I2P 來匿名地訪問網路。那如果我們把這些特性結合起來,能夠創造出怎樣的結果呢?本文將用儘可能簡單的文字來介紹如何在自己的電腦上實現通過 I2P 網路進行 XMPP 通訊。
本文安裝環境爲「Arch Linux」,使用的是 C++ 版本的
i2pd
,XMPP 伺服器使用的是 Prosody 加上
darknet
這個模塊。其他系統的安裝思路類似,本文參照這篇文章進行配置,並增加和修改了部分內容。
注意,本文
<...>
中的內容需要依照自己的實際情況自行替換。
目錄
安裝並配置 I2P 網路
如對本節內容有任何疑問可嘗試在如下資料中尋找答案:
連接 I2P 網路
首先我們需要安裝並配置 I2P:
$ sudo pacman -S i2pd
$ sudo systemctl start i2pd.service
不出意外的話,此時只需要在瀏覽器地址欄輸入
http://127.0.0.1:7070
就可以看到
i2pd webconsole
了,到此爲止
i2pd
就開始運行了。但由於 I2P 的特性,新安裝的 I2P
需要進行一段時間的
reseeding
,這段時間的長短根據不同的網路質量會有所不同。因此筆者建議如果連接不上
I2P 網路,可以讓電腦運行一天左右再回來重新嘗試連接。具體如何瀏覽 I2P
的網站(也叫 Eepsite)就不在本文展開了。
連接困難、速度緩慢也是 I2P 很難被大衆接受的原因之一,很多人因爲安裝完成後不能馬上連接就放棄了,這也是很多 Decentralized 網路的困境,Tor 也或多或少有着類似的問題。這些問題都是由於 Decentralized 網路自身的運行機制決定的。關於這個問題的討論和本文關係不大所以就不展開討論了。總的來說,I2P 使用人數越多且每個人運行 I2P 的時間越久,那其使用體驗就會越好。所以筆者推薦電腦開機後直接默認運行 I2P,例如:
$ sudo systemctl enable i2pd.service
在等待 I2P 進行
reseeding
的同時,我們就可以進行下面的配置了。
創建一個新的 I2P tunnel
首先,在 tunnels.conf
文件中添加如下內容(我們通常能在
/etc/i2pd/tunnels.conf
中找到這個文件):
[prosody-s2s]
type=server
host=127.0.0.1
port=5269
inport=5269
keys=prosody.dat
配置完成後需要重新啓動 i2pd
服務,例如:
$ sudo systemctl restart i2pd.service
重新啓動之後,在瀏覽器中輸入 http://127.0.0.1:7070
進入
i2p webconsole
,然後點擊 I2P tunnels
,在
Server Tunnels
中可以看到我們剛剛添加的
prosody-s2s
。記住其後面的地址,這將成爲 XMPP
伺服器的地址,後文會將其表示爲 <address>.b32.i2p
。
安裝並配置 XMPP 伺服器
如對本節內容有任何疑問可嘗試在如下資料中尋找答案:
- Prosody - ArchWiki
- Certificates – Prosody IM
- Port and network configuration – Prosody IM
- Configuring Prosody – Prosody IM
安裝 Prosody
接下來我們開始安裝並配置 XMPP 伺服器,本文使用的是 Prosody 加上
darknet
這個模組。
首先,我們安裝 prosody
本體和
lua52-sec
(添加對 TLS/SSL 的支持):
$ sudo pacman -S prosody lua52-sec
安裝 mod_darknet
然後我們需要安裝 mod_darknet
,在這之前我們需要先安裝
lua-bit32
:
$ sudo pacman -S lua-bit32
接下來從
mod_darknet
原作者那裏下載並安裝
darknet
這個模組。通常情況下安裝路徑爲
/usr/lib/prosody/modules
,具體安裝方法可以參考原作者的教程。
配置 Prosody
上面的準備工作都做完後,我們就可以在
/etc/prosody/prosody.cfg.lua
中配置 Prosody
了,配置方法如下(其中
...
爲省略的內容,請根據實際情況自行替換。如果遇到問題,看看是不是需要在配置文件中刪除掉未被使用的
VirtualHost
):
interfaces = { "127.0.0.1" }
...
admins = { "admin@<address>.b32.i2p" }
...
modules_enabled = {
...
"darknet";
}
...
darknet_only = true
...
authentication = "internal_plain"
...
VirtualHost "<address>.b32.i2p"
certificate = "/var/lib/prosody/<address>.b32.i2p.crt"
配置完成後,記得重啓 Prosody 服務,例如:
$ sudo systemctl restart prosody
生成 SSL/TLS 證書
細心的看官可能發現配置中的證書並不存在。當配置並重啓之後,我們就可以爲 XMPP 伺服器地址生成一個 SSL/TLS 證書了:
$ sudo prosodyctl cert generate <address>.b32.i2p
這個證書通常會生成在
/var/lib/prosody/
路徑下,具體路徑參照生成後的輸出內容並酌情修改配置文件的內容。
添加用戶
接下來我們爲 Prosody 添加 admin
用戶,按照提示輸入密碼:
$ sudo prosodyctl adduser admin@<address>.b32.i2p
不過因爲伺服器本身是在我們自己的電腦上,所以添加
admin
用戶的作用並不大,可以根據需求更改配置。
上述內容都完成後,可以選擇再次重啓 Prosody 服務使其加載之前變更的配置內容。同樣的,如果有需要,也可以開機直接運行 Prosody,例如:
$ sudo systemctl restart prosody
$ sudo systemctl enable prosody
安裝並配置 XMPP 客戶端
如對本節內容有任何疑問可嘗試在如下資料中尋找答案:
安裝 Gajim
伺服器配置完畢後,我們需要安裝和配置 XMPP 的客戶端。各位看官可以選擇自己喜歡的客戶端,筆者這裏使用的是 Gajim,其他客戶端的配置也大同小異。首先,我們需要安裝 Gajim:
$ sudo pacman -S gajim
鑑於 OMEMO 從 Gajim 1.8.0 版本開始已經被集成在 Gajim,我們已經無需對其進行額外配置,因此請直接跳轉到「登錄用戶」的部分。不過筆者依然保留了對 OMEMO 進行配置的內容供有需要的看官參照,但請注意這部分內容因爲所需 AUR 已被刪除,所以在「Arch Linux」中已經不可用。
那麼安裝完 Gajim 後,我們就可以開始配置 OMEMO 了。首先安裝配置 OMEMO 所需的內容:
$ sudo pacman -S python-axolotl python-qrcode
接下來我們需要安裝這個 AUR 叫做:gajim-plugin-omemo:
$ git clone https://aur.archlinux.org/gajim-plugin-omemo.git
$ cd gajim-plugin-omemo
$ makepkg
$ sudo pacman -U gajim-plugin-omemo-<version>.pkg.tar.zst
安裝完成後,在 Gajim
-> Plugins
中選中
OMEMO
(默認情況下應該是已經選中了)。
登錄用戶
現在我們可以來嘗試登錄我們的賬戶了。打開 Gajim,選擇
Add Account
,輸入用戶名(admin@<address>.b32.i2p
)和密碼並勾選
Advanced Settings
。然後選擇 Log In
進入
Advanced Settings
,分別填寫 Hostname 和 Port 爲
127.0.0.1
和 5222
,最後點擊
Log In
就可以成功登錄了。如果遇到「Certificate
Verification
Failed」的提示,則可以在查看證書內容與前文生成的證書相符後選擇「Add to
Trusted Certificates」。
到此就配置成功啦,趕快找身邊的小夥伴聊天看看吧 (*•̀ㅂ•́)و