FreeBSD+ jabber+ICQ Transport+SSL

Поставив я у себе в мережі джабер і тепер хочу поділитися тим, як я це зробив, бо останнім часом питають про це буже часто! Отже, після кількох днів проб і тестів я обрав для себе Jabberd-1.4.3 (показав себе найбільш стабільним на даний момент), для ICQ транспорту – jit-1.1.6, усе збирав з портів під FreeBSD4.10-STABLE оновлених 28 серпня 2004 р. через CVSup


ІНСТАЛЯЦІЯ


Усе дуже просто, нам необхідно jabber, jit, openssl. Збираємо:

[07:06] core:~# cd /usr/ports/net/jabber/
[07:06] core:~# make install clean
[07:09] core:~# cd /usr/ports/net/jit/
[07:09] core:~# make install clean

Усе зібрано та проінстальовано з необхідними залежностями (у тому числі й з openssl)

КОНФІГУРАЦІЯ JABBERD i JIT

Найперше коротке пояснення. У jabberd1.4 транспорт можна під’єднати двома шляхами: через dlopen, тобто .so підгружається при старті, коли викликається dlopen(), звичайно, якщо якась .so-шка має помилку, то з великим тріском падає весь jabberd. Тому, думаю, не варто його використовувати. Інший спосіб – підключити зовнішній компонент через tcp сокет. Компонент реєструється і собі тихенько працює як окримий процес. Що ж, так і будемо робити!

Далі, я опишу лише необхідний мінімум для запуску сервера, якщо ж Вам необхідно більше – читайте доки, там гарно все описано! 🙂 Правимо /usr/local/etc/jabber.xml Там замінюєму усі localhost на свій jabber.me.lviv.ua, а в секцію <service> добвляємо:

<service id=”icq”>
<host>icq.jabber.me.lviv.ua</host>
<host>sms.icq.jabber.me.lviv.ua</host>
<accept>
<ip>127.0.0.1</ip>
<port>5555</port>
<secret>someSecret</secret>
<timeout>30</timeout>
</accept>
</service>

Наступне, робимо jabberd.sh в /usr/local/etc/rc.d/ запусковим: chmod +x jabberd.sh Перезавантажуємо сервер. Якщо усе було зроблено правильно, то маєте бачити щось таке:

[08:26] core:/usr/local/etc# sockstat -4 | grep jabber
jabber jabberd 416 7 tcp4 127.0.0.1:5222 *:*
jabber jabberd 416 8 tcp4 192.168.0.14:5222 *:*
Тепер jit:
[08:27] core:~# cd /usr/local/etc/
[08:27] core:/usr/local/etc# cp jabber-icq.example jabber-icq.xml
Правимо jabber-icq.xml
– викидаємо усі рядки типу <host port=”5190″>205.188.179.233</host> і замінюємо на єдиний <host port=”5190″>login.icq.com</host> (якщо там він уже присутній, тоді нічого не робимо);
– замінюємо усі icq.localhost на icq.jabber.me.lviv.ua, а windows-1252 на windows-1251;

Перезавантажуємо сервер і маємо таке:

[08:32] core:/usr/local/etc# sockstat -4 | grep jabber
jabber jabberd 416 7 tcp4 127.0.0.1:5222 *:*
jabber jabberd 416 8 tcp4 192.168.0.14:5222 *:*
jabber jit 389 5 tcp4 127.0.0.1:2186 127.0.0.1:5555
jabber jabberd 384 16 tcp4 127.0.0.1:5555 127.0.0.1:2186

