
היום אני רוצה לשתף כיצד להגדיר שרת אימות דו-גורמי כדי להגן על רשת ארגונית, אתרים, שירותים, 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.confclient 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}לאחר מכן, צור קובץ משתמש:
# touch /etc/freeradius/usersאנחנו עורכים את הקובץ, אומרים לרדיוס שנשתמש ב-perl לאימות.
# nano /etc/freeradius/usersDEFAULT 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.iniURL=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 -puse 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 (מתואר לעיל)
זה הכל לפי הרעיון. (עדיין לא נבדק)
אשאיר להלן מספר קישורים על הגדרת מערכות שלרוב צריכות להיות מוגנות באמצעות אימות דו-גורמי:
הגדרת אימות דו-גורמי ב
(משתמשים שם בשרת אחר ליצירת אסימונים, אבל ההגדרות של ה-ASA עצמו זהות).
התאמה (גם שם משתמשים ב-LinOTP) - תודה למחבר. שם תוכלו למצוא גם דברים מעניינים על הגדרת מדיניות LiOTP.
כמו כן, מערכת ניהול התוכן (CMS) של אתרים רבים תומכת באימות דו-שלבי (לדוגמה WordPress ל-LinOTP יש אפילו מודול מיוחד משלו. ), לדוגמה, אם ברצונך ליצור קטע מוגן באתר האינטרנט של החברה עבור עובדי החברה.
עובדה חשובה! אל תסמן את התיבה "מאמת Google" כדי להשתמש ב-Google Authenticator! קוד ה-QR אינו קריא אז... (עובדה מוזרה)
כדי לכתוב מאמר זה, נעשה שימוש במידע מהמאמרים הבאים:
תודה לכותבים.
מקור: www.habr.com
