เซิร์ฟเวอร์การตรวจสอบสิทธิ์แบบสองปัจจัย LinOTP

เซิร์ฟเวอร์การตรวจสอบสิทธิ์แบบสองปัจจัย LinOTP

วันนี้ฉันต้องการแบ่งปันวิธีการตั้งค่าเซิร์ฟเวอร์การตรวจสอบสิทธิ์แบบสองปัจจัยเพื่อปกป้องเครือข่ายองค์กร ไซต์ บริการ ssh เซิร์ฟเวอร์จะเรียกใช้ชุดค่าผสมต่อไปนี้: LinOTP + FreeRadius

ทำไมเราถึงต้องการมัน?
นี่เป็นโซลูชั่นที่สะดวกสบายและฟรีอย่างสมบูรณ์ ภายในเครือข่ายของตัวเอง โดยไม่ขึ้นอยู่กับผู้ให้บริการบุคคลที่สาม

บริการนี้สะดวกมาก มองเห็นได้ชัดเจน แตกต่างจากผลิตภัณฑ์โอเพ่นซอร์สอื่นๆ และยังรองรับฟังก์ชันและนโยบายจำนวนมาก (เช่น เข้าสู่ระบบ+รหัสผ่าน+(PIN+OTPToken)) โดยจะทำงานร่วมกับบริการส่ง SMS ผ่าน API (LinOTP Config->Provider Config->SMS Provider) สร้างรหัสสำหรับแอปพลิเคชันมือถือ เช่น Google Authentificator และอื่นๆ อีกมากมาย ฉันคิดว่ามันสะดวกกว่าบริการที่กล่าวถึง статье.

เซิร์ฟเวอร์นี้ทำงานได้อย่างสมบูรณ์แบบกับ Cisco ASA, เซิร์ฟเวอร์ OpenVPN, Apache2 และโดยทั่วไปกับเกือบทุกอย่างที่รองรับการรับรองความถูกต้องผ่านเซิร์ฟเวอร์ RADIUS (ตัวอย่างเช่น สำหรับ SSH ในศูนย์ข้อมูล)

มันเป็นสิ่งจำเป็น:

1) เดเบียน 8 (เจสซี่) - แน่นอน! (การติดตั้งแบบทดลองใช้บน debian 9 มีอธิบายไว้ท้ายบทความ)

ราคาเริ่มต้น:

การติดตั้งเดเบียน 8

เพิ่มที่เก็บ LinOTP:

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

การเพิ่มคีย์:

# gpg --search-keys 913DFF12F86258E5

บางครั้งระหว่างการติดตั้งแบบ "ล้าง" หลังจากรันคำสั่งนี้ Debian จะแสดง:

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

นี่คือการตั้งค่า gnupg เริ่มต้น ไม่เป็นไร. เพียงรันคำสั่งอีกครั้ง
สำหรับคำถามของ 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) Выход>

เราตอบ: 1

ถัดไป:

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

# apt-get update

ติดตั้ง mysql. ตามทฤษฎี คุณสามารถใช้เซิร์ฟเวอร์ sql อื่นได้ แต่เพื่อความง่าย ฉันจะใช้เซิร์ฟเวอร์ดังกล่าวตามที่แนะนำสำหรับ LinOTP

(ข้อมูลเพิ่มเติม รวมถึงการกำหนดค่าฐานข้อมูล LinOTP ใหม่ สามารถพบได้ในเอกสารอย่างเป็นทางการของ ลิงค์- คุณยังสามารถค้นหาคำสั่ง: dpkg-reconfigure linotp เพื่อเปลี่ยนพารามิเตอร์หากคุณได้ติดตั้ง mysql แล้ว)

# apt-get install mysql-server

# apt-get update

(จะไม่เจ็บที่จะตรวจสอบการอัปเดตอีกครั้ง)
ติดตั้ง LinOTP และโมดูลเพิ่มเติม:

# apt-get install linotp

เราตอบคำถามของผู้ติดตั้ง:
ใช้ Apache2: ใช่
สร้างรหัสผ่านสำหรับผู้ดูแลระบบ Linotp: “รหัสผ่านของคุณ”
สร้างใบรับรองที่ลงนามด้วยตนเองหรือไม่: ใช่
ใช้ MySQL?: ใช่
ฐานข้อมูลอยู่ที่ไหน: localhost
สร้างฐานข้อมูล LinOTP (ชื่อฐาน) บนเซิร์ฟเวอร์: LinOTP2
สร้างผู้ใช้แยกต่างหากสำหรับฐานข้อมูล: LinOTP2
เราตั้งรหัสผ่านสำหรับผู้ใช้: “รหัสผ่านของคุณ”
ฉันควรสร้างฐานข้อมูลตอนนี้หรือไม่? (ประมาณว่า “คุณแน่ใจหรือว่าต้องการ...”): ใช่
ป้อนรหัสผ่านรูท MySQL ที่คุณสร้างขึ้นเมื่อติดตั้ง: “รหัสผ่านของคุณ”
ทำ

