Pelayan pengesahan dua faktor LinOTP

Pelayan pengesahan dua faktor LinOTP

Hari ini saya ingin berkongsi bagaimana untuk menyediakan pelayan pengesahan dua faktor untuk melindungi rangkaian korporat, tapak, perkhidmatan, ssh. Pelayan akan menjalankan kombinasi berikut: LinOTP + FreeRadius.

Mengapa kita memerlukannya?
Ini adalah penyelesaian yang percuma dan mudah, dalam rangkaiannya sendiri, bebas daripada pembekal pihak ketiga.

Perkhidmatan ini sangat mudah, agak visual, tidak seperti produk sumber terbuka yang lain, dan juga menyokong sejumlah besar fungsi dan dasar (Sebagai contoh, log masuk+kata laluan+(PIN+OTPToken)). Melalui API, ia disepadukan dengan perkhidmatan penghantaran sms (LinOTP Config->Provider Config->SMS Provider), menjana kod untuk aplikasi mudah alih seperti Google Authentificator dan banyak lagi. Saya fikir ia lebih mudah daripada perkhidmatan yang dibincangkan artikel.

Pelayan ini berfungsi dengan sempurna dengan Cisco ASA, pelayan OpenVPN, Apache2, dan secara umum dengan hampir semua yang menyokong pengesahan melalui pelayan RADIUS (Sebagai contoh, untuk SSH dalam pusat data).

Ia diperlukan:

1) Debian 8 (jessie) - Selalu! (pemasangan percubaan pada debian 9 diterangkan pada akhir artikel)

Mulakan:

Memasang Debian 8.

Tambah repositori LinOTP:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Menambah kunci:

# gpg --search-keys 913DFF12F86258E5

Kadangkala semasa pemasangan "bersih", selepas menjalankan arahan ini, Debian memaparkan:

