| FWKNOP(8) | Fwknop Client | FWKNOP(8) |
نام (NAME)
fwknop - عملگر کوبش دیوار آتش (Firewall Knock Operator)
خلاصه دستور (SYNOPSIS)
fwknop -A <'proto/ports'> -R|-a|-s -D <'host'> [گزینهها]
توضیحات (DESCRIPTION)
fwknop یک طرح احراز هویت با نام «احراز هویت تکبستهای» (Single Packet Authorization یا SPA) را برای پنهانسازی قدرتمند سرویسها پیادهسازی میکند. روش SPA تنها به یک بسته رمزگذاریشده، غیرقابل بازپخش (non-replayable) و احراز هویتشده از طریق HMAC نیاز دارد تا درخواست دسترسی به سرویسی را که پشت یک دیوار آتش با سیاست پیشفرض مسدودسازی (default-drop) پنهان شده است، منتقل کند. کاربرد اصلی SPA استفاده از دیوار آتش برای مسدود کردن تمام تلاشها جهت اتصال به سرویسهایی نظیر SSH است تا بهرهبرداری از آسیبپذیریها (چه آسیبپذیریهای روز صفر و چه کدهای وصلهنشده) دشوارتر شود. هر سرویسی که با SPA پنهان شده باشد، طبیعتاً توسط Nmap قابل پویش و شناسایی نیست. پروژه fwknop بهطور پیشفرض از چهار دیوار آتش مختلف پشتیبانی میکند: iptables، firewalld، PF و ipfw در لینوکس، OpenBSD، FreeBSD و Mac OS X. همچنین امکان استفاده از اسکریپتهای سفارشی وجود دارد تا بتوان fwknop را برای پشتیبانی از سایر زیرساختها مانند ipset یا nftables گسترش داد.
روش SPA اساساً نسل بعدی پورت ناکینگ (Port Knocking یا PK) است، اما بسیاری از محدودیتهای موجود در PK را برطرف کرده و در عین حال مزایای کلیدی آن را حفظ میکند. محدودیتهای PK عبارتند از: دشواری عمومی در محافظت برابر حملات بازپخش (replay attacks)، عدم امکان پشتیبانی مطمئن از الگوریتمهای رمزنگاری نامتقارن و طرحهای HMAC، و امکان بسیار ساده برای اجرای حمله محرومسازی از سرویس (DoS) علیه سرور PK تنها با تزریق یک بسته اضافی جعلی به توالی PK هنگام عبور از شبکه (که باعث میشود سرور PK تصور کند کلاینت توالی صحیح را نمیداند). تمام این محدودیتها در SPA حل شدهاند. در عین حال، SPA سرویسها را پشت یک سیاست دیوار آتش default-drop پنهان میکند، دادههای SPA را بهصورت غیرفعال (passive) دریافت مینماید (معمولاً از طریق libpcap یا روشهای دیگر)، و عملیات استاندارد رمزنگاری را برای احراز هویت بستههای SPA و رمزگذاری/رمزگشایی پیادهسازی میکند.
این صفحه راهنما مربوط به کلاینت fwknop است که وظیفه ساخت بستههای SPA و ارسال آنها در شبکه را بر عهده دارد. سمت سرور توسط دیمن fwknopd پیادهسازی میشود که شبکه را برای بستههای SPA شنود (sniff) کرده و با دیوار آتش محلی تعامل میکند تا اتصالات احراز هویتشده با SPA را مجاز سازد. توصیه میشود صفحه راهنمای fwknopd(8) را نیز مطالعه کنید. اطلاعات تفصیلی بیشتر را میتوانید در راهنمای جامع آنلاین «Single Packet Authorization: A Comprehensive Guide to Strong Service Concealment with fwknop» بیابید (ببینید: http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html).
بستههای SPA ایجادشده توسط fwknop از HMAC برای رمزنگاری احراز هویتشده در مدل «اول رمزگذاری سپس احراز هویت» (encrypt-then-authenticate) بهره میبرند. هرچند استفاده از HMAC در حال حاضر اختیاری است (از طریق سوئیچ خط فرمان --use-hmac فعال میشود)، اما به سه دلیل شدیداً توصیه میشود: ۱) بدون HMAC، احراز هویت قوی رمزنگاریشده در fwknop امکانپذیر نیست مگر اینکه از GnuPG استفاده شود، که حتی در آن حالت نیز همچنان باید از HMAC استفاده گردد؛ ۲) یک HMAC که پس از رمزگذاری اعمال میشود، در برابر حملات تحلیل رمزنگاری اوراکل لایهگذاری حالت CBC (مانند حمله Vaudenay و ترفندهای مرتبط نظیر حمله "Lucky 13" علیه SSL) محافظت میکند؛ و ۳) کد مورد نیاز دیمن fwknopd برای تأیید HMAC بسیار سادهتر از کد مورد نیاز برای رمزگشایی بسته SPA است، بنابراین بسته SPA بدون HMAC معتبر اصلاً وارد توابع رمزگشایی نمیشود. دلیل ۳) دقیقاً علت این است که چرا حتی هنگام استفاده از رمزگذاری GnuPG نیز باید از HMAC استفاده شود؛ زیرا دادههای SPA تا زمانی که HMAC بررسی و تأیید نشود، به توابع libgpgme فرستاده نمیشوند. کدهای GnuPG و libgpgme نسبتاً پیچیده هستند و محدود کردن توانایی مهاجم احتمالی برای تعامل با این کدها از طریق عملیات HMAC به حفظ وضعیت امنیتی قویتر کمک میکند. ایجاد HMAC برای ارتباطات SPA علاوه بر کلید رمزگذاری عادی به یک کلید اختصاصی نیاز دارد و هر دو کلید را میتوان با گزینه --key-gen تولید کرد.
ابزار fwknop بستههای SPA را یا با رمز قالبی Rijndael یا از طریق GnuPG و رمزهای نامتقارن مربوطه رمزگذاری میکند. اگر روش رمزگذاری متقارن انتخاب شود، طبق معمول کلید رمزگذاری بین کلاینت و سرور به اشتراک گذاشته میشود (برای جزئیات به فایل /etc/fwknop/access.conf در fwknopd مراجعه کنید). کلید رمزگذاری واقعی که برای رمزگذاری Rijndael استفاده میشود، از طریق الگوریتم استاندارد مشتقسازی کلید PBKDF1 تولید شده و در حالت CBC تنظیم میگردد. اگر روش GnuPG انتخاب شود، کلیدهای رمزگذاری از دستهکلیدهای GnuPG مشتق میشوند. بستههای SPA تولیدشده توسط کلاینت fwknop از قالب زیر (پیش از رمزگذاری و اعمال HMAC) پیروی میکنند:
random data (16 digits) [دادههای تصادفی ۱۶ رقمی] username [نام کاربری] timestamp [برچسب زمان] software version [نسخه نرمافزار] mode [حالت: حالت دستور (۰) یا حالت دسترسی (۱)] if command mode => command to execute [در حالت دستور => دستور برای اجرا] else access mode => IP,proto,port [در غیر این صورت حالت دسترسی => IP,proto,port] message digest (SHA512 / SHA384 / SHA256 / SHA1 / MD5 / SHA3_256 / SHA3_512) [خلاصه پیام]
هر یک از فیلدهای فوق به دلیل متغیر بودن طول چند فیلد، با نویسه ":" از یکدیگر جدا میشوند و فیلدهایی که ممکن است شامل نویسه ":" باشند بهصورت base64 کدگذاری میگردند. خلاصه پیام (بهطور پیشفرض SHA256) بخشی از دادههای در حال رمزگذاری است و مستقل از HMAC است که پس از رمزگذاری به دادههای بسته SPA ضمیمه میشود. دادههای تصادفی ۱۶ رقمی (حدود ۵۳ بیت) تضمین میکند که هیچ دو بسته SPA یکسان نباشند، و این مستقل از استفاده از PBKDF1 برای مشتقسازی کلید Rijndael در حالت CBC (که از مقدار نمک تصادفی ۸ بایتی استفاده میکند) است. از آنجا که fwknopd خلاصه SHA256 تمام بستههای معتبر ورودی SPA را ردیابی کرده و موارد تکراری را دور میاندازد، حملات بازپخش علیه fwknop امکانپذیر نیستند. در صورت تشخیص بازپخش، هشدارهای Syslog تولید میشوند.
بهطور پیشفرض، کلاینت fwknop بستههای مجازسازی را روی پورت UDP شماره 62201 ارسال میکند، اما این مقدار با آرگومان --server-port قابل تغییر است (این امر مستلزم آن است که fwknopd برای دریافت دادههای SPA روی پورت انتخابی پیکربندی شده باشد). همچنین fwknop میتواند بسته SPA را از طریق آرگومان --rand-port روی یک پورت تصادفی ارسال کند. برای جزئیات بیشتر به fwknopd(8) مراجعه کنید. برای نمونههای فراخوانی کلاینت fwknop به بخش مثالها (EXAMPLES) مراجعه نمایید.
کلاینت fwknop بسیار سازگار و قابلحمل (portable) است و روی توزیعهای مختلف لینوکس (تمامی توزیعهای اصلی و توزیعهای تعبیهشده نظیر OpenWRT)، FreeBSD، OpenBSD، Mac OS X و Cygwin در ویندوز اجرا میشود. همچنین یک کتابخانه به نام libfko وجود دارد که هر دو ابزار fwknop و fwknopd برای عملیات رمزگذاری/رمزگشایی بسته SPA و احراز هویت HMAC از آن استفاده میکنند. این کتابخانه میتواند برای استفاده برنامههای شخص ثالث از SPA تحت مجوز عمومی گنو (GPL v2+) به کار گرفته شود.
آرگومانهای الزامی (REQUIRED ARGUMENTS)
این آرگومانهای الزامی را میتوان از طریق خط فرمان یا از داخل فایل ~/.fwknoprc مشخص کرد (گزینه -n, --named-config و بخش «فایل FWKNOPRC» در زیر را ببینید).
-A, --access=<port list>
-D, --destination=<hostname/IP-address>
-R|-a|-s
گزینههای عمومی (GENERAL OPTIONS)
-h, --help
-G, --get-key=<file>
--stdin
--fd=<number>
--get-hmac-key=<file>
--key-gen
--key-gen-file=<file>
--key-len=<length>
--hmac-key-len=<length>
-l, --last-cmd
-n, --named-config=<stanza name>
--key-rijndael=<key>
--key-base64-rijndael=<key>
--key-base64-hmac=<key>
--key-hmac=<key>
--rc-file=<file>
--no-rc-file
--no-home-dir
--save-rc-stanza=<stanza name>
--force-stanza
--stanza-list
--show-last
-E, --save-args-file=<file>
--no-save-args
-T, --test
-B, --save-packet=<file>
-b, --save-packet-append
--fault-injection-tag=<tag>
-v, --verbose
-V, --version
گزینههای SPA (SPA OPTIONS)
--use-hmac
-a, --allow-ip=<IP-address>
-g, --gpg-encryption
--hmac-digest-type=<digest>
-N, --nat-access=<internalIP:forwardPort>
--nat-local
--nat-port
--nat-rand-port
-p, --server-port=<port>
-P, --server-proto=<protocol>
-Q, --spoof-src=<IP>
-r, --rand-port
-R, --resolve-ip-https
--resolve-url <url>
--resolve-http-only
-w, --wget-cmd=<wget full path>
-s, --source-ip
-S, --source-port=<port>
--server-resolve-ipv4
-f, --fw-timeout=<seconds>
-C, --server-cmd=<command to execute>
-H, --http-proxy=<proxy-host>[:port]
-m, --digest-type=<digest>
-M, --encryption-mode=<mode>
--time-offset-plus=<time>
--time-offset-minus=<time>
-u, --user-agent=<user-agent-string>
--use-wget-user-agent
-U, --spoof-user=<user>
--icmp-type=<type>
--icmp-code=<code>
گزینههای GPG (GPG OPTIONS)
توجه داشته باشید که استفاده از GPG برای رمزگذاری/رمزگشایی SPA میتواند و باید شامل کلیدهای GPG باشد که توسط هر دو طرف (کلاینت و سرور) امضا شدهاند. رویه اصلی برای این کار شامل مراحل زیر پس از انتقال کلید کلاینت به سرور و بالعکس است:
[spaserver]# gpg --import client.asc [spaserver]# gpg --edit-key 1234ABCD Command> sign [spaclient]$ gpg --import server.asc [spaclient]$ gpg --edit-key ABCD1234 Command> sign
اطلاعات جامعتر در این باره را میتوانید در اینجا بیابید: http://www.cipherdyne.org/fwknop/docs/gpghowto.html.
--gpg-agent
--gpg-home-dir=<dir>
--gpg-recipient=<key ID or Name>
--gpg-signer-key=<key ID or Name>
--gpg-no-signing-pw
فایل FWKNOPRC (FWKNOPRC FILE)
فایل .fwknoprc برای تنظیم پارامترهای مختلف جهت لغو پارامترهای پیشفرض برنامه در زمان اجرا استفاده میشود. این فایل همچنین امکان تعریف بخشهای پیکربندی نامگذاریشده (stanzas) اضافی را برای تنظیم پارامترهای برنامه در یک فراخوانی خاص فراهم میآورد.
کلاینت fwknop در صورتی که این فایل در دایرکتوری خانگی کاربر وجود نداشته باشد، آن را ایجاد خواهد کرد. این نسخه اولیه دارای برخی دستورالعملهای نمونه است که کامنت شدهاند. ویرایش این فایل برای رفع نیازهای کاربر بر عهده خود اوست.
فایل .fwknoprc شامل یک ناحیه یا بخش پیکربندی پیشفرض است که دستورالعملهای سراسری پیکربندی را نگهداری میکند و پیشفرضهای برنامه را لغو مینماید. شما میتوانید این فایل را ویرایش کرده و بخشهای نامگذاریشده اضافی ایجاد کنید که با گزینه -n یا --named-config قابل تعیین هستند. پارامترهای تعریفشده در بخشهای نامگذاریشده، هرگونه دستورالعمل منطبق در بخش default را لغو خواهند کرد. توجه داشته باشید که گزینههای خط فرمان همچنان بر هرگونه دستورالعمل متناظر در .fwknoprc اولویت خواهند داشت.
دستورالعملهایی برای انطباق با اکثر پارامترهای خط فرمان که fwknop پشتیبانی میکند وجود دارد. در اینجا فهرست فعلی هر دستورالعمل به همراه توضیح مختصر و گزینههای خط فرمان متناظر آن آمده است:
SPA_SERVER <hostname/IP-address>
ALLOW_IP <IP-address>
ACCESS <port list>
SPA_SERVER_PORT <port>
SPA_SERVER_PROTO <protocol>
KEY <passphrase>
KEY_BASE64 <base64 encoded passphrase>
USE_HMAC <Y/N>
HMAC_KEY <key>
HMAC_KEY_BASE64 <base64 encoded key>
HMAC_DIGEST_TYPE <digest algorithm>
SPA_SOURCE_PORT <port>
FW_TIMEOUT <seconds>
RESOLVE_IP_HTTPS <Y/N>
RESOLVE_HTTP_ONLY <Y/N>
RESOLVE_URL <url>
WGET_CMD <wget full path>
TIME_OFFSET <time>
ENCRYPTION_MODE <mode>
DIGEST_TYPE <digest algorithm>
USE_GPG <Y/N>
USE_GPG_AGENT <Y/N>
GPG_SIGNING_PW <passphrase>
GPG_SIGNING_PW_BASE64 <base64 encoded passphrase>
GPG_SIGNER <key ID or Name>
GPG_RECIPIENT <key ID or Name>
GPG_HOMEDIR <dir>
GPG_EXE <path>
SPOOF_USER <user>
SPOOF_SOURCE_IP <IP>
RAND_PORT <Y/N>
KEY_FILE <file>
HTTP_USER_AGENT <agent string>
USE_WGET_USER_AGENT <Y/N>
NAT_ACCESS <internalIP:forwardPort>
NAT_LOCAL <Y/N>
NAT_PORT <port>
NAT_RAND_PORT <Y/N>
محیط (ENVIRONMENT)
SPOOF_USER، GPG_AGENT_INFO (تنها در حالت --gpg-agent استفاده میشود).
جعل بسته SPA (SPA PACKET SPOOFING)
از آنجا که fwknop نشانی IP مجاز برای عبور از دیوار آتش را درون بار مفید رمزگذاریشده SPA قرار میدهد (مگر اینکه از -s استفاده شود که توصیه نمیشود و میتواند در پیکربندی سرور fwknopd ممنوع گردد)، بستههای SPA به سادگی قابل جعل هستند و این در این چارچوب یک ویژگی مثبت است. به این معنا که نشانی IP مبدأ یک بسته SPA توسط دیمن fwknopd نادیده گرفته میشود (هنگامی که متغیر REQUIRE_SOURCE_ADDRESS در فایل /etc/fwknop/access.conf تنظیم شده باشد) و تنها به نشانی IP که درون یک بسته SPA احراز هویتشده و بهدرستی رمزگشاییشده قرار دارد، اجازه عبور از دیوار آتش داده میشود. این امر این امکان را فراهم میکند که به عنوان مثال چنین به نظر برسد که www.yahoo.com در حال تلاش برای احراز هویت با سیستم هدف است، اما در واقعیت اتصال اصلی از یک IP ظاهراً نامرتبط برقرار خواهد شد.
مثالها (EXAMPLES)
مثالهای زیر آرگومانهای خط فرمانی را نشان میدهند که میتوان در چند وضعیت مختلف به کلاینت fwknop ارائه داد:
شروع سریع (Quick start)
مؤثرترین و سادهترین راه برای استفاده از fwknop این است که کلاینت هر دو کلید رمزگذاری و HMAC را تولید کرده و سپس آنها را همراه با مشخصات درخواست دسترسی در فایل “$HOME/.fwknoprc” ذخیره کند. کلیدها همچنین باید به سیستمی که fwknopd روی آن اجرا میشود منتقل شوند. کلاینت همچنین در صورتی که چندین سرور fwknopd روی سیستمهای مختلف اجرا شوند، از مجموعهای جداگانه از کلیدهای رمزگذاری و HMAC برای هر مقصد SPA پشتیبانی میکند.
بنابراین با فرض اینکه IP شماره 2.2.2.2 سیستمی است که fwknopd روی آن مستقر است و SSH توسط دیوار آتش روی آن سیستم در یک حالت مسدودسازی پیشفرض (default-drop) محافظت میشود، کلاینت را به این صورت اجرا کنید تا کلیدهای رمزگذاری و HMAC تولید شوند:
$ fwknop -A tcp/22 --use-hmac -R -D 2.2.2.2 --key-gen --save-rc-stanza --verbose [+] Wrote Rijndael and HMAC keys to rc file: /home/user/.fwknoprc
با تولید و ذخیره آرگومانهای درخواست دسترسی و کلیدهای رمزگذاری و HMAC در “$HOME/.fwknoprc”، خود کلیدها باید به سیستم 2.2.2.2 که fwknopd روی آن اجرا میشود منتقل شوند. طبق معمول، این کار باید از طریق روشی امن مانند SSH قبل از فعال شدن SPA و مسدود شدن SSHD توسط دیوار آتش انجام شود. در اینجا شکل بخش جدید 2.2.2.2 در فایل ~/.fwknoprc آمده است:
$ tail -n 8 /home/user/.fwknoprc [2.2.2.2] ACCESS tcp/22 SPA_SERVER 2.2.2.2 KEY_BASE64 HvUtIOramehLGKimD4ECXOzinaH4h3U8H1WXum7b54Q= HMAC_KEY_BASE64 DLeLf93a3yBT2vhEpM+dWlirGta5GU+jdyG5uXp4461HgOtbqMem4gX0Bp2PJGzYZlbbcavcOM00UPm+0GqkXA== USE_HMAC Y VERBOSE Y RESOLVE_IP_HTTPS Y
کلیدها تودههایی از دادههای تصادفی کدگذاریشده با base64 هستند و هر دو خط KEY_BASE64 و HMAC_KEY_BASE64 باید عیناً کپی شده و درون فایل /etc/fwknop/access.conf روی 2.2.2.2 قرار داده شوند. پس از انجام این کار، fwknopd میتواند روی آن سیستم راهاندازی شود، یک سیاست default-drop در برابر اتصالات SSH برقرار گردد و سپس دسترسی به SSH از طریق fwknop مدیریت شود. برای دسترسی به SSH، کافی است از آرگومان -n برای ارجاع به بخش 2.2.2.2 از فایل .fwknoprc استفاده کنید (برخی از خروجیهای --verbose برای شفافسازی آورده شدهاند):
$ fwknop -n 2.2.2.2
FKO Field Values:
=================
Random Value: 8950423288486978
Username: mbr
Timestamp: 1370194770
FKO Version: 2.5
Message Type: 1 (Access msg)
Message String: 1.1.1.1,tcp/22
Nat Access: <NULL>
Server Auth: <NULL>
Client Timeout: 0 (seconds)
Digest Type: 3 (SHA256)
HMAC Type: 3 (SHA256)
Encryption Type: 1 (Rijndael)
Encryption Mode: 2 (CBC)
...
$ ssh -l user 2.2.2.2
user@2.2.2.2's password:
مثالهای حالت دسترسی (Access mode examples)
رایجترین کاربرد fwknop دستیابی به دسترسی SSH در یک سیستم راه دور است که دیمن fwknopd همراه با سیاست دیوار آتش default-drop روی آن مستقر شده است. دستور زیر این موضوع را نشان میدهد که در آن IP شماره 1.1.1.1 آدرسی است که باید از طریق دیوار آتش در حال اجرا روی 3.3.3.3 مجاز شود (توجه داشته باشید که فایل /etc/fwknop/access.conf که توسط fwknopd استفاده میشود باید دارای کلیدهای منطبق رمزگذاری و HMAC باشد، و جزئیات پیکربندی را میتوان در صفحه راهنمای fwknopd(8) یافت). همچنین توجه کنید که مثالهای زیر از کاربر میخواهند کلیدهای رمزگذاری و HMAC را از طریق stdin وارد کند به جای اینکه مانند مثال بالا در فایل “$HOME/.fwknoprc” روی دیسک بنویسد. با این حال تمام مثالهای زیر را میتوان تنها با افزودن آرگومان --save-rc-stanza به استفاده از فایل ~/.fwknoprc تبدیل کرد:
$ fwknop -A tcp/22 --use-hmac -a 1.1.1.1 -D 3.3.3.3 Enter encryption key: Enter HMAC key: $ ssh -l user 3.3.3.3 user@3.3.3.3's password:
اگر پرچم --verbose به خط فرمان اضافه شود، برخی از جزئیات بسته SPA در خروجی استاندارد چاپ میشوند (همه خروجیها برای اختصار نشان داده نشدهاند):
$ fwknop -A tcp/22 --use-hmac -a 1.1.1.1 -D 3.3.3.3 --verbose
Enter encryption key:
Enter HMAC key:
Random Value: 1916307060193417
Username: mbr
Timestamp: 1368498909
FKO Version: 2.5
Message Type: 1 (Access msg)
Message String: 1.1.1.1,tcp/22
Nat Access: <NULL>
Server Auth: <NULL>
Client Timeout: 0 (seconds)
Digest Type: 3 (SHA256)
HMAC Type: 3 (SHA256)
Encryption Type: 1 (Rijndael)
Encryption Mode: 2 (CBC)
دسترسی همزمان به چندین سرویس نیز پشتیبانی میشود و در اینجا نمونهای از درخواست دسترسی به هر دو سرویس SSH و OpenVPN روی 3.3.3.3 آورده شده است:
$ fwknop -A "tcp/22,tcp/1194" --use-hmac -a 1.1.1.1 -D 3.3.3.3
موارد زیادی وجود دارد که کلاینت fwknop در شبکهای پشت یک دستگاه NAT مستقر است و IP دارای قابلیت مسیریابی خارجی برای کاربر مشخص نیست. در این حالت، از سرویس تفکیک IP موجود در https://www.cipherdyne.org/cgi-bin/myip از طریق سوئیچ خط فرمان -R برای به دست آوردن نشانی IP کلاینت خارجی استفاده کنید. این روشی امنتر از استفاده از گزینه -s ذکرشده در بخشهای قبلی این صفحه راهنما است، زیرا IP مبدأ درون بسته رمزگذاریشده قرار میگیرد به جای اینکه دیمن fwknopd دسترسی درخواستی را از هر نشانی IP که بسته SPA از آن سرچشمه میگیرد اعطا کند (یعنی استفاده از -s امکان حمله MITM را باز میگذارد):
$ fwknop -A tcp/22 --use-hmac -R -D 3.3.3.3
استفاده از حالت احراز هویت تکبستهای برای دستیابی به دسترسی SSH و این بار استفاده از کلیدهای GnuPG برای رمزگذاری و رمزگشایی:
$ fwknop -A tcp/22 --use-hmac --gpg-sign ABCD1234 --gpg--recipient 1234ABCD -R -D 3.3.3.3
دستور به سرور fwknop در حال اجرا در 3.3.3.3 برای مجاز ساختن اتصال 1.1.1.1 به SSH، اما با جعل بسته مجازسازی از یک IP مرتبط با www.yahoo.com (نیازمند root در سیستمعامل کلاینت fwknop):
# fwknop --spoof-src "www.yahoo.com" -A tcp/22 --use-hmac -a 1.1.1.1 -D 3.3.3.3
هنگامی که fwknopd روی یک دیوار آتش iptables با سیستمهای مستقر در پشت آن اجرا میشود، میتوان از قابلیتهای NAT ارائهشده توسط iptables برای دسترسی شفاف به سیستمهای پشت دیوار آتش از طریق SPA بهره برد. در اینجا نمونهای آورده شده است که در آن از کلاینت fwknop برای دستیابی به SSH در حال اجرا روی IP غیرقابل مسیریابی 192.168.10.23 که در شبکه پشت 3.3.3.3 مستقر است استفاده میشود. در این حالت، اتصال SSH برقرارشده به 3.3.3.3 از طریق NAT بهطور خودکار به سیستم 192.168.10.2 ترجمه میشود:
$ fwknop -A tcp/22 -N 192.168.10.2:22 -R -D 3.3.3.3
سازگاری با نسخههای پیشین (BACKWARDS COMPATIBILITY)
با انتشار نسخه 2.5، fwknop تغییرات قابل توجهی را در استفاده از رمزنگاری تجربه کرد؛ از جمله افزودن پشتیبانی از رمزنگاری احراز هویتشده با HMAC برای هر دو حالت Rijndael و GnuPG، اطمینان از استفاده مناسب از PBKDF1 برای مشتقسازی کلید هنگام رمزگذاری بستههای SPA با Rijndael، و رفع چندین اشکال از نسخههای قبلی fwknop. بهطور کلی، این بدان معناست که هنگام استفاده از Rijndael، بستههای SPA تولیدشده توسط نسخه 2.5 با نسخههای قبلی fwknop ناسازگار هستند. حالت رمزگذاری GnuPG تحت تأثیر این بهروزرسانیها قرار نگرفته است. با این حال حتی هنگام استفاده از Rijndael، سازگاری با نسخههای قبلی از طریق تنظیم حالت رمزگذاری legacy با گزینه -M در خط فرمان کلاینت fwknop و/یا متغیر ENCRYPTION_MODE در فایل /etc/fwknop/access.conf پشتیبانی میشود. به این ترتیب، یک سرور قدیمیتر از 2.5 میتواند بستههای SPA تولیدشده توسط کلاینت 2.5 و بالاتر را رمزگشایی کند (-M legacy را تنظیم کنید)، و یک سرور 2.5 و بالاتر میتواند بستههای SPA تولیدشده توسط کلاینتهای قبل از 2.5 را رمزگشایی نماید (ENCRYPTION_MODE legacy را در فایل access.conf تنظیم کنید). توجه داشته باشید که HMAC تنها از نسخه 2.5 پشتیبانی میشود و یک ویژگی اختیاری است، بنابراین سازگاری با نسخههای قبلی تنها برای پیکربندیهایی است که در هیچیک از دو طرف از HMAC استفاده نمیکنند. اکیداً توصیه میشود تمام کلاینتها و سرورهای fwknop به نسخه 2.5 ارتقا یافته و از حالت جدید HMAC برای ارتباطات SPA با احراز هویت مناسب استفاده شود. پشتیبانی از سازگاری با نسخههای پیشین برای تسهیل ارتقای کلاینتها و سرورها در یک رویکرد مرحلهبهمرحله استفاده میشود.
جهت تأکید، اگر سرور fwknopd به نسخه 2.5 (یا بالاتر) ارتقا یافته باشد، اما کلاینتهای قدیمیتر نتوانند همزمان ارتقا یابند، برای هر بخش SOURCE در فایل /etc/fwknop/access.conf خط زیر را اضافه کنید:
ENCRYPTION_MODE legacy
علاوه بر این، اگر متغیر KEY دارای کلید رمزگذاری طولانیتر از ۱۶ بایت باشد، باید در فایل access.conf به ۱۶ نویسه کوتاه شود تا کلاینتهای پیش از 2.5 بهدرستی کار کنند. این محدودیت در نسخه 2.5 برطرف شده است و انگیزه بیشتری برای ارتقای تمام کلاینتها و سرورها به نسخه 2.5 یا بالاتر فراهم میکند.
حال با معکوس کردن سناریو، اگر کلاینتهای fwknop ارتقا یافته باشند اما سرور fwknopd همچنان در نسخهای قبل از 2.5 باشد، آرگومان -M legacy را به خط فرمان fwknop اضافه کنید:
$ fwknop -A tcp/22 -M legacy -R -D 2.2.2.2
وابستگیها (DEPENDENCIES)
کلاینت fwknop به کتابخانه libfko نیاز دارد که معمولاً در هر دو توزیع مبدأ و دودویی گنجانده شده و یک کتابخانه اختصاصی توسعهیافته توسط پروژه fwknop است. هر زمان که از سرور fwknopd استفاده میشود، libpcap یک وابستگی الزامی است. با این حال نسخه پیشروی 2.6 یک حالت شنونده UDP همراه با پشتیبانی از تفکیک دسترسیها ارائه خواهد داد و در این حالت به libpcap نیاز نخواهد داشت. در حالت شنونده UDP، با وجود اینکه fwknopd به یک پورت UDP متصل میشود، بستههای SPA هرگز تصدیق (acknowledge) نمیشوند، بنابراین از دید یک مهاجم هیچ تفاوتی بین شنود غیرفعال شبکه توسط fwknopd در مقایسه با گوش دادن روی یک سوکت UDP از نظر قابلیت پویش وجود ندارد.
برای قابلیتهای GPG، برنامه GnuPG نیز باید همراه با کتابخانه libgpgme بهدرستی نصب و پیکربندی شده باشد.
برای بهرهمندی از تمام ویژگیهای احراز هویت و مدیریت دسترسی دیمن/سرویس fwknopd، یک دیوار آتش فعال از نوع iptables، ipfw یا pf روی سیستمعامل زیربنایی مورد نیاز است.
عیبیابی و تشخیص خطا (DIAGNOSTICS)
جامعترین روش برای دریافت اطلاعات تشخیصی در مورد fwknop، اجرای اسکریپت مجموعه آزمون test-fwknop.pl واقع در دایرکتوری test/ در سورسکدهای fwknop است. مجموعه آزمون، fwknop را از طریق تعداد زیادی آزمون زمان اجرا بررسی میکند، از valgrind پشتیبانی مینماید، نتایج هر دو رمزگذاری SPA و HMAC را در برابر OpenSSL اعتبارسنجی میکند، و حتی فازر (fuzzer) داخلی خود را برای ارتباطات SPA دارد (و fwknop در نسخه 2.6.4 از American Fuzzy Lop (AFL) اثر Michal Zalewski نیز پشتیبانی میکند). برای اطلاعات تشخیصی ابتداییتر، fwknop میتواند با گزینه خط فرمان -T (یا --test) اجرا شود. این کار باعث میشود fwknop صرفاً اطلاعات بسته SPA را ایجاد و چاپ کند، سپس آن را از یک چرخه رمزگشایی/کدگشایی عبور داده و دوباره چاپ نماید. علاوه بر این، سوئیچ خط فرمان --verbose برای مشاهده جزئیات مختلف بسته SPA که در خروجی استاندارد چاپ میشوند مفید است.
همچنین ببینید (SEE ALSO)
fwknopd(8), iptables(8), pf(4), pfctl(8), ipfw(8), gpg(1), libfko documentation.
اطلاعات بیشتر درباره احراز هویت تکبستهای را میتوانید در مقاله “Single Packet Authorization with fwknop” موجود در http://www.cipherdyne.org/fwknop/docs/SPA.html بیابید. یک راهنمای جامع درباره عملکرد و تئوری fwknop در http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html موجود است. این راهنما همچنین شامل اطلاعاتی درباره طراحی fwknop است که ممکن است برای علاقهمندان به اینکه چرا fwknop با سایر پیادهسازیهای SPA تفاوت دارد، ارزش مطالعه داشته باشد.
پروژه fwknop از سیستم کنترل نسخه git به عنوان مخزن کد منبع خود همراه با Github برای ردیابی مسائل و نقاط عطف استفاده میکند:
$ git clone https://github.com/mrash/fwknop.git fwknop.git
توضیحات و تفاسیر بیشتر درباره احراز هویت تکبستهای را میتوانید از طریق فید توییتر Michael Rash بیابید: http://twitter.com/michaelrash, @michaelrash
نویسندگان (AUTHORS)
توسعهدهندگان اصلی fwknop عبارتند از Michael Rash (ایجادکننده پروژه) <mbr@cipherdyne.org>، Damien Stuart <dstuart@dstuart.org>، و Jonathan Bennett <jbennett@incomsystems.biz>.
مشارکتکنندگان (CONTRIBUTORS)
این نسخه «C» از fwknop از نسخه اصلی مبتنی بر Perl مشتق شده است که افراد زیادی که در جامعه متنباز فعال هستند در آن مشارکت داشتهاند. فایل CREDITS را در سورسهای fwknop ببینید، یا به https://github.com/mrash/fwknop/blob/master/CREDITS مراجعه کنید تا فهرست آنلاین مشارکتکنندگان را مشاهده نمایید. چند مشارکتکننده شایسته تقدیر ویژه هستند از جمله: Franck Joncourt، Max Kastanas، Vlad Glagolev، Sean Greven، Hank Leininger، Fernando Arnaboldi و Erik Gomez.
عبارت “Single Packet Authorization” توسط MadHat و Simple Nomad در کنفرانس BlackHat Briefings سال 2005 ابداع شد.
اشکالات (BUGS)
گزارشهای اشکال را به dstuart@dstuart.org یا mbr@cipherdyne.org ارسال کنید، یا یک issue جدید در Github باز کنید (ببینید: https://github.com/mrash/fwknop.git). پیشنهادات و/یا نظرات نیز همیشه مورد استقبال قرار میگیرند. اطلاعات تکمیلی را میتوانید در آرشیو لیست پستی fwknop بیابید (ببینید: https://lists.sourceforge.net/lists/listinfo/fwknop-discuss).
توزیع (DISTRIBUTION)
نرمافزار fwknop تحت مجوز عمومی همگانی گنو (GPL v2+) توزیع میشود و آخرین نسخه آن را میتوان از http://www.cipherdyne.org دریافت کرد.
| 08/06/2018 | Fwknop Client |