I have a system that came with a firewall already in place. The firewall consists of over 1000 iptables rules. One of these rule is dropping packets I don't want dropped. (I know this because I did iptables-save
followed by iptables -F
and the application started working.) There are way too many rules to sort through manually. Can I do something to show me which rule is dropping the packets?
5 Answers
You could add a TRACE rule early in the chain to log every rule that the packet traverses.
I would consider using iptables -L -v -n | less
to let you search the rules. I would look port; address; and interface rules that apply. Given that you have so many rules you are likely running a mostly closed firewall, and are missing a permit rule for the traffic.
How is the firewall built? It may be easier to look at the builder rules than the built rules.
-
I figured out after asking this question that the rules are from APF, and I was able to fix that. I love the TRACE target, though. That would have been very effective. Mar 26, 2011 at 19:21
-
4An example of using TRACE target is here: serverfault.com/questions/122157/debugger-for-iptables/….– slm ♦Jun 12, 2015 at 16:59
Since iptables -L -v -n
has counters you could do the following.
iptables -L -v -n > Sample1
#Cause the packet that you suspect is being dropped by iptables
iptables -L -v -n > Sample2
diff Sample1 Sample2
This way you will see only the rules that incremented.
Run iptables -L -v -n
to see the packet and byte counters for every table and for every rule.
-
1This is good, I'm hoping for something better since there are 1000 rules and 1000s of dropped packets. Mar 26, 2011 at 17:49
-
In my company we use watch -n 2 -d iptables -nvL
, it shows changes between requests
watch -n1 -d "iptables -tfilter -vnxL | grep -vE 'pkts|Chain' | sort -nk1hr | column -t"
Keep in mind, this will only show stuff for the table filter.
If you want all tables, try this:
watch -n1 -d "(iptables -tfilter -vnxL;iptables -tnat -vnxL;iptables -tmangle -vnxL;iptables -traw -vnxL;iptables -tsecurity -vnxL) | grep -vE 'pkts|Chain' | sort -nk1,1hr | column -t"
iptables -nvL -t filter
command to display only the rules in the filter table, which is where most packet-filtering rules are located.