שרת אימות דו-גורמי LinOTP

שרת אימות דו-גורמי LinOTP

היום אני רוצה לשתף כיצד להגדיר שרת אימות דו-גורמי כדי להגן על רשת ארגונית, אתרים, שירותים, ssh. השרת יריץ את השילוב הבא: LinOTP + FreeRadius.

למה הוא צריך אותנו?
זהו פתרון חינמי ונוח לחלוטין, בתוך הרשת שלו, ללא תלות בספקי צד שלישי.

שירות זה נוח מאוד, די ויזואלי, בניגוד למוצרי קוד פתוח אחרים, וגם תומך במספר עצום של פונקציות ומדיניות (לדוגמה, כניסה+סיסמה+(PIN+OTPToken)). באמצעות ה-API, הוא משתלב עם שירותי שליחת sms (LinOTP Config->Provider Config->SMS Provider), מייצר קודים ליישומים ניידים כגון Google Authentificator ועוד ועוד. אני חושב שזה יותר נוח מהשירות שנדון בו статье.

שרת זה עובד מצוין עם Cisco ASA, OpenVPN שרת, Apache2, ובכלל כמעט עם כל דבר שתומך באימות דרך שרת RADIUS (לדוגמה, עבור SSH במרכז נתונים).

נדרש:

1) Debian 8 (ג'סי) — בהכרח! (התקנה ניסיון ב debian 9 מתואר בסוף המאמר)

בית:

להתקין Debian 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. זה בסדר. פשוט הפעל את הפקודה שוב.
לשאלה Debiana:

gpg: поиск "913DFF12F86258E5" на hkp сервере keys.gnupg.net
(1)	LSE LinOTP2 Packaging <linotp2@lsexperts.de>
	  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 שיצרת בעת התקנתה: "YourPassword"
סיימתי.

(אופציונלי, אתה לא צריך להתקין אותו)

# 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=rearm1
#שם קבוצת המשתמשים שנוצרת בלוע האינטרנט של LinOTP.
RESCONF=קובץ_flat
#אופציונלי: הערה אם נראה שהכל עובד כשורה
Debug=True
#אופציונלי: השתמש בזה, אם יש לך אישורים בחתימה עצמית, אחרת הגיבו (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 -> חדש
אנחנו בוחרים מה שאנחנו רוצים: 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) לא מציע הגדרת סיסמת root. כמובן שניתן להשאיר אותה ריקה, אבל אם תקראו חדשות, זה מוביל לעתים קרובות ל"כשלים אפיים", אז נגדיר אותה בכל מקרה.

# 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 {
להקשיב {
ipaddr = *
יציאה = 1812
type=auth
}
להקשיב {
ipaddr = *
יציאה = 1813
סוג = acct
}
הרשאה {
עיבוד מקדים
עדכון {
&control:Auth-Type := Perl
}
}
אימות {
Auth-Type Perl {
פרל
}
}
חשבונאות {
יוניקס
}
}

ערוך /etc/freeradius/3.0/mods-enabled/perl

perl {
שם הקובץ = /usr/share/linotp/radius_linotp.pm
func_authenticate = אימות
func_authorize = הרשאה
}

לרוע המזל ב debian הספרייה 9 radius_linotp.pm לא מותקנת מהמאגרים, לכן ניקח אותה מגיטהאב.

# 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
סוד = הסיסמה שלך
}

עכשיו בואו נתקן את ננו /etc/linotp2/rlm_perl.ini

אנו מכניסים שם את אותו קוד כמו בעת ההתקנה על debian 8 (מתואר לעיל)

זה הכל לפי הרעיון. (עדיין לא נבדק)

אשאיר להלן מספר קישורים על הגדרת מערכות שלרוב צריכות להיות מוגנות באמצעות אימות דו-גורמי:
הגדרת אימות דו-גורמי ב Apache2

התקנה עם Cisco ASA(משתמשים שם בשרת אחר ליצירת אסימונים, אבל ההגדרות של ה-ASA עצמו זהות).

VPN עם אימות דו-גורמי

התאמה אימות שני גורמים ב-ssh (גם שם משתמשים ב-LinOTP) - תודה למחבר. שם תוכלו למצוא גם דברים מעניינים על הגדרת מדיניות LiOTP.

כמו כן, מערכת ניהול התוכן (CMS) של אתרים רבים תומכת באימות דו-שלבי (לדוגמה WordPress ל-LinOTP יש אפילו מודול מיוחד משלו. GitHub), לדוגמה, אם ברצונך ליצור קטע מוגן באתר האינטרנט של החברה עבור עובדי החברה.
עובדה חשובה! אל תסמן את התיבה "מאמת Google" כדי להשתמש ב-Google Authenticator! קוד ה-QR אינו קריא אז... (עובדה מוזרה)

כדי לכתוב מאמר זה, נעשה שימוש במידע מהמאמרים הבאים:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

תודה לכותבים.

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster