FWKNOPD(8) Fwknop Server FWKNOPD(8)

fwknopd - دیمن احراز هویت تک‌بسته‌ای دیوار آتش (Firewall Knock Operator)

fwknopd [گزینه‌ها]

برنامه fwknopd مؤلفه سمت سرور برای سامانه‌ی FireWall Knock Operator است و وظیفه شنود و پردازش بسته‌های احراز هویت تک‌بسته‌ای (Single Packet Authorization یا SPA) تولیدشده توسط کلاینت‌های fwknop را بر عهده دارد؛ این دیمن پس از احراز هویت و رمزگشایی یک بسته معتبر SPA (به همین ترتیب)، سیاست‌های فایروال یا ACL را برای اعطای دسترسی مورد نظر تغییر می‌دهد و پس از یک زمان انقضای قابل تنظیم، دسترسی را قطع می‌کند.

کاربرد اصلی این برنامه، پنهان‌سازی سرویس‌هایی مانند SSH در پشت یک لایه امنیتی اضافه است تا سوءاستفاده از آسیب‌پذیری‌ها (چه روز صفر و چه کدهای وصله‌نشده) بسیار دشوارتر شود. علاوه بر این، سرویس‌هایی که به این شیوه پنهان می‌شوند، طبیعتاً توسط Nmap یا Shodan قابل پویش و شناسایی نخواهند بود.

پیکربندی اصلی fwknopd در دو فایل نگهداری می‌شود: fwknopd.conf و access.conf. مکان پیش‌فرض این فایل‌ها هنگام پیکربندی بسته تعیین می‌گردد (معمولاً /etc/fwknop). متغیرهای پیکربندی درون این فایل‌ها در ادامه شرح داده شده‌اند.

اطلاعات بیشتر را می‌توانید در راهنمای جامع “Single Packet Authorization: A Comprehensive Guide to Strong Service Concealment with fwknop” به صورت آنلاین بیابید (ببینید: http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html).

-i, --interface=<رابط>

مشخص کردن دستی رابط شبکه‌ای که شنود روی آن انجام می‌شود، مثلاً “-i eth0”. این گزینه معمولاً مورد نیاز نیست زیرا کلیدواژه “PCAP_INTF” در فایل fwknopd.conf رابط شنود را تعریف می‌کند.

-f, --foreground

اجرای fwknopd در پیش‌زمینه به جای تبدیل شدن به دیمن. در صورت اجرا در پیش‌زمینه، پیام‌هایی که قرار بود به لاگ بروند، به خروجی خطای استاندارد (stderr) ارسال می‌شوند. این حالت معمولاً هنگام آزمایش و/یا اشکال‌زدایی استفاده می‌شود.

--fw-list

فهرست کردن قوانینی از دیوار آتش که توسط هر دیمن در حال اجرای fwknopd ایجاد شده است و سپس خروج از برنامه.

-a, --access-file=<فایل-دسترسی>

مشخص کردن مکان فایل access.conf. اگر این گزینه مشخص نشود، fwknopd از مکان پیش‌فرض زمان کامپایل (معمولاً /etc/fwknop/access.conf) استفاده خواهد کرد.

--access-folder=<پوشه-دسترسی>

مشخص کردن مکان پوشه access.conf. اگر این گزینه داده شود، به جای بارگذاری یک فایل منفرد access.conf، تمام فایل‌های .conf موجود در پوشه مشخص‌شده پردازش می‌شوند.

-c, --config=<فایل-کانفیگ>

مشخص کردن مکان فایل fwknopd.conf. اگر این گزینه مشخص نشود، fwknopd از مکان پیش‌فرض (معمولاً /etc/fwknop/fwknopd.conf) استفاده خواهد کرد.

-C, --packet-limit=<تعداد>

مشخص کردن تعداد بسته‌های کاندید SPA برای پردازش، و خروج از برنامه پس از رسیدن به این حد.

-d, --digest-file=<فایل-خلاصه>

مشخص کردن مکان فایل digest.cache. اگر این گزینه داده نشود، fwknopd از مکان پیش‌فرض زمان کامپایل (معمولاً /var/fwknop/digest.cache) استفاده خواهد کرد.

-D, --dump-config

تخلیه مقادیر پیکربندی که fwknopd از فایل‌های /etc/fwknop/fwknopd.conf (یا فایل‌های جایگزین) و /etc/fwknop/access.conf استخراج می‌کند در خروجی خطای استاندارد (stderr).

--dump-serv-err-codes

تخلیه تمام کدهای خطای ممکن fwknopd در خروجی استاندارد (stdout) و خروج از برنامه. این گزینه در عمل به‌ندرت مورد نیاز است و برای کمک به پوشش آزمون‌ها اضافه شده است.

--fault-injection-tag=<برچسب>

