تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

مبانی Iptables: پرکاربردترین قوانین و دستورات فایروال


۲۲ اردیبهشت ۱۴۰۴

مدیریت ترافیک ورودی به سرور یکی از مهم‌ترین بخش‌های تامین امنیت در لینوکس است. Iptables به عنوان یک فایروال قدرتمند و انعطاف‌پذیر، این امکان را می‌دهد تا قوانین مختلفی برای اجازه دادن یا مسدودکردن دسترسی ها تعریف کرد. در این مقاله مجموعه‌ای از دستورات پرکاربرد Iptables ارائه شده است که در سناریوهای رایج روزمره کاربرد دارند؛ از محدود کردن دسترسی به سرویس‌های خاص گرفته تا مسدودکردن IP های مشکوک.

در ادامه خواهید خواند:

  • قوانین ذخیره سازی
  • قوانین عمومی مفید
  • مسدود کردن یک آدرس IP
  • سرویس: SSH
  • سرویس: وب‌ سرور
  • سرویس: MySQL
  • سرویس: PostgreSQL
  • سرویس: ایمیل
  • جمع بندی

قوانین ذخیره سازی

قوانین Iptables موقتی هستند، به این معنی که برای ماندگاری پس از راه‌اندازی مجدد سیستم، باید به صورت دستی ذخیره شوند.

در اوبونتو، یکی از روش‌های ذخیره سازی قوانین Iptables استفاده از پکیج iptables-persistent است. برای نصب آن از دستور زیر استفاده کنید.

sudo apt install iptables-persistent

در هنگام نصب از شما پرسیده می‌شود که آیا می‌خواهید قوانین فعلی فایروال خود را ذخیره کنید یا نه.

اگر پس از نصب، قوانین فایروال خود را به‌روزرسانی کردید و می‌خواهید تغییرات را ذخیره کنید، این دستور را اجرا کنید.

sudo netfilter-persistent save

سایر توزیع‌های لینوکسی ممکن است روش‌های متفاوتی برای دائمی کردن تغییرات Iptables داشته باشند.

مبانی Iptables

قوانین عمومی مفید

این بخش شامل مجموعه‌ای از دستورات Iptables است که قوانین عمومی و پرکاربرد برای اکثر سرورها ایجاد می‌کنند.

اجازه دادن به اتصالات Loopback

رابط loopback، که با نام lo نیز شناخته می‌شود، توسط رایانه برای ارسال اتصالات شبکه به خودش استفاده می‌شود. به عنوان مثال، اگر دستور ping localhost یا ping 127.0.0.1 را اجرا کنید، سرور با استفاده از لوپ‌بک به خودش پینگ می‌فرستد. رابط loopback همچنین زمانی استفاده می‌شود که سرور برنامه‌تان برای اتصال به دیتابیس، از آدرس localhost استفاده کند. بنابراین، باید مطمئن شوید که فایروال شما اجازه این نوع اتصال را می‌دهد.

برای پذیرش تمام ترافیک‌ها در رابط loopback، دستورات زیر را اجرا کنید.

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

اجازه دادن به اتصالات ورودی ایجاد شده و مرتبط

از آنجایی که برای عملکرد صحیح، ترافیک شبکه معمولا نیازمند ارتباط دوطرفه (ورودی و خروجی) است، رایج است که قانونی در فایروال ایجاد شود تا ترافیک‌های ورودی که در پاسخ به اتصالات خروجی هستند یا به آن‌ها مرتبط‌اند، مجاز شناخته شوند. این دستور این کار را انجام می‌دهد.

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

اجازه دادن به اتصالات خروجی ایجاد شده

ممکن است بخواهید اجازه دهید ترافیک خروجی برای تمام اتصالاتی که از پیش‌ برقرار شده‌اند، مجاز باشد؛ این اتصالات معمولا پاسخ به درخواست‌های ورودی معتبر هستند. این دستور این نوع ترافیک را مجاز می‌کند.

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

اجازه دادن به شبکه داخلی برای دسترسی به شبکه خارجی

با فرض اینکه eth0 شبکه خارجی شما و eth1 شبکه داخلی شما باشد، این دستور به شبکه داخلی اجازه دسترسی به شبکه خارجی را می‌دهد.

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

حذف بسته های نامعتبر

