IPtables یک فایروال قدرتمند رایگان برای سیستم عامل لینوکس است که امکان اعمال قوانین و محدودیت های خاص برای تبادل اطلاعات در شبکه را برای مدیر سرور فراهم می کند، فایروال IPtables در عین سادگی بسیار توانمند است و اجازه کنترل ترافیک شبکه در لایه چهارم شبکه (transport) و همچنین لایه های بالاتر و پایین تر را به ما می دهد.
معمولا iptables در زمینه های مختلفی مثل کنترل پکت های ورودی و خروجی سیستم، کنترل و ایجاد دسترسی ها و محدودیت و… استفاده می شود. لازم به ذکر می باشد که فایروال IPtables محدود به پروتکل IPv4 بوده و نوع های دیگر این فایروال برای استفاده غیر از IPv4 به اسم های زیر می باشند:
IP6tables: استفاده برای پروتکل IPv6
arptables: استفاده برای پروتکل ARP
برای نصب این فایروال می توانید از دستور زیر استفاده کنید اول repository سیستم را اپدیت می کنیم و سپس اقدام به نصب آن می کنیم.
sudo apt update
sudo apt install iptables
syntax دستوری این فایروال به این صورت می باشد:
iptables --table TABLE -A/-C/-D... CHAIN rule --jump Target
iptables -A <chain> -i <interface> -p <protocol {udp/tcp} > -s <source> --dports <port> -j <target>
طریقه کار iptables
وقتی به لینوکس ما کانکشنی برقرار شد یا اینکه کانکشن خروجی دیگری از سیستم عامل لینوکس به محیط بیرون بخواهد برقرار شود این کانکشن با لیست دستورات iptables بررسی شده و با توجه به پالیسی نوشته شده در فایروال اجازه ورود یا خروج پاکت راخواهد داد و همچنین لازم به ذکر است کلی دستورات به صورت خطی بررسی شده اگر کانکشن با یکی از آنها مطابقت داشت آن دستور در مورد آن کانکشن برقرار خواهد شد اگر به هیچ کدام از دستورات نوشته شده مطابقت نداشت از دستورات پیشفرض نوشته شده در iptable طبعیت خواهد کرد
Iptables tables and chains
هسته لینوکس با استفاده از امکانات Netfilter به فیلتر کردن بسته، می پردازد و اجازه میدهد بعضی از بسته ها با استفاده از پسورد وارد شود و دیگر بسته اجازه وارد شدن نداشته باشند که هسته آن از لینوکس درست شده که در آن پنج جدول از پیش طراحی شده که شامل:
Filter:
این جدول به طور پیش فرض برای مدیریت بسته های شبکه است
NAT:
برای تغییر بسته برای یک اتصال جدید کاربرد دارد مثلا تبدیل ای پی اینترنت به ای پی شبکه داخلی و برعکس مورد استفاده قرار میگیرد
Mangle:
برای تغییر و مارک دار کردن انواع خاصی از بسته با توجه به پالیسی نوشته شده به کار میرود
Raw:
عمدتا برای پیکربندی معافیت در طول ردیابی اتصال در ترکیب با هدف NOTRACK است
Security:
برای کنترل دسترسی اجباری قوانین شبکه مورد استفاده قرار میگیرد
Filter table
Input chain کلیه بسته های ورودی به سیستم عامل
Output chain کلیه بسته های خروجی از سیستم عامل
Forward chain کلیه بسته هایی که از طریق این سیستم عامل بخواهد فوروارد شود
NAT table
Pre-routing بسته های شبکه را زمانی که آنها می رسند تغییر می دهد و معمولا برای destination network مورد استفاده قرار میگیرد
Output تغییر میدهد بسته های تولید شده در شبکه داخلی قبل از اینکه خارج شود
Post-routing تغییر می دهد بسته ها را قبل از اینکه از شبکه خارج شوند
Mangle table
Input بسته های شبکه را برای میزبان تغییر می دهد (مارک دار می کند)
Output بسته های تولید شده از شبکه را قبل از فرستادن تغییر می دهد (مارک دار می کند)
Forward تغییر میدهد (مارک دار می کند) پکت های شبکه که می خواهد روت شود به نقطه دیگر
Pre-routing تغییر میدهد (مارک دار می کند) پکت های شبکه را قبل از اینکه روت شوند
Post-routing تغییر میدهد (مارک دار می کند) پکت های شبکه را بعد از اینکه روت شوند
Raw table
Output اجرا پاکت های که در شبکه داخلی تولید شده اند قبل از اینکه خارج شوند
Pre-routing اجرای بسته های ورودی قبل از اینکه خارج شوند
Security table
Input اجرا روی پاکت های که به شبکه وارد می شوند
Output اجرا روی پاکت های که از شبکه خارج می شوند
Forward اجرا روی پاکت های که از شبکه می خواهند روت شوند به جای دیگری
Iptables command قوانین و دستورهای موجود در iptables
A- برای افزودن دستور به انتهای یک زنجیره از جدول قوانین استفاده می شود.
D- برای حذف دستور از مکان خاصی از زنجیره جدول قوانین استفاده می شود.
N- برای ایجاد زنجیر جدید مورد استفاده قرار می¬گیرد که میتوان به آن یک اسم اختصاصی بدهیم
E- برای تغییر اسم زیر شاخه ساخته شده به کار میرود
X- برای پاک کردن زیر شاخه تولید شده به کار می رود
F- برای پاک کردن قوانین مورد استفاده قرار می¬گیرد.
I- برای وارد کردن دستوری خاص به یک سطر از یک زیر شاخه
L- لیست کلیه دستورات یک زیر شاخه را لیست خواهد کرد
P- برای تغییر پالیسی دیفالت استفاده می شود
R- جایگزین کردن دستوری بهجای دستور قبلی در یک زیر شاخه
Z- برای صفر کردن کلیه کانتر های داخل فایروال
Iptables parameter options
p- برای مشخص کردن نوع پروتکل مورد استفاده قرار می¬گیرد.
s- یا source– برای مشخص کردن شماره ip مبدا مورد استفاده قرار می¬گیرد.
d- یا destination– برای مشخص کردن شماره ip مقصد مورد استفاده قرار می¬گیرد.
i- یا in-interface– برای مشخص کردن کارت شبکه ورودی مورد استفاده قرار می¬گیرد.
o- یا out-interface– برای مشخص کردن کارت شبکه خروجی مورد استفاده قرار می¬گیرد.
j- مشخص کردن نحوه برخورد با بسته مورد استفاده قرار میگیرد. این سویچ به معنی jump بوده و به موارد DROP ، LOG ، ACCEPT و REJECT اشاره می کند.
m- برای مشخص کردن ماژول مورد استفاده قرار می گیرد.
c- این دستور شمارنده های داخل فایروال را فعال می کند که در طول وارد کردن یا اجرا کردن یا جایگزین کردن می باشد [!] این دستور در ابتدای پارامتر های فوق دستور را به صورت منفی اجرا خواهد کرد
Saving rules
iptables-save > /etc/iptables.rules
برای پشتیبان گیری تنظیمات مورد استفاده قرار می گیرد.
post-down iptables-save > /etc/iptables.rules
برای پشتیبان گیری تنظیمات قبل از هر خاموش شدن سیستم مورد استفاده قرار می گیرد.
iptables-restore < /etc/iptables.rules
برای بازیابی تنظیمات مورد استفاده قرار می گیرد.
مهم ترین و پرکاربردترین دستورات و تنظیمات iptables
پاک کردن تمام تنظیمات جاری
Iptables -F
ایجاد تنظیمات عمومی و مسدود کردن همه دسترسی ها
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
مسدود کردن یک ip خاص
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
باز کردن پورت SSH برای تمامی ارتباطات ورودی
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
باز کردن پورت ssh برای یک ip یا رنج ip خاص
iptables -A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
باز کردن پورت http
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
باز کردن پورت https
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
باز کردن چند پورت بصورت یکجا
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
باز کردن پورت برای ارتباط خروجی ssh
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
باز کردن پورت https برای ارتباطات خروجی
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
ایجاد امکان ping از داخل به خارج
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
ایجاد امکان ping از خارج به داخل
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
ایجاد امکان دسترسی loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
ایجاد امکان دسترسی به شبکه خارجی eth1 از شبکه داخلی eth0
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
باز کردن دسترسی خروجی پورت dns
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
ذخیره تغییرات iptables
service iptables save
فعال کردن IP Forwarding:
echo "1" > /proc/sys/net/ipv4/ip_forward
فعال کردن LOG در قوانین فایروال
برای اینکه مدیریت کامل تری به شبکه خود داشته باشیم و بتوانیم منابعی که در حال اسکن کردن سیستم ما هستند بیابیم و یا در هر حال گزارشی از عملکرد صحیح فایر وال داشته باشیم می توانیم به طرق ذیل Log فایل ها را برای موارد دلخواهمان فعال کنیم:
فعال کردن Log برای دیدن بسته های ICMP:
iptables -A OUTPUT -p icmp -j LOG --log-prefix "PING:> "
iptables -A INPUT -p icmp -j LOG --log-prefix "PING:> "
برای دیدن این log ها به این مسیر بروید:
/var/log/messages
و خط هایی را که با PING شروع شده اند بررسی نمایید.( البته راه ساده تر آن استفاده از دستور فیلتر کننده grep و مختص کردن به log های فایروال می باشد)
فعال کردن Log برای یک ip خاص:
iptables -t nat POSTROUTING -s 192.168.0.88 -o eth1 -j LOG --log-prefix " "
برای جلوگیری از حجیم شدن لاگ فایل می توان از قابلیت سوکت -m در دستور استفاده کرد که به کمک آن می توان تنظیم نمود که برای مثال در هر 5 دقیقه بیش از 7 مورد را در لاگ ذخیره ننماید:
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix “IP_SPOOF A: “
نمایش وضعیت فایروال:
iptables -L -n -v
حذف قوانین و رول های فایروال :
ابتدا به کمک دستورات زیر شماره خط رول را بدست آورید:
iptables -L INPUT -n –line-numbers
iptables -L OUTPUT -n –line-numbers
iptables -L OUTPUT -n –line-numbers | less
iptables -L OUTPUT -n –line-numbers | grep 202.54.1.1
حال به عنوان مثال برای حذف رول موجود در خط شماره 4 می توانید از دستور زیر استفاده فرمائید:
iptables -D INPUT 4
و یا از دستور زیر برای حذف قوانین مروبطه به ای پی مورد نظر خود استفاده فرمایید:
iptables -D INPUT -s 202.54.1.1 -j DROP
اگر بدنبال راهنمای فایروال تنها برای یک دستور خاص هستید نیز سینتکس زیر استفاده فرمائید:
iptales -j DROP -h