Як бачите усе на своїх місцях і усе працює, можна брати джабер-клієнт, наприклад Psi (http://psi.affinix.com/?page=download) і вперед!

НАЛАШТОВУЄМО JABBERD+SSL

Тепер я хочу зробити так, щоб усі мої з’єднання були безпечні 🙂 Переходимо в /usr/local/lib/jabber/
Там створемо наш SSL Key.pem файл для безпечного з’єднання. Відкривайте свій улюблений редактор (vim, vi, ee) i:

#!/bin/sh
######
#
# Generate a certificate and key with no passphrase.
#
######
# change to the correct path of your openssl command
OPENSSL=/usr/bin/openssl
#OPENSSL=/usr/bin/openssl
## This generates the cert and key
$OPENSSL req -new -x509 -newkey rsa:1024 -keyout privkey.pem -out key.pem
## This will remove the passphrase
$OPENSSL rsa -in privkey.pem -out privkey.pem
## Put it all together
cat privkey.pem >> key.pem
## Cleanup
rm privkey.pem

Зберігаємо даний скрипт у файл keygen.sh і робимо виконуваним chmod +x keygen.sh Запускаємо і відповідаємо на запитання ./keygen.sh
У нас утворився key.pem файл!
Тепер віднайдіть усі зкоментовані SSL Section в /usr/local/etc.jabber.xml і в <pthcsock> пропишіть:

<ssl port=’5223′>127.0.0.1</ssl>
<ssl port=’5223′>192.168.0.14</ssl>
<ssl port=’5223′>xxx.xxx.xxx.xxx</ssl>
Тепер нище в <:ssl> секції вкажемо шлях до нашого key.pem :

<ssl>
<key ip=’127.0.0.1′>/usr/local/lib/jabber/key.pem</key>
<key ip=’192.168.0.14′>/usr/local/lib/jabber/key.pem</key>
<key ip=’xxx.xxx.xxx.xxx’>/usr/local/lib/jabber/key.pem</key>
</ssl>

xxx.xxx.xxx.xxx – замініть на реальний IP, якщо Вам потрібне з’єднання із зовні, що я і зробив, а ще я повністю викинув стрічки з 5222 портами, щоб усі конектились лише чирез SSL, – Вам це робити не обов’язково! І знову перезавантажили сервер, дивимось:

[09:28] core:~# sockstat -4 | grep jabber
jabber jabberd 416 7 tcp4 127.0.0.1:5223 *:*
jabber jabberd 416 8 tcp4 192.168.0.14:5223 *:*
jabber jit 389 5 tcp4 127.0.0.1:2186 127.0.0.1:5555

Здається, що усе на місці, уже нема 5222, а лише 5223. Перевіримо конекти:

[09:30] core:~# openssl s_client -connect 192.168.0.14:5223
CONNECTED(00000003)
depth=0 /C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= verify error:num=18:self signed certificate
verify return:1
depth=0 /C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= verify return:1

Certificate chain
0 s:/C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= i:/C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= —
Server certificate
—–BEGIN CERTIFICATE—–
MIID/TCCA2agAwIBAgIBADANBgkqhkiG9w0BAQQFADCBtjELMAkGA1UEBhMCVUEx
FDASBgNVBAgTC0x2aXYgUmVnaW9uMQ0wCwYDVQQHEwRMdml2MSIwIAYDVQQKExlM
dml2IEhvbHkgU3Bpcml0IFNlbWluYXJ5MRIwEAYDVQQLEwllZHVjYXRpb24xJTAj
BgNVBAMTHFZpdGFseSBLb3ZhbHlzaHluIGFrYSBzYW1hZWwxIzAhBgkqhkiG9w0B
CQEWFHN5c2FkbWluQGxkcy5sdml2LnVhMB4XDTA0MDgyNzE3MDgyNFoXDTA0MDky
NjE3MDgyNFowgbYxCzAJBgNVBAYTAlVBMRQwEgYDVQQIEwtMdml2IFJlZ2lvbjEN
MAsGA1UEBxMETHZpdjEiMCAGA1UEChMZTHZpdiBIb2x5IFNwaXJpdCBTZW1pbmFy
eTESMBAGA1UECxMJZWR1Y2F0aW9uMSUwIwYDVQQDExxWaXRhbHkgS292YWx5c2h5
biBha2Egc2FtYWVsMSMwIQYJKoZIhvcNAQkBFhRzeXNhZG1pbkBsZHMubHZpdi51
YTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAx8vKWUnUdx741Wp/3pm/WbdR
3XRZQYQB3jHwb3zE7npEBO1VThDm2jKkq73Bk9IguE0oNmT+KcVwua884kC4xXeE
h4I9kKynDfVGGYTsV77IlZS7ZDtWN5vKZ8QAecYBnkv3c1szV0OuFJm21nRwtyQO
b4vaYQ8jQypvGT46R+ECAwEAAaOCARcwggETMB0GA1UdDgQWBBTneJbjoisQWJnG
vpQzuCz5Pk1gkTCB4wYDVR0jBIHbMIHYgBTneJbjoisQWJnGvpQzuCz5Pk1gkaGB
vKSBuTCBtjELMAkGA1UEBhMCVUExFDASBgNVBAgTC0x2aXYgUmVnaW9uMQ0wCwYD
VQQHEwRMdml2MSIwIAYDVQQKExlMdml2IEhvbHkgU3Bpcml0IFNlbWluYXJ5MRIw
EAYDVQQLEwllZHVjYXRpb24xJTAjBgNVBAMTHFZpdGFseSBLb3ZhbHlzaHluIGFr
YSBzYW1hZWwxIzAhBgkqhkiG9w0BCQEWFHN5c2FkbWluQGxkcy5sdml2LnVhggEA
MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAnsmGTsap6RhkEPDW9xpl
ooFv+laojtXPE/4HERYyMfe7MHgqQbJJB8aQ+1ST0gSdaAa665oOAnEsonXARtvT
TYbpqhzvwm2HqRp5S9pHhK0wZMjt8ndtImEs5g++27tmQDmz5kOdtXV4MiD/yuUR
aJn2z+wnPh69UhqDsb/4FpM=
—–END CERTIFICATE—–
subject=/C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= issuer=/C=UA/ST=Lviv Region/L=Lviv/O=LDS/OU=education/CN=Vitaly Kovalyshyn aka
samael/emailAddress= —
No client certificate CA names sent

SSL handshake has read 1187 bytes and written 340 bytes

New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID:
975389EA0601C7EA81D51524F95D4F1AD839BF12031DDB5DCD31F55CC949F458 Session-ID-ctx:
Master-Key:
BC6BD48BD533A3E4976A3E4AFAD55252934F2167B5C7C4471E11286C6B3CFF7A539FD07F627CBED3464C2DCC06A2B2C0
Key-Arg : None
Start Time: 1093692645
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)

А це означає, що Ви маєте можливість безпечного під’єднатися до джабер-сервера! Це все, що я хотів написати, – у мене все працює! А у Вас? :@)

1 Comment on "FreeBSD+ jabber+ICQ Transport+SSL"

Leave a Reply

Your email address will not be published. Required fields are marked *