diff --git a/README.md b/README.md
index 1ff7b5a279f697bb8e89f60c550cf21d5f0a865e..93051e9cf10375d7011e470c037a2c52022c0b60 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Select a firewall to add IPs:
    2) CSF
    3) firewalld
    4) iptables
+   5) ipset+iptables
 Firewall: [YOUR INPUT]
 ```
 
@@ -49,6 +50,7 @@ These firewalls are supported currently:
 * CSF
 * firewalld
 * iptables
+* ipset+iptables
 
 ### How to add more firewalls
 
diff --git a/src/ar-whitelister.sh b/src/ar-whitelister.sh
index 8e7175ebdd4e15fed8e3dee64b22e091c5dab39d..b2f070063ab0ec6b56d5ef02fbdd2b24b0636bd6 100755
--- a/src/ar-whitelister.sh
+++ b/src/ar-whitelister.sh
@@ -18,6 +18,7 @@ if [[ -z $1 ]]; then
   echo "   2) CSF"
   echo "   3) firewalld"
   echo "   4) iptables"
+  echo "   5) ipset+iptables"
   read -r -p "Firewall: " option
 else
   option=$1
@@ -92,6 +93,30 @@ case "$option" in
     sudo iptables -A INPUT -s "$IP" -j ACCEPT
   done
   ;;
+
+5 | ipset)
+  if [[ ! -x "$(command -v ipset)" ]]; then
+    abort "ipset is not installed."
+  fi
+  if [[ ! -x "$(command -v iptables)" ]]; then
+    abort "iptables is not installed."
+  fi
+  sudo ipset list | grep -q "arvancloud-ipset" ; greprc=$?
+  if [[ "$greprc" -eq 0 ]]; then
+    sudo iptables -D INPUT -m set --match-set arvancloud-ipset src -j ACCEPT 2>/dev/null
+    sleep 0.5
+    sudo ipset destroy arvancloud-ipset
+  fi
+
+  ipset create arvancloud-ipset hash:net
+  for IP in ${IPs}; do
+    ipset add arvancloud-ipset "$IP"
+  done
+  sudo iptables -nvL | grep -q "arvancloud-ipset"; exitcode=$?
+  if [[ "$exitcode" -eq 1 ]]; then
+    sudo iptables -I INPUT -m set --match-set arvancloud-ipset src -j ACCEPT
+  fi
+  ;;
 *)
   abort "The selected firewall is not valid."
   ;;