(ไม่บังคับ คุณไม่จำเป็นต้องติดตั้ง)

# apt-get install linotp-adminclient-cli 

(ไม่บังคับ คุณไม่จำเป็นต้องติดตั้ง)

# apt-get install libpam-linotp  

ดังนั้นเว็บอินเตอร์เฟส Linotp ของเราจึงพร้อมให้บริการที่:

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

ฉันจะพูดถึงการตั้งค่าในเว็บอินเตอร์เฟสในภายหลัง

ตอนนี้สิ่งที่สำคัญที่สุด! เราเพิ่ม FreeRadius และเชื่อมโยงกับ Linotp

ติดตั้ง FreeRadius และโมดูลสำหรับการทำงานกับ LinOTP

# apt-get install freeradius linotp-freeradius-perl

สำรองข้อมูลไคลเอนต์และการกำหนดค่ารัศมีผู้ใช้

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

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

สร้างไฟล์ไคลเอนต์เปล่า:

# touch /etc/freeradius/clients.conf

การแก้ไขไฟล์กำหนดค่าใหม่ของเรา (การกำหนดค่าที่สำรองไว้สามารถใช้เป็นตัวอย่างได้)

# nano /etc/freeradius/clients.conf

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

จากนั้นสร้างไฟล์ผู้ใช้:

# touch /etc/freeradius/users

เราแก้ไขไฟล์โดยบอกรัศมีว่าเราจะใช้ Perl ในการตรวจสอบสิทธิ์

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

จากนั้น แก้ไขไฟล์ /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

เราจำเป็นต้องระบุเส้นทางไปยังสคริปต์ Perl linotp ในพารามิเตอร์โมดูล:

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

.....
ต่อไป เราจะสร้างไฟล์ที่เราบอกว่าจะนำข้อมูลมาจากไหน (โดเมน ฐานข้อมูล หรือไฟล์)

# 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

ฉันจะลงรายละเอียดเพิ่มเติมอีกเล็กน้อยที่นี่เพราะมันสำคัญ:

คำอธิบายไฟล์แบบเต็มพร้อมความคิดเห็น:
#IP ของเซิร์ฟเวอร์ linOTP (ที่อยู่ IP ของเซิร์ฟเวอร์ LinOTP ของเรา)
URL=https://172.17.14.103/validate/simplecheck
#พื้นที่ของเราที่เราจะสร้างในเว็บอินเตอร์เฟส LinOTP)
REALM=ส่วนหลัง1
#ชื่อกลุ่มผู้ใช้ที่สร้างขึ้นในเว็บปากกระบอกปืน LinOTP
RESCONF=flat_file
#ทางเลือก: แสดงความคิดเห็นหากทุกอย่างดูเหมือนจะทำงานได้ดี
ดีบัก=จริง
#ทางเลือก: ใช้สิ่งนี้ หากคุณมีใบรับรองที่ลงนามด้วยตนเอง มิฉะนั้นจะใส่เครื่องหมายความคิดเห็น (SSL หากเราสร้างใบรับรองของเราเองและต้องการตรวจสอบ)
SSL_CHECK=เท็จ

จากนั้นสร้างไฟล์ /etc/freeradius/sites-available/linotp

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

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

และคัดลอกการกำหนดค่าลงไป (ไม่จำเป็นต้องแก้ไขอะไร):

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
}

ต่อไปเราจะสร้างลิงค์ SIM:

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

โดยส่วนตัวแล้ว ฉันจะปิดไซต์ Radius เริ่มต้น แต่ถ้าคุณต้องการ คุณสามารถแก้ไขการกำหนดค่าหรือปิดใช้งานไซต์เหล่านั้นได้

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

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

# service freeradius reload

ตอนนี้เรากลับมาที่หน้าเว็บไซต์และดูรายละเอียดเพิ่มเติมอีกเล็กน้อย:
ที่มุมขวาบน คลิก LinOTP Config -> UserIdResolvers -> New
เราเลือกสิ่งที่เราต้องการ: LDAP (AD win, LDAP samba) หรือ SQL หรือผู้ใช้ภายในของระบบ Flatfile

กรอกข้อมูลในช่องที่ต้องกรอก

ต่อไปเราจะสร้าง REALMS:
ที่มุมขวาบน คลิก LinOTP Config -> Realms -> New
และตั้งชื่อให้กับ REALMS ของเรา และคลิกที่ UserIdResolvers ที่สร้างไว้ก่อนหน้านี้

