این یک وبلاگ میهمان مارتین لانگر ، دکتری است. دانشجوی "هماهنگ سازی زمان امن با استفاده از پروتکل های زمانبندی مبتنی بر بسته" در دانشگاه علمی کاربردی اوستفالیا ، آلمان.
در پست های قبلی ، من پروتکل امنیت زمان شبکه (NTS) را معرفی کردم و مهمترین ویژگی ها را شرح دادم. اگرچه مراحل مشخصات به پایان نرسیده است ، در حال حاضر برخی از پیاده سازی های مستقل NTS و سرورهای زمان عمومی (IETF106) وجود دارد. NTPsec یکی از نمایندگان مهم این سری است و در حال حاضر راه حل پیشرفته NTS را ارائه می دهد. در این پست ، یک راهنمای کوتاه برای تنظیم یک سرویس دهنده / سرور NTP با امنیت NTS با NTPsec ارائه می دهم.
بررسی اجمالی
NTPsec یک چنگال از اجرای NTPD مرجع NTP است که بارهای ارثی را برای ارائه حذف کرده است. یک کد کد کوچکتر علاوه بر این ، اهمیت NTPsec در محیط لینوکس در حال افزایش است و یکی از اولین پیاده سازی های NTP با قابلیت NTS است.
به دلیل پشتیبانی ویندوز که از دست رفته نیست ، این راهنما فقط برای سیستم های لینوکس در نظر گرفته شده است. بنابراین من از Raspberry Pi 3B با سیستم عامل اخیر دبیان استفاده می کنم Raspbian . روش شرح داده شده در اینجا همچنین با سایر توزیع های لینوکس به همان شکل یا مشابه کار می کند.
کامپوننت های نرم افزار مورد استفاده
برای استفاده از NTS ، به مؤلفه های نرم افزاری زیر نیاز داریم. می توانید دستورالعمل های دقیق برای نصب و راه اندازی را در زیر بیابید:
ویژگی های NTS NTPsec
در حال حاضر (Q4 / 2019) ، NTPsec پیش نویس NTS را پیاده سازی کرده است. تنظیمات زیر از مشخصات تا آخرین پیش نویس نسخه 20 هیچ تغییر مهمی را ارائه نمی دهد تا نماینده NTPsec باشد. ویژگی های NTS زیر در اجرای موجود است:
- پشتیبانی TLS برای مرحله کلید NTS (NTS-KE)
- مدیریت خطا (سمت سرور)
- بسته های درخواست بدون پاسخ * را از بین ببرید *
* سرور فقط بسته های درخواست نامعتبر را دور می زند و NTSN (NTS NAK) را به مشتری ارسال نمی کند. این اشکالی ندارد ، اما مشتری نمی داند آیا درخواستی از بین رفته است یا اینکه در هنگام تأیید خطایی روی داده است.
تهیه
خوب ، اکنون ما بالاخره می توانیم شروع کنیم. ابتدا وارد Raspberry Pi (RPi) خود می شویم و مطمئن می شویم که یک اتصال اینترنتی داریم. از طریق SSH می توانید مستقیماً از طریق SSH به صفحه و صفحه کلید متصل یا بی سیم دسترسی داشته باشید. سپس سیستم و بسته های نصب شده را بروزرسانی می کنیم:
# سیستم بروزرسانی sudo apt آپدیت sudo apt به روزرسانی |
بعدی ، نسخه OpenSSL را بررسی می کنیم ، که باید 1.1.1b یا بالاتر باشد:
# check opensl نسخه opensl نسخه |
] برای اطمینان از عملکرد صحیح NTPsec ، باید سرویس همگام سازی محلی را نیز غیرفعال کنیم. این همچنین در مورد سایر خدمات (مانند OpenNTPD ، مزمن ، و …) اعمال می شود.
# سرویس زمانی محلی sudo systemctl stop systemd – timesyncd [19659019] .service sudo systemctl disable systemd – timesyncd . service service |
در عوض ، ما می توانیم آن را به شرح زیر حذف کنید:
# حذف NTP sudo apt حذف – auto – remove ntp |
این امر ضروری است زیرا NTPD و NTPsec از همان پرونده ها و نام ها برای برنامه استفاده می کنند.
نصب NTPsec
نصب NTPsec می تواند از طریق مدیر بسته و همچنین با تهیه دستی کد منبع انجام شود.
روش 1: استفاده از مدیر بسته بندی
ساده ترین راه برای نصب NTPsec استفاده از یک مدیر بسته است. برای پشتیبانی NTS ، به نسخه 1.1.8 یا بالاتر نیاز داریم. برای بررسی اینکه کدام نسخه بسته موجود است ، از دستور apt show استفاده می کنیم:
apt show ntpsec | grep نسخه |
اگر نسخه 1.1.8 در دسترس است ، می توانیم به سادگی آن را نصب کنیم:
همین! می توانید مراحل زیر را پرش کنید و مستقیماً به پیکربندی بروید.
روش 2: دستیابی به کد منبع
تنظیم منبع دستی شامل ساخت و نصب NTPsec و همچنین ثبت آن به عنوان سرویس سیستم (
قسمت 1: ساختمان و نصب
این راهنمای نصب بر اساس دستورالعمل های NTPsec است و می تواند بدون تلاش زیادی انجام شود. ما با نصب برخی از ابزارها و کامپایلرهای اساسی شروع می کنیم. سپس یک فهرست کار موقت ایجاد می کنیم که در آن کد منبع NTPsec را کپی و ساخت می کنیم.
# ابزار و کامپایلرهای اصلی (g ++ ، gcc ، make، …) را نصب کنید sudo apt نصب کنید. build – ضروری # ایجاد فهرست موقت cd / home / [19659019] pi mkdir ntpsec_source cd ntpsec_source |
] بعدی ، دو راه وجود دارد یا مخزن فعلی git (نوع 1) را کلون می کنیم یا نسخه NTPsec اخیر (نوع 2) را بارگیری می کنیم.
Variant 1: با استفاده از مخزن Git
# install git sudo [19659019] apt install git # کلون مخزن git NTPsec (نسخه اخیر) git clone https : 19659034] / / gitlab .com / NTPsec / ntpsec .git
در مثال اول Raspberry Pi همگام سازی ساعت آن با یک سرور زمان NTPsec عمومی با استفاده از یک اتصال NTP نا امن کلاسیک. در مثال دوم ، مشتری با یک سرور زمان مشابه از طریق اتصال NTP امن NTS ارتباط برقرار می کند. کانال اولیه به سرور NTS-KE از پورت پیش فرض 123 TCP (در حال حاضر خاص اجرا) استفاده می کند. از آنجا که سرور زمان NTPsec از گواهی های صادر شده توسط Let Encrypt استفاده می کند ، دیگر نیازی به تنظیم پارامترهای اضافی نداریم. برای بررسی گواهینامه ها ، مشتری از استخر محلی محلی CA ( /etc/ssl/certs/ca-certificates.crt ) استفاده می کند ، که امکان تأیید گواهی های صادر شده توسط Letry Encrypt را نیز می دهد. به عنوان مثال سوم ، ما به سرور زمان دانشگاه Ostfalia متصل می شویم ، که قابلیت NTS را نیز دارد. از این درگاه TCP 443 برای اتصال NTS-KE استفاده می شود و از گواهی های تست خود امضا شده استفاده می کند. برای بررسی گواهی سرور باید CA CA را به صورت دستی مشخص کنیم. گواهینامه مربوطه را می توان با دستور زیر بارگیری کرد:
احتیاط:
سرور زمانه دانشگاه اوستفالیا نیز کلید خصوصی خود را منتشر می کند ، زیرا یک سرور تست عمومی است. این سرور زمان نباید برای هماهنگ سازی ساعت سیستم های تولیدی مورد استفاده قرار گیرد. مثال چهارم تنها با اعتبار سوم دامنه غیرفعال شده با سومی تفاوت دارد. این می تواند زمانی مفید باشد که ما یک سرور NTS محلی را با مجوزهای بدون دامنه ثبت شده اجرا کنیم. سایر ورودی های موجود در پرونده پیکربندی اختیاری هستند و برای ضبط کردن آمار و پرونده های ثبت استفاده می شوند. توضیحات و همچنین لیست کامل پارامترها (شامل NTS) را می توان در ntp_conf.adoc یافت. در اینجا فقط مختصراً شرح داده شده است: [سرور
پیکربندی سرورپیکربندی سرور کمی ساده تر است:
برای یک سرویس گیرنده NTP امن NTS (اینجا از مثال 3 پیکربندی) موارد زیر را می بینیم:
همه چیز خوب است. این گواهی معتبر است و مشتری 8 کوکی دریافت کرده است. برای اطمینان از بسته ها از الگوریتم AEAD 15 (AEAD_AES_SIV_CMAC_256) استفاده شده است. Peer Status:برای بررسی وضعیت فعلی اتصال (ها) ، باید دستور زیر را وارد کنید: NTS- NTP مشتری ایمن:
همانطور که می بینید ، همگام سازی خوب است. بدون از بین رفتن بسته و جبران مدت زمان اندک. NTP سرور NTP:
طرف سرور نیز کار می کند ، اما اطلاعات کمتری می دهد. وضعیت NTS:دستور زیر به ما اجازه می دهد تا آمار NTS را مشاهده کنیم:
|