برخی از بسته‌های ترافیک شبکه به عنوان نامعتبر علامت‌گذاری می‌شوند. گاهی ثبت گزارش این بسته‌ها مفید است، اما اغلب می‌توان آن‌ها را حذف کرد، برای این کار از دستور زیر استفاده کنید.

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
فایروال چیست و چگونه کار می‌کند؟نقش حیاتی آن در امنیت سرور 
فایروال چیست؟

مسدود کردن یک آدرس IP

برای مسدود کردن اتصالات شبکه‌ای که از یک آدرس IP خاص سرچشمه می‌گیرد، مثلا 203.0.113.51، این دستور را اجرا کنید.

sudo iptables -A INPUT -s 203.0.113.51 -j DROP

در این مثال، گزینه -s 203.0.113.51 یک آدرس مبدا به نام «203.0.113.51» را مشخص می‌کند. آدرس IP مبدا را می‌توان در هر قانون فایروال، از جمله قوانین مجاز (allow)، مشخص کرد.

اگر به جای رد کامل بسته‌ها، می‌خواهید اتصال را رد کنید، به طوری که پاسخ اتصال با خطای connection refused بازگردانده شود، به جای DROP از REJECT استفاده کنید. مانند دستور زیر:

sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

مسدود کردن اتصالات به یک رابط شبکه

برای مسدود کردن اتصالاتی از یک آدرس IP خاص، مانند 203.0.113.5، به یک رابط شبکه مشخص، مانند eth0، از دستور زیر استفاده کنید.

iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

این مثال همانند نمونه قبلی است، با این تفاوت که گزینه -i eth0 به آن اضافه شده است. رابط شبکه را می‌توان در هز قانون فایروال مشخص کرد و این روش بسیار خوبی برای محدود کردن قانون به یک شبکه خاص است.

فایروال Iptables چگونه کار می‌کند؟
فایروال Iptables

سرویس: SSH

اگر از سروری استفاده می‌کنید که به کنسول محلی دسترسی ندارد، احتمالا می‌خواهید اتصالات SSH ورودی را مجاز کنید تا بتوانید به سرور متصل شوید و آن را مدیریت کنید. این بخش نحوه پیکربندی فایروال با قوانین مختلف مربوط به SSH را پوشش می‌دهد.

اجازه دادن به همه SSH ورودی

برای مجاز کردن تمام اتصالات SSH ورودی، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که ترافیک خروجی از اتصالات SSH برقرارشده را مجاز می‌کند، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

اجازه SSH ورودی از آدرس IP خاص یا زیر شبکه

برای مجاز کردن اتصالات SSH ورودی از یک آدرس IP یا زیربخش خاص، باید مبدا را مشخص کنید و برای مثال، اگر می‌خواهید کل زیربخش 203.0.113.0/24 را مجاز کنید، این دستورات را اجزا کنید.

sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که ترافیک خروجی از اتصالات SSH برقرارشده را مجاز می‌کند، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

اجازه دادن به SSH خروجی

اگر سیاست خروجی فایروال شما روی ACCEPT تنظیم نشده باشد و می‌خواهید اتصالات SSH خروجی را مجاز کنید؛ یعنی سرور شما یک اتصال SSH به سرور دیگری برقرار کند، می‌توانید این دستورات را اجرا کنید.

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

اجازه Rsync ورودی از آدرس IP خاص یا زیر شبکه

برای برنامه rsync، که روی پورت 873 اجرا می‌شود، می‌توانید برای انتقال فایل‌ها از یک رایانه به رایانه دیگر استفاده شود.

برای مجاز کردن اتصالات ورودی rsync از یک آدرس IP یا زیربخش خاص، باید آدرس IP مبدا و پورت مقصد را مشخص کنید. به عنوان مثال، اگر می‌خواهید کل زیربخش 203.0.113.0/24 اجازه دسترسی به سرور شما از طریق rsync را داشته باشید، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که ترافیک خروجی از اتصالات rsync برقرار شده را مجاز می‌کند، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

SSH چیست؟ + نحوه استفاده از SSH برای اتصال به سرور مجازی (VPS)
SSH چیست؟

سرویس: وب‌ سرور

وب‌سرورها، مانند Apache و Nginx، معمولا برای دریافت درخواست‌ها به ترتیب روی پورت‌های 80 و 443 برای ارتباط‌های HTTP و HTTPS گوش می‌دهند. اگر سیاست پیش‌فرض برای ترافیک ورودی شما روی DROP یا DENY تنظیم شده باشد، باید قوانینی تعریف کنید تا سرور شما بتواند به این درخواست‌ها پاسخ دهد.

