همانطور که میدانید فایروال لینوکس iptables نام دارد که در سطح کرنل کار کرده و وظیفه کنترل ورودی – خروجی های سرور را بر عهده می گیرد. از آنجایی که کار با iptables نیاز به دانش بالایی دارد یک سرویس با نام ufw در توزیع های مبتنی بر دبین بوجود آمده که میتواند مدیریت دستورهای iptables را آسان نماید. در این آموزش ما قصد داریم به معرفی ufw و نحوه کار با آن بپردازیم.
ufw چیست؟
ufw مخفف عبارت Uncomplicated Firewall به معنای فایروال آسان می باشد و از آنجایی که کار با آن ساده میباشد این نام را برای آن انتخاب کرده اند. این فایروال به تنظیم رول های iptables به صورت خودکار روی ماشین شما میپردازد و به عنوان یک سرویس در سرور شما بکار گرفته میشود. این فایروال در ماشین های دسکتاپ یا سروری مبتنی بر دبین مانند توزیع دبین و اوبونتو قابل استفاده می باشد.
نصب ufw
در ابتدا اگر این سرویس را روی ماشین خود ندارید متوانید آن را با دستور زیر نصب کنید:
1 |
root@arshatech:~# apt install ufw |
سایر فایروال های لینوکس:
تنظیمات ابتدائی فایروال
بعد از نصب ufw شما میتوانید فایروال خود را آن طور که مایل هستید تنظیم بنمائید. بعنوان مثال شما میتوانید آی پی های نسخه ۶ را به طور کامل غیر فعال نمائید:
1 |
root@arshatech:~# vim /etc/default/ufw |
1 2 3 4 |
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback # accepted). You will need to 'disable' and then 'enable' the firewall for # the changes to take affect. IPV6=no |
همچنین در همان فایل قادر خواهید بود سیاست های کلی ورودی – خروجی فایروال خود را تنظیم نمائید:
1 2 3 4 5 6 7 8 9 10 11 |
# Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if # you change this you will most likely want to adjust your rules. DEFAULT_INPUT_POLICY="DROP" # Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if # you change this you will most likely want to adjust your rules. DEFAULT_OUTPUT_POLICY="ACCEPT" # Set the default forward policy to ACCEPT, DROP or REJECT. Please note that # if you change this you will most likely want to adjust your rules DEFAULT_FORWARD_POLICY="DROP" |
همچنین در خطوط انتهایی این فایل قادر به معرفی فایل مربوط به تنظیمات حفاظتی از کرنل خود را معرفی کنید:
1 2 |
# only enable if using iptables backend IPT_SYSCTL=/etc/ufw/sysctl.conf |
و در آخر میتوانید ماژول های مورد استفاده در فایروال را وارد نمائید:
1 2 3 4 5 6 7 8 |
# Extra connection tracking modules to load. Complete list can be found in # net/netfilter/Kconfig of your kernel source. Some common modules: # nf_conntrack_irc, nf_nat_irc: DCC (Direct Client to Client) support # nf_conntrack_netbios_ns: NetBIOS (samba) client support # nf_conntrack_pptp, nf_nat_pptp: PPTP over stateful firewall/NAT # nf_conntrack_ftp, nf_nat_ftp: active FTP support # nf_conntrack_tftp, nf_nat_tftp: TFTP support (server side) IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns" |
همانطور که در بالا ملاحظه کردید بخشی مربوط به سیاست های کلی فایرول وجود داشت که به صورت پیش فرض ثبت شده اند. به عنوان مثال ufw به صورت پیش فرض ترافیک ورودی را به طور کامل بسته و ترافیک خروجی را به طور کامل باز گذاشته است. حال اگر شما بخواهید دستورات مربوطه را برای بستن ترافیک خروجی وارد کنید به صورت زیر خواهد بود:
1 |
root@arshatech:~# ufw default deny incoming |
1 2 |
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) |
همچنین برای باز کردن ترافیک خروجی داریم:
1 |
root@arshatech:~# ufw default allow outgoing |
1 2 |
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly) |
باز کردن یا بستن پورت یا سرویس مورد نظر
شما با استفاده از ufw میوانید شماره پورت یا نام سرویس مورد نظر خود را وارد کرده و آن را برای استفاده باز نمائید. بعنوان مثال ما میخواهیم پورت ۲۲ یا سرویس ssh را فعال کنیم:
1 |
root@arshatech:~# ufw allow ssh |
1 |
Rules updated |
همچنین:
1 |
root@arshatech:~# ufw allow 22 |
1 |
Rules updated |
همچنین برای بستن آن میتوانید از عبارت deny استفاده کنید:
1 |
root@arshatech:~# ufw deny ssh |
1 |
Rules updated |
همچنین:
1 |
root@arshatech:~# ufw deny 22 |
1 |
Rules updated |
به همین ترتیب میتوان پورت های ۸۰ و ۴۴۳ ا نیز باز یا بسته نگه داشت.
1 |
root@arshatech:~# ufw deny http |
1 |
Rule added |
1 |
root@arshatech:~# ufw allow 443 |
1 |
Rule added |
در ufw شما میتوانید رنجی از پورت ها را نیز برای باز شدن یا بسته شدن بدهید. در مثال زیر ما پورت های ۶۰۰۰ الی ۶۰۰۷ TCP را باز میکنیم:
1 |
root@arshatech:~# ufw allow 6000:6007/tcp |
1 |
Rule added |
همچنین در مثال زیر شما میتوانید ترافیک ورودی به سرور خود را از یک آی پی خاص باز نگه دارید:
1 |
root@arshatech:~# ufw allow from 192.168.1.10 |
1 |
Rule added |
و در ادامه قادر خواهید بود که دسترسی یک آی پی به پورتی خاص را نیز با اضافه کردن عبارت to any port باز نمائید:
1 |
root@arshatech:~# ufw allow from 192.168.1.10 to any port 22 |
1 |
Rule added |
ufw به شما اجازه میدهد تا ساب نت های مورد نظر خود برای یک آی پی را نیز در فایروال تعریف نمائید:
1 |
root@arshatech:~# ufw allow from 192.168.1.0/24 |
1 |
Rule added |
طبیعتا سایر موارد روی ساب نت ها قابل اجرا خواهد بود. بعنوان مثال:
1 |
root@arshatech:~# ufw allow from 192.168.1.0/24 to any port 22 |
1 |
Rule added |
سیاست های فایورال میتواند بر روی اینترفیس شبکه ماشین شما نیز اعمال شود. برای مثال داریم:
1 |
root@arshatech:~# ufw allow in on ens33 to any port 80 |
1 |
Rule added |
همچنین شما میتوانید سایر سیاست ها را بر روی اینترفیس های ماشین خود اعمال کنید.
بررسی وضعیت فایروال
شما میتوانید وضعیت فایوال و سیاست های تعریف شده خودتان بر روی آن را با واژه status بررسی نمائید.
1 |
root@arshatech:~# ufw status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22 ALLOW Anywhere 2222 DENY Anywhere 80/tcp DENY Anywhere 443/tcp DENY Anywhere 443 DENY Anywhere 6000:6007/tcp ALLOW Anywhere Anywhere ALLOW 192.168.1.10 22 ALLOW 192.168.1.10 Anywhere DENY 192.168.1.0/24 22 ALLOW 192.168.1.0/24 80 on ens33 ALLOW Anywhere 443 on ens33 ALLOW Anywhere |
در مثال بالا وضعیت حالت active یا فعال دارد. این بدان معنیست که پورت ها و آی پی های باز یا بسته شده که در ادامه دستور برای شما به نمایش در آمده است بر روی سیستم شما فعال می باشد.
شما میتوانید با اضافه کردن عبارت numbered رول های فایروال خود را شماره گذاری نمائید:
1 |
root@arshatech:~# ufw status numbered |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Status: active To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 22 ALLOW IN Anywhere [ 3] 2222 DENY IN Anywhere [ 4] 80/tcp DENY IN Anywhere [ 5] 443/tcp DENY IN Anywhere [ 6] 443 DENY IN Anywhere [ 7] 6000:6007/tcp ALLOW IN Anywhere [ 8] Anywhere ALLOW IN 192.168.1.10 [ 9] 22 ALLOW IN 192.168.1.10 [10] Anywhere DENY IN 192.168.1.0/24 [11] 22 ALLOW IN 192.168.1.0/24 [12] 80 on ens33 ALLOW IN Anywhere [13] 443 on ens33 ALLOW IN Anywhere |
و بعد از اینکه از شماره رول های خود مطلع شدید رول مورد نظر خود را به آسانی حذف کنید:
1 |
root@arshatech:~# ufw delete 3 |
1 2 3 4 |
Deleting: deny 2222 Proceed with operation (y|n)? y Rule deleted |
همچنین اگر شما بخواهید یک رول را به صورت دستی حذف کنید به عنوان مثال اگر دسترسی allow را به پورت ۴۴۳ داده باشید به صورت زیر قابل حذف خواهد بود:
1 |
root@arshatech:~# ufw delete allow 443 |
و در انتها برای مشاهده وضعیت فایروال به صورت جزئی تر میتوانید از عبارت verbose استفاده کنید:
1 |
root@arshatech:~# ufw status verbose |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 22 ALLOW IN Anywhere 80/tcp DENY IN Anywhere 443 DENY IN Anywhere 6000:6007/tcp ALLOW IN Anywhere Anywhere ALLOW IN 192.168.1.10 22 ALLOW IN 192.168.1.10 Anywhere DENY IN 192.168.1.0/24 80 on ens33 ALLOW IN Anywhere 443 on ens33 ALLOW IN Anywhere |
فعال یا غیرفعال کردن فایروال
برای فعال کردن ufw از عبارت enable و برای غیر فعال کردن آن از disable استفاده میشود:
1 |
root@arshatech:~# ufw enable |
1 2 |
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup |
حال میخواهیم آن را غیر فعال نمائیم:
1 |
root@arshatech:~# ufw disable |
1 |
Firewall stopped and disabled on system startup |
همچنین شما هر تغییری که داده باشید میتوانید آن را به راحتی به حالت پیش فرض تغییر دهید. برای این کار از عبارت reset استفاده میشود:
1 |
root@arshatech:~# ufw reset |
1 2 3 4 5 6 7 8 |
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20180728_023746' Backing up 'before.rules' to '/etc/ufw/before.rules.20180728_023746' Backing up 'after.rules' to '/etc/ufw/after.rules.20180728_023746' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20180728_023746' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20180728_023746' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20180728_023746' |