.TH knockd 1 "April 22, 2021" "knockd 0.8" "" .SH "نام (NAME)" knockd \- سرور پورت ناکینگ (شنود توالی پورت‌ها) .SH "خلاصه دستور (SYNOPSIS)" \fBknockd\fP [\fIگزینه‌ها\fP] .SH "توضیحات (DESCRIPTION)" برنامه \fBknockd\fP یک سرور \fIپورت ناکینگ\fP (port-knock) است. این دیمن تمام ترافیک روی یک رابط شبکه اترنت (یا PPP) را شنود می‌کند و به دنبال توالی‌های خاصی از «کوبیدن» (knock) روی پورت‌ها می‌گردد. کلاینت با ارسال بسته‌های TCP (یا UDP) به یک پورت روی سرور، این ضربه‌ها را ایجاد می‌کند. نیازی نیست این پورت باز باشد -- از آنجا که knockd در سطح لایه پیوند (link-layer) شنود می‌کند، تمامی ترافیک را حتی اگر به مقصد یک پورت بسته باشد مشاهده می‌نماید. هنگامی که سرور یک توالی مشخص از ضربه به پورت‌ها را شناسایی کند، دستوری را که در فایل پیکربندی‌اش تعریف شده اجرا می‌کند. از این سازوکار می‌توان برای باز کردن موقت روزنه‌هایی در دیوار آتش جهت دسترسی سریع استفاده کرد. .SH "گزینه‌ها (OPTIONS)" .TP .B "\-i, \-\-interface " مشخص کردن رابط شبکه جهت شنود. مقدار پیش‌فرض \fIeth0\fP است. .TP .B "\-d, \-\-daemon" اجرا به صورت یک دیمن در پس‌زمینه. این حالت معمولاً برای کارکرد استاندارد سرور مطلوب است. .TP .B "\-c, \-\-config " مشخص کردن مسیر سفارشی برای فایل پیکربندی. مقدار پیش‌فرض \fI/etc/knockd.conf\fP است. .TP .B "\-D, \-\-debug" چاپ پیام‌های اشکال‌زدایی (دیباگ). .TP .B "\-l, \-\-lookup" جستجوی نام‌های دامنه (DNS) برای ورودی‌های گزارش لاگ. این گزینه ممکن است یک ریسک امنیتی باشد! بخش \fBنکات امنیتی (SECURITY NOTES)\fP را مشاهده کنید. .TP .B "\-4, \-\-only-ip-v4" نادیده گرفتن بسته‌های IPv6 و پردازش اختصاصی IPv4. .TP .B "\-v, \-\-verbose" نمایش پیام‌های وضعیت با جزئیات کامل. .TP .B "\-V, \-\-version" نمایش نسخه برنامه. .TP .B "\-h, \-\-help" نمایش راهنمای دستور و ساختار گزینه‌ها. .SH "پیکربندی (CONFIGURATION)" برنامه knockd تمامی مجموعه‌های ناک/رویداد را از یک فایل پیکربندی می‌خواند. هر ناک/رویداد با یک نشانگر عنوان به صورت \fB[name]\fP آغاز می‌شود که در آن \fIname\fP نام رویدادی است که در لاگ ثبت خواهد شد. نشانگر ویژه \fB[options]\fP برای تعریف گزینه‌های سراسری به کار می‌رود. .TP .SH "مثال ۱:" .RS این مثال از دو رویداد ناک استفاده می‌کند. اولی به کلاینت اجازه دسترسی به پورت ۲۲ (SSH) را می‌دهد و دومی پس از پایان کار، پورت را می‌بندد. این حالت هنگامی کاربرد دارد که از یک فایروال بسیار سخت‌گیرانه (سیاست DENY) استفاده می‌کنید و می‌خواهید دسترسی محتاطانه و ایمن داشته باشید. .nf [options] logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 seq_timeout = 10 tcpflags = syn command = /usr/sbin/iptables \-A INPUT \-s %IP% \-\-dport 22 \-j ACCEPT [closeSSH] sequence = 9000,8000,7000 seq_timeout = 10 tcpflags = syn command = /usr/sbin/iptables \-D INPUT \-s %IP% \-\-dport 22 \-j ACCEPT .fi .RE .TP .SH "مثال ۲:" .RS این مثال از یک ناک منفرد برای کنترل دسترسی به پورت ۲۲ (SSH) استفاده می‌کند. پس از دریافت موفقیت‌آمیز توالی ناک، دیمن دستور \fBstart_command\fP را اجرا کرده، به مدت زمان مشخص‌شده در \fBcmd_timeout\fP صبر می‌کند و سپس \fBstop_command\fP را اجرا می‌نماید. این شیوه برای بستن خودکار پورت پس از اتصال کلاینت بسیار مفید است. توالی ناک در این مثال از هر دو پورت UDP و TCP استفاده می‌کند. .nf [options] logfile = /var/log/knockd.log [opencloseSSH] sequence = 2222:udp,3333:tcp,4444:udp seq_timeout = 15 tcpflags = syn,ack start_command = /usr/sbin/iptables \-A INPUT \-s %IP% \-p tcp \-\-syn \-j ACCEPT cmd_timeout = 5 stop_command = /usr/sbin/iptables \-D INPUT \-s %IP% \-p tcp \-\-syn \-j ACCEPT .fi .RE .TP .SH "مثال ۳:" .RS این مثال به جای استفاده از یک توالی ثابت، از مجموعه‌ای از توالی‌های یک‌بارمصرف که از یک فایل خوانده می‌شوند (توالی‌های یک‌بارمصرف) بهره می‌برد که با دستورالعمل \fBone_time_sequences\fP مشخص می‌شود. پس از هر ناک موفق، توالی استفاده‌شده باطل می‌شود و برای ناک بعدی باید از توالی معتبر بعدی در فایل استفاده گردد. این قابلیت مانع از اجرای حملات بازپخش (Replay Attack) توسط مهاجم پس از شنود یا کشف توالی در شبکه می‌شود. .nf [options] logfile = /var/log/knockd.log [opencloseSMTP] one_time_sequences = /etc/knockd/smtp_sequences seq_timeout = 15 tcpflags = fin,!ack start_command = /usr/sbin/iptables \-A INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT cmd_timeout = 5 stop_command = /usr/sbin/iptables \-D INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT .fi .RE .TP .SH "مثال ۴:" .RS مثالی برای پشتیبانی همزمان از IPv4 و IPv6. می‌توانید برای هر یک از این دو پروتکل دستور اختصاصی تعریف کنید. .nf [options] logfile = /var/log/knockd.log [opencloseSMTP] one_time_sequences = /etc/knockd/smtp_sequences seq_timeout = 15 tcpflags = fin,!ack start_command = /usr/sbin/iptables \-A INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT start_command_6 = /usr/sbin/ip6tables \-A INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT cmd_timeout = 5 stop_command = /usr/sbin/iptables \-D INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT stop_command_6 = /usr/sbin/ip6tables \-D INPUT \-s %IP% \-p tcp \-\-dport 25 \-j ACCEPT .fi .RE .SH "پیکربندی: دستورالعمل‌های سراسری (CONFIGURATION: GLOBAL DIRECTIVES)" .TP .B "UseSyslog" ثبت گزارش رویدادها از طریق تابع ()syslog. با این کار ورودی‌های لاگ در /var/log/messages یا معادل آن درج می‌شوند. .TP .B "LogFile = /path/to/file" ثبت مستقیم لاگ‌ها در یک فایل، معمولاً /var/log/knockd.log. .TP .B "PidFile = /path/to/file" مسیر فایل PID مورد استفاده هنگام اجرا در حالت دیمن، پیش‌فرض: /var/run/knockd.pid. .TP .B "Interface = " رابط شبکه‌ای که باید شنود شود. فقط نام آن باید داده شود نه مسیر دستگاه (مثلاً "eth0" نه "/dev/eth0"). پیش‌فرض: eth0. .SH "پیکربندی: دستورالعمل‌های ناک/رویداد (CONFIGURATION: KNOCK/EVENT DIRECTIVES)" .TP .B "Sequence = [:],[:][,[:] ...]" مشخص کردن توالی پورت‌ها در ناک اختصاصی. اگر پورت اشتباهی با همان فلگ‌ها دریافت شود، تلاش ناک باطل می‌شود. به صورت اختیاری می‌توانید پروتکل مورد استفاده را برای هر پورت جداگانه تعیین کنید (پیش‌فرض TCP است). .TP .B "One_Time_Sequences = /path/to/one_time_sequences_file" فایل حاوی توالی‌های یک‌بارمصرف. به جای استفاده از یک توالی ثابت، knockd توالی مورد استفاده را از این فایل می‌خواند. پس از هر تلاش موفقیت‌آمیز ناک، این توالی با درج نویسه '#' در ابتدای خط مربوطه غیرفعال می‌شود. سپس توالی معتبر بعدی از فایل جایگزین آن خواهد شد. از آنجا که اولین نویسه با '#' جایگزین می‌شود، پیشنهاد می‌شود یک فاصله (space) در ابتدای هر خط قرار دهید؛ در غیر این صورت پس از استفاده، نخستین رقم توالی با '#' بازنویسی خواهد شد. هر خط در فایل توالی‌های یک‌بارمصرف دقیقاً حاوی یک توالی با ساختاری مشابه دستورالعمل \fBSequence\fP است. خطوطی که با نویسه '#' شروع شوند نادیده گرفته می‌شوند. \fBنکته\fP: هنگام اجرای knockd این فایل را ویرایش نکنید! .TP .B "Seq_Timeout = " مدت زمان انتظار برای تکمیل توالی به ثانیه. اگر زمان پیش از تکمیل ناک به پایان برسد، تلاش جاری نادیده گرفته و لغو می‌شود. .TP .B "TCPFlags = fin|syn|rst|psh|ack|urg" توجه انحصاری به بسته‌هایی که این فلگ در آن‌ها تنظیم شده است. هنگام استفاده از فلگ‌های TCP، برنامه knockd بسته‌های TCP که با این فلگ‌ها مطابقت ندارند را نادیده می‌گیرد. این رفتار با حالت عادی متفاوت است که در آن دریافت یک بسته نادرست کل توالی را باطل کرده و کلاینت را مجبور به شروع دوباره می‌کرد. استفاده از "TCPFlags = syn" هنگام آزمایش روی اتصال SSH بسیار مفید است، زیرا ترافیک SSH معمولاً با ناک تداخل پیدا کرده و آن را باطل می‌کند. چندین فلگ را با کاما جدا کنید (مثلاً TCPFlags = syn,ack,urg). فلگ‌ها را می‌توان با علامت "!" به صورت صریح مستثنی کرد (مثلاً TCPFlags = syn,!ack). .TP .B "Target = " استفاده از آدرس IP مشخص‌شده به جای آدرس تشخیص‌داده‌شده برای \fBInterface\fP هنگام تطبیق \fBSequence\fP. این قابلیت زمانی مفید است که knockd روی یک روتر اجرا می‌شود و می‌خواهید در پاسخ به تلاش اتصال به یک میزبان روت‌شده واکنشی نشان دهید -- برای مثال، اجرای etherwake جهت ارسال بسته WOL به میزبان. .TP .B "Start_Command = " مشخص کردن دستوری که هنگام ناک صحیح پورت با IPv4 توسط کلاینت اجرا می‌شود. تمامی نمونه‌های \fB%IP%\fP با آدرس IP ارسال‌کننده ناک جایگزین خواهند شد. دستورالعمل \fBCommand\fP نام مستعاری برای \fBStart_Command\fP است. .TP .B "Start_Command_6 = " مشخص کردن دستوری که هنگام ناک صحیح پورت با IPv6 توسط کلاینت اجرا می‌شود. تمامی نمونه‌های \fB%IP%\fP با آدرس IP ارسال‌کننده ناک جایگزین خواهند شد. دستورالعمل \fBCommand_6\fP نام مستعاری برای \fBStart_Command_6\fP است. در صورت عدم تعیین، به صورت خودکار به مقدار \fBStart_Command\fP مربوط به IPv4 بازمی‌گردد. می‌توانید از مقدار خالی برای عدم انجام هیچ عملیاتی استفاده کنید. .TP .B "Cmd_Timeout = " مدت زمان انتظار (به ثانیه) میان اجرای \fBStart_Command\fP و \fBStop_Command\fP. این دستورالعمل اختیاری است و تنها در صورت استفاده از \fBStop_Command\fP لازم خواهد بود. .TP .B "Stop_Command = " مشخص کردن دستوری که پس از گذشت \fBCmd_Timeout\fP ثانیه از اجرای \fBStart_Command\fP اجرا خواهد شد. تمامی نمونه‌های \fB%IP%\fP با آدرس IP ارسال‌کننده ناک جایگزین می‌شوند. این دستورالعمل اختیاری است. .TP .B "Stop_Command_6 = " مشخص کردن دستوری که پس از گذشت \fBCmd_Timeout\fP ثانیه از اجرای \fBStart_Command_6\fP اجرا خواهد شد. تمامی نمونه‌های \fB%IP%\fP با آدرس IP ارسال‌کننده ناک جایگزین می‌شوند. این دستورالعمل اختیاری است. در صورت عدم تعیین، به صورت خودکار به مقدار \fBStop_Command\fP مربوط به IPv4 بازمی‌گردد. می‌توانید از مقدار خالی برای عدم انجام هیچ عملیاتی استفاده کنید. .SH "نکات امنیتی (SECURITY NOTES)" استفاده از گزینه خط فرمان \fB-l\fP یا \fB--lookup\fP برای حل نام‌های دامنه (DNS) در ورودی‌های لاگ ممکن است یک ریسک امنیتی به شمار آید! اگر مهاجم بتواند ترافیک DNS میزبان اجراکننده knockd را شنود کند، ممکن است پورت نخست توالی را کشف نماید. همچنین میزبانی که قرار است مخفی و پنهان بماند (مثلاً به جای پاسخ با بسته ACK+RST، بسته‌های ارسالی به پورت‌های بسته TCP را بی‌صدا دور می‌ریزد)، اگر مهاجم به نخستین پورت (ناشناس) از یک توالی ضربه بزند، ممکن است با ارسال درخواست DNS برای حل نام، حضور خود را آشکار سازد. .SH "همچنین ببینید (SEE ALSO)" برنامه \fBknock\fP کلاینت همراه پورت ناکینگ است، گرچه می‌توان به جای آن از \fBtelnet\fP یا \fBnetcat\fP برای ناک‌های ساده TCP استفاده کرد. برای ناک‌های پیشرفته‌تر، برنامه‌های \fBhping\fP، \fBsendip\fP یا \fBpackit\fP را ببینید. .SH "نویسنده (AUTHOR)" .nf Judd Vinet .fi