Spaces:
Runtime error
Runtime error
| *filter | |
| # 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 | |