#public ip=200.200.200.1 $external external="eth0" #eth1 ip=10.0.2.1 dmz dmz="eth1" #eth2 ip=10.0.1.1 intranet (firewall) internal_fw="eth2" webserver="10.0.2.3" dnsserver="10.0.2.2" mailserver="10.0.2.2" # Flush chains and set policies iptables -n -L iptables -X iptables -F iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Allow all loopback traffic no matter what iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # State rules iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow dns out from the firewall itself iptables -A OUTPUT -o $external -p tcp --dport 53 -j ACCEPT iptables -A OUTPUT -o $external -p udp --dport 53 -j ACCEPT # Allow ping requests and replies in and out of the firewall (state rules will catch replies) iptables -A INPUT -i $external -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT iptables -A OUTPUT -o $external -p icmp --icmp-type 0 -j ACCEPT iptables -A OUTPUT -o $external -p icmp --icmp-type 8 -j ACCEPT # Send http requests coming in from the internet to the webserver iptables -t nat -A PREROUTING -i $external -p tcp -d 200.200.200.1 --dport 80 -j DNAT --to-destination $webserver:80 iptables -t nat -A PREROUTING -i $external -p tcp -d 200.200.200.1 --dport 443 -j DNAT --to-destination $webserver:443 iptables -A FORWARD -i $external -o $dmz -p tcp --dport 80 -d $webserver -j ACCEPT iptables -A FORWARD -i $external -o $dmz -p tcp --dport 443 -d $webserver -j ACCEPT # Send DNS requests coming in from the internet to the DNS server iptables -t nat -A PREROUTING -i $external -p tcp -d 200.200.200.1 --dport 53 -j DNAT --to-destination $dnsserver:53 iptables -t nat -A PREROUTING -i $external -p udp -d 200.200.200.1 --dport 53 -j DNAT --to-destination $dnsserver:53 iptables -A FORWARD -i $external -o $dmz -p tcp --dport 53 -d $dnsserver -j ACCEPT iptables -A FORWARD -i $external -o $dmz -p udp --dport 53 -d $dnsserver -j ACCEPT # Send mail coming in from the internet to the mail server iptables -t nat -A PREROUTING -i $external -p tcp -d 200.200.200.1 --dport 25 -j DNAT --to-destination $mailserver:25 iptables -A FORWARD -i $external -o $dmz -p tcp --dport 25 -d $mailserver -j ACCEPT # Allow ssh from inside the LAN to in DMZ iptables -A PREROUTING -i $internal_fw --dport 22 -j DNAT --to-destination iptables -A FORWARD -i $internal_fw -o $dmz -p tcp --dport 22 -j ACCEPT # Allow everything passed by the internal firewall to go out iptables -A FORWARD -i $internal_fw -o $external -j ACCEPT