Server otentikasi dua faktor LinOTP

Server otentikasi dua faktor LinOTP

Hari ini saya ingin berbagi cara mengatur server otentikasi dua faktor untuk melindungi jaringan perusahaan, situs, layanan, ssh. Server akan menjalankan kombinasi berikut: LinOTP + FreeRadius.

Mengapa dia membutuhkan kita?
Ini adalah solusi yang sepenuhnya gratis dan nyaman, dalam jaringannya sendiri, tidak bergantung pada penyedia pihak ketiga.

Layanan ini sangat nyaman, cukup visual, tidak seperti produk open source lainnya, dan juga mendukung sejumlah besar fungsi dan kebijakan (Misalnya, login+kata sandi+(PIN+OTPToken)). Melalui API, terintegrasi dengan layanan pengiriman sms (LinOTP Config->Provider Config->SMS Provider), menghasilkan kode untuk aplikasi seluler seperti Google Authentificator dan banyak lagi. Saya pikir ini lebih nyaman daripada layanan yang dibahas Artikel.

Server ini bekerja sempurna dengan Cisco ASA, server OpenVPN, Apache2, dan secara umum dengan hampir semua hal yang mendukung otentikasi melalui server RADIUS (Misalnya, untuk SSH di pusat data).

Diperlukan:

1) Debian 8 (jessie) - Selalu! (uji coba instalasi pada debian 9 dijelaskan di akhir artikel)

Home:

Menginstal Debian 8.

Tambahkan repositori LinOTP:

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

Menambahkan kunci:

# gpg --search-keys 913DFF12F86258E5

Terkadang selama instalasi “bersih”, setelah menjalankan perintah ini, Debian menampilkan:

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 adalah pengaturan awal gnupg. Tidak apa-apa. Jalankan saja perintahnya lagi.
Untuk pertanyaan 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

Selanjutnya:

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

# apt-get update

Instal mysql. Secara teori, Anda dapat menggunakan sql server lain, tetapi untuk mempermudah saya akan menggunakannya seperti yang direkomendasikan untuk LinOTP.

(informasi tambahan, termasuk konfigurasi ulang database LinOTP, dapat ditemukan di dokumentasi resmi untuk link. Di sana Anda juga dapat menemukan perintah: dpkg-reconfigure linotp untuk mengubah parameter jika Anda sudah menginstal mysql).

# apt-get install mysql-server

# apt-get update

(tidak ada salahnya untuk memeriksa pembaruan lagi)
Instal LinOTP dan modul tambahan:

# apt-get install linotp

Kami menjawab pertanyaan penginstal:
Gunakan Apache2: ya
Buat kata sandi untuk admin Linotp: “Kata Sandi Anda”
Hasilkan sertifikat yang ditandatangani sendiri?: ya
Gunakan MySQL?: ya
Dimana databasenya berada: localhost
Buat database LinOTP (nama dasar) di server: LinOTP2
Buat pengguna terpisah untuk database: LinOTP2
Kami menetapkan kata sandi untuk pengguna: “Kata Sandi Anda”
Haruskah saya membuat database sekarang? (sesuatu seperti “Apakah Anda yakin ingin...”): ya
Masukkan kata sandi root MySQL yang Anda buat saat menginstalnya: “Kata Sandi Anda”
Selesai

(opsional, Anda tidak perlu menginstalnya)

# apt-get install linotp-adminclient-cli 

(opsional, Anda tidak perlu menginstalnya)

# apt-get install libpam-linotp  

Jadi antarmuka web Linotp kami sekarang tersedia di:

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

Saya akan berbicara tentang pengaturan di antarmuka web nanti.

Sekarang, hal yang paling penting! Kami membesarkan FreeRadius dan menghubungkannya dengan Linotp.

Instal FreeRadius dan modul untuk bekerja dengan LinOTP

# apt-get install freeradius linotp-freeradius-perl

buat cadangan konfigurasi radius klien dan Pengguna.

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

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

Buat file klien kosong:

# touch /etc/freeradius/clients.conf

Mengedit file konfigurasi baru kita (konfigurasi yang dicadangkan dapat digunakan sebagai contoh)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Selanjutnya, buat file pengguna:

# touch /etc/freeradius/users

Kami mengedit file, memberi tahu radius bahwa kami akan menggunakan Perl untuk otentikasi.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Selanjutnya, edit file /etc/freeradius/modules/Perl

# nano /etc/freeradius/modules/perl

Kita perlu menentukan jalur ke skrip Perl linotp di parameter modul:

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

.....
Selanjutnya, kita membuat file di mana kita menentukan (domain, database, atau file) mana yang akan diambil datanya.

