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
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
# 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
pelarasan
Selain itu, cms banyak tapak menyokong pengesahan dua faktor (Untuk WordPress, LinOTP malah mempunyai modul khasnya sendiri untuk
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:
Terima kasih kepada penulis.
Sumber: www.habr.com