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= ارائه فهرستی از پورت‌ها و پروتکل‌ها برای دسترسی به یک رایانه راه دور که fwknopd را اجرا می‌کند. قالب این فهرست به‌صورت “+/.../+” است، مانند “tcp/22,udp/53”. نکته: اکثریت قریب به اتفاق موارد استفاده از fwknop نیازمند آرگومان -A هستند، اما ارسال دستورهای کامل با آرگومان --server-cmd از طریق بسته SPA برای اجرا توسط fwknopd به این آرگومان نیاز ندارد. -D, --destination= هدایت کلاینت fwknop برای احراز هویت با سرویس/دیمن fwknopd در نام میزبان یا نشانی IP مقصد مشخص‌شده. حالت اتصال توسط سرویس/دیمن fwknopd هنگام رمزگشایی و تجزیه بسته احراز هویت شناسایی می‌شود. -R|-a|-s یکی از این گزینه‌ها (توضیحات در ادامه) الزامی است تا به دیمن راه دور fwknopd اطلاع دهد چه نشانی IP باید از طریق دیوار آتش مجاز شود. توصیه می‌شود از گزینه‌های -R یا -a به جای -s استفاده کنید تا ارتباطات SPA در برابر حملات احتمالی مرد میانی (MITM) ایمن‌سازی شوند، و در سمت سرور متغیر REQUIRE_SOURCE_ADDRESS در فایل /etc/fwknop/access.conf تنظیم گردد. توجه داشته باشید که امن‌ترین گزینه -a است تا fwknop مجبور به ارسال درخواست HTTPS به https://www.cipherdyne.org/cgi-bin/myip برای تفکیک نشانی IP دارای قابلیت مسیریابی خارجی نباشد. استفاده از -a مستلزم آن است که کاربر از قبل نشانی IP خارجی شبکه‌ای را که fwknop روی آن اجرا می‌شود بداند. گزینه‌های عمومی (GENERAL OPTIONS) -h, --help چاپ پیام راهنمای خلاصه استفاده و خروج. -G, --get-key= بارگیری کلید/گذرواژه رمزگذاری از فایل مشخص‌شده. فایل کلید برای هر نام میزبان یا نشانی IP مقصد شامل یک خط است که شامل دونقطه (":")، فاصله اختیاری و گذرواژه بوده و به یک خط جدید ختم می‌شود. توجه داشته باشید که خط آخر باید دارای نویسه خط جدید پایانی باشد. همچنین توجه داشته باشید: اگرچه این یک تسهیلات است، اما داشتن فایلی با گذرواژه‌های متن آشکار روی سیستم ایده خوبی نبوده و توصیه نمی‌شود. اینکه کلاینت fwknop کلید را از شما درخواست (prompt) کند، عموماً امن‌تر است. همچنین توجه داشته باشید که اگر کلیدی روی دیسک ذخیره شود، فایل rc ابزار fwknop سازوکار بسیار قدرتمندتری برای تعیین نه تنها کلید بلکه سایر گزینه‌ها نیز به شمار می‌رود. --stdin خواندن کلید/گذرواژه رمزگذاری از ورودی استاندارد (stdin). این گزینه می‌تواند مثلاً برای ارسال داده‌ها از طریق لوله (pipe) استفاده شود. این دستور شبیه به --fd 0 است. --fd= تعیین شماره توصیف‌گر فایل برای خواندن کلید/گذرواژه از آن. این دستور مانع از درخواست گذرواژه از کاربر می‌شود، در صورتی که گذرواژه‌ای در بخش (stanza) اختصاصی کاربر یافت نشده باشد یا در خط فرمان ارائه نشده باشد. تنظیم توصیف‌گر فایل روی ۰ شبیه به دستور stdin است. --get-hmac-key= بارگیری کلید/گذرواژه HMAC از فایل مشخص‌شده. مشابه قالب گزینه --get-key، فایل کلید HMAC شامل یک خط برای هر نام میزبان یا نشانی IP مقصد، یک دونقطه (":")، فاصله اختیاری و گذرواژه است که به یک خط جدید ختم می‌شود. توجه داشته باشید که خط آخر باید دارای نویسه خط جدید پایانی باشد. همچنین توجه کنید: داشتن فایلی با گذرواژه‌های متن آشکار روی سیستم توصیه نمی‌شود. درخواست کلید HMAC توسط کلاینت fwknop عموماً امن‌تر است. همچنین اگر کلیدی روی دیسک ذخیره می‌شود، فایل rc ابزار fwknop سازوکار قدرتمندتری است. --key-gen وادار کردن fwknop به تولید هر دو کلید Rijndael و HMAC که می‌توانند برای رمزگذاری و احراز هویت بسته SPA استفاده شوند. این کلیدها از /dev/urandom مشتق شده و پیش از چاپ در خروجی استاندارد به‌صورت base64 کدگذاری می‌شوند و برای درج در فایل “$HOME/.fwknoprc” (یا فایل ارجاع داده‌شده با --get-key) در نظر گرفته شده‌اند. چنین کلیدهایی عموماً بسیار امن‌تر از عبارات عبوری هستند که از طریق خط فرمان تایپ می‌شوند. --key-gen-file= نوشتن کلیدهای تولیدشده در فایل مشخص‌شده. توجه داشته باشید که اگر فایل از قبل وجود داشته باشد، بازنویسی می‌شود. اگر این گزینه داده نشود، --key-gen کلیدها را در خروجی استاندارد می‌نویسد. --key-len= تعیین تعداد بایت‌ها برای کلید تولیدشده Rijndael. حداکثر اندازه در حال حاضر ۱۲۸ بایت است. --hmac-key-len= تعیین تعداد بایت‌ها برای کلید تولیدشده HMAC. حداکثر اندازه در حال حاضر ۱۲۸ بایت است. -l, --last-cmd اجرای fwknop با آرگومان‌های خط فرمان فراخوانی قبلی (در صورت وجود). آرگومان‌های قبلی از فایل ~/.fwknop.run استخراج می‌شوند. -n, --named-config= تعیین نام بخش پیکربندی در فایل “$HOME/.fwknoprc” برای دریافت دستورالعمل‌های پیکربندی و اجرا. این بخش‌های نام‌گذاری‌شده نیاز به به‌خاطرسپاری آرگومان‌های مختلف خط فرمان را برای فراخوانی‌های پرکاربرد fwknop برطرف می‌کنند. برای فهرستی از دستورالعمل‌های معتبر پیکربندی در فایل .fwknoprc، بخش با عنوان «فایل FWKNOPRC» را در ادامه ببینید. --key-rijndael= تعیین کلید Rijndael در خط فرمان. از آنجا که ممکن است کلید برای ابزارهایی مانند ps در یونیکس قابل مشاهده باشد، این حالت فقط باید در مواردی استفاده شود که امنیت حیاتی نیست. درخواست کلید توسط کلاینت fwknop یا دریافت آن از طریق فایل “$HOME/.fwknoprc” عموماً امن‌تر است. --key-base64-rijndael= تعیین کلید کدگذاری‌شده با base64 برای Rijndael. از آنجا که ممکن است کلید برای ابزارهایی مانند ps در یونیکس قابل مشاهده باشد، این فرم فقط باید در مواردی که امنیت بحرانی نیست استفاده شود. دریافت کلید از فایل “$HOME/.fwknoprc” یا درخواست کلاینت امن‌تر است. --key-base64-hmac= تعیین کلید کدگذاری‌شده با base64 برای HMAC. از آنجا که ممکن است کلید برای ابزارهایی نظیر ps قابل مشاهده باشد، این فرم فقط باید در موارد غیرحساس استفاده شود. --key-hmac= تعیین کلید خام HMAC (کدگذاری‌نشده با base64). از آنجا که کلید ممکن است برای ابزارهایی نظیر ps قابل مشاهده باشد، این فرم تنها در شرایط غیرحساس کاربرد دارد. --rc-file= تعیین مسیر فایل rc ابزار fwknop (پیش‌فرض “$HOME/.fwknoprc” است). --no-rc-file انجام عملیات کلاینت fwknop بدون ارجاع به فایل “$HOME/.fwknoprc”. --no-home-dir جلوگیری از جستجوی کلاینت fwknop برای پوشه خانگی کاربر. --save-rc-stanza= ذخیره آرگومان‌های خط فرمان در بخش مشخص‌شده فایل “$HOME/.fwknoprc” با گزینه -n. اگر گزینه -n حذف شود، نام بخش به‌طور پیش‌فرض برابر با مقدار سرور مقصد (نام میزبان یا IP) داده‌شده در آرگومان -D خواهد بود. --force-stanza همراه با --save-rc-stanza برای بازنویسی تمام متغیرهای بخش مشخص‌شده استفاده می‌شود. --stanza-list تخلیه فهرستی از بخش‌های موجود در “$HOME/.fwknoprc”. --show-last نمایش آخرین آرگومان‌های خط فرمان استفاده‌شده توسط fwknop. -E, --save-args-file= ذخیره آرگومان‌های خط فرمان در مسیر فایل مشخص‌شده. بدون این گزینه، و زمانی که --no-save-args نیز مشخص نشده باشد، مسیر پیش‌فرض ذخیره آرگومان‌ها ~/.fwknop.run است. --no-save-args آرگومان‌های خط فرمان ارائه‌شده هنگام اجرای fwknop را ذخیره نکند. -T, --test حالت آزمایشی. تولید داده‌های بسته SPA، اما بدون ارسال آن. در عوض، تفکیک فیلدهای داده SPA را چاپ کرده، سپس داده‌ها را از فرایند رمزگشایی و کدگشایی عبور داده و دوباره تفکیک آن‌ها را چاپ می‌کند. این در درجه اول یک ویژگی اشکال‌زدایی است. -B, --save-packet= دستور به کلاینت fwknop برای نوشتن بسته جدیداً ایجادشده SPA در فایل مشخص‌شده تا بتوان آن را به‌صورت آفلاین بررسی کرد. -b, --save-packet-append پیوست کردن داده‌های بسته تولیدشده به فایل مشخص‌شده با گزینه -B. --fault-injection-tag= این گزینه تنها برای آزمون تزریق خطا در زمانی استفاده می‌شود که fwknop برای پشتیبانی از کتابخانه libfiu کامپایل شده باشد (ببینید: http://blitiri.com.ar/p/libfiu/). در شرایط عادی این گزینه استفاده نمی‌شود و هیچ نسخه بسته‌بندی‌شده‌ای از fwknop این کد را به‌صورت کامپایل‌شده ندارد، بنابراین این قابلیت در زمان اجرا فعال نیست. برای کامل بودن مستندات در اینجا ذکر شده است. -v, --verbose اجرای کلاینت fwknop در حالت پرگویی (verbose). این امر باعث می‌شود fwknop اطلاعات اضافی درباره دستور فعلی و داده‌های حاصل از SPA چاپ کند. -V, --version نمایش اطلاعات نسخه و خروج. گزینه‌های SPA (SPA OPTIONS) --use-hmac تنظیم حالت HMAC برای رمزنگاری احراز هویت‌شده در ارتباطات SPA. از نسخه fwknop 2.5، این یک ویژگی اختیاری است، اما در نسخه‌های بعدی به حالت پیش‌فرض تبدیل خواهد شد. -a, --allow-ip= تعیین نشانی IP که باید از طریق دیوار آتش سرور مقصد fwknopd مجاز شود (این IP درون خود بسته SPA رمزگذاری می‌شود). این گزینه برای جلوگیری از حمله مرد میانی (MITM) مفید است که در آن بسته SPA می‌تواند در مسیر رهگیری شده و از یک IP متفاوت با نسخه اصلی ارسال شود. بنابراین اگر سرور fwknopd به نشانی مبدأ در هدر IP بسته SPA اعتماد کند، مهاجم دسترسی پیدا خواهد کرد. گزینه -a نشانی مبدأ را درون بسته رمزگذاری‌شده SPA قرار می‌دهد و بنابراین این حمله را خنثی می‌سازد. گزینه -a همچنین برای تعیین IP که هنگام جعل بسته SPA با گزینه --spoof-src دسترسی به آن داده می‌شود، کاربرد دارد. گزینه مرتبط دیگر -R است (در ادامه را ببینید) که به کلاینت fwknop دستور می‌دهد نشانی IP دارای قابلیت مسیریابی خارجی متصل به سیستم محلی را با پرس‌وجو از https://www.cipherdyne.org/cgi-bin/myip به‌طور خودکار تفکیک کند. این کار نشانی IP واقعی دیده‌شده از سیستم فراخواننده را برمی‌گرداند. -g, --gpg-encryption استفاده از رمزگذاری GPG روی بسته SPA (پیش‌فرض در صورت عدم تعیین، Rijndael است). نکته: استفاده از این گزینه همچنین نیازمند گیرنده GPG است (گزینه --gpg-recipient را به همراه سایر گزینه‌های مرتبط با GPG در زیر ببینید). --hmac-digest-type= تنظیم الگوریتم خلاصه HMAC برای رمزنگاری احراز هویت‌شده بسته‌های SPA. انتخاب‌ها عبارتند از: MD5، SHA1، SHA256 (پیش‌فرض)، SHA384، SHA512، SHA3_256 و SHA3_512. -N, --nat-access= سرور fwknopd امکان ارائه دسترسی SPA از طریق دیوار آتش iptables به یک سرویس داخلی را از طریق تعامل با قابلیت‌های NAT در iptables فراهم می‌کند. بنابراین اگر سرور fwknopd از یک شبکه داخلی روی فضای آدرس RFC-1918 محافظت می‌کند، یک کلاینت خارجی fwknop می‌تواند درخواست کند که سرور یک پورت خارجی را به یک IP داخلی فوروارد کند، به عنوان مثال “+--NAT-access 192.168.10.2,55000+”. در این حالت، دسترسی به 192.168.10.2 از طریق پورت 55000 به هر سرویسی که از طریق آرگومان --access درخواست شده است (معمولاً tcp/22) اعطا می‌شود. بنابراین پس از ارسال چنین بسته SPA، کاربر دستور “ssh -p 55000 user@host” را اجرا می‌کند و اتصال به‌طور خودکار به سیستم داخلی 192.168.10.2 هدایت می‌شود. توجه داشته باشید که پورت “55000” می‌تواند به‌صورت تصادفی از طریق آرگومان --nat-rand-port (که بعداً توضیح داده شده) تولید شود. --nat-local روی سرور fwknopd، عملیات NAT می‌تواند به‌جای فوروارد شدن به سیستم‌های دیگر، روی سیستم محلی اعمال شود. یعنی برای دیوارهای آتش iptables، اتصال به مثلاً پورت 55000 می‌تواند به پورت 22 روی سیستم محلی ترجمه شود. با استفاده از آرگومان --nat-local، می‌توان کلاینت fwknop را وادار به درخواست چنین دسترسی کرد. این بدان معناست که هر مهاجم خارجی پس از ارسال بسته SPA، تنها اتصالی روی پورت 55000 را مشاهده می‌کند به جای پورت مورد انتظار 22. --nat-port معمولاً fwknop برای درخواست دسترسی به یک پورت خاص مانند tcp/22 روی سیستمی که fwknopd را اجرا می‌کند استفاده می‌شود. با این حال با استفاده از آرگومان --nat-port، امکان درخواست دسترسی به یک سرویس (مجدداً مانند tcp/22) وجود دارد، اما این دسترسی از طریق پورت مشخص‌شده اعطا می‌شود (بنابراین آرگومان -p سپس در خط فرمان کلاینت SSH استفاده خواهد شد). آرگومان‌های خط فرمان --nat-local و --nat-access در fwknop را برای جزئیات بیشتر در مورد دسترسی به سرویس‌ها از طریق عملیات NAT ببینید. --nat-rand-port معمولاً fwknop برای درخواست دسترسی به یک پورت خاص مانند tcp/22 روی سیستمی که fwknopd را اجرا می‌کند استفاده می‌شود. با این حال با استفاده از آرگومان --nat-rand-port، می‌توان دسترسی به یک سرویس خاص (مجدداً مانند tcp/22) را درخواست کرد اما این دسترسی از طریق یک پورت تصادفی ترجمه‌شده اعطا شود. یعنی هنگامی که کلاینت fwknop در این حالت اجرا شد و پورت تصادفی انتخاب‌شده توسط fwknop نمایش داده شد، پورت مقصد استفاده‌شده توسط کلاینت بعدی باید طوری تغییر کند که با این پورت تصادفی مطابقت داشته باشد. برای SSH، این کار از طریق آرگومان -p انجام می‌شود. آرگومان‌های خط فرمان --nat-local و --nat-access را برای جزئیات بیشتر ببینید. -p, --server-port= تعیین شماره پورتی که fwknopd بسته‌ها را از طریق libpcap یا ulogd pcap writer روی آن می‌پذیرد. به‌طور پیش‌فرض fwknopd بسته‌های مجازسازی را روی پورت UDP شماره 62201 جستجو می‌کند. -P, --server-proto= تنظیم پروتکل (udp، tcp، http، udpraw، tcpraw یا icmp) برای بسته خروجی SPA. نکته: حالت‌های udpraw، tcpraw و icmp از سوکت‌های خام (raw sockets) استفاده می‌کنند و بنابراین برای اجرا نیازمند دسترسی ریشه (root) هستند. همچنین توجه کنید: حالت tcp انتظار دارد قبل از ارسال بسته SPA یک اتصال TCP با سرور برقرار کند. این کار معمولاً انجام نمی‌شود، اما برای سازگاری با Tor جهت ناشناسی قوی مفید است؛ ببینید: http://tor.eff.org/. در این حالت، سرور fwknopd باید پیکربندی شود تا روی پورت TCP هدف (که به‌طور پیش‌فرض 62201 است) گوش فرا دهد. -Q, --spoof-src= جعل نشانی مبدأ که کلاینت fwknop بسته‌های SPA را از آن ارسال می‌کند. این کار در سمت کلاینت نیازمند دسترسی root است زیرا به یک سوکت خام نیاز دارد. توجه داشته باشید که آرگومان --spoof-user را می‌توان در این حالت مشخص کرد تا هرگونه کلیدواژه REQUIRE_USERNAME را که ممکن است در /etc/fwknop/access.conf تعیین شده باشد برآورده سازد. -r, --rand-port دستور به کلاینت fwknop برای ارسال یک بسته SPA روی یک پورت مقصد تصادفی بین 10000 تا 65535. سرور fwknopd باید از متغیر PCAP_FILTER استفاده کند که برای پذیرش چنین بسته‌هایی پیکربندی شده باشد. برای مثال، متغیر PCAP_FILTER می‌تواند روی این مقدار تنظیم شود: “+udp dst portrange 10000-65535+”. -R, --resolve-ip-https این یک گزینه مهم است و به کلاینت fwknop دستور می‌دهد یک درخواست HTTPS به اسکریپتی که روی cipherdyne.org اجرا می‌شود ارسال کند که نشانی IP کلاینت را (همان‌طور که وب‌سرور می‌بیند) برمی‌گرداند. در برخی موارد، این کار برای تعیین نشانی IP که باید از طریق سیاست دیوار آتش در سمت سرور راه دور fwknopd مجاز شود لازم است. این گزینه زمانی مفید است که کلاینت fwknop روی سیستمی پشت یک نشانی نامشخص NAT استفاده می‌شود و IP خارجی رو به اینترنت برای کاربر شناخته‌شده نیست. نشانی کامل تفکیک برابر است با: https://www.cipherdyne.org/cgi-bin/myip، و توسط fwknop از طریق wget در حالت --secure-protocol دسترسی پیدا می‌کند. توجه داشته باشید که اگر نشانی IP با قابلیت مسیریابی خارجی کلاینت از قبل برای کاربر مشخص باشد، استفاده از گزینه -a عموماً امن‌تر است زیرا نیاز fwknop به ارسال هرگونه درخواست HTTPS را از بین می‌برد. --resolve-url جایگزینی URL پیش‌فرض مورد استفاده برای تفکیک نشانی IP مبدأ. برای بهترین نتایج، URL مشخص‌شده در اینجا باید به یک سرویس وب اشاره کند که فقط یک نشانی IP را در بدنه پاسخ HTTP ارائه می‌دهد. --resolve-http-only این گزینه کلاینت fwknop را وادار می‌کند نشانی IP خارجی را از طریق HTTP به جای HTTPS تفکیک کند. شرایطی وجود دارد که ممکن است این کار ضروری باشد، مانند زمانی که wget در دسترس نیست (یا با پشتیبانی SSL کامپایل نشده است)، اما به‌طور کلی این کار توصیه نمی‌شود زیرا امکان حمله MITM را از طریق دستکاری پاسخ HTTP تفکیک IP فراهم می‌سازد. یا IP را به‌صورت دستی با -a مشخص کنید، یا از -R استفاده کرده و این گزینه را نادیده بگیرید. -w, --wget-cmd= تنظیم دستی مسیر کامل دستور wget. به‌طور معمول اسکریپت configure دستور wget را پیدا می‌کند، اما این گزینه می‌تواند برای تعیین مسیر در صورتی که در مکانی غیر استاندارد قرار داشته باشد استفاده شود. -s, --source-ip دستور به کلاینت fwknop برای تشکیل یک بسته SPA که شامل نشانی IP حالت خاص “+0.0.0.0+” است که به سرور SPA مقصد fwknopd اطلاع می‌دهد از نشانی IP مبدأ که بسته SPA از آن سرچشمه می‌گیرد به عنوان IP مجاز پس از تغییر مجموعه قوانین دیوار آتش استفاده کند. این گزینه در صورتی مفید است که کلاینت fwknop روی ماشینی پشت یک دستگاه NAT مستقر باشد و IP خارجی مشخص نباشد. با این حال، استفاده از این گزینه توصیه نمی‌شود و در عوض باید از گزینه‌های -a یا -R استفاده کرد. گزینه‌های نشانی مجاز -s، -R و -a مانعةالجمع (mutually exclusive) هستند. -S, --source-port= تنظیم پورت مبدأ برای بسته خروجی SPA. --server-resolve-ipv4 این گزینه کلاینت fwknop را وادار می‌کند هنگامی که از نام میزبان برای سرور SPA استفاده می‌شود، تنها یک نشانی IPv4 را از DNS بپذیرد. این امر در برخی موارد که DNS ممکن است هر دو نشانی IPv6 و IPv4 را برگرداند ضروری است. -f, --fw-timeout= تعیین مدت زمانی (به ثانیه) که قانون دیوار آتش راه دور که دسترسی به یک سرویس را اعطا می‌کند باید فعال بماند. مقدار پیش‌فرض نگهداری‌شده توسط fwknopd برابر ۳۰ ثانیه است، اما هر اتصال برقرارشده می‌تواند پس از حذف قانون اولیه پذیرش، از طریق سازوکار ردیابی اتصال (connection tracking) که ممکن است توسط دیوار آتش ارائه شود، باز بماند. -C, --server-cmd= به جای درخواست دسترسی به یک سرویس با بسته SPA، آرگومان --server-cmd دستوری را مشخص می‌کند که توسط سرور fwknopd اجرا خواهد شد. این دستور درون بسته SPA رمزگذاری شده و طبق معمول توسط سرور fwknopd از روی شبکه شنود می‌شود. -H, --http-proxy=[:port] تعیین یک پراکسی HTTP که کلاینت fwknop بسته SPA را از طریق آن ارسال خواهد کرد. استفاده از این گزینه به‌طور خودکار حالت انتقال بسته SPA (که معمولاً از طریق آرگومان --server-proto تنظیم می‌شود) را روی "http" قرار می‌دهد. همچنین می‌توانید با افزودن ":" به نام یا IP میزبان پراکسی، پورت پراکسی را تعیین کنید. -m, --digest-type= تعیین الگوریتم خلاصه پیام برای استفاده در داده‌های SPA. انتخاب‌ها عبارتند از: MD5، SHA1، SHA256 (پیش‌فرض)، SHA384، SHA512، SHA3_256 و SHA3_512. -M, --encryption-mode= تعیین حالت رمزگذاری هنگامی که AES برای رمزگذاری بسته‌های SPA استفاده می‌شود. پیش‌فرض حالت CBC است، اما حالت‌های دیگری نظیر CFB یا OFB نیز قابل انتخاب هستند به شرطی که در سمت سرور نیز در فایل /etc/fwknop/access.conf از طریق متغیر ENCRYPTION_MODE تعیین شده باشند. به‌طور کلی، توصیه می‌شود این آرگومان را درج نکرده و بگذارید حالت پیش‌فرض (CBC) اعمال شود. توجه داشته باشید که می‌توان رشته “legacy” را تعیین کرد تا بسته‌های SPA با راهبرد بردار مقداردهی اولیه قدیمی که در نسخه‌های fwknop پیش از 2.5 استفاده می‌شد تولید شوند. با انتشار نسخه 2.5، fwknop بردارهای مقداردهی اولیه را به شیوه‌ای سازگار با OpenSSL از طریق الگوریتم PBKDF1 تولید می‌کند. --time-offset-plus=