پرش به محتوا

فایروال سرور Debian با nftables

Debian از nftables به‌عنوان فایروال پیش‌فرض استفاده می‌کند. یک قانون‌نامه‌ی ساده و امن بنویسید که فقط سرویس‌های لازم را باز بگذارد.

Debian 13سطح: متوسطبرای: Debian 13، Debian 12به‌روزرسانی: ۱۶ آبان ۱۴۰۵

در Debian، nftables جایگزین iptables شده و فایل اصلی آن /etc/nftables.conf است. این فایل یک‌جا خوانده و اعمال می‌شود، که هم خواناتر است و هم اتمیک.

۱. نصب و فعال‌سازی

bash
sudo apt update
sudo apt install -y nftables
sudo systemctl enable nftables

۲. قانون‌نامه

bash
sudo cp /etc/nftables.conf /etc/nftables.conf.bak
sudo nano /etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset

define ADMIN_NET = { 192.168.10.0/24 }

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    ct state established,related accept
    ct state invalid drop
    iif lo accept
    ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
    ip6 nexthdr icmpv6 accept

    ip saddr $ADMIN_NET tcp dport 22 ct state new limit rate 10/minute accept
    tcp dport { 80, 443 } accept

    counter log prefix "nft-drop: " level info
  }
  chain forward { type filter hook forward priority 0; policy drop; }
  chain output  { type filter hook output priority 0; policy accept; }
}

۳. بررسی پیش از اعمال

bash
sudo nft -c -f /etc/nftables.conf

۴. اعمال امن از راه دور

اگر قانون اشتباهی SSH را ببندد، دسترسی شما قطع می‌شود. برای پیشگیری، قوانین جدید را با یک برگشت خودکار بعد از ۲ دقیقه اعمال کنید:

bash
sudo cp /etc/nftables.conf /root/nftables.new
sudo cp /etc/nftables.conf.bak /etc/nftables.conf
sudo systemd-run --unit=nft-rollback --on-active=120 nft -f /etc/nftables.conf
sudo nft -f /root/nftables.new

حالا از یک ترمینال جدید SSH بزنید. اگر وارد شدید، قوانین سالم‌اند؛ برگشت خودکار را لغو و قوانین را دائمی کنید:

bash
sudo systemctl stop nft-rollback.timer
sudo cp /root/nftables.new /etc/nftables.conf
sudo systemctl restart nftables

اگر وارد نشدید، کافی است ۲ دقیقه صبر کنید تا قوانین قبلی خودکار برگردند.

۵. مشاهده‌ی وضعیت

bash
sudo nft list ruleset
sudo journalctl -k -g nft-drop -n 20