توسعه دهندگان و مدیران سیستم لینوکس از دستورات iptables و ip6tables به منظور تنظیم، نگهداری و بازرسی جداول قانون‌های فایروال به ترتیب برای بسته‌های IPv4 و IPv6 در هسته لینوکس استفاده می‌کنند. مشکلی که در استفاده از این دستورات وجود دارد؛ این است که با راه‌اندازی مجدد سرور لینوکس، تمام تغییرات اعمال شده توسط این دستورات از بین می‌رود. از این رو، باید این قوانین فایروال را به صورت دائمی ذخیره نماییم.

در این مقاله، نحوه ذخیره دائمی قوانین فایروال iptables برای بسته‌های IPv4 و IPv6 در سرور اوبونتو و دبیان شرح داده شده است.

 

ذخیره و بازیابی دائمی قوانین فایروال iptables در لینوکس

به منظور ذخیره و بازیابی دائمی قوانین فایروال iptables باید از دستورات زیر استفاده کنید:

  • دستور iptables-save یا دستور ip6tables-save: به ترتیب محتویات جدول IPv4 و IPv6 را بصورت قابل تجزیه در یک صفحه یا در یک فایل مشخص ذخیره کرده و یا حذف می‌نماید.
  • دستور iptables-restore یا دستور ip6tables-restore: به ترتیب قوانین و جداول فایروال IPv4 و IPv6 را از یک فایل خاص در لینوکس بازیابی می‌کند.

مرحله ۱٫ ترمینال را باز کرده و دستورات زیر را تایپ نمایید. برای ورود به سرور ریموت، از دستور ssh استفاده کنید.

ssh vivek@server1.cyberciti.biz
ssh ec2-user@ec2-host-or-ip

دقت کنید که باید دستورات زیر را به عنوان کاربر root با استفاده از دستور sudo یا دستور su تایپ نمایید.

 

مرحله ۲٫ بسته به نوع سیستم عامل، با استفاده از دستورات زیر، قوانین فایروال IPv4 و IPv6 را ذخیره کنید.

در سیستم عامل‌های دبیان و اوبونتو:

sudo /sbin/iptables-save > /etc/iptables/rules.v4
## IPv6 ##
sudo /sbin/ip6tables-save > /etc/iptables/rules.v6

در سیستم عامل‌های CentOS و RHEL:

sudo /sbin/iptables-save > /etc/sysconfig/iptables
## IPv6 ##
sudo /sbin/ip6tables-save > /etc/sysconfig/ip6tables

 

 

شما می‌توانید فایل ذخیره شده را با استفاده از دستور cat نمایش دهید؛ یا با استفاده از دستور grep و egrep، آن را جستجو نمایید:

cat /etc/iptables/rules.v4
*mangle
 
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
 
 
COMMIT
 
 
*nat
 
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
 
-A POSTROUTING -s 10.8.0.0/24 -m policy --pol none --dir out -j MASQUERADE
 
COMMIT
 
 
*filter
 
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
 
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT 
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-upto 5/s --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name icmp-echo-drop -j ACCEPT
-A INPUT -p udp -m multiport --dports 21194 -j ACCEPT
-A INPUT -p tcp -s 1xx.yy.zz.ttt,10.8.0.0/24,10.8.1.0/24 --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp --dport 3128 -d 10.8.0.1 -s 10.8.0.0/24,10.8.1.0/24  -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -d 172.xx.yyy.zzz -p udp --dport 53 -j ACCEPT
-A INPUT -d 172.xx.yyy.z -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -m limit --limit 5/min -j LOG --log-prefix "[iptables denied] " --log-level 7
-A FORWARD -s 10.8.0.0/24 -d 10.8.0.0/24 -j DROP
-A OUTPUT -d 10.8.0.0/24 -m owner --gid-owner 15000 -j DROP
-A FORWARD -s 10.8.0.0/24 -d 169.254.0.0/16 -j DROP
-A OUTPUT -d 169.254.0.0/16 -m owner --gid-owner 15000 -j DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp --dport 445 -j DROP
-A FORWARD -p udp -m multiport --ports 137,138 -j DROP
-A FORWARD -p tcp -m multiport --ports 137,139 -j DROP
-A FORWARD -m conntrack --ctstate NEW -s 10.8.0.0/24 -m policy --pol none --dir in -j ACCEPT
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "[iptables forward denied] " --log-level 7
COMMIT

 

