chain، table و rule
iptables سالها استاندارد فایروال در لینوکس بوده و هنوز در بسیاری از سرورها استفاده
میشود. مفهوم پایه آن سهتایی table، chain و rule است. جدول (table) پیشفرض
filter نام دارد و سه زنجیره (chain) اصلی دارد: INPUT برای ترافیک ورودی به خود
سرور، OUTPUT برای ترافیک خروجی از سرور، و FORWARD برای ترافیکی که از سرور عبور
میکند (مثل روتر).
› مشاهده قوانین فعلی با شماره خط
sudo iptables -L -n --line-numbers
› اجازه دادن به ترافیک SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
› اجازه دادن به HTTP و HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
› اجازه به اتصالات از قبل برقرارشده
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
› رد کردن (drop) بقیه ترافیک ورودی بهصورت پیشفرض
sudo iptables -P INPUT DROP
ترتیب قوانین اهمیت دارد؛ iptables قوانین هر زنجیره را به ترتیب از بالا به پایین بررسی میکند و به محض
تطبیق اولین قانون، آن را اجرا میکند. به همین دلیل باید همیشه قانون DROP پیشفرض را آخرین کاری که
تنظیم میکنید انجام دهید، وگرنه دسترسی SSH خودتان را قطع میکنید. قوانین iptables با ریبوت پاک میشوند مگر
با ابزاری مثل iptables-persistent ذخیره شوند.
یک اشتباه بسیار رایج و پرهزینه، تست قوانین فایروال مستقیماً روی یک سرور تولیدی از راه دور است؛ اگر قانون
DROP اشتباه یا زودتر از موعد اعمال شود، ممکن است اتصال SSH شما بلافاصله قطع شود و دیگر راهی برای اصلاح آن
از راه دور نداشته باشید. یک راهکار امن، اجرای قوانین جدید با یک تأخیر و بازگشت خودکار است، مثلاً با
زمانبندی یک دستور at که چند دقیقه بعد قوانین را به حالت قبلی برمیگرداند مگر آنکه صریحاً لغو
شود؛ به این ترتیب اگر قانون جدید شما را قفل کرد، سیستم خودش پس از چند دقیقه دسترسی را بازمیگرداند.