20 Nov, 2004. Tested by SuSE 10.0
#!/bin/sh
### IP Address, Configuration ###
MYHOST='192.168.0.5' # Server Address
LAN='192.168.0.0/24' # Internal Network Address
DMZ='202.0.0.0/28' # DMZ Network Address
NTP1='210.173.160.57' # NTP Server Address #
NTP2='210.173.160.27' # NTP Server Address #
EX_ETH=eth1 # External Interface
IN_ETH=eth0 # Internal Interface
PROXY_PORT=8080 # Proxy Server Port No
# Load ip_conntrack_ftp #
modprobe ip_conntrack_ftp
### iptables command path ###
IPTABLES='/usr/sbin/iptables'
### Stop IP forward ###
echo 0 > /proc/sys/net/ipv4/ip_forward
# Initialize all the chains by removing all the rules tied to them
$IPTABLES --flush
$IPTABLES -t nat --flush
$IPTABLES -t mangle --flush
# Delete user defined chains
$IPTABLES --delete-chain
$IPTABLES -t nat --delete-chain
$IPTABLES -t mangle --delete-chain
$IPTABLES -t filter -F > /dev/null 2>&1
$IPTABLES -t filter -X > /dev/null 2>&1
$IPTABLES -t nat -F > /dev/null 2>&1
$IPTABLES -t nat -X > /dev/null 2>&1
$IPTABLES -t mangle -F > /dev/null 2>&1
$IPTABLES -t mangle -X > /dev/null 2>&1
$IPTABLES -t filter -P INPUT ACCEPT > /dev/null 2>&1
$IPTABLES -t filter -P OUTPUT ACCEPT > /dev/null 2>&1
$IPTABLES -t filter -P FORWARD ACCEPT > /dev/null 2>&1
$IPTABLES -t nat -P PREROUTING ACCEPT > /dev/null 2>&1
$IPTABLES -t nat -P POSTROUTING ACCEPT > /dev/null 2>&1
$IPTABLES -t nat -P OUTPUT ACCEPT > /dev/null 2>&1
$IPTABLES -t mangle -P POSTROUTING ACCEPT > /dev/null 2>&1
$IPTABLES -t mangle -P OUTPUT ACCEPT > /dev/null 2>&1
$IPTABLES -t mangle -P PREROUTING ACCEPT > /dev/null 2>&1
$IPTABLES -t mangle -P INPUT ACCEPT > /dev/null 2>&1
$IPTABLES -t mangle -P FORWARD ACCEPT > /dev/null 2>&1
### Drop all rules in default ###
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
### Accept any to loopback address ###
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
### Accept DNS from LAN ###
$IPTABLES -A INPUT -p udp -s $LAN --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LAN --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 53 -j ACCEPT
### Accept DNS from DMZ ###
$IPTABLES -A INPUT -p udp -s $DMZ --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $DMZ --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $DMZ --dport 53 -j ACCEPT
### Allow DNS to access external network ###
$IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT
### Allow LAN to access NTP request ###
$IPTABLES -A INPUT -p udp -s $LAN --dport 123 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LAN --sport 123 -j ACCEPT
### Allow DMZ to access NTP request ###
$IPTABLES -A INPUT -p udp -s $DMZ --dport 123 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $DMZ --sport 123 -j ACCEPT
### Allow NTP server to access external NTP servers ###
$IPTABLES -A OUTPUT -d $NTP1 -p udp --dport 123 -j ACCEPT
$IPTABLES -A INPUT -s $NTP1 -p udp --sport 123 -j ACCEPT
$IPTABLES -A OUTPUT -d $NTP2 -p udp --dport 123 -j ACCEPT
$IPTABLES -A INPUT -s $NTP2 -p udp --sport 123 -j ACCEPT
### Accept file sharing (NetBIOS) within LAN ###
$IPTABLES -A INPUT -p udp -s $LAN --dport 137:139 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LAN --sport 137:139 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 137:139 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW -d $LAN --dport 137:139 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LAN --sport 32772 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 32772 -j ACCEPT
### Accept SWAT(SWAT:901) from LAN ###
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 901 -j ACCEPT
### Accept Proxy (PROXY:8080) from LAN ###
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 8080 -j ACCEPT
### Accept SSH (22) from LAN ###
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW -d $LAN --dport 22 -j ACCEPT
### Accept Telnet(23) from LAN ###
$IPTABLES -A INPUT -p udp -s $LAN --dport 23 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LAN --sport 23 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 23 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW -d $LAN --dport 23 -j ACCEPT
### Accept WWW (HTTP:80,HTTPS:443) ###
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
### Allow access to external WWW servers(HTTP:80,HTTPS:443) ###
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
### Accept FTP (Active/Passive) ###
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 4000:4029 -j ACCEPT
### Accept MTA (SMTP:25/465) ###
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT
### Allow access to external MTA (SMTP:25,POP3:110) ###
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 110 -j ACCEPT
### Accept MTA (POP3:110,IMAP:143) ###
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 110 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 143 -j ACCEPT
### Accept DHCP request only from LAN ###
$IPTABLES -A INPUT -p udp -m state --state NEW --dport 67:68 --sport 67:68 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -m state --state NEW --dport 67:68 --sport 67:68 -j ACCEPT
$IPTABLES -A FORWARD -p udp -m state --state NEW --dport 67:68 --sport 67:68 -j ACCEPT
### Accept VNC ###
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 5901:5903 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 5801:5803 -j ACCEPT
### Accept APC PowerChute Agent ###
$IPTABLES -A INPUT -p tcp -m state --state NEW -s $LAN --dport 2160:2161 -j ACCEPT
$IPTABLES -A INPUT -p udp -s $LAN --dport 2160:2161 -j ACCEPT
### SNMP ###
$IPTABLES -A OUTPUT -p udp -m state --state NEW --dport 161:162 -j ACCEPT
### SYSLOG ###
$IPTABLES -A INPUT -p udp -s $LAN --dport 514 -j ACCEPT
$IPTABLES -A INPUT -p udp -s $DMZ --dport 514 -j ACCEPT
### NFS ###
$IPTABLES -A INPUT -p udp -m state --state NEW --dport 32765:32768 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 32765:32768 -j ACCEPT
$IPTABLES -A INPUT -p udp -m state --state NEW --dport 2049 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 2049 -j ACCEPT
$IPTABLES -A INPUT -p udp -m state --state NEW --dport 111 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 111 -j ACCEPT
### REJECT Ident(113) (DROP is slower than Reject) ###
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
### PING ###
$IPTABLES -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT
### Accept established packet ###
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
### Allow IP Masquerading (NAT) ###
$IPTABLES -A POSTROUTING -t nat -o $EX_ETH -s $LAN -d 0/0 -j MASQUERADE
$IPTABLES -A FORWARD -t filter -o $EX_ETH -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -t filter -i $IN_ETH -m state --state ESTABLISHED,RELATED -j ACCEPT
# Transparent Proxy (FTP, HTTP)
$IPTABLES -t nat -A PREROUTING -i $IN_ETH \
-p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
$IPTABLES -t nat -A PREROUTING -i $IN_ETH \
-p tcp --dport 20 -j REDIRECT --to-port $PROXY_PORT
... /usr/local/sbin/iptables.sh
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
http_port 8080 transparent
... # MOUNTD_PORT="" MOUNTD_PORT="32767" ...