مرحله ۳٫ قوانین فایروال IPv4 و IPv6 لینوکس را بسته به نوع سیستم عامل می‌توانید با استفاده از دستورات زیر بازیابی کنید:

## Debian or Ubuntu ##
sudo /sbin/iptables-restore < /etc/iptables/rules.v4
sudo /sbin/ip6tables-restore < /etc/iptables/rules.v6
## CentOS/RHEL ##
sudo /sbin/iptables-save < /etc/sysconfig/iptables
sudo /sbin/ip6tables-save < /etc/sysconfig/ip6tables

مرحله ۴٫ بسته iptables-persistent را برای دبیان و اوبونتو به صورت زیر نصب نمایید:

لطفا توجه داشته باشید که دستور زیر با frontendهای iptables مانند دستور ufw یا firewall-cmd مغایرت دارد. بنابراین، اگر از این ابزارها استفاده می‌کنید، از استفاده از بسته‌های زیر خودداری نمایید.

iptables-persistent، به عنوان یک لودر برای قوانین Netfilter (افزونه netfilter-persistent مربوط به iptables) عمل می‌کند، که یک لودر با معماری مبتنی بر افزونه برای پیکربندی Netfilter است.

به منظور نصب این افزونه، از دستور apt یا دستور apt-get بصورت زیر استفاده کنید:

sudo apt install iptables-persistent
## OR ##
sudo apt-get install iptables-persistent

 

با استفاده از دستور systemctl بصورت زیر، اطمینان حاصل کنید که سرویس‌ها در دبیان یا اوبونتو فعال هستند:

sudo systemctl is-enabled netfilter-persistent.service

چنانچه فعال نبود، از دستور زیر استفاده نمایید:

sudo systemctl enable netfilter-persistent.service

با استفاده از دستور زیر می‌توانید وضعیت آن را بدست آورید:

sudo systemctl status netfilter-persistent.service
● netfilter-persistent.service - netfilter persistent configuration
     Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/netfilter-persistent.service.d
             └─iptables.conf
     Active: active (exited) since Thu 2020-08-20 19:24:22 UTC; 3 days ago
       Docs: man:netfilter-persistent(8)
   Main PID: 577 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 4620)
     Memory: 0B
     CGroup: /system.slice/netfilter-persistent.service

Aug 20 19:24:21 nixcraft-vpn-1 systemd[1]: Starting netfilter persistent configuration...
Aug 20 19:24:21 nixcraft-vpn-1 netfilter-persistent[583]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Aug 20 19:24:21 nixcraft-vpn-1 netfilter-persistent[583]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Aug 20 19:24:22 nixcraft-vpn-1 systemd[1]: Finished netfilter persistent configuration.

 

مرحله ۵ – بسته iptables-services را برای RHEL و CentOS نصب کنید.

به طور پیش فرض، نسخه ۷ و ۸ سیستم عامل‌های RHEL و CentOS دارای firewalld هستند. با این حال، چنانچه به فایروال قدیمی مبتنی بر فایل نیاز دارید، دستورات زیر را تایپ نمایید:

# Disable firewalld if installed #
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl mask firewalld.service
# install package on Linux to save iptables rules using the yum command/dnf command ##
sudo yum install iptables-services
sudo systemctl enable iptables
sudo systemctl enable ip6tables
sudo systemctl status iptables
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since Mon 2020-08-24 09:29:59 EDT; 3s ago
  Process: 8259 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 8259 (code=exited, status=0/SUCCESS)

Aug 24 09:29:59 centos-8-cloud.sweet.home systemd[1]: Starting IPv4 firewall with iptables...
Aug 24 09:29:59 centos-8-cloud.sweet.home iptables.init[8259]: iptables: Applying firewall rules: [  OK  ]
Aug 24 09:29:59 centos-8-cloud.sweet.home systemd[1]: Started IPv4 firewall with iptables.