diff --git a/package/qos-scripts/files/usr/bin/qos-stop b/package/qos-scripts/files/usr/bin/qos-stop
index d0243bea13c1af1e082887dca76be79cef924435..7f654d85877b1e8dc342bd37f5edf5466f2851f1 100755
--- a/package/qos-scripts/files/usr/bin/qos-stop
+++ b/package/qos-scripts/files/usr/bin/qos-stop
@@ -3,5 +3,4 @@ for iface in $(tc qdisc show | grep -E '(hfsc|ingress)' | awk '{print $5}'); do
 	tc qdisc del dev "$iface" ingress 2>&- >&-
 	tc qdisc del dev "$iface" root 2>&- >&-
 done
-iptables -t mangle -F
-iptables -t mangle -X
+/usr/lib/qos/generate.sh firewall stop | sh
diff --git a/package/qos-scripts/files/usr/lib/qos/generate.sh b/package/qos-scripts/files/usr/lib/qos/generate.sh
index 093967f7a1cfd0a4d53716f1da3cdb8fbc528a96..a983d159ae2d3be10e8c13bdac0059451c2a67db 100755
--- a/package/qos-scripts/files/usr/lib/qos/generate.sh
+++ b/package/qos-scripts/files/usr/lib/qos/generate.sh
@@ -486,6 +486,13 @@ case "$1" in
 		start_interfaces
 	;;
 	firewall)
-		start_firewall
+		case "$2" in
+			stop)
+				stop_firewall
+			;;
+			start|"")
+				start_firewall
+			;;
+		esac
 	;;
 esac