FreeRadius ต้องการข้อมูลทั้งหมดนี้ในไฟล์ /etc/linotp2/rlm_perl.ini ตามที่ฉันได้เขียนไว้ข้างต้น ดังนั้นหากคุณไม่ได้แก้ไข ให้ทำทันที

เซิร์ฟเวอร์ได้รับการกำหนดค่าทั้งหมดแล้ว

เสริม:

การตั้งค่า LinOTP บน 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

(โดยค่าเริ่มต้นใน Debian 9 mysql (mariaDB) ไม่ได้เสนอให้ตั้งรหัสผ่านรูท แน่นอนคุณสามารถปล่อยว่างไว้ได้ แต่ถ้าคุณอ่านข่าว สิ่งนี้มักจะนำไปสู่ ​​"ความล้มเหลวครั้งใหญ่" ดังนั้นเราจะตั้งค่ามัน ถึงอย่างไร)

# 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

วางโค้ด (ส่งโดย JuriM ขอบคุณสำหรับสิ่งนั้น!):

เซิร์ฟเวอร์ linotp {
ฟัง {
ไอแพดดร = *
พอร์ต = 1812
ประเภท=รับรองความถูกต้อง
}
ฟัง {
ไอแพดดร = *
พอร์ต = 1813
ประเภท = บัญชี
}
อนุญาต {
ก่อนการประมวลผล
อัปเดต {
&control:ประเภทการรับรองความถูกต้อง := Perl
}
}
ตรวจสอบสิทธิ์ {
Perl ประเภทการรับรองความถูกต้อง {
Perl
}
}
การบัญชี {
ยูนิกซ์
}
}

แก้ไข /etc/freeradius/3.0/mods-enabled/perl

เพิร์ล {
ชื่อไฟล์ = /usr/share/linotp/radius_linotp.pm
func_authenticate = รับรองความถูกต้อง
func_authorize = อนุญาต
}

น่าเสียดายที่ใน Debian 9 ไลบรารี radius_linotp.pm ไม่ได้ถูกติดตั้งจากที่เก็บ ดังนั้นเราจะนำมาจาก 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

ตอนนี้เรามาแก้ไข /etc/freeradius/3.0/clients.conf กันดีกว่า

เซิร์ฟเวอร์ไคลเอนต์ {
ipaddr = 192.168.188.0/24
ความลับ = รหัสผ่านของคุณ
}

ตอนนี้เรามาแก้ไข nano /etc/linotp2/rlm_perl.ini กันดีกว่า

เราวางโค้ดเดียวกันกับเมื่อติดตั้งบนเดเบียน 8 (อธิบายไว้ข้างต้น)

นั่นคือทั้งหมดตามความคิด (ยังไม่ได้ทดสอบ)

ฉันจะทิ้งลิงก์บางส่วนไว้ด้านล่างเกี่ยวกับการตั้งค่าระบบที่ส่วนใหญ่จำเป็นต้องได้รับการปกป้องด้วยการรับรองความถูกต้องด้วยสองปัจจัย:
การตั้งค่าการรับรองความถูกต้องด้วยสองปัจจัยใน Apache2

ตั้งค่าด้วย Cisco ASA(มีการใช้เซิร์ฟเวอร์การสร้างโทเค็นอื่นที่นั่น แต่การตั้งค่าของ ASA เองจะเหมือนกัน)

VPN พร้อมการรับรองความถูกต้องด้วยสองปัจจัย

การตั้งค่า การรับรองความถูกต้องด้วยสองปัจจัยใน ssh (ใช้ LinOTP ที่นั่นด้วย) - ขอบคุณผู้เขียน คุณยังจะพบสิ่งที่น่าสนใจเกี่ยวกับการตั้งค่านโยบาย LiOTP อีกด้วย

นอกจากนี้ cms ของหลาย ๆ ไซต์ยังรองรับการตรวจสอบสิทธิ์แบบสองปัจจัย (สำหรับ WordPress, LinOTP ยังมีโมดูลพิเศษของตัวเองสำหรับ GitHub) ตัวอย่างเช่น หากคุณต้องการสร้างส่วนที่มีการป้องกันบนเว็บไซต์บริษัทของคุณสำหรับพนักงานของบริษัท
ข้อเท็จจริงที่สำคัญ! อย่าทำเครื่องหมายที่ช่อง “Google autenteficator” เพื่อใช้ Google Authenticator! QR code อ่านไม่ได้แล้ว... (ความจริงน่าแปลก)

ในการเขียนบทความนี้ มีการใช้ข้อมูลจากบทความต่อไปนี้:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

ขอขอบคุณผู้เขียน

ที่มา: will.com

เพิ่มความคิดเห็น