Le script installé sur la machine Firewall
____________________________________________________
TABLE DES MATIERES
:
Partie
1: Declaration of interfaces
Partie 5: Flushing old ip tables
Partie 6 : Rules during compilation
Partie 7: Building up ip tables
Partie 8: Linking each kind of packets with ip tables
Partie 9: Rules for ICMP packets
Partie 10: Rules for each ip tables
Partie 11: Rules for interfaces of Firewall
____________________________________________________
#Internet
BAD_IFACE=eth1
#Demilitarized
Zone
DMZ_IFACE=eth2
DMZ_ADDR=***.***.*.***/**
#LAN
GOOD_IFACE=eth0
GOOD_ADDR=***.***.*.*/**
#DMZ Server
PROXY_SERVER=***.***.*.***
#SERVER NNTP
NNTP_ADDR=***.**.**.**
#SERVER SMTP
SMTP_ADDR=***.**.**.**
#SERVER POP3
POP3_ADDR=***.**.**.**
#SERVER DNS
DNS_ADDR=***.*.*.**
#testing
#set
-x
# Routing commands
ip route del ***.***.*.***/**
dev $BAD_IFACE
ip route del
***.***.*.***/** dev $DMZ_IFACE
route
del default dev eth1
route
del default dev eth0
#t est ***.***.*.*** <->***.***.*.***
ip route add
***.***.*.*** dev $BAD_IFACE
ip route add
***.***.*.***/** dev $DMZ_IFACE
route add default
gateway ***.***.*.*** dev eth1
# turn on ip forwarding
echo
1 >> /proc/sys/net/ipv4/ip_forward
# Building up of ip tables' interfaces
iptables -N bad-if
iptables -N dmz-if
iptables -N good-if
# set up
the jumps to each chain
iptables -A INPUT -i $BAD_IFACE -j bad-if
iptables -A INPUT -i $DMZ_IFACE -j dmz-if
iptables -A INPUT -i $GOOD_IFACE -j good-if
#
external iface
iptables -A bad-if -p icmp -j icmp-acc
iptables -A bad-if -j DROP #DROP<->ACCEPT
for debugging
# dmz
iface
iptables -A bad-if -p icmp -j icmp-acc
iptables -A dmz-if -j DROP #DROP<->ACCEPT
for debugging
#
internal iface
iptables -A good-if -p tcp --dport ssh -j ACCEPT
iptables -A good-if -p ICMP --icmp-type ping -j
ACCEPT
iptables -A good-if -p ICMP --icmp-type pong -j
ACCEPT
iptables -A good-if -j icmp-acc
# Uncomment for debugging
iptables -A good-if -j DROP
# remove the compete blocks
iptables -D INPUT 1
iptables -D FORWARD 1
iptables -D OUTPUT 1
#
Building up of ip tables' interfaces
iptables -N bad-if
iptables -N dmz-if
iptables -N good-if
# set up the jumps to each chain
iptables -A INPUT -i $BAD_IFACE -j bad-if
iptables -A INPUT -i $DMZ_IFACE -j dmz-if
iptables -A INPUT -i $GOOD_IFACE -j good-if
# external iface
iptables -A bad-if -p icmp -j icmp-acc
iptables -A bad-if -j DROP #DROP<->ACCEPT
for debugging
# dmz iface
iptables -A bad-if -p icmp -j icmp-acc
iptables -A dmz-if -j DROP #DROP<->ACCEPT
for debugging
# internal iface
iptables -A good-if -p tcp --dport ssh -j ACCEPT
iptables -A good-if -p ICMP --icmp-type ping -j
ACCEPT
iptables -A good-if -p ICMP --icmp-type pong -j
ACCEPT
iptables -A good-if -j icmp-acc
# Uncomment for debugging
iptables -A good-if -j DROP
# remove the compete blocks
iptables -D INPUT 1
iptables -D FORWARD 1
iptables -D OUTPUT 1
# flush all rules in the
the filter table
iptables
-F
iptables -t nat -F #flush
NAT table
iptables -F INPUT
iptables -F OUTPUT
iptables
-F FORWARD
# deny everything for now
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP
iptables -A OUTPUT -j DROP
# make the chains to
define packet directions
# bad is the internet,
dmz is our dmz, good is the LAN
iptables
-N good-dmz #from
good network to dmz network
iptables -N bad-dmz
iptables -N good-bad
iptables -N dmz-good
iptables -N dmz-bad
iptables -N bad-good
iptables
-N icmp-acc
iptables -F good-dmz
iptables -F bad-dmz
iptables -F good-bad
iptables -F dmz-good
iptables -F dmz-bad
iptables -F bad-good
iptables
-F icmp-acc
iptables -F bad-if
iptables -F dmz-if
iptables -F good-if
# NAT
source + redirect #
#####################
# Redirect HTTP towards
Proxy
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR -p tcp --dport http -j DNAT --to-destination
$PROXY_SERVER:3128
# Redirect NNTP towards
Proxy
iptables -t nat -A PREROUTING
-i eth0 -s $GOOD_ADDR -d $NNTP_ ADDR -p tcp --dport nntp -j DNAT
--to-destination $PROXY_SERVER:119
# Redirect NNTP towards
Proxy
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR –d $NNTP_ ADDR -p udp --dport nntp -j DNAT
--to-destination $PROXY_SERVER:119
# Redirect DNS towards
Proxy
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR –d $DNS_ADDR -p udp --dport domain -j DNAT
--to-destination $PROXY_SERVER:53
# Redirect SMTP towards
Proxy
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR –d $SMTP_ADDR
-p tcp --dport smtp -j DNAT --to-destination $PROXY_SERVER:25
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR –d $SMTP_ADDR -p udp --dport smtp -j DNAT
--to-destination $PROXY_SERVER:25
# Redirect POP towards
Proxy
iptables -t nat -A PREROUTING
-i eth0 -s $GOOD_ADDR –d $POP_ ADDR -p tcp --dport pop3 -j DNAT
--to-destination $PROXY_SERVER:110
iptables -t nat -A
PREROUTING -i eth0 -s $GOOD_ADDR –d $POP_ ADDR -p udp --dport pop3 -j DNAT
--to-destination $PROXY_SERVER:110
# accept related packets
iptables -A FORWARD -m
state --state INVALID -j DROP
iptables -A FORWARD -m
state --state RELATED,ESTABLISHED -j ACCEPT
# set which addresses
jump to which chains be careful of the writing of rules the rules are processed
one after the other (from the top of the script to the # bottom) write the
rules for small networks before the bigger ones
#
# Options of iptables:
# -A: ADD rules
# -s: Source Network
# -i: Input interface
# -o: Output interface
# -j: Jump to iptable XXXX
#
# Decisions for rules:
#
# ACCEPT :accept the
packet
# REJECT :reject
the packet
# DROP :reject the packet
but does not warn the source
iptables -A FORWARD -s
$DMZ_ADDR -i $DMZ_IFACE -o $BAD_IFACE -j dmz-bad
iptables -A FORWARD -s
$DMZ_ADDR -i $DMZ_IFACE -o $GOOD_IFACE -j dmz-good
iptables -A FORWARD -s
$GOOD_ADDR -i $GOOD_IFACE -o $DMZ_IFACE -j good-dmz
iptables -A FORWARD -s
$GOOD_ADDR -i $GOOD_IFACE -o $BAD_IFACE -j good-bad
iptables -A FORWARD -o
$DMZ_IFACE -j bad-dmz
iptables -A FORWARD -o
$GOOD_IFACE -j bad-good
# drop anything that
doesn't fit these
iptables -A FORWARD -j
LOG --log-prefix "chain-jump"
iptables -A FORWARD -j
DROP
# icmp
acceptance
iptables
-A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables
-A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
iptables -A icmp-acc -p
icmp --icmp-type time-exceeded -j ACCEPT
iptables -A icmp-acc -p
icmp --icmp-type echo-request -j ACCEPT
iptables -A icmp-acc -p
icmp --icmp-type echo-reply -j ACCEPT
# iptables -A icmp-acc
-j LOG --log-prefix "icmp-acc"
iptables -A icmp-acc -j
DROP
# from internal(LAN) to
dmz
iptables -A good-dmz -p tcp --dport http -j ACCEPT |
#HTTP |
|
iptables -A good-dmz -p tcp --dport ftp -j ACCEPT |
#FTP |
|
iptables -A good-dmz -p udp --dport domain -j ACCEPT |
#DNS |
|
iptables -A good-dmz -p tcp --dport smtp -j ACCEPT |
#SMTP |
|
iptables -A good-dmz -p udp --dport smtp -j ACCEPT |
#SMTP |
|
iptables -A good-dmz -p tcp --dport pop3 -j ACCEPT |
#POP3 |
|
iptables -A good-dmz -p tcp --dport ripng -j ACCEPT |
#RIP v2 |
|
iptables -A good-dmz -p udp --dport ripng -j ACCEPT |
#RIP v2 |
|
iptables -A good-dmz -p tcp --dport ssh -j ACCEPT |
#SSH |
|
iptables -A good-dmz -p udp --dport ssh -j ACCEPT |
#SSH |
|
iptables -A good-dmz -p tcp --dport 3128 -j ACCEPT |
#3128: Proxy http |
|
iptables -A good-dmz -p tcp --dport 10000 -j ACCEPT |
#10000: Proxy mngt |
|
|
|
|
iptables -A good-dmz -j DROP |
#ACCEPT<->DROP |
#DROP others |
|
|
|
# from external(WAN) to dmz |
|
|
iptables -A bad-dmz -p tcp --dport ident -j ACCEPT |
#ACCEPT ident |
|
iptables -A bad-dmz -j DROP |
#ACCEPT<->DROP |
#DROP all |
|
|
|
# from internal(LAN) to external(WAN) |
|
|
iptables -A good-bad -p tcp --dport ftp -j ACCEPT |
#FTP direct cf WAN->LAN ident |
|
iptables -A good-bad -p tcp --dport nntp -j ACCEPT |
#NNTP direct |
|
iptables -A good-bad -p udp --dport nntp -j ACCEPT |
#NNTP direct |
|
iptables -A good-bad -p tcp --dport pop3 -j ACCEPT |
#POP3 direct |
|
iptables -A good-bad -p udp --dport pop3 -j ACCEPT |
#POP3 direct |
|
iptables -A good-bad -p tcp --dport smtp -j ACCEPT |
|
#SMTP direct |
iptables -A good-bad -p udp --dport smtp -j ACCEPT |
#SMTP direct |
|
iptables -A good-bad -p udp --dport domain -j ACCEPT |
#DNS direct |
|
iptables -A good-bad -p tcp --dport https -j ACCEPT |
#HHTPS direct, |
|
|
|
|
iptables -A good-bad -j REJECT |
#REJECT all |
|
|
|
|
# from dmz to internal (LAN) |
|
|
iptables -A dmz-good -j DROP |
#ACCEPT<->DROP |
#DROP all |
|
|
|
# from dmz to external (WAN) |
|
|
iptables -A dmz-bad -p tcp --dport ftp -j ACCEPT |
#FTP |
|
iptables -A dmz-bad -p tcp --dport http -j ACCEPT |
#HTTP |
|
iptables -A dmz-bad -p tcp --dport pop3 -j ACCEPT |
#POP3 |
|
iptables -A dmz-bad -p tcp --dport smtp -j ACCEPT |
#SMTP |
|
iptables -A dmz-bad -p udp --dport smtp -j ACCEPT |
#SMTP |
|
iptables -A dmz-bad -p udp --dport domain -j ACCEPT |
#DNS |
|
|
|
|
iptables -A dmz-bad -j REJECT |
#REJECT<->ACCEPT |
#REJECT others |
|
|
|
# from external (WAN) to internal (LAN) |
|
|
iptables -A bad-good -p tcp --dport ident -j ACCEPT |
#ACCEPT ident->security hole for FTP direct |
|
iptables -A bad-good -j DROP |
#DROP all |
|
# Building up of ip
tables' interfaces
iptables -N bad-if
iptables -N dmz-if
iptables -N good-if
# Set up the jumps to
each chain
iptables -A INPUT -i
$BAD_IFACE -j bad-if
iptables -A INPUT -i
$DMZ_IFACE -j dmz-if
iptables -A INPUT -i
$GOOD_IFACE -j good-if
# External iface
iptables -A bad-if -p
icmp -j icmp-acc
iptables -A bad-if -j
DROP #DROP<->ACCEPT
for debugging
# Dmz iface
iptables -A bad-if -p
icmp -j icmp-acc
iptables -A dmz-if -j
DROP #DROP<->ACCEPT
for debugging
# Internal iface
iptables -A good-if -p
tcp --dport ssh -j ACCEPT
iptables -A good-if -p
ICMP --icmp-type ping -j ACCEPT
iptables -A good-if -p
ICMP --icmp-type pong -j ACCEPT
iptables -A good-if -j
icmp-acc
# Uncomment for
debugging
iptables -A good-if -j
DROP
# Remove the compete
blocks
iptables
-D INPUT 1
iptables
-D FORWARD 1
iptables -D OUTPUT 1