dcsimg

# chmod 0500 [scriptname]
# chown root:root [scriptname]

# chmod 0700 [scriptname] makes it writeable by root only any time you need to make changes.


#!/bin/sh
#iptables script for sharing an internet connection
#no public services

#define variables
ipt="/sbin/iptables"
mod="/sbin/modprobe"
WAN_IFACE="eth0"
LAN_IFACE="eth1"

# turn on forwarding and set kernel parameters for better security
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4.icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4.tcp_syncookies 
echo 1 > /proc/sys/net/ipv4.conf.all.rp_filter
echo 0 > /proc/sys/net/ipv4.conf.all.send_redirects
echo 0 > /proc/sys/net/ipv4.conf.all.accept_redirects
echo 0 > /proc/sys/net/ipv4.conf.all.accept_source_route

#load kernel modules
$mod ip_tables
$mod iptable_filter
$mod iptable_nat
$mod ip_conntrack
$mod ipt_limit
$mod ipt_state
$mod iptable_mangle
$mod ipt_MASQUERADE

#add these for IRC and FTP
$mod ip_nat_ftp
$mod ip_nat_irc
$mod ip_conntrack_ftp
$mod ip_conntrack_irc

# Flush all active rules and delete all custom chains
$ipt -F
$ipt -t nat -F
$ipt -t mangle -F
$ipt -X
$ipt -t nat -X
$ipt -t mangle -X

#Set default policies
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT ACCEPT
$ipt -t nat -P OUTPUT ACCEPT
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT
$ipt -t mangle -P PREROUTING ACCEPT
$ipt -t mangle -P POSTROUTING ACCEPT

#must always include this line
$ipt -A INPUT -i lo -j ACCEPT

#Enable IP masquerading. Use the first one for DHCP,
#the second one for a static address
#$ipt -t nat -A POSTROUTING  -o $WAN_IFACE -j MASQUERADE
#$ipt -t nat -A POSTROUTING -o $WAN_IFACE -j SNAT --to-source 12.34.56.78

#AlLow incoming SSH from the LAN only to the firewall box
$ipt -A INPUT -p tcp -i $LAN_IFACE -s 192.168.1.0/24 --dport 22  -m state --state NEW -j ACCEPT

#Enable unrestricted outgoing traffic, incoming
#is restricted to locally-initiated sessions only
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $LAN_IFACE -o $WAN_IFACE -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Accept ICMP echo-request and time-exceeded
$ipt -A INPUT -p icmp --icmp-type echo-request  -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

#Reject connection attempts not initiated from inside the LAN
$ipt -A INPUT -p tcp --syn -j DROP

echo "The firewall has now started up. Run iptables -L to verify this."