یک banaction، دو ترابری: تعمیر jail فیلتربان fail2ban
یک ban تنها به اندازهٔ پروتکل در کنشش گسترده است. شمارندههای زنجیره را با شنوندهها مقایسه کنید، سپس هر دو ترابری را در خود jail بپوشانید.
هیچ چیز در fail2ban خودبهخود بستهای را رها نمیکند: این برنامه یک کنش را فرامیخواند و همان کنش است که پروتکل و درگاه را نام میبرد. وقتی jail گزارشی از یک ban میدهد در حالی که دیمن همچنان ورودها را میپذیرد، آن ban معمولاً واقعی و باریکتر از آن است که لاگ نشان میدهد. کارخواهی که از طریق ترابری دیگر دوباره وصل میشود هرگز به قاعدهای که نصب شده برنمیخورد. پیش از تغییر هر چیزی، آنچه کنش نصب کرده را با آنچه دیمن به آن گوش میدهد مقایسه کنید، زیرا شواهد در زنجیرهٔ دیوار آتش است که کنش نوشته، نه در فهرست jail.
زنجیره را بخوانید، نه خلاصهٔ jail را
fail2ban زنجیرهٔ خودش را پیش از زنجیرهٔ سرویس وارد میکند، پس فهرست شمارندهها دقیقاً نشان میدهد چه چیزی وجود دارد. زنجیرهای به نام jail که یک قاعده دارد و ستون پروتکل آن udp را نشان میدهد، توضیح کاملی برای ورودهای TCP است که همچنان میرسند. تنها بستههای UDP از مبدأ مسدودشده رد میشوند. سرویس یک شنوندهٔ TCP دارد و هیچ چیز در آن زنجیره به آن دست نمیزند.
به اثر jail همسایه هم توجه کنید. یک میزبان میتواند کاملاً پیکربندیشده به نظر برسد فقط به این دلیل که jail دیگری نیمهٔ گمشده را تأمین میکند، و همان ساخت در جایی که آن jail نصب نیست هیچ کاری نمیکند.
کنش فقط یک پروتکل را نام میبرد و همانجاست که میشکند
هر banaction یک الگوی فرمان دیوار آتش است و پروتکل در یکی از جانگهدارهای آن قرار دارد. این باریکی عمدی است، زیرا یک jail وب و یک jail DNS هیچ کاری با مسدود کردن درگاههای یکسان ندارند. وقتی سرویس به بیش از یک ترابری گوش میدهد به تله تبدیل میشود، کاری که دیمنهای VPN بهطور معمول انجام میدهند. فیلتر ممکن است ورودهای ناموفق هر دو ترابری را بپاید در حالی که کنش یکی را پوشش میدهد.
استقرارهای SoftEther و OpenVPN معمولاً همزمان به UDP و TCP گوش میدهند و چون خط لاگ در هر دو حالت یکسان به نظر میرسد، فیلتر هر دو را میپاید. این نامتقارنی هرگز در گزارش خود jail دیده نمیشود. fail2ban شکستها را درست شمرد و سپس قاعدهای نصب کرد که بر نیمی از ترافیکی اعمال میشود که آن شکستها روی آن رسیده بودند.
کاری کنید که ban هر دو ترابری را بپوشاند
این را در تعریف jail اصلاح کنید؛ قاعدههای دستنویس با بارگذاری بعدی بههم میریزند. دو کنش را صریح بنویسید، یکی برای هر پروتکل:
action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
%(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]
سعی نکنید آن را با protocol = all کوتاه کنید. banaction پیشفرض یک کنش multiport است و به -p <protocol> -m multiport --dports <port> گسترش مییابد؛ بدون پروتکل L4 چیزی برای تطبیق درگاه وجود ندارد تا آزموده شود، بنابراین iptables قاعده را رد میکند در حالی که jail همچنان ban موفق را گزارش میدهد. یک کنش همهٔ درگاهها مانند iptables-allports یا nftables-allports یک ورودی را میپذیرد، اما هر درگاه روی آن مبدأ را مسدود میکند که تصمیمی متفاوت است و توجیه خودش را میخواهد. protocol را روی tcp یا udp بگذارید و دو ورودی را بپذیرید.
ثابت کنید قاعده وجود دارد، به جای اعتماد به تنظیم، زیرا تنظیم تا زمانی که زنجیرهای آن را نگه دارد فقط یک نیت را توصیف میکند:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
هر زنجیره باید یک قاعده فهرست کند، با -p tcp در اولی و -p udp در دومی، و هر دو نشانی مسدودشده را نام میبرند. سپس تأیید کنید که همان نشانی روی هر دو ترابری رد میشود. banی که در زنجیره ندیدهاید یک امید است و گزارش بعدی همان نشانه دوباره همان یک ساعت را هزینه خواهد کرد.
آنچه ban هنوز از دست میدهد، و مورد بعدی
کاری که کنش میکند رد کردن یک مبدأ است، و فقط روی درگاههایی که در آن فهرست شدهاند. در برابر مهاجمی که نشانیها را میچرخاند هیچ کاری نمیکند و نمیتواند ماشین خصمانه را از خروجی NAT در سطح اپراتور که صدها کاربر آن را شریکاند جدا کند، جایی که یک ban افرادی را که هیچ کاری نکردهاند بیرون میگذارد. مطمئن شوید فیلتر نشانیای را که کارخواه واقعاً دارد میخواند، نه سرآیند ارسالشده یا نشانی پیشکار. پنجره را بهقدری کوتاه نگه دارید که یک اشتباه خودبهخود منقضی شود.
هیچکدام از اینها دلیل کنار گذاشتن اصلاح پروتکل نیست؛ دلیل نگه داشتن دو ایده همزمان است. ban باریکتر از آن است که خلاصهٔ jail نشان میدهد و حتی یک ban کامل هم باریکتر از تهدید است. زنجیرهٔ دیوار آتش را کنار فهرست شنوندههای دیمن بگذارید و پروتکل به پروتکل مقایسه کنید، زیرا این دو فهرست تعیین میکنند که آیا ban اصلاً میتواند به سرویس برسد.
فرمان بارگذاری مجدد و فهرست زنجیرهها را در رانبوک کنار jail نگه دارید. نفر بعدی به هر دو نیاز خواهد داشت و خلاصهٔ jail هیچکدام را به او نخواهد گفت.