چند نمونه از سازماندهی WiFi شرکتی قبلاً توضیح داده شده است. در اینجا توضیح خواهم داد که چگونه یک راه حل مشابه را پیاده سازی کردم و مشکلاتی را که در هنگام اتصال به دستگاه های مختلف با آن مواجه شدم. ما از LDAP موجود با کاربران ثبت نام شده استفاده می کنیم، FreeRadius را افزایش می دهیم و WPA2-Enterprise را روی کنترل کننده Ubnt پیکربندی می کنیم. به نظر می رسد همه چیز ساده است. اجازه بدید ببینم…
کمی در مورد روش های EAP
قبل از ادامه کار، باید تصمیم بگیریم که از کدام روش احراز هویت در راه حل خود استفاده کنیم.
از ویکی پدیا:
EAP یک چارچوب احراز هویت است که اغلب در شبکه های بی سیم و اتصالات نقطه به نقطه استفاده می شود. این قالب برای اولین بار در RFC 3748 توضیح داده شد و در RFC 5247 به روز شد.
EAP برای انتخاب یک روش احراز هویت، عبور کلیدها و پردازش آن کلیدها با افزونه هایی به نام روش های EAP استفاده می شود. روش های EAP زیادی وجود دارد که هم با خود EAP تعریف شده و هم توسط فروشندگان منفرد منتشر شده است. EAP لایه پیوند را تعریف نمی کند، بلکه فقط قالب پیام را تعریف می کند. هر پروتکلی که از EAP استفاده می کند، پروتکل کپسوله سازی پیام EAP خود را دارد.
خود روش ها:
- LEAP یک پروتکل اختصاصی است که توسط سیسکو توسعه یافته است. آسیب پذیری پیدا شد در حال حاضر استفاده از آن توصیه نمی شود
- EAP-TLS در بین فروشندگان بی سیم به خوبی پشتیبانی می شود. این یک پروتکل امن است زیرا جانشین استانداردهای SSL است. راه اندازی مشتری بسیار پیچیده است. علاوه بر رمز عبور، به گواهی مشتری نیاز دارید. در بسیاری از سیستم ها پشتیبانی می شود
- EAP-TTLS - به طور گسترده در بسیاری از سیستم ها پشتیبانی می شود، امنیت خوبی را با استفاده از گواهی های PKI فقط در سرور احراز هویت ارائه می کند.
- EAP-MD5 یکی دیگر از استانداردهای باز است. حداقل امنیت را ارائه می دهد. آسیب پذیر است، از احراز هویت متقابل و تولید کلید پشتیبانی نمی کند
- EAP-IKEv2 - بر اساس پروتکل تبادل کلید اینترنت نسخه 2. احراز هویت متقابل و ایجاد کلید جلسه بین مشتری و سرور را فراهم می کند.
- PEAP راه حل مشترک CISCO، Microsoft و RSA Security به عنوان یک استاندارد باز است. به طور گسترده در محصولات موجود است، امنیت بسیار خوبی را فراهم می کند. مشابه EAP-TTLS، فقط به یک گواهی در سمت سرور نیاز دارد
- PEAPv0/EAP-MSCHAPv2 - پس از EAP-TLS، این دومین استاندارد پرکاربرد در جهان است. استفاده از رابطه مشتری و سرور در مایکروسافت، سیسکو، اپل، لینوکس
- PEAPv1/EAP-GTC - ایجاد شده توسط Cisco به عنوان جایگزینی برای PEAPv0/EAP-MSCHAPv2. به هیچ وجه از داده های احراز هویت محافظت نمی کند. در سیستم عامل ویندوز پشتیبانی نمی شود
- EAP-FAST تکنیکی است که توسط سیسکو برای اصلاح نواقص LEAP توسعه یافته است. از اعتبار دسترسی محافظت شده (PAC) استفاده می کند. کاملا ناتمام
از بین این همه تنوع، انتخاب هنوز عالی نیست. روش احراز هویت مورد نیاز بود: امنیت خوب، پشتیبانی در همه دستگاه ها (ویندوز 10، macOS، لینوکس، اندروید، iOS) و در واقع، هر چه ساده تر، بهتر. بنابراین، انتخاب بر روی EAP-TTLS در ارتباط با پروتکل PAP افتاد.
ممکن است این سوال پیش بیاید - چرا از PAP استفاده کنیم؟ زیرا او رمزهای عبور را به صورت شفاف ارسال می کند؟
بله درست است. ارتباط بین FreeRadius و FreeIPA از این طریق انجام خواهد شد. در حالت اشکال زدایی، می توانید نحوه ارسال نام کاربری و رمز عبور را پیگیری کنید. بله، و آنها را رها کنید، فقط شما به سرور FreeRadius دسترسی دارید.
می توانید در مورد کار EAP-TTLS بیشتر بخوانید
رادیوس آزاد
FreeRadius در CentOS 7.6 افزایش خواهد یافت. در اینجا هیچ چیز پیچیده ای وجود ندارد، ما آن را به روش معمول تنظیم می کنیم.
yum install freeradius freeradius-utils freeradius-ldap -y
نسخه 3.0.13 از روی بسته ها نصب شده است. دومی را می توان گرفت
پس از آن، FreeRadius در حال حاضر کار می کند. می توانید خط را در /etc/raddb/users لغو نظر کنید
steve Cleartext-Password := "testing"
در حالت دیباگ وارد سرور شوید
freeradius -X
و یک اتصال آزمایشی از لوکال هاست ایجاد کنید
radtest steve testing 127.0.0.1 1812 testing123
جواب گرفت دریافت Access-Accept ID 115 از 127.0.0.1:1812 تا 127.0.0.1:56081 طول 20، یعنی همه چیز اوکی است. برو جلو.
ماژول را وصل می کنیم ldap.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
و بلافاصله آن را تغییر می دهیم. ما به FreeRadius نیاز داریم تا بتوانیم به FreeIPA دسترسی داشته باشیم
mods-enabled/ldap
ldap {
server="ldap://ldap.server.com"
port=636
start_tls=yes
identity="uid=admin,cn=users,dc=server,dc=com"
password=**********
base_dn="cn=users,dc=server,dc=com"
set_auth_type=yes
...
user {
base_dn="${..base_dn}"
filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
}
...
سرور radius را مجددا راه اندازی کنید و همگام سازی کاربران LDAP را بررسی کنید:
radtest user_ldap password_ldap localhost 1812 testing123
در حال ویرایش eap in mods-enabled/eap
در اینجا دو نمونه از eap را اضافه می کنیم. آنها فقط در گواهینامه ها و کلیدها متفاوت خواهند بود. در زیر توضیح خواهم داد که چرا اینطور است.
mods-enabled/eap
eap eap-client { default_eap_type = ttls timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = ${max_requests}
tls-config tls-common {
private_key_file = ${certdir}/fisrt.key
certificate_file = ${certdir}/first.crt
dh_file = ${certdir}/dh
ca_path = ${cadir}
cipher_list = "HIGH"
cipher_server_preference = no
ecdh_curve = "prime256v1"
check_crl = no
}
ttls {
tls = tls-common
default_eap_type = md5
copy_request_to_tunnel = no
use_tunneled_reply = yes
virtual_server = "inner-tunnel"
}
}
eap eap-guest {
default_eap_type = ttls timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = ${max_requests}
tls-config tls-common {
private_key_passwotd=blablabla
private_key_file = ${certdir}/server.key
certificate_file = ${certdir}/server.crt
dh_file = ${certdir}/dh
ca_path = ${cadir}
cipher_list = "HIGH"
cipher_server_preference = no
ecdh_curve = "prime256v1"
check_crl = no
}
ttls {
tls = tls-common
default_eap_type = md5
copy_request_to_tunnel = no
use_tunneled_reply = yes
virtual_server = "inner-tunnel"
}
}
ویرایش بیشتر سایت فعال/پیش فرض. بخش مجوز و احراز هویت مورد توجه است.
سایت فعال/پیش فرض
authorize {
filter_username
preprocess
if (&User-Name == "guest") {
eap-guest {
ok = return
}
}
elsif (&User-Name == "client") {
eap-client {
ok = return
}
}
else {
eap-guest {
ok = return
}
}
ldap
if ((ok || updated) && User-Password) {
update {
control:Auth-Type := ldap
}
}
expiration
logintime
pap
}
authenticate {
Auth-Type LDAP {
ldap
}
Auth-Type eap-guest {
eap-guest
}
Auth-Type eap-client {
eap-client
}
pap
}
در بخش autorize، ما همه ماژول هایی را که نیاز نداریم حذف می کنیم. ما فقط ldap را ترک می کنیم. تأیید مشتری را با نام کاربری اضافه کنید. به همین دلیل است که ما دو نمونه از eap را در بالا اضافه کردیم.
چند EAPواقعیت این است که هنگام اتصال برخی از دستگاه ها، از گواهینامه های سیستم استفاده می کنیم و دامنه را مشخص می کنیم. ما یک گواهی و یک کلید از یک مرجع گواهی معتبر داریم. شخصا، به نظر من، چنین روش اتصال ساده تر از انداختن گواهی امضا شده بر روی هر دستگاه است. اما حتی بدون گواهینامه های خود امضا شده، باز هم جواب نداد. دستگاه های سامسونگ و نسخه های Android =< 6 نمی توانند از گواهی های سیستم استفاده کنند. بنابراین، ما یک نمونه جداگانه از eap-guest را با گواهینامه های خود امضا شده برای آنها ایجاد می کنیم. برای همه دستگاههای دیگر، ما از eap-client با گواهی قابل اعتماد استفاده خواهیم کرد. هنگام اتصال دستگاه، نام کاربری توسط فیلد ناشناس تعیین می شود. فقط 3 مقدار مجاز است: مهمان، مشتری و یک فیلد خالی. همه چیز دیگر کنار گذاشته می شود. در سیاستمداران پیکربندی خواهد شد. کمی بعد مثال می زنم.
بیایید بخش های مجوز و احراز هویت را در آن ویرایش کنیم سایت فعال / تونل داخلی
سایت فعال / تونل داخلی
authorize {
filter_username
filter_inner_identity
update control {
&Proxy-To-Realm := LOCAL
}
ldap
if ((ok || updated) && User-Password) {
update {
control:Auth-Type := ldap
}
}
expiration
digest
logintime
pap
}
authenticate {
Auth-Type eap-guest {
eap-guest
}
Auth-Type eap-client {
eap-client
}
Auth-Type PAP {
pap
}
ldap
}
در مرحله بعد، باید در خط مشی ها مشخص کنید که کدام نام ها می توانند برای ورود ناشناس استفاده شوند. ویرایش Policy.d/filter.
شما باید خطوطی شبیه به این پیدا کنید:
if (&outer.request:User-Name !~ /^(anon|@)/) {
update request {
Module-Failure-Message = "User-Name is not anonymized"
}
reject
}
و در زیر در elif مقادیر دلخواه را اضافه کنید:
elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
update request {
Module-Failure-Message = "User-Name is not anonymized"
}
reject
}
حالا باید به دایرکتوری برویم گواهینامه ها. در اینجا باید کلید و گواهی یک مرجع گواهی معتبر را قرار دهید، که ما قبلاً داریم و باید گواهینامه های خودامضا را برای eap-guest تولید کنیم.
پارامترهای موجود در فایل را تغییر دهید ca.cnf.
ca.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "CA FreeRadius"
همان مقادیر را در فایل می نویسیم server.cnf. ما فقط تغییر می کنیم
نام متداول:
server.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "Server Certificate FreeRadius"
ايجاد كردن:
make
آماده. اخذ شده server.crt и server.key ما قبلاً در بالا در eap-guest ثبت نام کرده ایم.
و در نهایت اجازه دهید نقاط دسترسی خود را به فایل اضافه کنیم مشتری. من 7 تا از آنها دارم برای اینکه هر نقطه را جداگانه اضافه نکنیم فقط شبکه ای که در آن قرار دارند را می نویسیم (اکسس پوینت های من در یک VLAN جداگانه هستند).
client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}
کنترلر Ubiquiti
ما یک شبکه جداگانه روی کنترلر ایجاد می کنیم. بگذارید 192.168.2.0/24 باشد
به تنظیمات -> نمایه بروید. ما یک مورد جدید ایجاد می کنیم:
آدرس و پورت سرور radius و رمزی که در فایل نوشته شده را می نویسیم clients.conf:
یک نام شبکه بی سیم جدید ایجاد کنید. WPA-EAP (Enterprise) را به عنوان روش احراز هویت انتخاب کنید و نمایه شعاع ایجاد شده را مشخص کنید:
ما همه چیز را ذخیره می کنیم، درخواست می کنیم و ادامه می دهیم.
راه اندازی مشتریان
بیایید با سخت ترین شروع کنیم!
ویندوز 10
مشکل به این واقعیت مربوط می شود که ویندوز هنوز نمی داند چگونه از طریق دامنه به WiFi شرکت متصل شود. بنابراین، ما باید گواهی خود را به صورت دستی در فروشگاه معتبر گواهی آپلود کنیم. در اینجا می توانید هم از امضای خود و هم از مرجع صدور گواهینامه استفاده کنید. من از دومی استفاده خواهم کرد.
در مرحله بعد، باید یک اتصال جدید ایجاد کنید. برای انجام این کار، به تنظیمات شبکه و اینترنت -> مرکز شبکه و اشتراک گذاری -> ایجاد و پیکربندی یک اتصال یا شبکه جدید بروید:
نام شبکه را به صورت دستی وارد کرده و نوع امنیت را تغییر دهید. بعد از اینکه روی آن کلیک کردیم تنظیمات اتصال را تغییر دهید و در تب Security، احراز هویت شبکه - EAP-TTLS را انتخاب کنید.
ما وارد پارامترها می شویم، محرمانه بودن احراز هویت را تجویز می کنیم - مشتری. بهعنوان یک مرجع معتبر صدور گواهینامه، گواهیای را که اضافه کردهایم انتخاب کنید، کادر "در صورتی که سرور مجاز نیست برای کاربر دعوت نامه صادر نکنید" را علامت بزنید و روش احراز هویت - رمز عبور رمزگذاری نشده (PAP) را انتخاب کنید.
بعد، به تنظیمات پیشرفته بروید، روی "مشخص کردن حالت احراز هویت" تیک بزنید. "User Authentication" را انتخاب کرده و روی آن کلیک کنید ذخیره اعتبار. در اینجا باید username_ldap و password_ldap را وارد کنید
ما همه چیز را ذخیره می کنیم، اعمال می کنیم، می بندیم. می توانید به یک شبکه جدید متصل شوید.
لینـوکــس
من روی اوبونتو 18.04، 18.10، فدورا 29، 30 تست کردم.
ابتدا اجازه دهید گواهینامه خود را دانلود کنیم. من در لینوکس پیدا نکردم که آیا می توان از گواهینامه های سیستم استفاده کرد و آیا اصلاً چنین فروشگاهی وجود دارد یا خیر.
بیایید به دامنه متصل شویم. بنابراین، ما به یک گواهی از مرجع صدور گواهینامه که گواهی ما از آن خریداری شده است، نیاز داریم.
تمام اتصالات در یک پنجره انجام می شود. انتخاب شبکه ما:
مشتری ناشناس
دامنه - دامنه ای که گواهی برای آن صادر شده است
آندروید
غیر سامسونگ
از نسخه 7، هنگام اتصال WiFi، می توانید از گواهینامه های سیستم فقط با تعیین دامنه استفاده کنید:
دامنه - دامنه ای که گواهی برای آن صادر شده است
مشتری ناشناس
سامسونگ
همانطور که در بالا نوشتم، دستگاه های سامسونگ نحوه استفاده از گواهینامه های سیستم را هنگام اتصال به وای فای نمی دانند و توانایی اتصال از طریق دامنه را ندارند. بنابراین، شما باید گواهی ریشه مرجع صدور گواهینامه را به صورت دستی اضافه کنید (ca.pem، ما آن را در سرور Radius می گیریم). اینجا جایی است که از خود امضا استفاده خواهد شد.
گواهی را در دستگاه خود دانلود و نصب کنید.
نصب گواهی
در همان زمان، اگر قبلاً تنظیم نشده باشد، باید الگوی باز کردن قفل صفحه، کد پین یا رمز عبور را تنظیم کنید:
من یک نسخه پیچیده از نصب گواهی را نشان دادم. در اکثر دستگاه ها، به سادگی روی گواهی بارگیری شده کلیک کنید.
هنگامی که گواهی نصب شد، می توانید به اتصال ادامه دهید:
گواهی - نشان می دهد که نصب شده است
کاربر ناشناس - مهمان
از MacOS
دستگاههای اپل خارج از جعبه فقط میتوانند به EAP-TLS متصل شوند، اما همچنان باید به آنها گواهی بدهید. برای تعیین روش اتصال متفاوت، باید از Apple Configurator 2 استفاده کنید. بر این اساس، ابتدا باید آن را در مک خود دانلود کنید، یک نمایه جدید ایجاد کنید و تمام تنظیمات WiFi لازم را اضافه کنید.
تنظیم کننده اپل
نام شبکه خود را در اینجا وارد کنید
نوع امنیتی - WPA2 Enterprise
انواع EAP پذیرفته شده - TTLS
نام کاربری و رمز عبور - خالی بگذارید
احراز هویت داخلی - PAP
هویت بیرونی-مشتری
برگه اعتماد در اینجا دامنه خود را مشخص می کنیم
همه. نمایه را می توان ذخیره، امضا و در دستگاه ها توزیع کرد
پس از آماده شدن نمایه، باید آن را در پاپی دانلود کرده و نصب کنید. در طول مراحل نصب، باید usernmae_ldap و password_ldap کاربر را مشخص کنید:
IOS
فرآیند مشابه macOS است. شما باید از یک نمایه استفاده کنید (می توانید از همان پروفایل macOS استفاده کنید. نحوه ایجاد نمایه در Apple Configurator، به بالا مراجعه کنید).
دانلود نمایه، نصب، وارد کردن اطلاعات کاربری، اتصال:
همین. ما یک سرور Radius راه اندازی کردیم، آن را با FreeIPA همگام سازی کردیم و به Ubiquiti AP ها گفتیم که از WPA2-EAP استفاده کنند.
سوالات احتمالی
که در: چگونه پروفایل/گواهینامه را به کارمند منتقل کنیم؟
در باره: من تمام گواهی ها/پروفایل ها را در ftp با دسترسی به وب ذخیره می کنم. یک شبکه مهمان با محدودیت سرعت و دسترسی فقط به اینترنت، به استثنای ftp، ایجاد کرد.
احراز هویت 2 روز طول می کشد، پس از آن بازنشانی می شود و مشتری بدون اینترنت می ماند. که هنگامی که یک کارمند می خواهد به WiFi متصل شود، ابتدا به شبکه مهمان متصل می شود، به FTP دسترسی پیدا می کند، گواهی یا نمایه مورد نیاز خود را دانلود می کند، آن را نصب می کند و سپس می تواند به شبکه شرکت متصل شود.
که در: چرا از طرحواره با MSCHAPv2 استفاده نمی کنید؟ او امن تر است!
در باره: اولاً ، چنین طرحی روی NPS (سیستم سیاست شبکه ویندوز) به خوبی کار می کند ، در اجرای ما لازم است LDAP (FreeIpa) را نیز پیکربندی کنیم و هش های رمز عبور را در سرور ذخیره کنیم. اضافه کردن. انجام تنظیمات توصیه نمی شود، زیرا. این می تواند منجر به مشکلات مختلفی در هماهنگ سازی سونوگرافی شود. دوم، هش MD4 است، بنابراین امنیت زیادی اضافه نمی کند.
که در: آیا می توان دستگاه ها را با مک آدرس مجاز کرد؟
در باره: نه، این ایمن نیست، یک مهاجم میتواند آدرسهای MAC را تغییر دهد، و حتی بیشتر از آن مجوز توسط آدرسهای MAC در بسیاری از دستگاهها پشتیبانی نمیشود.
که در: به طور کلی برای استفاده از همه این گواهی ها چیست؟ می توانید بدون آنها بپیوندید؟
در باره: گواهی ها برای مجوز دادن به سرور استفاده می شود. آن ها هنگام اتصال، دستگاه بررسی می کند که آیا سروری است که می توان به آن اعتماد کرد یا خیر. اگر اینطور باشد، احراز هویت ادامه می یابد، اگر نه، اتصال بسته می شود. شما می توانید بدون گواهینامه متصل شوید، اما اگر یک مهاجم یا همسایه یک سرور شعاع و یک نقطه دسترسی با همان نام ما در خانه راه اندازی کند، می تواند به راحتی اطلاعات کاربری کاربر را رهگیری کند (فراموش نکنید که آنها به صورت متن واضح منتقل می شوند). و هنگامی که از یک گواهی استفاده می شود، دشمن در گزارش های خود فقط نام کاربری ساختگی ما - مهمان یا مشتری و یک خطای نوع - گواهی CA ناشناخته را می بیند.
کمی بیشتر در مورد macOSمعمولاً در macOS، نصب مجدد سیستم از طریق اینترنت انجام می شود. در حالت بازیابی، مک باید به وای فای متصل باشد و نه وای فای شرکتی ما و نه شبکه مهمان در اینجا کار نمی کنند. من شخصاً شبکه دیگری را ایجاد کردم، WPA2-PSK معمولی، پنهان، فقط برای عملیات فنی. یا هنوز هم می توانید یک درایو فلش USB قابل بوت با سیستم از قبل بسازید. اما اگر خشخاش بعد از سال 2015 باشد، همچنان باید یک آداپتور برای این فلش درایو پیدا کنید)
منبع: www.habr.com