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." ;;