اوبونتوسرور مجازیسنت او اسسیستم عامل لینوکسمقالات وب
چگونه بر روی اوبونتو یا سنت او اس، فایروال را با iptable تنظیم کنیم؟
در این مقاله قصد داریم نحوه راه اندازی فایروال به کمک iptable را بر روی سرور مجازی لینوکس که سیستم عامل اوبونتو یا سنت او اس دارد را با هم مرور کنیم. همانطور که می دانید iptable یک ابزار مدیریتی برای فیلتر بسته های IPv4 و NAT است و برای تنظیم و مدیریت جداول قوانین فیلتر بسته های IPv4 در کرنل لینوکس مورد استفاده قرار می گیرد. تنظیم و پیکربندی صحیح فایروال یکی از مهم ترین و ضروری ترین کارهایی است که برای امن کردن سرور مجازی خود باید انجام دهید. در iptable، جداول انطباقی مختلفی برای بسته ها تعریف می شود و هر جدول می تواند در برگیرنده chain های درون ساخت و نیز برخی از chain های تعریف شده توسط کاربر باشد. Chain در واقع فهرستی از قوانین است که مجموعه بسته ها و هر کدام از قوانین مشخص شده را با بسته انطباقی، منطبق می کند. جدول پیش فرض همان جدول filter است و در برگیرنده chain های درون ساخت INPUT, FORWARD و output است. در این مقاله همراه وب ایده باشید تا تنظیم و راه اندازی فایروال را با هم مرور کنیم.
قبل از هر کاری از طریق SSH به سرور مجازی خود متصل شوید و قوانین تعریف شده در Chain خاصی را به کمک سینتکس زیر فهرست کنید:
sudo iptables -L CHAIN
عبارت CHAINرا با یکی از chain های درون ساخت جایگزین کنید تا بتوانید قوانین تعریف شده را مشاهده نمایید. اگر هیچ chain ای انتخاب نشده باشد، همه chain ها در خروجی لیست خواهند شد:
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
قوانین فایروال به سیستم می گوید که با بسته خاصی که با معیارهای خاص منطبق است و در مواردی که بسته ورودی یا خروجی با قوانین تعریف شده انطباقی ندارد، چه کاری باید انجام دهد. اینکه بدانید چه زمانی باید قوانین فایروال را تعریف کنید بسیار مهم است زیرا با یک تصمیم اشتباه ممکن است دسترسی به سیستم مسدود گردد. اهدافی که می توانید برای قوانین فایروال مورد استفاده قرار دهید در برگیرنده ACCEPT, DROP, QUEUE و RETURN است. ACCEPT به بسته اجازه ورود می دهد، DROP بسته را رها می کند، QUEUE بسته به userspace می فرستد و RETURN مانع از عور بسته chain فعلی می شود.سیاست پیش فرض برای chain، نشان می دهد که به هنگام منطبق نبودن بسته با قوانین خاص فایروال چه اتفاقی باید روی دهد. همانطور که در خروجی اولین دستور مشاهده می کنید، سیاست پیش فرض برای تمامی chain های درون ساخت بر روی ACCEPT تنظیم شده است. قبل از اینکه بخواهیم قانون خاصی را اضافه کنیم، گزینه زیر را اضافه کنید:
sudo iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
این دستور مانع از این می شود که ارتباط های توسعه یافته رها شوند و SSH session فعلی شما فعال باقی می ماند. در مرحله بعدی، قوانینی را اضافه کنید تا بتوانید به ترافیک موجود در رابط loopback اجازه ورود یا خروج دهید:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
در این مرحله می توانید به دسترسی به سرور مجازی از طریق SSHبرای ای پی ادرس لوکال خود اجازه ورود یا خروج دهید. در این شرایط تنها خودتان می توانید به سرور دسترسی داشته باشید:
sudo iptables -A INPUT -s 111.111.111.111 -p tcp –dport 22 -j ACCEPT
در دستور بالا 111.111.111.111 آی پی آدرس لوکال و 22 پورت listening برای SSH daemon است. در مواردی که ای پی آدرس شما به طور مکرر تغییر پیدا می کند بهتر است بخش -s 111.111.111.111 را حذف کنید و از روش دیگری برای محافظت از سرویس 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 -nvL
اگر سرویس های دیگری دارید که می خواهید به آن ها نیز اجازه دسترسی بدهید، حالا بهترین زمان است. بعد از انجام اینکار، می توانید سیاست پیش فرض برای Chain درون ساخت INPUT را به drop تغییر دهید.
sudo iptables -P INPUT -j DROP
این گزینه باعث رها شدن بسته هایی که با معیارهای تنظیم شده در فایروال مطابقت ندارند می شود. خروجی نهایی باید شبیه خروجی زیر باشد:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all — * lo 0.0.0.0/0 0.0.0.0/0
با اینحال اگر در حال حاضر سرور مجازی خود را ریستارت کنید، همه قوانین تعریف شده را از دست خواهید داد. به همین خاطر بهتر است این قوانین را دائمی سازید. در مواردی که از سرور مجازی اوبونتو استفاده می کنید باید پکیج های اضافی را برای این منظور نصب کنید. به کمک دستور زیر می توانید پکیج های ضروری را نصب نمایید:
sudo apt-get install iptables-persistent
بر روی اوبونتو 14.04 می توانید قوانین فایروال را به کمک دستور زیر ذخیره و بارگذاری کنید:
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload
بر روی اوبونتو 16.04 می توانید از دستورات زیر بهره مند شوید:
sudo netfilter-persistent save
sudo netfilter-persistent reload
اگر از سرور مجازی سنت او اس استفاده می کنید به کمک دستور زیر می توانید قوانین فایروال را ذخیره نمایید:
service iptables save