مجاز کردن تمام اتصالات HTTP ورودی

برای مجاز کردن تمام اتصالات HTTP (پورت 80) ورودی، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم که ترافیک خروجی از اتصالات HTTP برقرارشده را مجاز می‌کند، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن تمام اتصالات HTTPS ورودی

برای مجاز کردن تمام اتصالات HTTPS (پورت 443) ورودی این دستور را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم که ترافیک خروجی از اتصالات HTTP برقرارشده را مجاز می‌کند، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن تمام اتصالات HTTP و HTTPS ورودی

اگر می‌خواهد هر دو نوع ترافیک HTTP و HTTPS را مجاز کنید، می‌توانید از ماژول multiport استفاده کنید تا قانونی ایجاد کنید که هر دو پورت را شامل شود. برای مجاز کردن تمام اتصالات HTTP و HTTPS (پورت 80 و 443) ورودی، این دستور را اجرا کنید.

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که ترافیک خروجی از اتصالات HTTP و HTTPS برقرارشده را مجاز می‌کند، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

با سرور مجازی ابری لیارا، زیرساخت قدرتمند و انعطاف‌پذیر خود را در چند ثانیه راه‌اندازی کنید.
✅ منابع اختصاصی و عملکرد پایدار✅ مقیاس‌پذیری آسان بر اساس نیاز✅ ترافیک نامحدود و مدیریت ساده
خری و راه‌‌‍‌اندازی سرور مجازی ابری لیارا

سرویس: MySQL

MySQL برای دریافت اتصال از سمت کلاینت روی پورت 3306 گوش می‌دهد. اگر سرور دیتابیس MySQL شما توسط یک کلاینت روی یک سرور دیگر استفاده می‌شود، باید مطمئن شوید که این ترافیک مجاز شده است.

مجاز کردن اتصال MySQL از یک IP یا Subnet مشخص

برای مجاز کردن اتصالات ورودی MySQL از یک آدرس با یک Subnet مشخص، باید منبع را مشخص کنید. برای مثال اگر می‌خواهید کل Subnet با آدرس 203.0.113.0/24 را مجاز کنید، این دستورات را اجرا نمایید.

sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی مربوط به اتصالات MySQL برقرارشده را می‌دهد، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن اتصال MySQL به یک رابط شخصی مشخص

برای مجاز کردن اتصالات MySQL به یک رابط شبکه خاص، مثلا اگر یک رابط شبکه خصوصی با نام eth1 دارید، از این دستورات استفاده کنید.

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی مربوط به اتصالات MySQL برقرار شده را می‌دهد، فقط درصورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

با پایگاه داده MySQL لیارا، دیتابیس خود را با امنیت بالا و در چند ثانیه راه‌اندازی کنید.
✅ پشتیبان‌گیری خودکار روزانه✅ عملکرد بهینه و سرعت بالا✅ دسترسی امن و مدیریت آسان
خرید و راه‌اندازی هاست MySQL

سرویس: PostgreSQL

PostgreSQL برای دریافت اتصال از سمت کلاینت‌ها روی پورت 5432 گوش می‌دهد. اگر سرور دیتابیس PostgreSQL شما توسط با کلاینت روی یک سرور دیگر استفاده می‌شود، باید مطمئن شوید که این ترافیک مجاز شده است.

اتصال PostgreSQL از یک IP یا Subnet مشخص

برای مجاز کردن اتصالات ورودی PostgreSQL از یک آدرس IP یا Subnet مشخص، باید منبع را مشخص کنید. برای مثال، اگر می‌خواهید کل Subnet با آدرس 203.0.113.0/24 را مجاز کنید، این دستورات را اجرا نمایید.

sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی مربوط ب اتصالات PostgreSQL برقرار شده را می‌دهد، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن اتصال PostgreSQL به یک رابط شبکه مشخص

برای مجاز کردن اتصالات PostgreSQL به یک رابط شبکه خاص نیاز دارید؛ مثلا اگر یک رابط شبکه خصوصی با نام eth1 دارید از این دستورات استفاده کنید.

sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی مربوط به اتصالات PostgreSQL برقرارشده را می‌دهد، فقط در صورتی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

با PostgreSQL لیارا، یک دیتابیس قدرتمند و منعطف را تنها با چند کلیک در اختیار داشته باشید.
✅ مناسب برای پروژه‌های پیچیده✅ پشتیبان‌گیری روزانه و امنیت پیش‌فرض✅ پرفورمنس بالا
خرید و راه‌اندازی سریع هاست PostgreSQL

سرویس: ایمیل

سرورهای ایمیل مانند Sendmail و Postfix، بسته به پروتکل‌هایی که برای ارسال و دریافت ایمیل استفاده می‌شود، روی پورت‌های مختلفی گوش می‌دهند. اگر در حال اجرای یک سرور ایمیل هستید، باید مشخص کنید که از چه پروتکل‌هایی استفاده می‌کنید و ترافیک مربوطه را مجاز کنید. همچنین، در ادامه نحوه ایجاد قانون برای مسدود کردن ارسال ایمیل SMTP نیز بررسی شده است.

مسدود کردن ایمیل خروجی SMTP

اگر سرور شما نباید ایمیل خروجی ارسال کند، ممکن است بخواهید این نوع ترافیک را مسدود کنید. برای مسدود کردن ایمیل خروجی SMTP که از پورت 25 استفاده می‌کند، این دستور را اجرا کنید.

sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

این دستور Iptables را طوری تنظیم می‌کند که تمام ترافیک خروجی روی پورت 25 را رد کند. اگر نیاز دارید سرویس دیگری را بر اساس شماره پورت آن مسدود کنید، کافس است به‌جای عدد 25، شماره پورت موردنظر را قرار دهید.

مجاز کردن تمام اتصال های ورودی SMTP

برای اینکه سرور شما بتواند به اتصال‌های SMTP روی پورت 25 پاسخ دهد، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی برای اتصال‌های SMTP برقرارشده را می‌دهد، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

پروتکل SMTP چیست؟ نقش SMTP در ارسال ایمیل ها
پروتکل SMTP

مجاز کردن تمام اتصال ورودی IMAP

برای اینکه سرور شما بتواند به اتصال‌های IMAP روی پورت 143 پاسخ دهد، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی برای اتصال‌های IMAP برقرارشده را می‌دهد. تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن تمام اتصال های ورودی IMAPS

برای اینکه سرور شما بتواند به اتصال‌های IMAPS روی پورت 993 پاسخ دهد، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی برای اتصال‌های IMAPS برقرار شده را می‌دهد، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن تمام اتصال های ورودی POP3

برای اینکه سرور شما بتواند به اتصال‌های POP3 روی پورت 110 پاسخ دهید، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی برای اتصال‌های POP3 برقرارشده را می‌دهد، تنها لازم این که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

مجاز کردن تمام اتصال های ورودی POP3S

برای اینکه سرور شما بتواند به اتصال‌های POP3S روی پورت 995 پاسخ دهد، این دستورات را اجرا کنید.

sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

دستور دوم، که اجازه ترافیک خروجی برای اتصال‌های POP3S برقرار شده را می‌دهد، تنها زمانی لازم است که سیاست خروجی روی ACCEPT تنظیم نشده باشد.

با هاست ایمیل لیارا، ایمیل‌های خود را با امنیت بالا و مدیریت ساده، به‌راحتی راه‌اندازی کنید.
✅ پشتیبانی از ایمیل‌های سازمانی✅ امنیت پیشرفته و فیلتر اسپم قوی✅ دسترسی به پنل مدیریتی آسان و کاربرپسند
خرید و راه‌اندازی هاست ایمیل لیارا

جمع بندی

در این مقاله، مجموعه‌ای از دستورهای پرکاربرد برای پیکربندی Iptables جهت مدیریت ترافیک سرویس‌هایی مثل PostgreSQL و Mail ارائه شد. با استفاده از این قوانین، می‌توانید اتصال‌های ورودی و خروجی را به صورت دقیق کنترل کرده و امنیت شبکه خود را افزایش دهید. در عین حال، باید در نظر داشته باشید که Iptables ابزاری قدرتمند و انعطاف‌پذیر است؛ بنابراین می‌توانید این قوانین را متناسب با نیازها و ساختار شبکه‌ی خود تغییر داده و گسترش دهید.