چرا یک قانون مسدودسازی کلاینت OpenVPN هرگز به FORWARD نمیرسد
ترافیک کلاینت به کلاینت میتواند داخل فرایند OpenVPN بماند و هرگز زنجیره FORWARD میزبان را رد نکند، بنابراین شمارنده صفر چیزی را ثابت نمیکند.
دو کلاینت روی یک سرور OpenVPN میتوانند به هم برسند، حتی وقتی برای استخر آدرسشان یک قانون DROP اضافه کردهاید. قانون در زنجیره FORWARD نشسته است، ترافیک آشکارا جریان دارد، و شمارنده آن قانون صفر میماند. نتیجه طبیعی این است که دیوار آتش خراب است. بیشتر اوقات اما بسته اصلاً وارد زنجیره نشده است.
دو مسیر وجود دارد که یک بسته همتا میتواند از سرور OpenVPN طی کند، و آنها را پیکربندی تعیین میکند نه دیوار آتش. دانستن اینکه کدام مسیر در حال استفاده است به شما میگوید آیا قانون میزبان اصلاً در جای درست قرار دارد.
دو مسیری که یک بسته همتا میتواند طی کند
وقتی گزینه هدایت داخلی خاموش است، بستهای از کلاینت A با مقصدی درون آدرس تخصیصیافته کلاینت B روی رابط تونل میرسد. جدول مسیریابی سرور آن را از همان رابط تونل به بیرون میفرستد، زیرا مسیر تا آدرس B در اختیار سرور است. این جریانی ورودی-خروجی از میان میزبان است و مسیر هدایت IPv4 آن را ارزیابی میکند.
وقتی گزینه هدایت داخلی روشن است، فرایند سرور بسته را با یک کلاینت متصل تطبیق میدهد و آن را به همان کلاینت بازمیگرداند. بسته درون دیمن پردازش میشود و هرگز دوباره به دستگاه تونل بازنمیگردد، پس مسیر هدایت میزبان کاملاً از قلم میافتد. راهنمای OpenVPN 2.6 این گزینه را هدایت داخلی کلاینت به کلاینت توصیف میکند، و دقیقاً به همین دلیل قانون دیوار آتش میزبان نمیتواند آن را ببیند.
گونهای سوم در استقرارهایی وجود دارد که کانال داده را به یک ماژول هسته منتقل میکنند. تصمیم هدایت و رمزنگاری از فضای کاربر خارج میشوند، و اینکه netfilter جریان را ببیند به ساخت مسیر انتقال بستگی دارد. هرگز فرض نکنید که مجموعه قوانینی قدیمی روی سرور با انتقال همانطور رفتار میکند که روی سروری در فضای کاربر رفتار میکرد. حالت را از پیکربندی در حال اجرا تأیید کنید، نه از نسخه بسته.
وقتی شمارنده هرگز تکان نمیخورد
شمارنده صفر یعنی بسته در آن نقطه با آن قانون تطبیق پیدا نکرد، و دلایل متعددی وجود دارد. اولی همان دور زدن بالاست: ترافیک هرگز به زنجیره نرسید. دومی ناهمخوانی در رابط، جهت، مبدأ یا مقصد است که وقتی استخر بازشماری شده و قانون هنوز پیشوند قدیمی را نام میبرد رایج است.
سومی موقعیت است. قانونی پیشتر در زنجیره ممکن است جریان را پیش از ارزیابی قانون DROP شما بپذیرد، و قانونی بعدتر ممکن است همان باشد که واقعاً نتیجه را تعیین میکند. زنجیره را به ترتیب و با شمارندههای آشکار بخوانید، سپس بررسی کنید وقتی آزمون را تکرار میکنید شمار کدام قانون بیشتر میشود.
یک تبادل کنترلشده بین دو کلاینت انجام دهید که آدرسهای واقعیشان را از وضعیت خود سرور تأیید کردهاید، نه از اجارهای که به خاطر دارید. اگر شمارنده مربوطه هنوز تکان نمیخورد، پیش از بازنویسی تطبیق به مسیر مشکوک شوید. اگر تکان میخورد اما اتصال هنوز موفق میشود، حذف بعداً نادیده گرفته میشود و ترتیب مشکل است. این پاسخ تعیین میکند که تعمیر تغییر قانون است یا تغییر توپولوژی، پس پیش از ویرایش هر چیزی آن را بگیرید.
انتخاب مرزی که بتواند فیلتر کند
اگر سیاست باید در دیوار آتش میزبان زندگی کند، ترافیک را جایی بگذارید که دیوار آتش میتواند آن را ببیند. خاموش کردن هدایت داخلی راه پشتیبانیشده برای عبور ترافیک همتاها از رابط تونل و مسیر هدایت است، به قیمت فرستادن هر بسته همتا از پشته میزبان.
سپس جریان را دقیق تطبیق دهید. ترافیک در هر دو جهت روی رابط تونل میرسد و از رابط تونل خارج میشود، بنابراین قوانینی که فقط رابط فیزیکی را در نظر میگیرند تطبیق پیدا نمیکنند. قوانین مبتنی بر آدرس به استخر فعلی نیاز دارند و باید جهت برگشت را همانند جهت رفت در نظر بگیرند.
بسیاری از استقرارها بهتر با فیلتر در سطح کلاینت یا گروه خدمت میگیرند، جایی که هویت شناخته شده است و سیاست از کاربر پیروی میکند نه از آدرسی که هنگام اتصال مجدد تغییر میکند. این مکانیزمی متفاوت از زنجیره میزبان است و این دو نباید بدون دلیل روشن با هم مخلوط شوند.
مجموعه قوانین یک توپولوژی قدیمی را بدون تغییر از یک مهاجرت عبور ندهید. استخرهای آدرس، نامهای رابط و حالتهای هدایت همه بر تطبیق یک قانون اثر میگذارند، و قانون کپیشدهای که قبلاً کار میکرد گمراهکنندهترین نوع شواهد است. از جریانی که میخواهید اجازه دهید شروع کنید و قانونی بنویسید که با آن تطبیق دارد.
آزمودن جداسازی بهجای اعتماد به یک قانون
حالت ممنوع و حالت مجاز را در یک اجرا بیازمایید. یک اتصال تازه از یک کلاینت به دیگری آغاز کنید و تأیید کنید که شکست میخورد، سپس تأیید کنید که اتصالی که باید مجاز باشد هنوز کار میکند. اگر فقط اولی آزموده شود، دیوار آتشی که همه چیز را مسدود میکند شبیه موفقیت به نظر میرسد.
پس از بارگذاری مجدد پیکربندی سرور و پس از اتصال مجدد یک کلاینت تکرار کنید، زیرا هدایت داخلی و تخصیص استخرها وضعیت زمان اجرا هستند. شمارندهها را در هر دو جهت بررسی کنید، چون قانونی که با یک جهت تطبیق دارد و با پاسخ نه، جداسازی جزئی میسازد که در یک آزمون سریع سخت به چشم میآید.
جداسازی همان نتیجه مشاهدهشده در مرزی است که واقعاً جریان را حمل میکند. یک قانون DROP در جایی از میزبان شواهد نیست؛ یک اتصال شکستخورده به همراه تکان خوردن شمارنده قانونی که آن را ایجاد کرد شواهد است.