این گزینه فقط برای آزمون‌های تزریق خطا (fault injection) زمانی استفاده می‌شود که fwknop با پشتیبانی از کتابخانه libfiu کامپایل شده باشد (ببینید: http://blitiri.com.ar/p/libfiu). در شرایط عادی این گزینه استفاده نمی‌شود و هیچ نسخه بسته‌بندی‌شده‌ای از fwknop حاوی کدهای کامپایل‌شده برای فعال‌سازی این قابلیت در زمان اجرا نیست. این مورد صرفاً برای کامل بودن مستندات ذکر شده است.

-A, --afl-fuzzing

دستور به fwknopd برای دریافت مستقیم بسته‌های SPA از ورودی استاندارد (stdin) جهت پشتیبانی از عملیات فازینگ توسط فازر American Fuzzy Lop (AFL) نوشته‌ی Michal Zalewski. این امر نیازمند آن است که fwknop با آرگومان --enable-afl-fuzzing در اسکریپت configure کامپایل شده باشد، زیرا این کار امکان اتصال کوتاه بخش‌های رمزنگاری/خلاصه‌سازی را به شیوه‌ای که برای عملکرد صحیح AFL لازم است فراهم می‌کند. مزیت این راهبرد آن است که AFL می‌تواند روتین‌های رمزگشایی بسته SPA پیاده‌سازی‌شده توسط libfko را فاز کند.

--fw-list-all

فهرست کردن تمام قوانین دیوار آتش، از جمله قوانینی که ارتباطی با fwknopd ندارند.

--fw-flush

پاک‌سازی (flush) تمام قوانین فایروال ایجادشده توسط یک فرایند در حال اجرای fwknopd. این گزینه به کاربر امکان می‌دهد قوانین فایروال fwknopd را به راحتی و بدون نیاز به انتظار برای اتمام مهلت زمانی آن‌ها حذف کند.

-K, --kill

متوقف کردن فرایند جاری fwknopd. این گزینه راهی سریع و آسان برای متوقف ساختن fwknopd بدون نیاز به جستجو در جدول فرایندها فراهم می‌کند.

--exit-parse-config

تجزیه و اعتبارسنجی فایل‌های پیکربندی (/etc/fwknop/fwknopd.conf و /etc/fwknop/access.conf) و سپس خروج از برنامه. این گزینه راهی برای بررسی ساختار صحیح فایل‌های پیکربندی بدون نیاز به شروع پردازش ترافیک شبکه فراهم می‌آورد.

--exit-parse-digest-cache

تجزیه فایل کش خلاصه‌ها /var/fwknop/digest.cache و خروج از برنامه. این کار ساختار فایل کش خلاصه را بدون نیاز به شروع پردازش ترافیک شبکه اعتبارسنجی می‌کند. توجه داشته باشید که در این حالت فایل‌های پیکربندی استاندارد نیز تجزیه می‌شوند.

-l, --locale=<لوکال>

تنظیم یا لغو تنظیمات پیش‌فرض لوکال (زبان و منطقه) سیستم.

--no-ipt-check-support

غیرفعال کردن استفاده از گزینه -C در iptables. این مورد معمولاً مورد نیاز نیست و فقط در توزیع‌های قدیمی‌تر لینوکس که iptables در آن‌ها از گزینه -C پشتیبانی نمی‌کند مفید است.

-O, --override-config=<فایل>

بازنویسی مقادیر متغیرهای پیکربندی که معمولاً از فایل /etc/fwknop/fwknopd.conf خوانده می‌شوند، با مقادیر برگرفته از فایل مشخص‌شده. چندین فایل بازنویسی پیکربندی را می‌توان به صورت فهرستی جداشده با کاما مشخص کرد.

--key-gen

دستور به fwknopd برای تولید هر دو کلید Rijndael و HMAC که می‌توانند برای رمزنگاری و احراز هویت بسته SPA استفاده شوند. این کلیدها از /dev/urandom استخراج شده و پیش از چاپ در خروجی استاندارد با فرمت base64 انکود می‌شوند و برای قرارگیری دستی درون یک بند (stanza) در فایل /etc/fwknop/access.conf در نظر گرفته شده‌اند. چنین کلیدهایی معمولاً امن‌تر از گذرواژه‌ها هستند.

--key-gen-file=<فایل>

نوشتن کلیدهای تولیدشده درون فایل مشخص‌شده. توجه داشته باشید که اگر فایل از قبل وجود داشته باشد رونویسی خواهد شد. اگر این گزینه داده نشود، گزینه --key-gen کلیدها را در خروجی استاندارد می‌نویسد.

--key-len=<طول>

مشخص کردن تعداد بایت‌ها برای کلید تولیدشده Rijndael. حداکثر اندازه در حال حاضر ۱۲۸ بایت است.

--hmac-key-len=<طول>

مشخص کردن تعداد بایت‌ها برای کلید تولیدشده HMAC. حداکثر اندازه در حال حاضر ۱۲۸ بایت است.

-p, --pid-file=<فایل-pid>

مشخص کردن مکان فایل fwknopd.pid. اگر این گزینه مشخص نشود، fwknopd از مکان پیش‌فرض زمان کامپایل (معمولاً /var/fwknop/fwknopd.pid) استفاده خواهد کرد.

-P, --pcap-filter=<فیلتر>

مشخص کردن یک عبارت فیلتر بسته برکلی (BPF) در خط فرمان fwknopd. این گزینه مقدار متغیر PCAP_FILTER برگرفته از فایل /etc/fwknop/fwknopd.conf را بازنویسی می‌کند.

--pcap-file=<فایل-pcap>

این گزینه به fwknopd دستور می‌دهد داده‌های بسته را به جای شنود مستقیم رابط، از یک فایل pcap بخواند. این حالت معمولاً برای اهداف اشکال‌زدایی استفاده می‌شود و بررسی سن بسته SPA را غیرفعال می‌کند مگر اینکه به صورت دستی در فایل /etc/fwknop/fwknopd.conf فعال شده باشد.

--pcap-any-direction

به fwknopd اجازه می‌دهد بسته‌های SPA را صرف‌نظر از اینکه روی رابط شنود دریافت شده‌اند یا از آن ارسال گشته‌اند، شنود کند. در حالت دوم، این قابلیت می‌تواند برای شنود بسته‌های SPA که از طریق یک سیستم هدایت (forward) شده و مقصدشان شبکه دیگری است مفید باشد. اگر رابط شنود همان رابط خروجی (egress) برای چنین بسته‌هایی باشد (و بنابراین بسته‌های SPA به جای دریافت، توسط این رابط ارسال شوند)، برای اینکه fwknopd بتواند آن‌ها را ببیند استفاده از این گزینه لازم خواهد بود. رفتار پیش‌فرض این است که فقط بسته‌های دریافت‌شده روی رابط شنود، شنود شوند. توجه داشته باشید که این تنظیم مستقل از حالت بی‌قاعده (promiscuous mode) است.

-R, --restart

راه‌اندازی مجدد فرایندهای در حال اجرای fwknopd. این گزینه گزینه‌های خط فرمانی را که به فرایند اصلی fwknopd داده شده بودند حفظ می‌کند، اما fwknopd را وادار به بازخوانی فایل‌های fwknopd.conf و /etc/fwknop/access.conf می‌نماید. این کار همچنین باعث پاک‌سازی زنجیره(های) جاری “FWKNOP” در iptables خواهد شد.

--rotate-digest-cache

چرخش (rotate) فایل کش خلاصه با تغییر نام آن به “<name>-old” و ایجاد یک فایل جدید. فایل کش خلاصه معمولاً در مسیر /var/fwknop/digest.cache یافت می‌شود.

-r, --run-dir=<مسیر>

مشخص کردن دایرکتوری‌ای که fwknopd فایل‌های وضعیت زمان اجرا را در آن می‌نویسد. مقدار پیش‌فرض /var است.

-S, --status

نمایش وضعیت هر فرایند fwknopd که ممکن است در حال اجرا باشد یا نباشد. اگر فرایند موجودی از fwknopd وجود داشته باشد وضعیت خروج ۰ و در غیر این صورت ۱ بازگردانده می‌شود.

--syslog-enable

اجازه به ارسال پیام‌ها به syslog حتی اگر حالت پیش‌زمینه فعال باشد.

-t, --test

اجرای fwknopd در حالت آزمایشی. این گزینه به fwknopd دستور می‌دهد بسته‌های SPA را دریافت و پردازش کند، اما قوانین فایروال را دستکاری نکند و دستورات ارائه‌شده توسط کلاینت‌های SPA را اجرا ننماید. این گزینه بیشتر برای آزمون‌های فازینگ در مجموعه آزمون‌ها جهت اطمینان از پوشش گسترده کد در شرایط نامساعد کاربرد دارد.

-U, --udp-server

اجرای fwknopd در حالت سرور UDP به طوری که بسته‌های SPA مستقیماً از طریق یک سوکت UDP و بدون نیاز به libpcap دریافت شوند. برای اطلاعات بیشتر، توضیحات متغیر پیکربندی “ENABLE_UDP_SERVER” در ادامه را ببینید.

-v, --verbose

اجرای fwknopd در حالت پرگو (verbose). این گزینه را می‌توان چندین بار مشخص کرد تا میزان جزئیات خروجی ارسال‌شده به فایل لاگ سیستم (یا به صفحه نمایش در صورت اجرا در پیش‌زمینه) افزایش یابد.

-h, --help

نمایش اطلاعات نحوه استفاده و خروج از برنامه.

-V, --Version

نمایش اطلاعات نسخه و خروج از برنامه.

برنامه fwknopd برای تعیین متغیرهای پیکربندی و پارامترهای عملیاتی (اینکه کدام رابط شبکه و پورت شنود شود، چه قابلیت‌هایی فعال یا غیرفعال شوند و غیره) به فایل /etc/fwknop/fwknopd.conf مراجعه می‌کند. فایل fwknopd.conf هیچ دستورالعمل کنترل دسترسی را تعریف نمی‌کند و هیچ کلید رمزنگاری یا احراز هویتی را تنظیم نمی‌نماید.

دستورالعمل‌های کنترل دسترسی در فایل /etc/fwknop/access.conf گنجانده شده‌اند. دستورالعمل‌های کنترل دسترسی، کلیدهای رمزنگاری و سطح دسترسی اعطا شده به یک کلاینت fwknop را که پیام رمزگذاری‌شده مناسب SPA را تولید کرده است تعریف می‌کنند.

این بخش متغیرهای پیکربندی برجسته‌تر مورد استفاده توسط fwknopd را فهرست می‌کند. باید مطمئن شوید که مقادیر مناسبی دارند، اما برای اکثر سیستم‌ها مقادیر پیش‌فرض معقولی در نظر گرفته شده است. برای جزئیات بیشتر به فایل /etc/fwknop/fwknopd.conf مراجعه کنید.

PCAP_INTF <رابط>

مشخص کردن رابط اترنت که fwknopd بسته‌ها را روی آن شنود می‌کند.

ENABLE_PCAP_PROMISC <Y/N>

به طور پیش‌فرض fwknopd رابط pcap را در حالت بی‌قاعده (promiscuous) قرار می‌دهد. برای غیرفعال کردن این رفتار (حالت غیر بی‌قاعده) آن را روی “N” تنظیم کنید.

PCAP_FILTER <مشخصات فیلتر pcap>

تعریف فیلتر مورد استفاده برای حالت‌های PCAP؛ fwknopd به طور پیش‌فرض از پورت UDP شماره ۶۲۲۰۱ استفاده می‌کند. با این حال، اگر یک کلاینت fwknop از گزینه --rand-port برای ارسال بسته SPA روی یک پورت تصادفی استفاده کند، این متغیر باید به مقداری مانند “udp dst portrange 10000-65535” به‌روزرسانی شود.

ENABLE_SPA_PACKET_AGING <Y/N>

این گزینه به fwknopd دستور می‌دهد بسته‌های SPA با برچسب زمانی قدیمی را نپذیرد. مقدار در نظر گرفته شده برای “قدیمی” توسط متغیر “MAX_SPA_PACKET_AGE” تعریف می‌شود. اگر “ENABLE_SPA_PACKET_AGING” روی “N” تنظیم شود، fwknopd اصلاً از برچسب زمانی کلاینت استفاده نخواهد کرد.

MAX_SPA_PACKET_AGE <ثانیه>

حداکثر عمر مجاز (به ثانیه) برای پذیرش یک بسته SPA را تعریف می‌کند. این ویژگی مستلزم آن است که سیستم کلاینت از نظر زمانی همگام‌سازی نسبتاً دقیقی با سرور fwknopd داشته باشد (NTP گزینه‌ی خوبی است). سن پیش‌فرض ۱۲۰ ثانیه (دو دقیقه) است.

ENABLE_DIGEST_PERSISTENCE <Y/N>

ردیابی مقادیر خلاصه (digest) مرتبط با بسته‌های پیشین SPA که توسط fwknopd پردازش شده‌اند. این امکان اجازه می‌دهد مقادیر خلاصه در بین اجراهای متوالی fwknopd پایدار بمانند. مقدار پیش‌فرض “Y” است. در صورت تنظیم روی “N”، fwknopd داده‌های بسته SPA ورودی را با هیچ‌یک از خلاصه‌های ذخیره‌شده قبلی مقایسه نخواهد کرد. توصیه می‌شود این قابلیت را فعال بگذارید تا احتمال آسیب‌پذیری در برابر حملات تکرار (replay attack) کاهش یابد.

RULES_CHECK_THRESHOLD <تعداد>

تعداد دفعاتی را تعریف می‌کند که زمان‌های انقضای قوانین فایروال باید بررسی شوند تا یک بررسی عمیق (deep check) اجرا گردد. این ویژگی به fwknopd امکان می‌دهد قوانینی را که حاوی عبارت صحیح exp<زمان> هستند، حتی اگر برنامه‌ای ثالث به جای fwknopd آن‌ها را اضافه کرده باشد، حذف کند. مقدار پیش‌فرض این متغیر ۲۰ است و معمولاً باعث می‌شود این بررسی تقریباً هر دو ثانیه یک‌بار اجرا شود. برای غیرفعال کردن کامل این نوع بررسی، این متغیر را روی صفر تنظیم کنید.

ENABLE_IPT_FORWARDING <Y/N>

اجازه به کلاینت‌های SPA برای درخواست دسترسی به سرویس‌ها از طریق فایروال iptables به جای دسترسی صرف به خود سرور (یعنی دسترسی از طریق زنجیره FWKNOP_FORWARD به جای زنجیره INPUT).

ENABLE_IPT_LOCAL_NAT <Y/N>

اجازه به کلاینت‌های SPA برای درخواست دسترسی به یک سوکت محلی از طریق NAT. این حالت همچنان یک قانون ACCEPT در زنجیره FWKNOP_INPUT قرار می‌دهد، اما پورتی متفاوت از طریق قوانین DNAT به پورت واقعی ترجمه می‌شود. بنابراین، کاربر برای دسترسی به سرویس محلی دستور “ssh -p <port>” را اجرا می‌کند (گزینه‌های --NAT-local و --NAT-rand-port در خط فرمان کلاینت fwknop را ببینید).

ENABLE_IPT_SNAT <Y/N>

تنظیم این گزینه روی “Y” برای فعال‌سازی قانون متناظر SNAT. به طور پیش‌فرض، اگر دسترسی فورواردینگ فعال باشد (متغیر “ENABLE_IPT_FORWARDING” در بالا را ببینید)، fwknopd قوانین DNAT را برای اتصالات ورودی ایجاد می‌کند، اما همزمان این قوانین را با قوانین SNAT تکمیل نمی‌نماید. در برخی شرایط، سیستم‌های داخلی ممکن است مسیری برای بازگشت به آدرس مبدأ اتصال ورودی نداشته باشند، بنابراین لازم است قوانین SNAT نیز اعمال شوند تا سیستم‌های داخلی IP رابط داخلی که fwknopd روی آن اجرا می‌شود را ببینند.

SNAT_TRANSLATE_IP <آدرس_IP>

مشخص کردن آدرس IP برای SNAT. این قابلیت تنها زمانی فعال می‌شود که “ENABLE_IPT_SNAT” روی “Y” تنظیم شده باشد و به طور پیش‌فرض قوانین SNAT با هدف MASQUERADE ساخته می‌شوند (چرا که در این صورت نیازی به تعریف IP داخلی در فایل /etc/fwknop/fwknopd.conf نیست)، اما اگر می‌خواهید fwknopd از هدف SNAT استفاده کند، باید یک آدرس IP با متغیر “SNAT_TRANSLATE_IP” تعریف کنید. توجه داشته باشید که این متغیر عموماً منسوخ شده و متغیر “FORCE_SNAT” در فایل /etc/fwknop/access.conf جایگزین آن شده است که امکان کنترل IP سورس را برای هر بند فراهم می‌کند.

ENABLE_IPT_OUTPUT <Y/N>

افزودن قوانین ACCEPT به زنجیره FWKNOP_OUTPUT. این گزینه معمولاً تنها زمانی مفید است که هیچ قانون ردیابی وضعیتی (state tracking) برای اجازه خروج پاسخ‌های اتصال وجود نداشته باشد و زنجیره OUTPUT دارای سیاست پیش‌فرض drop باشد.

MAX_SNIFF_BYTES <بایت>

مشخص کردن حداکثر تعداد بایت‌ها برای شنود در هر فریم. مقدار پیش‌فرض ۱۵۰۰ است.

FLUSH_IPT_AT_INIT <Y/N>

پاک‌سازی (flush) تمام قوانین موجود در زنجیره‌های fwknop در زمان آغاز به کار fwknopd. مقدار پیش‌فرض “Y” است.

FLUSH_IPT_AT_EXIT <Y/N>

پاک‌سازی تمام قوانین موجود در زنجیره‌های fwknop هنگامی که fwknopd متوقف شده یا به صورت عادی خارج می‌شود. مقدار پیش‌فرض “Y” است.

EXIT_AT_INTF_DOWN <Y/N>

هنگامی که fwknopd در حال شنود یک رابط است، اگر رابط به صورت مدیریتی خاموش (down) شود یا کابل آن جدا گردد، fwknopd به صورت تمیز خارج می‌شود و فرض بر این است که زیرساخت نظارت بر فرایندها مانند systemd یا upstart آن را مجدداً راه‌اندازی خواهد کرد. با این حال، اگر fwknopd توسط systemd، upstart یا ابزار دیگری نظارت نمی‌شود، این رفتار را می‌توان با متغیر “EXIT_AT_INTF_DOWN” غیرفعال کرد. در صورت غیرفعال بودن، fwknopd تلاش می‌کند با بالا آمدن مجدد رابط، ارتباط را بازیابی کند.

ENABLE_RULE_PREPEND <Y/N>

برای سیستم‌هایی که iptables یا firewalld را اجرا می‌کنند، باعث می‌شود fwknopd قوانین جدید SPA را به جای الحاق به انتهای زنجیره، در ابتدای زنجیره مربوطه (مانند “FWKNOP_INPUT”) درج کند. این کار موجب می‌شود قوانین تازه ایجادشده نسبت به قوانین قدیمی‌تر تقدم داشته باشند.

ENABLE_NAT_DNS <Y/N>

اجازه به fwknopd برای حل نام‌های میزبان (hostnames) در پیام‌های دسترسی NAT.

GPG_HOME_DIR <مسیر>

اگر به جای کلید متقارن Rijndael از کلیدهای GPG استفاده شود، این متغیر دایرکتوری پیش‌فرض کلیدهای GPG است. توجه داشته باشید که هر بند دسترسی در /etc/fwknop/access.conf می‌تواند دایرکتوری GPG مختص به خود را برای لغو این مقدار پیش‌فرض مشخص کند. اگر در اینجا یا در بندی از access.conf تنظیم نشده باشد، از دایرکتوری $HOME/.gnupg کاربر اجراکننده fwknopd (به احتمال زیاد root) استفاده می‌شود.

GPG_EXE <مسیر>

مسیر فایل اجرایی GPG را مشخص می‌کند و در صورت عدم تنظیم، به طور پیش‌فرض /usr/bin/gpg است.

LOCALE <لوکال>

تنظیم لوکال (از طریق متغیر LC_ALL). این متغیر را می‌توان برای لغو لوکال پیش‌فرض سیستم تنظیم کرد.

ENABLE_SPA_OVER_HTTP <Y/N>

اجازه به fwknopd برای دریافت داده‌های SPA از درخواست‌های HTTP (تولیدشده توسط کلاینت fwknop در حالت --HTTP). توجه داشته باشید که با فعال شدن این قابلیت، متغیر “PCAP_FILTER” باید برای شنود ترافیک روی اتصالات TCP/80 به‌روزرسانی شود و یک وب‌سرور باید روی همان سرور fwknopd در حال اجرا باشد.

ENABLE_X_FORWARDED_FOR <Y/N>

به fwknopd اجازه می‌دهد از هدر X-Forwarded-for در یک بسته ضبط‌شده‌ی SPA روی HTTP به عنوان IP مبدأ استفاده کند. این وضعیت می‌تواند هنگام استفاده از SPA از طریق یک پراکسی HTTP رخ دهد.

ENABLE_TCP_SERVER <Y/N>

فعال‌سازی سرور TCP در fwknopd. این یک سرور TCP «ساختگی» است که درخواست‌های اتصال TCP را روی پورت مشخص‌شده TCPSERV_PORT می‌پذیرد. در صورت تنظیم روی "Y"، برنامه fwknopd یک فرایند فرزند ایجاد می‌کند تا به درخواست‌های ورودی TCP گوش فرا داده و آن‌ها را بپذیرد. این سرور تنها درخواست را می‌پذیرد و هیچ ارتباط دیگری برقرار نمی‌کند. این کار صرفاً برای اجازه دادن به ورود بسته SPA بر روی TCP که از طریق PCAP شناسایی می‌شود انجام می‌گیرد. اتصال در هر صورت پس از ۱ ثانیه بسته می‌شود. توجه داشته باشید که fwknopd همچنان داده‌های خود را صرفاً از طریق pcap دریافت می‌کند، بنابراین فیلتر تعریف‌شده توسط PCAP_FILTER باید برای در بر گرفتن این پورت TCP به‌روزرسانی شود.

TCPSERV_PORT <پورت>

تنظیم شماره پورتی که سرور TCP «ساختگی» روی آن گوش می‌دهد. این سرور تنها زمانی ایجاد می‌شود که “ENABLE_TCP_SERVER” روی “Y” تنظیم شده باشد.

ENABLE_UDP_SERVER <Y/N>

فعال‌سازی سرور UDP در fwknopd. این گزینه به fwknopd دستور می‌دهد بسته‌های SPA را مستقیماً از طریق یک سوکت UDP و بدون نیاز به libpcap دریافت کند. در صورت فعال بودن این حالت، fwknop باید با آرگومان --enable-udp-server (داده‌شده به اسکریپت configure) کامپایل شود تا وابستگی به libpcap حذف گردد. همان‌طور که انتظار می‌رود، هنگام استفاده از سرور UDP، هیچ بسته ورودی هرگز توسط fwknopd تایید دریافت (ACK) نمی‌شود و بنابراین جمع‌آوری بسته‌های SPA در این حالت جایگزین مناسبی برای شنود مستقیم سیم شبکه است.

UDPSERV_PORT <پورت>

تنظیم شماره پورتی که سرور UDP روی آن گوش می‌دهد. این سرور تنها زمانی ایجاد می‌شود که “ENABLE_UDP_SERVER” روی “Y” تنظیم شده باشد.

PCAP_DISPATCH_COUNT <تعداد>

تعداد بسته‌هایی را که هنگام فراخوانی تابع pcap_dispatch() پردازش می‌شوند تنظیم می‌کند. مقدار پیش‌فرض صفر است، زیرا این امکان را به fwknopd می‌دهد تا جای ممکن بیشترین تعداد بسته را در تابع کالبک مربوطه پردازش کند؛ جایی که روتین مدیریت SPA برای بسته‌هایی فراخوانی می‌شود که مجموعه‌ای از بررسی‌های اولیه را با موفقیت پشت سر بگذارند. با این حال، اگر fwknopd روی پلتفرمی با نسخه قدیمی libpcap اجرا شود، ممکن است لازم باشد این مقدار به یک عدد صحیح مثبت غیرصفر تغییر یابد. اطلاعات بیشتر در صفحه راهنمای pcap_dispatch(3) یافت می‌شود.

PCAP_LOOP_SLEEP <میکروثانیه>

تعداد میکروثانیه‌هایی را که به عنوان آرگومان به تابع usleep() در حلقه pcap ارسال می‌شود تنظیم می‌کند. مقدار پیش‌فرض ۱۰۰۰۰۰ یا یک‌دهم ثانیه است.

ENABLE_PCAP_ANY_DIRECTION <Y/N>

کنترل می‌کند که آیا fwknopd مجاز به شنود بسته‌های SPA هست، صرف‌نظر از اینکه روی رابط شنود دریافت شده باشند یا از آن ارسال گردند. در حالت دوم، این ویژگی می‌تواند برای شنود بسته‌های SPA که از طریق یک سیستم هدایت شده و مقصدشان شبکه دیگری است مفید باشد. اگر رابط شنود همان رابط خروجی برای چنین بسته‌هایی باشد، برای اینکه fwknopd بتواند آن‌ها را ببیند این متغیر باید روی "Y" تنظیم شود. مقدار پیش‌فرض "N" است تا fwknopd فقط به دنبال بسته‌های SPA دریافت‌شده روی رابط شنود باشد (توجه داشته باشید که این تنظیم مستقل از حالت بی‌قاعده است).

SYSLOG_IDENTITY <شناسه>

لغو شناسه syslog در پیام‌های ثبت‌شده توسط fwknopd. مقادیر پیش‌فرض معمولاً مناسب هستند.

SYSLOG_FACILITY <بخش>

لغو بخش (facility) مورد استفاده در syslog. متغیر “SYSLOG_FACILITY” می‌تواند تنظیم شود.

ENABLE_DESTINATION_RULE <Y/N>

کنترل می‌کند که آیا fwknopd فیلد مقصد (destination) در قانون دیوار آتش را روی آدرس مقصد مشخص‌شده در بسته SPA ورودی تنظیم کند یا خیر. این ویژگی برای رابط‌هایی با چند آدرس IP که سرویس‌های مجزایی را میزبانی می‌کنند مفید است. اگر “ENABLE_IPT_OUTPUT” روی “Y” تنظیم شده باشد، فیلد مبدأ قانون دیوار آتش تنظیم می‌شود. قوانین FORWARD و SNAT تحت تاثیر قرار نمی‌گیرند، اما فیلد مقصد قوانین DNAT نیز تنظیم خواهد شد. مقدار پیش‌فرض “N” است که فیلد مقصد را روی 0.0.0.0/0 (هر مقصدی) تنظیم می‌کند.

FWKNOP_RUN_DIR <مسیر>

مشخص کردن دایرکتوری‌ای که fwknopd فایل‌های وضعیت زمان اجرا را در آن می‌نویسد. مقدار پیش‌فرض /var است.

این بخش دستورالعمل‌های کنترل دسترسی در فایل /etc/fwknop/access.conf را شرح می‌دهد. این دستورالعمل‌ها کلیدهای رمزنگاری و احراز هویت و سطح دسترسی اعطا شده به کلاینت‌های fwknop را که یک بسته رمزگذاری‌شده و احراز هویت‌شده‌ی مناسب SPA تولید کرده‌اند، تعریف می‌کنند.

متغیرهای access.conf که در ادامه شرح داده شده‌اند، دستورالعمل‌های دسترسی را برای بسته‌های SPA با IP مبدأ (یا درخواست تعبیه‌شده) متناسب با آدرس یا محدوده شبکه تعریف‌شده توسط متغیر “SOURCE” فراهم می‌آورند. تمامی متغیرهای پس از “SOURCE” بر بند (stanza) مبدأ اعمال می‌شوند. هر دستورالعمل “SOURCE” یک بند جدید را آغاز می‌کند.

SOURCE <IP,..,IP/NET,..,NET/ANY>

این متغیر آدرس مبدأیی را که بسته SPA از آن پذیرفته می‌شود تعریف می‌کند. رشته “ANY” نیز پذیرفته می‌شود اگر قرار باشد یک بسته معتبر SPA از هر IP مبدأیی مورد قبول واقع شود. هر تعریف بند مجوز در فایل /etc/fwknop/access.conf باید با کلیدواژه “SOURCE” آغاز شود. شبکه‌ها باید در نمادگذاری CIDR مشخص شوند (مثلاً “192.168.10.0/24”) و آدرس‌های IP مجزا نیز می‌توانند مشخص گردند. همچنین می‌توان چندین IP و/یا شبکه را به عنوان یک فهرست جداشده با کاما تعریف کرد (مثلاً “192.168.10.0/24,10.1.1.123”).

DESTINATION <IP,..,IP/NET,..,NET/ANY>

این متغیر آدرس مقصدی را که بسته SPA برای آن پذیرفته می‌شود تعریف می‌کند. رشته “ANY” نیز در صورتی پذیرفته می‌شود که یک بسته معتبر SPA به مقصد هر IP مورد قبول باشد. شبکه‌ها باید در نمادگذاری CIDR مشخص شوند (مثلاً “192.168.10.0/24”) و آدرس‌های IP مجزا نیز می‌توانند مشخص شوند. همچنین می‌توان چندین IP و/یا شبکه را به صورت فهرستی جداشده با کاما تعریف کرد (مثلاً “192.168.10.0/24,10.1.1.123”).

OPEN_PORTS <proto/port>,...,<proto/port>

تعریف مجموعه‌ای از پورت‌ها و پروتکل‌ها (tcp یا udp) که در صورت مشاهده یک توالی معتبر کوبش (knock sequence) باز خواهند شد. اگر این مدخل تنظیم نشود، fwknopd تلاش می‌کند هر درخواست پروتکل/پورت مشخص‌شده در داده‌های SPA را بپذیرد (مگر اینکه با هر یک از ورودی‌های “RESTRICT_PORTS” مطابقت داشته باشد). چندین مدخل با کاما از هم جدا می‌شوند.

RESTRICT_PORTS <proto/port>,...,<proto/port>

تعریف مجموعه‌ای از پورت‌ها و پروتکل‌ها (tcp یا udp) که صرف‌نظر از معتبر بودن بسته ورودی SPA، به طور صریح مجاز نیستند. چندین مدخل با کاما از هم جدا می‌شوند.

KEY <گذرواژه>

تعریف کلید متقارن مورد استفاده برای رمزگشایی یک بسته SPA ورودی که توسط کلاینت fwknop با الگوریتم Rijndael رمزنگاری شده است. کلید رمزنگاری واقعی که استفاده می‌شود، از الگوریتم استاندارد PBKDF1 به دست می‌آید. این متغیر برای تمام بسته‌های SPA الزامی است مگر اینکه به جای آن از GnuPG استفاده شود (متغیرهای GPG در زیر را ببینید).

KEY_BASE64 <گذرواژه انکودشده با base64>

مشابه گزینه KEY در بالا، با این تفاوت که کلید متقارن را به صورت یک رشته انکودشده با base64 مشخص می‌کند. این ویژگی اجازه می‌دهد کاراکترهای غیر اسکی (non-ascii) در کلید دیکودشده base64 گنجانده شوند.

HMAC_KEY <کلید>

مشخص کردن کلید HMAC برای رمزنگاری احراز هویت‌شده‌ی بسته‌های SPA. این متغیر از هر دو حالت رمزنگاری Rijndael و GPG پشتیبانی می‌کند و بر اساس مدل «اول رمزنگاری، سپس احراز هویت» اعمال می‌شود.

HMAC_KEY_BASE64 <کلید انکودشده با base64>

مشخص کردن کلید HMAC به عنوان یک رشته انکودشده با base64. این ویژگی اجازه می‌دهد کاراکترهای غیر اسکی در کلید دیکودشده با base64 گنجانده شوند.

FW_ACCESS_TIMEOUT <ثانیه>

تعریف مدت زمانی که پس از یک توالی معتبر کوبش از یک آدرس IP مبدأ، دسترسی از طریق فایروال توسط fwknopd اعطا می‌شود. اگر “FW_ACCESS_TIMEOUT” تنظیم نشود، مهلت زمانی پیش‌فرض ۳۰ ثانیه به صورت خودکار اعمال خواهد شد.

%include <فایل>

دستور به fwknopd برای وارد کردن (import) یک فایل access.conf دیگر. این ویژگی اجازه می‌دهد بندهای دسترسی بیشتری در مکان‌های دیگر فایل‌سیستم تعریف شوند، و این می‌تواند در برخی سناریوها با اجازه دادن به کاربران غیر ارشد برای تعریف کلیدهای رمزنگاری و احراز هویت خود برای عملیات SPA مفید باشد. به این ترتیب، کاربران برای جابجایی کلیدها یا تعریف موارد جدید نیازی به دسترسی نوشتن در فایل اصلی /etc/fwknop/access.conf نخواهند داشت.

%include_folder <دایرکتوری>

مشابه گزینه %include در بالا، دستورالعمل %include_folder باعث می‌شود fwknopd تمام فایل‌های .conf را از دایرکتوری مشخص‌شده وارد کند. همچنین پشتیبانی از خط فرمان برای این ویژگی از طریق گزینه access-folder فراهم است.

ENCRYPTION_MODE <حالت>

مشخص کردن حالت رمزنگاری هنگام استفاده از AES. حالت پیش‌فرض CBC است، اما حالت‌های دیگری مانند OFB و CFB را نیز می‌توان انتخاب کرد. در کل توصیه می‌شود از این متغیر استفاده نکرده و آن را روی حالت پیش‌فرض رها کنید. توجه داشته باشید که می‌توان رشته “legacy” را مشخص کرد تا بسته‌های SPA با راهبرد بردار مقداردهی اولیه قدیمی (IV) مورد استفاده در نسخه‌های fwknop پیش از 2.5 تولید شوند. با انتشار نسخه 2.5، برنامه fwknop از PBKDF1 برای مشتق‌سازی کلید استفاده می‌کند.

HMAC_DIGEST_TYPE <الگوریتم خلاصه>

مشخص کردن الگوریتم خلاصه (digest) برای احراز هویت بسته SPA ورودی. باید یکی از موارد MD5، SHA1، SHA256، SHA384، SHA512، SHA3_256 یا SHA3_512 باشد. این یک فیلد اختیاری است و در صورت عدم تعیین، fwknopd در صورتی که بند دسترسی نیازمند HMAC باشد به طور پیش‌فرض از SHA256 استفاده می‌کند.

ACCESS_EXPIRE <MM/DD/YYYY>

تاریخ انقضا برای بند دسترسی را در قالب MM/DD/YYYY تعریف می‌کند. تمام بسته‌های SPA که با یک بند منقضی‌شده مطابقت داشته باشند نادیده گرفته خواهند شد. این پارامتر اختیاری است.

ACCESS_EXPIRE_EPOCH <ثانیه>

تاریخ انقضا را برای بند دسترسی به صورت زمان مبدا (epoch time) مشخص می‌کند و زمانی کاربرد دارد که نیاز به تعیین زمان انقضای دقیق‌تری نسبت به دقت روزانه ارائه‌شده توسط متغیر ACCESS_EXPIRE در بالا باشد. تمام بسته‌های SPA که با یک بند منقضی‌شده مطابقت داشته باشند نادیده گرفته خواهند شد. این پارامتر اختیاری است.

ENABLE_CMD_EXEC <Y/N>

این گزینه به fwknopd دستور می‌دهد دستورات کاملی را که درون یک بسته مجوز گنجانده شده‌اند بپذیرد. هر دستور از این دست روی سرور fwknopd توسط کاربری که با “CMD_EXEC_USER” مشخص شده است یا توسط کاربری که fwknopd را راه‌اندازی کرده اجرا خواهد شد (در صورتی که متغیر اول تنظیم نشده باشد).

ENABLE_CMD_SUDO_EXEC <Y/N>

دستور sudo ابزاری قدرتمند برای محدود کردن مجموعه دستوراتی که کاربران می‌توانند از طریق فایل “sudoers” اجرا کنند فراهم می‌سازد. با فعال‌سازی این قابلیت (و در حالت “ENABLE_CMD_EXEC”)، به ابتدای تمام دستورات ورودی از بسته‌های معتبر SPA عبارت “/path/to/sudo -u <user> -g <group>” اضافه می‌شود که در آن مسیر sudo توسط متغیر “SUDO_EXE” تنظیم می‌گردد، “<user>” توسط متغیر “CMD_SUDO_EXEC_USER” مشخص می‌شود (در صورت عدم تنظیم، پیش‌فرض “root” است)، و “<group>” توسط “CMD_SUDO_EXEC_GROUP” تعیین می‌شود (پیش‌فرض آن نیز در صورت عدم تنظیم “root” است).

CMD_EXEC_USER <نام‌کاربری>

مشخص کردن کاربری (از طریق setuid) که دستور موجود در بسته SPA را اجرا خواهد کرد. اگر این متغیر داده نشود، fwknopd دستور را با همان کاربری که با آن در حال اجراست (به احتمال زیاد root) اجرا می‌کند. در صورتی که دسترسی‌های ارشد مورد نیاز نباشد، تنظیم این متغیر روی کاربری غیر ریشه مانند “nobody” به شدت توصیه می‌شود.

CMD_SUDO_EXEC_USER <نام‌کاربری>

مشخص کردن کاربری (از طریق “sudo -u <user>”) که دستوری را که درون یک بسته SPA قرار دارد اجرا خواهد کرد. اگر این متغیر مشخص نشود، fwknopd فرض می‌کند که دستور باید به عنوان root اجرا شود.

CMD_EXEC_GROUP <نام‌گروه>

مشخص کردن گروهی (از طریق setgid) که دستوری را که درون بسته SPA قرار دارد اجرا خواهد کرد. اگر این متغیر داده نشود، fwknopd دستور را با همان کاربری که با آن در حال اجراست (به احتمال زیاد root) اجرا می‌کند. در صورتی که دسترسی‌های ارشد مورد نیاز نباشد، تنظیم این متغیر روی گروهی غیر ریشه مانند “nobody” به شدت توصیه می‌شود.

CMD_SUDO_EXEC_GROUP <نام‌گروه>

مشخص کردن گروهی (از طریق “sudo -g <group>”) که دستوری را که درون یک بسته SPA قرار دارد اجرا خواهد کرد. اگر این متغیر مشخص نشود، fwknopd فرض می‌کند که دستور باید به عنوان root اجرا شود.

CMD_CYCLE_OPEN <دستور>

مشخص کردن یک چرخه باز/بستن دستور جهت اجرا پس از دریافت یک بسته معتبر SPA. این دستورالعمل دستور اولیه را تنظیم می‌کند و برای استفاده به همراه متغیر “CMD_CYCLE_CLOSE” در زیر طراحی شده است. کاربرد اصلی این قابلیت این است که به fwknopd اجازه می‌دهد با دیوار آتش یا ACLهایی که به صورت بومی پشتیبانی نمی‌شوند تعامل داشته باشد و همان مدل دسترسی فایروال‌های اصلی پشتیبانی‌شده مانند iptables را پیاده‌سازی کند. یعنی دستوری برای باز کردن فایروال یا ACL اجرا می‌شود و سپس یک دستور متناظر برای بستن پس از انقضای یک زمان‌سنج اجرا می‌گردد. هر دو متغیر “CMD_CYCLE_OPEN” و “CMD_CYCLE_CLOSE” از رشته‌های جایگزینی ویژه پشتیبانی می‌کنند تا مقادیر از بار داده‌ی (payload) بسته SPA استخراج شده و در خط فرمانِ دستور اجراشده قرار گیرند. این رشته‌ها با یک کاراکتر “$” شروع می‌شوند و شامل “$IP” (آدرس IP مجاز رمزگشایی‌شده از پی‌لود SPA)، “$SRC” (مترادف “$IP”)، “$PKT_SRC” (آدرس IP مبدأ در هدر لایه شبکه بسته SPA)، “$DST” (آدرس IP مقصد)، “$PORT” (پورت مجاز)، “$PROTO” (پروتکل مجاز) و “$TIMEOUT” (تنظیم مهلت زمانی کلاینت در صورت مشخص بودن) هستند.

CMD_CYCLE_CLOSE <دستور>

مشخص کردن دستور بستن متناظر با دستور باز کردن که توسط متغیر “CMD_CYCLE_OPEN” در بالا تنظیم شده است. همان جایگزینی‌های رشته‌ای مانند “$IP”، “$PORT” و “$PROTO” پشتیبانی می‌شوند. علاوه بر این، مقدار ویژه “NONE” را می‌توان تنظیم کرد تا پس از دستور باز کردن، هیچ دستور بستنی اجرا نشود. این مورد ممکن است در موقعیت‌های خاصی که دسترسی نامحدود زمانی مطلوب و مجاز است کاربرد داشته باشد.

CMD_CYCLE_TIMER <ثانیه>

تعداد ثانیه‌هایی را تنظیم می‌کند که پس از آن دستور بستن مشخص‌شده در “CMD_CYCLE_CLOSE” اجرا خواهد شد. این متغیر بازه زمانی زمان‌سنج باز/بستن را تعریف می‌کند.

SUDO_EXE <مسیر>

مسیر باینری sudo را تعریف می‌کند. مقدار پیش‌فرض “/usr/bin/sudo” است.

REQUIRE_USERNAME <نام‌کاربری>

الزام یک نام‌کاربری خاص از سیستم کلاینت همان‌طور که در داده‌های SPA انکود شده است. این متغیر اختیاری است و در صورت عدم تعیین، داده‌های مربوط به نام‌کاربری در داده‌های SPA نادیده گرفته می‌شوند.

REQUIRE_SOURCE_ADDRESS <Y/N>

تمام بسته‌های SPA را وادار می‌کند تا یک آدرس IP واقعی درون داده‌های رمزنگاری‌شده داشته باشند. این کار استفاده از آرگومان خط فرمان -s را در خط فرمان کلاینت fwknop غیرممکن می‌سازد، بنابراین یا باید از -R برای تفکیک خودکار آدرس خارجی (اگر کلاینت پشت NAT باشد) استفاده شود یا کلاینت باید IP خارجی را بداند و آن را از طریق آرگومان -a تنظیم کند.

REQUIRE_SOURCE_ADDRESS <Y/N>

مترادف برای “REQUIRE_SOURCE_ADDRESS”.

FORCE_NAT <IP> <PORT>

برای هر بسته معتبر SPA، اتصال درخواستی را وادار می‌کند تا از طریق NAT به مقدار IP و پورت مشخص‌شده (معمولاً داخلی) فوروارد شود. این ویژگی زمانی مفید است که چندین سیستم داخلی یک سرویس مانند SSHD را اجرا می‌کنند و می‌خواهید برای هر بند در فایل access.conf به طور شفاف تنها به یک سیستم داخلی دسترسی بدهید. به این ترتیب، چندین کاربر خارجی می‌توانند به ازای هر کلید SPA مستقیماً تنها به یک سیستم داخلی دسترسی پیدا کنند.

FORCE_SNAT <IP>

برای هر بسته معتبر SPA، یک قانون SNAT را علاوه بر هر قانون DNAT ایجادشده با یک متغیر متناظر (و الزامی) FORCE_NAT اضافه می‌کند. این مشابه “SNAT_TRANSLATE_IP” از فایل /etc/fwknop/fwknopd.conf است با این تفاوت که به ازای هر بند دسترسی تعریف می‌شود و هر مقداری را که با “SNAT_TRANSLATE_IP” تنظیم شده باشد بازنویسی می‌کند. این ویژگی برای شرایطی مفید است که یک اتصال ورودی NAT ممکن است به دلیل محدودیت‌های مسیریابی بی‌پاسخ بماند (یعنی سیستمی که اتصال احراز هویت‌شده‌ی SPA را دریافت می‌کند، یک مسیر پیش‌فرض به دستگاهی متفاوت از خود سیستم SPA داشته باشد).

FORCE_MASQUERADE <Y/N>

این متغیر مشابه متغیر “FORCE_SNAT” است، با این تفاوت که نیازی به مشخص کردن آدرس IP برای قوانین SNAT نیست زیرا در عوض از هدف MASQUERADE استفاده می‌شود.

FORWARD_ALL <Y/N>

در سناریوهای NAT، کنترل می‌کند که آیا تمام ترافیک از طریق سیستم fwknopd هدایت شود یا اینکه تنها اتصالات به سرویس‌های خاصی که توسط کلاینت fwknop درخواست شده‌اند فوروارد گردند.

DISABLE_DNAT <Y/N>

کنترل اینکه آیا در سناریوهای FORCE_NAT قوانین DNAT ایجاد شوند یا خیر. این گزینه عمدتاً همراه با متغیر FORWARD_ALL استفاده می‌شود تا به fwknopd اجازه دهد اساساً به عنوان یک درگاه (gateway) احراز هویت SPA عمل کند؛ به این معنی که کلاینت fwknop برای دسترسی به اینترنت گسترده‌تر از طریق SPA پس از دریافت IP از طریق DHCP استفاده می‌شود، اما قبل از ارسال بسته SPA، تمام ترافیک به سمت اینترنت به طور پیش‌فرض مسدود است.

GPG_DECRYPT_ID <شناسه_کلید>

تعریف یک شناسه کلید GnuPG برای رمزگشایی پیام‌های SPA که توسط کلاینت fwknop رمزنگاری شده‌اند. این کلیدواژه برای احراز هویت مبتنی بر کلیدهای GPG الزامی است. جاکلیدی GPG در سمت کلاینت باید کلید سرور fwknopd را وارد کرده و امضا نموده باشد، و بالعکس. استفاده از یک کلید شخصی حساس GPG روی کلاینت ایرادی ندارد، اما هر سرور fwknopd باید کلید GPG اختصاصی خود را داشته باشد که به طور خاص برای ارتباطات fwknop تولید شده است. دلیل این امر این است که رمز عبور رمزگشایی برای کلید سرور باید درون فایل /etc/fwknop/access.conf قرار گیرد تا fwknopd بتواند کار کند (باید بتواند پیام‌های SPA را که با کلید عمومی سرور رمزنگاری شده‌اند رمزگشایی نماید). برای اطلاعات بیشتر در مورد استفاده از fwknop با کلیدهای GnuPG، پیوند روبرو را ببینید: “http://www.cipherdyne.org/fwknop/docs/gpghowto.html”.

GPG_DECRYPT_PW <گذرواژه_رمزگشایی>

مشخص کردن گذرواژه رمزگشایی برای کلید gpg که توسط “GPG_DECRYPT_ID” در بالا تعریف شده است. این یک فیلد الزامی برای احراز هویت مبتنی بر gpg است.

GPG_ALLOW_NO_PW <Y/N>

اجازه به fwknopd برای بهره‌گیری از یک جفت‌کلید GnuPG که فاقد گذرواژه است. اگرچه این ممکن است یک حالت استقرار مناقشه‌برانگیز به نظر برسد، در محیط‌های خودکار منطقی است، زیرا بر اساس مستندات “http://www.gnupg.org/faq/GnuPG-FAQ.html#how-can-i-use-gnupg-in-an-automated-environment”: «معمولاً هیچ راهی برای ذخیره امن‌تر یک رمز عبور نسبت به خود جاکلیدی مخفی وجود ندارد». استفاده از این ویژگی و حذف عبارت عبور از جفت‌کلید GnuPG در برخی محیط‌ها که libgpgme مجبور به استفاده از gpg-agent و/یا pinentry برای جمع‌آوری عبارت عبور است، مفید خواهد بود.

GPG_REQUIRE_SIG <Y/N>

با تنظیم این گزینه روی Y، برنامه fwknopd تمام پیام‌های SPA رمزنگاری‌شده با GPG را برای بررسی وجود امضا (امضاشده توسط کلید فرستنده) بررسی می‌کند. اگر پیام ورودی امضا نشده باشد، فرایند رمزگشایی با شکست مواجه خواهد شد. اگر تنظیم نشود، مقدار پیش‌فرض Y است.

GPG_DISABLE_SIG <Y/N>

غیرفعال کردن اعتبارسنجی امضا برای پیام‌های ورودی SPA. این گزینه توصیه نمی‌شود و مقدار پیش‌فرض آن N است.

GPG_IGNORE_SIG_VERIFY_ERROR <Y/N>

تنظیم این گزینه به fwknopd اجازه می‌دهد بسته‌های رمزنگاری‌شده با GPG را که امضا دارند اما امضای آن‌ها در اعتبارسنجی رد شده است (مثلاً کلید امضاکننده منقضی شده باشد و غیره) بپذیرد. این تنظیم فقط در صورتی اعمال می‌شود که GPG_REQUIRE_SIG نیز روی Y تنظیم شده باشد.

GPG_REMOTE_ID <شناسه_کلید,...,شناسه_کلید>

تعریف فهرستی از شناسه‌های کلید gpg که الزامی است هر پیام ورودی SPA که با کلید سرور fwknopd رمزنگاری شده است را امضا کرده باشند. این کار تضمین می‌کند که اعتبارسنجی کاربر راه دور از طریق یک سازوکار قوی رمزنگاری انجام می‌شود. اعتبارسنجی امضا به طور پیش‌فرض فعال است و تنها در صورتی می‌تواند غیرفعال شود که “GPG_DISABLE_SIG” روی Y تنظیم شود (گزینه‌ای که توصیه نمی‌شود). چندین ورودی را با کاما جدا کنید.

GPG_FINGERPRINT_ID <اثرانگشت_کلید,...,اثرانگشت_کلید>

مشخص کردن مجموعه‌ای از اثرانگشت‌های (fingerprints) کامل کلید GnuPG به جای شناسه‌های کوتاه‌تر کلید که با متغیر “GPG_REMOTE_ID” تنظیم می‌شوند. در اینجا نمونه‌ای از اثرانگشت یکی از کلیدهای مجموعه آزمون fwknop آورده شده است: 00CC95F05BC146B6AC4038C9E36F443C6A3FAD56.

GPG_HOME_DIR <مسیر>

تعریف مسیر دایرکتوری GnuPG برای استفاده توسط سرور fwknopd. اگر این کلیدواژه در فایل /etc/fwknop/access.conf مشخص نشده باشد، fwknopd به طور پیش‌فرض از دایرکتوری /root/.gnupg برای کلید(های) سرور جهت بسته‌های SPA ورودی مدیریت‌شده توسط بند متناظر در access.conf استفاده خواهد کرد.

GPG_EXE <مسیر>

تعریف مسیر فایل اجرایی GnuPG. اگر این کلیدواژه در فایل /etc/fwknop/access.conf مشخص نشده باشد، fwknopd به طور پیش‌فرض از مسیر /usr/bin/gpg استفاده خواهد کرد.

/etc/fwknop/fwknopd.conf

فایل اصلی پیکربندی برای fwknop.

/etc/fwknop/access.conf

تعریف تمام توالی‌های کوبش و دستورالعمل‌های کنترل دسترسی.

برنامه fwknopd به کتابخانه libfko نیاز دارد که معمولاً در هر دو توزیع سورس و باینری گنجانده شده و یک کتابخانه اختصاصی توسعه‌یافته توسط پروژه fwknop است.

برای شنود بسته، fwknopd در حال حاضر به libpcap نیاز دارد، اما نسخه‌های آینده (به صورت اختیاری) این وابستگی را حذف خواهند کرد.

برای عملکردهای GPG، نرم‌افزار GnuPG نیز باید به درستی به همراه کتابخانه libgpgme نصب و پیکربندی شده باشد.

برای بهره‌گیری از تمامی قابلیت‌های احراز هویت و مدیریت دسترسی سرویس/دیمن fwknopd، یک دیوار آتش فعال iptables، ipfw یا pf روی سیستم‌عامل زیربنایی مورد نیاز است.

برنامه fwknopd می‌تواند با ترکیب گزینه‌های خط فرمان -f, --foreground و -v, --verbose در حالت اشکال‌زدایی اجرا شود. این کار اجرای حالت دیمن را غیرفعال کرده و همزمان با دریافت بسته‌ها، اطلاعات پرگو و مفصلی را روی خروجی خطای استاندارد (stderr) صفحه نمایش چاپ می‌کند.

جامع‌ترین روش برای دستیابی به اطلاعات تشخیصی درباره fwknopd، اجرای اسکریپت آزمون test-fwknop.pl واقع در دایرکتوری test/ در سورس‌کد fwknop است. این مجموعه آزمون، fwknop را تحت تعداد زیادی آزمون زمان اجرا قرار می‌دهد، از valgrind پشتیبانی می‌کند، نتایج رمزنگاری SPA و HMAC را با OpenSSL اعتبارسنجی می‌نماید و حتی دارای فازر داخلی برای ارتباطات SPA است.

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

توسعه‌دهندگان اصلی fwknop عبارتند از Michael Rash (سازنده پروژه) <mbr@cipherdyne.org>، Damien Stuart <dstuart@dstuart.org> و Jonathan Bennett <jbennett@incomsystems.biz>.

این نسخه زبان 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 سال ۲۰۰۵ ابداع شد.

گزارش‌های باگ را به dstuart@dstuart.org یا mbr@cipherdyne.org ارسال کنید، یا یک مشکل (issue) جدید در گیت‌هاب باز کنید (ببینید: https://github.com/mrash/fwknop.git). پیشنهادات و نظرات همواره مورد استقبال است. اطلاعات تکمیلی را می‌توانید در آرشیو لیست پستی fwknop بیابید (ببینید: https://lists.sourceforge.net/lists/listinfo/fwknop-discuss).

برنامه fwknopd تحت مجوز عمومی گنو (GNU General Public License نسخه GPL v2+) توزیع می‌شود و آخرین نسخه آن را می‌توان از http://www.cipherdyne.org بارگیری کرد.

08/06/2018 Fwknop Server