gpg: создан ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `/root/.gnupg'
gpg: создан Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» настроСк `/root/.gnupg/gpg.conf'
gpg: Π’ΠΠ˜ΠœΠΠΠ˜Π•: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² `/root/.gnupg/gpg.conf' Π΅Ρ‰Π΅ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ ΠΏΡ€ΠΈ этом запускС
gpg: создана Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ `/root/.gnupg/secring.gpg'
gpg: создана Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ `/root/.gnupg/pubring.gpg'
gpg: Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ сСрвСры ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ --keyserver)
gpg: сбой ΠΏΡ€ΠΈ поискС Π½Π° сСрвСрС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ: ΠΏΠ»ΠΎΡ…ΠΎΠΉ URI

Ini ialah persediaan gnupg awal. Tidak mengapa. Jalankan arahan sekali lagi.
Kepada soalan Debian:

gpg: поиск "913DFF12F86258E5" Π½Π° hkp сСрвСрС keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, создан: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  Π’Π²Π΅Π΄ΠΈΡ‚Π΅ числа, N) Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Q) Π’Ρ‹Ρ…ΠΎΠ΄>

Kami menjawab: 1

Next:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Pasang mysql. Secara teori, anda boleh menggunakan pelayan sql lain, tetapi untuk kesederhanaan saya akan menggunakannya seperti yang disyorkan untuk LinOTP.

(maklumat tambahan, termasuk konfigurasi semula pangkalan data LinOTP, boleh didapati dalam dokumentasi rasmi untuk pautan. Di sana anda juga boleh mencari arahan: dpkg-reconfigure linotp untuk menukar parameter jika anda telah memasang mysql).

# apt-get install mysql-server

# apt-get update

(tidak rugi untuk menyemak kemas kini semula)
Pasang LinOTP dan modul tambahan:

# apt-get install linotp

Kami menjawab soalan pemasang:
Gunakan Apache2: ya
Buat kata laluan untuk pentadbir Linotp: β€œKata Laluan Anda”
Jana sijil yang ditandatangani sendiri?: ya
Gunakan MySQL?: ya
Di manakah pangkalan data terletak: localhost
Cipta pangkalan data LinOTP (nama asas) pada pelayan: LinOTP2
Cipta pengguna berasingan untuk pangkalan data: LinOTP2
Kami menetapkan kata laluan untuk pengguna: "Kata Laluan Anda"
Perlukah saya membuat pangkalan data sekarang? (sesuatu seperti "Adakah anda pasti anda mahu ..."): ya
Masukkan kata laluan root MySQL yang anda buat semasa memasangnya: "YourPassword"
Selesai.

(pilihan, anda tidak perlu memasangnya)

# apt-get install linotp-adminclient-cli 

(pilihan, anda tidak perlu memasangnya)

# apt-get install libpam-linotp  

Jadi antara muka web Linotp kami kini tersedia di:

"<b>https</b>: //IP_сСрвСра/manage"

Saya akan bercakap tentang tetapan dalam antara muka web sedikit kemudian.

Sekarang, perkara yang paling penting! Kami menaikkan FreeRadius dan menghubungkannya dengan Linotp.

Pasang FreeRadius dan modul untuk bekerja dengan LinOTP

# apt-get install freeradius linotp-freeradius-perl

sandarkan konfigurasi jejari klien dan Pengguna.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Buat fail klien kosong:

# touch /etc/freeradius/clients.conf

Mengedit fail konfigurasi baharu kami (konfigurasi yang disandarkan boleh digunakan sebagai contoh)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²
}

Seterusnya, buat fail pengguna:

# touch /etc/freeradius/users

Kami mengedit fail, memberitahu jejari bahawa kami akan menggunakan perl untuk pengesahan.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Seterusnya, edit fail /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Kita perlu menentukan laluan ke skrip perl linotp dalam parameter modul:

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

... ..
Seterusnya, kami mencipta fail di mana kami menyatakan dari mana (domain, pangkalan data atau fail) untuk mengambil data.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_вашСго_LinOTP_сСрвСра(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Saya akan pergi ke sedikit lebih terperinci di sini kerana ia penting:

Penerangan penuh fail dengan ulasan:
#IP pelayan linOTP (alamat IP pelayan LinOTP kami)
URL=https://172.17.14.103/validate/simplecheck
#Kawasan kami yang akan kami buat dalam antara muka web LinOTP.)
REALM=senjata semula1
#Nama kumpulan pengguna yang dibuat dalam muncung web LinOTP.
RESCONF=fail_flat
#pilihan: komen keluar jika semuanya kelihatan berfungsi dengan baik
Nyahpepijat=Benar
#pilihan: gunakan ini, jika anda mempunyai sijil yang ditandatangani sendiri, jika tidak, ulas (SSL jika kami membuat sijil kami sendiri dan ingin mengesahkannya)
SSL_CHECK=Salah

Seterusnya, buat fail /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

Dan salin konfigurasi ke dalamnya (tidak perlu mengedit apa-apa):

authorize {
#normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
#  If you are using multiple kinds of realms, you probably
#  want to set "ignore_null = yes" for all of them.
#  Otherwise, when the first style of realm doesn't match,
#  the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
#  Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentification to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}

Seterusnya kami akan membuat pautan SIM:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

Secara peribadi, saya membunuh tapak Radius lalai, tetapi jika anda memerlukannya, anda boleh mengedit konfigurasinya atau melumpuhkannya.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Sekarang mari kita kembali ke muka web dan melihatnya dengan lebih terperinci:
Di penjuru kanan sebelah atas klik LinOTP Config -> UserIdResolvers -> New
Kami memilih perkara yang kami mahu: LDAP (AD win, LDAP samba), atau SQL, atau pengguna tempatan sistem Flatfile.

Isikan medan yang diperlukan.

Seterusnya kita mencipta REALMS:
Di penjuru kanan sebelah atas, klik Konfigurasi LinOTP -> Alam -> Baharu.
dan berikan nama kepada REALMS kami, dan juga klik pada UserIdResolvers yang dibuat sebelum ini.

FreeRadius memerlukan semua data ini dalam fail /etc/linotp2/rlm_perl.ini, seperti yang saya tulis di atas, jadi jika anda tidak mengeditnya kemudian, lakukannya sekarang.

Pelayan semuanya dikonfigurasikan.

Tambahan:

Menyediakan LinOTP pada Debian 9:

Pemasangan:

# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list 
# apt-get install dirmngr

# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update

# apt-get install mysql-server

(secara lalai, dalam Debian 9 mysql (mariaDB) tidak menawarkan untuk menetapkan kata laluan root, sudah tentu anda boleh membiarkannya kosong, tetapi jika anda membaca berita, ini selalunya membawa kepada "epik gagal", jadi kami akan menetapkannya bagaimanapun)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('Ρ‚ΡƒΡ‚_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ') WHERE User = 'root';
exit
# apt-get install linotp
# apt-get install linotp-adminclient-cli
# apt-get install python-ldap
# apt install freeradius
# nano /etc/freeradius/3.0/sites-enabled/linotp

Tampalkan kod (dihantar oleh JuriM, terima kasih kepadanya untuk itu!):

pelayan linotp {
dengar {
ipaddr = *
port = 1812
jenis=auth
}
dengar {
ipaddr = *
port = 1813
jenis = acct
}
membenarkan {
praproses
kemas kini {
&control:Auth-Type := Perl
}
}
mengesahkan {
Perl Jenis Auth {
perl
}
}
perakaunan {
unix
}
}

Edit /etc/freeradius/3.0/mods-enabled/perl

perl {
nama fail = /usr/share/linotp/radius_linotp.pm
func_authenticate = sahkan
func_authorize = membenarkan
}

Malangnya, dalam Debian 9 perpustakaan radius_linotp.pm tidak dipasang dari repositori, jadi kami akan mengambilnya dari github.

# apt install git
# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl
# cd linotp-auth-freeradius-perl/
# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

sekarang mari edit /etc/freeradius/3.0/clients.conf

pelayan pelanggan {
ipaddr = 192.168.188.0/24
rahsia = kata laluan anda
}

Sekarang mari kita betulkan nano /etc/linotp2/rlm_perl.ini

Kami menampal kod yang sama di sana seperti semasa memasang pada debian 8 (diterangkan di atas)

itu semua mengikut idea. (belum diuji lagi)

Saya akan meninggalkan beberapa pautan di bawah untuk menyediakan sistem yang paling kerap perlu dilindungi dengan pengesahan dua faktor:
Menyediakan pengesahan dua faktor dalam Apache2

Persediaan dengan Cisco ASA(pelayan penjanaan token yang berbeza digunakan di sana, tetapi tetapan ASA itu sendiri adalah sama).

VPN dengan pengesahan dua faktor

pelarasan pengesahan dua faktor dalam ssh (LinOTP juga digunakan di sana) - terima kasih kepada pengarang. Di sana anda juga boleh menemui perkara menarik tentang menyediakan dasar LiOTP.

Selain itu, cms banyak tapak menyokong pengesahan dua faktor (Untuk WordPress, LinOTP malah mempunyai modul khasnya sendiri untuk github), sebagai contoh, jika anda ingin membuat bahagian yang dilindungi di tapak web korporat anda untuk pekerja syarikat.
FAKTA PENTING! JANGAN tandai kotak β€œGoogle Authenticator” untuk menggunakan Google Authenticator! Kod QR tidak boleh dibaca kemudian... (fakta pelik)

Untuk menulis artikel ini, maklumat daripada artikel berikut telah digunakan:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Terima kasih kepada penulis.

Sumber: www.habr.com

Tambah komen