From Bugzilla Helper: User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) iptables-save uses the option --dport in creating an input file for iptables-restore. iptables-restore complains that --dport is a bad argument. Reproducible: Always Steps to Reproduce: 1. iptables -A FORWARD -p tcp --dport 137:139 -j REJECT 2. iptables-save > iptables 3. iptables -F 4. iptables-restore < iptables 5. iptables -L Actual Results: Bad argument `dport' The FORWARD chain is not recreated. Expected Results: The FORWARD chain should have been recreated. iptables-1.2.0-4
We (Red Hat) should really try to resolve this before next release.
iptables-save / iptables-restore development was discontinued a few month ago. The parameters --dport / --destination-port and probably some of the rarely used others are not supported by iptables-restore.
I don't understand why you call "--dport" a "rarely used" option: half my packet-filtering rules use it, and also some of my NAT rules! (sure, if you only use the "state" module, you won't need --dport). iptables-restore (from iptables-1.2.1a-1) also dumps core on some format errors (e.g., when you forget the [0:0] counter on the :... chain policy line). Will iptables-restore (and /etc/init.d/iptables) work correctly in Redhat 7.2? If not, I wrote a very simple zsh script to replace iptables-restore, and I suggest you do something similar (note that my simple script doesn't restore counters and is not atomic). I can't believe I'm the only one who sets up a firewall by putting commands in /etc/sysconfig/iptables.... #!/bin/zsh # this is a simple replacement to iptables-restore, because that one is # buggy (doesn't accept --dport, core dumps on errors, etc.) set -e while read a do table="filter" # iptables-restore starts with "", BTW case $a in \**) table=${a#\*};; -*) iptables -t "$table" ${=a};; :*) iptables -t "$table" -P ${${a#:}%% *} ${${a#* }%% *};; COMMIT);; # what should we do with that? esac done </etc/sysconfig/iptables # this is a simple replacement to iptables-restore, because that one is # buggy (doesn't accept --dport, core dumps on errors, etc.) set -e