# 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 membahas lebih detail di sini karena ini penting:

Deskripsi lengkap file dengan komentar:
#IP server linOTP (alamat IP server LinOTP kami)
URL=https://172.17.14.103/validate/simplecheck
#Area kita yang akan kita buat di antarmuka web LinOTP.)
NYATA=mempersenjatai kembali1
#Nama grup pengguna yang dibuat di moncong web LinOTP.
RESCONF=flat_file
#opsional: beri komentar jika semuanya tampak berfungsi dengan baik
Debug=Benar
#opsional: gunakan ini, jika Anda memiliki sertifikat yang ditandatangani sendiri, jika tidak, beri komentar (SSL jika kita membuat sertifikat sendiri dan ingin memverifikasinya)
SSL_CHECK=Salah

Selanjutnya, buat file /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 pun):

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
}

Selanjutnya kita akan membuat link SIM:

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

Secara pribadi, saya mematikan situs Radius default, tetapi jika Anda membutuhkannya, Anda dapat mengedit konfigurasinya atau menonaktifkannya.

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

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

# service freeradius reload

Sekarang mari kembali ke tampilan web dan melihatnya lebih detail:
Di pojok kanan atas klik LinOTP Config -> UserIdResolvers -> New
Kami memilih apa yang kami inginkan: LDAP (AD win, LDAP samba), atau SQL, atau pengguna lokal sistem Flatfile.

Isi kolom yang wajib diisi.

Selanjutnya kita membuat REALMS:
Di pojok kanan atas, klik LinOTP Config -> Realms -> New.
dan beri nama pada REALMS kita, dan klik juga pada UserIdResolvers yang telah dibuat sebelumnya.

FreeRadius membutuhkan semua data ini di file /etc/linotp2/rlm_perl.ini, seperti yang saya tulis di atas, jadi jika Anda tidak mengeditnya, lakukan sekarang.

Server sudah terkonfigurasi semua.

Tambahan:

Menyiapkan LinOTP di Debian 9:

Установка:

# 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 default, di Debian 9 mysql (mariaDB) tidak menawarkan untuk mengatur kata sandi root, tentu saja Anda dapat membiarkannya kosong, tetapi jika Anda membaca berita, ini sering kali mengarah ke "epic failed", jadi kami akan mengaturnya 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

Rekatkan kodenya (dikirim oleh JuriM, terima kasih untuk itu!):

server linotp {
mendengarkan {
ipaddr = *
pelabuhan = 1812
ketik=autentikasi
}
mendengarkan {
ipaddr = *
pelabuhan = 1813
ketik = akt
}
mengizinkan {
praproses
memperbarui {
&kontrol:Jenis-Auth := Perl
}
}
mengautentikasi {
Perl Tipe Auth {
perl
}
}
akuntansi {
unix
}
}

Sunting /etc/freeradius/3.0/mods-enabled/Perl

perl {
nama file = /usr/share/linotp/radius_linotp.pm
func_authenticate = mengautentikasi
func_authorize = otorisasi
}

Sayangnya di Debian 9 perpustakaan radius_linotp.pm tidak diinstal 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 kita edit /etc/freeradius/3.0/clients.conf

server klien {
ipaddr = 192.168.188.0/24
rahasia = kata sandi Anda
}

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

Kami menempelkan kode yang sama di sana seperti saat menginstal di debian 8 (dijelaskan di atas)

itu semua sesuai dengan idenya. (belum diuji)

Saya akan meninggalkan beberapa tautan di bawah ini tentang pengaturan sistem yang paling sering perlu dilindungi dengan otentikasi dua faktor:
Menyiapkan otentikasi dua faktor di Apache2

Pengaturan dengan Cisco ASA(server pembuatan token yang berbeda digunakan di sana, tetapi pengaturan ASA itu sendiri sama).

VPN dengan otentikasi dua faktor

pengaturan otentikasi dua faktor di ssh (LinOTP juga digunakan di sana) - terima kasih kepada penulisnya. Di sana Anda juga dapat menemukan hal menarik tentang pengaturan kebijakan LiOTP.

Selain itu, cms di banyak situs mendukung otentikasi dua faktor (Untuk WordPress, LinOTP bahkan memiliki modul khusus untuk itu github), misalnya, jika Anda ingin membuat bagian yang dilindungi di situs web perusahaan Anda untuk karyawan perusahaan.
FAKTA PENTING! JANGAN centang kotak “Google autenteficator” untuk menggunakan Google Authenticator! Kode QR tidak terbaca maka... (fakta aneh)

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

Terima kasih kepada para penulis.

Sumber: www.habr.com

Tambah komentar