نصب فایروال APF در لینوکس
APF یا Advanced Policy Firewall یک لایهی سیاستگذاری روی iptables (netfilter) است که بهجای نوشتن زنجیرههای خام، قواعد فایروال را از روی چند متغیر در یک فایل پیکربندی میسازد و بارگذاری میکند. برخلاف تصور رایج، این پروژه رها نشده است: نسخهی 2.0.1 در فوریهی ۲۰۲۶ و نسخهی 2.0.2 در آوریل ۲۰۲۶ منتشر شدهاند و نسخهی امروزی یونیت systemd، پشتیبانی دوپشتهی IPv6، سازگاری با Docker و بستههای آمادهی RPM و DEB دارد. این راهنما نصب و پیکربندی همین نسخهی جدید را نشان میدهد و در پایان میگوید کجا بهتر است بهجای APF سراغ firewalld یا nftables بروید.

APF چیست و روی چه چیزی سوار میشود
APF خودش موتور فیلترینگ نیست. مجموعهای از اسکریپتهای Bash است که فایل پیکربندی /etc/apf/conf.apf را میخواند و از روی آن قواعد iptables را تولید و اجرا میکند. جذابیت اصلیاش هم همین است: برای باز کردن یک پورت کافی است شمارهاش را به یک متغیر اضافه کنید، نه اینکه زنجیره و ترتیب قواعد را دستی بچینید.
نکتهی مهم برای سال ۲۰۲۶ این است که مستندات رسمی نسخهی ۲ صراحتا هر دو backend یعنی iptables-legacy و iptables-nft را پشتیبانیشده اعلام میکند. یعنی روی توزیعهای امروزی که پشت صحنه از nftables استفاده میکنند هم APF کار میکند، چون دستور iptables روی آنها یک لایهی ترجمه روی همان nftables است.
پلتفرمهایی که پروژه رسما پشتیبانیشان را اعلام کرده: RHEL و Rocky Linux و AlmaLinux نسخههای ۸ و ۹، Debian 12، Ubuntu 20.04 و Ubuntu 24.04، و برای سازگاری با محیطهای قدیمی CentOS 7 و CentOS 6. توجه کنید که CentOS 6 در سال ۲۰۲۰، CentOS 8 در ۲۰۲۱ و CentOS 7 در تابستان ۲۰۲۴ به پایان پشتیبانی رسیدهاند؛ اینکه APF هنوز رویشان اجرا میشود دلیلی برای نگه داشتن آن سیستمعاملها نیست. برای نصب تازه سراغ AlmaLinux یا Rocky Linux بروید.
روی سرور مجازی ایران که دسترسی کامل مدیریتی دارید و میتوانید سیستمعامل و نرمافزار دلخواهتان را نصب کنید، مسیر نصب APF دقیقا همین است که در ادامه میآید.
پیش از نصب: فقط یک فایروال فعال باشد
شایعترین دلیل رفتار غیرقابل پیشبینی فایروال، فعال بودن همزمان دو ابزار است که هر کدام قواعد خودشان را مینویسند. پس اول ابزار فعلی را غیرفعال کنید:
systemctl disable --now firewalld
systemctl disable --now ufw
دربارهی CSF هم یک بهروزرسانی لازم است: شرکت ConfigServer در ۳۱ اوت ۲۰۲۵ فعالیتش را متوقف کرد و پیش از تعطیلی، آخرین نسخه یعنی v15.00 را با مجوز GPLv3 منتشر کرد. بنابراین اگر تا امروز CSF را گزینهی پیشفرض سرورهای کنترلپنلدار میدانستید، بدانید که نگهداری آن حالا بر عهدهی فورکهای جامعهی کاربری است و پیش از تکیه بر آن باید مشخص کنید کدام فورک را دنبال میکنید.
نصب APF
سادهترین راه، بستهی رسمی توزیع شماست. برای خانوادهی RHEL بستههای el7 تا el10 و برای دبیان و اوبونتو بستهی deb منتشر میشود:
dnf install ./apf-2.0.2-1.el9.noarch.rpm
apt install ./apf_2.0.2-1_all.deb
اگر ترجیح میدهید از سورس نصب کنید، پروژه یک اسکریپت نصب تکمرحلهای دارد:
tar -xzf apf-2.0.2.tar.gz
cd advanced-policy-firewall-2.0.2
bash install.sh
تفاوت این دو مسیر در محل قرار گرفتن فایل اجرایی است: نصب با بسته آن را در /usr/sbin/apf و نصب با اسکریپت در /usr/local/sbin/apf میگذارد. فایلهای پیکربندی در هر دو حالت زیر /etc/apf هستند. اگر نسخهی قبلی APF روی سرور بوده، نصب جدید آن را در مسیری با الگوی /etc/apf.DDMMYYYY-EPOCH بکاپ میگیرد و یک لینک /etc/.bk.last به آخرین بکاپ میسازد؛ برای انتقال تنظیمهای قدیمی هم اسکریپت importconf در پوشهی extras هست.
پیکربندی: فایل conf.apf
تمام کار در /etc/apf/conf.apf انجام میشود. بالای هر متغیر توضیح کاملش نوشته شده و ارزش دارد که یکبار از بالا تا پایین بخوانیدش. حداقل چیزهایی که باید تنظیم کنید:
IFACE_UNTRUSTED: رابط شبکهای که به اینترنت وصل است و قواعد روی آن اعمال میشود. مقدار پیشفرضeth0است، ولی روی توزیعهای امروزی نام رابط معمولا چیزی مثلens3یاenp1s0است. نام واقعی را باip -br linkببینید و همان را بنویسید.IFACE_TRUSTED: رابطهایی که ترافیکشان کاملا از فایروال عبور میکند. اگر مطمئن نیستید، خالی بگذارید.IG_TCP_CPORTS: پورتهای TCP ورودی مجاز، با کاما جدا و با زیرخط برای بازه. مثلاIG_TCP_CPORTS="22,80,443".IG_UDP_CPORTS: همان برای UDP؛ اگر سرویس UDP ندارید خالی بماند.IG_ICMP_TYPES: انواع ICMP ورودی مجاز.USE_IPV6: با مقدار1قواعدip6tablesهم در کنار IPv4 اعمال میشود. اگر سرورتان IPv6 دارد این را روشن کنید، وگرنه فقط نیمی از سطح حمله را بستهاید.EGF: فیلترینگ خروجی. بهطور پیشفرض0است و پورتهای مجاز خروجی درEG_TCP_CPORTSتعریف میشوند. روشن کردنش اختیاری است؛ اگر سرور شما کارهای متنوعی انجام میدهد، اول با احتیاط تستش کنید.
پیش از هر راهاندازی مجدد، پیکربندی را اعتبارسنجی کنید تا خطای تایپی وسط کار غافلگیرتان نکند:
apf --validate
روی سرور اختصاصی که یک ماشین فیزیکی کامل با منابع سختافزاری بدون اشتراک است، معمولا بیش از یک کارت شبکه دارید؛ آنجا دقت روی IFACE_UNTRUSTED و IFACE_TRUSTED اهمیت دوچندان پیدا میکند، چون اشتباه گرفتن رابط داخلی و خارجی یعنی یا همهچیز باز میماند یا مدیریت سرور قطع میشود.
DEVEL_MODE؛ بیمهی قفل نشدن پشت فایروال
شایعترین حادثه هنگام کار با فایروال، قطع شدن دسترسی SSH خودتان است. APF برای همین یک مکانیزم داخلی دارد: متغیر DEVEL_MODE که روی نصبهای تازه با مقدار 1 فعال است و با یک کرانجاب، هر پنج دقیقه فایروال را متوقف میکند. یعنی اگر قواعد را اشتباه نوشتید و خودتان را بیرون گذاشتید، خیلی زود دوباره به سرور میرسید.
دو نکته دربارهاش: اول اینکه تا وقتی این حالت روشن است فایروال شما دائمی نیست، پس بعد از اطمینان حتما DEVEL_MODE="0" بگذارید و APF را ریاستارت کنید. دوم اینکه صرف نظر از این قابلیت، این دو عادت را هم رعایت کنید:
- یک نشست SSH دوم باز نگه دارید و تا وقتی مطمئن نشدهاید نبندیدش. نشست باز بهخاطر قاعدهی وضعیت زنده میماند، ولی اتصال تازه ممکن است رد شود؛ پس تست واقعی، باز کردن یک اتصال جدید است.
- آیپی خودتان را پیش از هر چیز به فهرست مجاز اضافه کنید:
apf -a 203.0.113.10 "admin". این کار بدون نیاز به ریاستارت فایروال اعمال میشود.
راهاندازی، بوت و بررسی
روی سیستمهای امروزی APF هنگام نصب یونیت apf.service را نصب میکند و اسکریپت نصب وقتی /run/systemd/system را ببیند همین مسیر را انتخاب میکند. پس راهاندازی و فعالسازی روی بوت با systemd انجام میشود: اگر هنوز با اسکریپتهای قدیمی chkconfig کار میکنید، خطای service httpd does not support chkconfig دلیل این تغییر را توضیح میدهد.
systemctl enable --now apf
systemctl status apf
روی سیستمهای قدیمی بدون systemd، اسکریپت /etc/init.d/apf نصب و با chkconfig فعال میشود. مهم است که فقط یکی از این روشها را به کار ببرید و مثلا همزمان یونیت systemd و خط rc.local نداشته باشید.
برای کنترل دستی، سه دستور اصلی اینها هستند: apf -s برای بارگذاری قواعد، apf -r برای پاک کردن و بارگذاری دوباره، و apf -f برای پاک کردن کامل قواعد. بعد از راهاندازی، این سه بررسی را انجام دهید:
- خلاصهی وضعیت فایروال با
apf --infoو فهرست قواعد فعال باapf --rules. - اینکه واقعا چه سرویسی روی چه پورتی گوش میدهد، با
ss -tulpn. - و مهمتر از همه، تست از یک ماشین بیرونی:
nc -vz SERVER_IP 443. تست از داخل خود سرور بیمعنی است، چون ترافیک از رابطloعبور میکند و اصلا به قواعد ورودی نمیرسد.
لاگ وضعیت APF در /var/log/apf_log است و با apf -t میتوانید ورقش بزنید. نسخهی ۲ علاوه بر آن یک مسیر ممیزی ساختاریافته بهصورت JSONL در /var/log/apf/audit.log مینویسد که برای فهمیدن اینکه چه کسی چه زمانی چه قاعدهای را عوض کرده مفید است. حجم لاگ را زیر نظر داشته باشید؛ روی سروری که مدام اسکن میشود این فایلها سریع بزرگ میشوند، پس برایشان چرخش لاگ تعریف کنید.
مدیریت روزمره
کار با فهرستهای مجاز و ممنوع مستقیم از خط فرمان انجام میشود و نیازی به ویرایش دستی فایلها نیست:
- اجازه یا منع دائمی:
apf -a HOSTوapf -d HOST؛ حذف از همهی فهرستها باapf -u HOST. - اجازه یا منع موقت با زمان انقضا:
apf -td 203.0.113.50 1h "brute force". فهرست موقتها باapf --temp-listو پاک کردنشان باapf --temp-flush. - جستوجو در قواعد و فایلهای اعتماد:
apf -g 203.0.113.50. - خروجی کامل متغیرهای پیکربندی برای عیبیابی:
apf -o.
اگر از CSF مهاجرت میکنید — پیکربندی پایه آن در راهنمای پیکربندی CSF آمده است — دستور apf --csf-help نگاشت دستورهای CSF به معادل APF را نشان میدهد؛ نسخهی ۲ حتی چند ناممستعار مثل -ar و -dr را هم برای همین منظور پذیرفته است.
اگر ترجیح میدهید مدیریت فنی سرور را به کارشناسان بسپارید، سرور مجازی مدیریتشده ایران گزینهای است که نصب و پیکربندی کنترلپنلها، عیبیابی نرمافزارهای نصبشده و پشتیبانی فنی در آن بر عهدهی تیم آنلاین سرور است.
خطاهای رایجی که وقت میگیرند
- پورت در APF باز است ولی سرویس روی
127.0.0.1گوش میدهد و از بیرون در دسترس نیست؛ خروجیss -tulpnاین را لو میدهد. USE_IPV6خاموش مانده و سرویس روی IPv6 بدون محافظت باز است. اگر سرور آدرس IPv6 دارد، این را روشن کنید.- نام رابط شبکه در
IFACE_UNTRUSTEDبا نام واقعی سیستم فرق دارد و قواعد عملا جای درستی اعمال نمیشوند. DEVEL_MODEفراموش شده و روی1مانده؛ فایروال هر پنج دقیقه خودش را خاموش میکند و شما فکر میکنید کار میکند.- روی سروری که Docker دارد، کانتینرها قواعد خودشان را اضافه میکنند. APF نسخهی ۲ برای همین
DOCKER_COMPATرا دارد که بهطور پیشفرض رویautoاست و هنگام پاکسازی فقط زنجیرههای خودش را حذف میکند؛ با این حال محدودیتهای خودتان را در زنجیرهیDOCKER-USERبنویسید. - فیلتر بالادستی شبکه یا سرویسدهنده هم ممکن است دخیل باشد؛ اگر پورتی باز است ولی از بیرون پاسخ نمیدهد، فقط سرور را مقصر ندانید.
کجا بهجای APF سراغ firewalld یا nftables برویم
APF زنده و بهروز است، ولی همچنان روی لایهی iptables مینشیند و رد هت این لایه را منسوخ اعلام کرده و گفته در یکی از نسخههای اصلی آینده حذف خواهد شد. اگر افق کارتان بلندمدت است یا محیطتان استاندارد توزیع را میطلبد، دو گزینهی دیگر منطقیترند:
- firewalld: پیشفرض خانوادهی RHEL. مفهوم Zone دارد، تغییر موقت و دائمی را از هم جدا میکند و پشت صحنه روی nftables مینویسد. باز کردن سرویسها با
firewall-cmd --permanent --add-service=httpsو اعمال باfirewall-cmd --reloadانجام میشود. - nftables: اگر کنترل کامل و یک فایل قاعدهی خوانا میخواهید،
/etc/nftables.confرا بنویسید و باnft -f /etc/nftables.confاتمیک بارگذاری کنید.
یک نمونهی کمینه با سیاست بستن پیشفرض، که همان کاری را میکند که یک پیکربندی معمولی APF انجام میدهد:
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
iif "lo" accept
ct state established,related accept
ct state invalid drop
meta l4proto { icmp, ipv6-icmp } accept
tcp dport { 22, 80, 443 } accept
}
}
معادل DEVEL_MODE را هم میتوانید دستی بسازید. پیش از اعمال قواعد یک بازگشت زماندار بگذارید تا اگر خودتان را قفل کردید، سرور خودبهخود آزاد شود:
systemd-run --on-active=10min /usr/sbin/nft flush ruleset
systemd-run --on-active=10min /usr/bin/systemctl stop firewalld
بعد از اطمینان، تایمر را با systemctl list-timers پیدا و متوقف کنید. در firewalld هم برای تغییرهای آزمایشی میتوانید از قاعدهی موقت استفاده کنید: firewall-cmd --add-port=8443/tcp --timeout=5m که خودش پس از مهلت پاک میشود و روی پیکربندی دائمی اثری نمیگذارد. و در هر دو ابزار لاگ را روشن نگه دارید؛ در firewalld با firewall-cmd --set-log-denied=all و در nftables با گذاشتن یک خط log prefix "fw-drop: " پیش از قاعدهی drop، که خروجیاش را با journalctl -k میبینید.
جمعبندی: APF در سال ۲۰۲۶ همچنان یک گزینهی معتبر و فعال است و اگر با منطق آن راحتاید، نسخهی ۲ را نصب کنید، آیپی خودتان را مجاز کنید، DEVEL_MODE را تا پایان تنظیمات روشن نگه دارید و در آخر خاموشش کنید. اگر هم ترجیح میدهید روی ابزار پیشفرض توزیع بمانید، firewalld یا nftables همان اصول را پیاده میکنند. در هر دو حالت، اگر جایی گیر کردید یا نمیخواهید ریسک قطع دسترسی را بپذیرید، از پشتیبانی و مدیریت سرور کمک بگیرید که هاردنینگ و فایروال سرورهای لینوکسی و ویندوزی هم بخشی از آن است. فهرست کارهای پایهای که پیش از رسیدن به فایروال باید روی خود سیستمعامل انجام شود در امنسازی لینوکس آمده است.