open-range / src /open_range /builder /templates /iptables.rules.j2
Aaron Brown
LLM Builder pipeline: GPT 5.2 Codex generation + production templates
3d5d7e9
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Allow established connections
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow loopback
-A INPUT -i lo -j ACCEPT
# External -> DMZ (attacker can reach web/mail)
-A FORWARD -s 10.0.0.0/24 -d 10.0.1.0/24 -p tcp --dport 80 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -d 10.0.1.0/24 -p tcp --dport 443 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -d 10.0.1.0/24 -p tcp --dport 25 -j ACCEPT
# DMZ -> Internal (web can reach db/files)
-A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -p tcp --dport 3306 -j ACCEPT
-A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -p tcp --dport 445 -j ACCEPT
# DMZ -> Management (web can reach ldap)
-A FORWARD -s 10.0.1.0/24 -d 10.0.3.0/24 -p tcp --dport 389 -j ACCEPT
-A FORWARD -s 10.0.1.0/24 -d 10.0.3.0/24 -p tcp --dport 636 -j ACCEPT
# Internal -> Management (db/files can reach ldap)
-A FORWARD -s 10.0.2.0/24 -d 10.0.3.0/24 -p tcp --dport 389 -j ACCEPT
{% for rule in firewall_rules %}
{% if rule.action == 'allow' %}
{% for port in rule.ports %}
-A FORWARD -s {{ zone_cidrs.get(rule.from_zone, '0.0.0.0/0') }} -d {{ zone_cidrs.get(rule.to_zone, '0.0.0.0/0') }} -p tcp --dport {{ port }} -j ACCEPT
{% endfor %}
{% elif rule.action == 'deny' %}
-A FORWARD -s {{ zone_cidrs.get(rule.from_zone, '0.0.0.0/0') }} -d {{ zone_cidrs.get(rule.to_zone, '0.0.0.0/0') }} -j DROP
{% endif %}
{% endfor %}
# Default deny forward
-A FORWARD -j DROP
# Log dropped packets
-A FORWARD -j LOG --log-prefix "iptables-dropped: " --log-level 4
COMMIT