#!/bin/sh
HTTP_SERVER='172.25.0.3'
FTP_SERVER='172.25.0.3'
MAIL_SERVER='172.25.0.3'
SSH_SERVER='172.25.0.3'
NTP1='133.31.180.6'
NTP2='133.100.9.2'
LOCAL='172.25.0.0/24'
#######################################################################
# Initialize
#######################################################################
# Initialize tables <--- 1
iptables -F
iptables -X
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS; do iptables -t $i -F; done
for i in $CHAINS; do iptables -t $i -X; done
for i in $CHAINS; do iptables -t $i -Z; done
# Filter default policy DROP <--- 2
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#######################################################################
# Masquerade
#######################################################################
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE <--- 3
#######################################################################
# Against the attacks
#######################################################################
# Fragment <--- 4
iptables -N fragment
iptables -A fragment -j LOG --log-prefix "iptables fragment: "
iptables -A fragment -j DROP
iptables -A INPUT -f -i ppp0 -j fragment
iptables -A FORWARD -f -i ppp0 -j fragment
# Spoofing <--- 5
iptables -N spoofing
iptables -A spoofing -j LOG --log-prefix "iptables spoofing: "
iptables -A spoofing -j DROP
iptables -A INPUT -i ppp0 -s 127.0.0.0/8 -j spoofing
iptables -A INPUT -i ppp0 -s 169.254.0.0/16 -j spoofing
iptables -A INPUT -i ppp0 -s 10.0.0.0/8 -j spoofing
iptables -A INPUT -i ppp0 -s 172.16.0.0/12 -j spoofing
iptables -A INPUT -i ppp0 -s 192.168.0.0/16 -j spoofing
iptables -A FORWARD -i ppp0 -s 127.0.0.0/8 -j spoofing
iptables -A FORWARD -i ppp0 -s 169.254.0.0/16 -j spoofing
iptables -A FORWARD -i ppp0 -s 10.0.0.0/8 -j spoofing
iptables -A FORWARD -i ppp0 -s 172.16.0.0/12 -j spoofing
iptables -A FORWARD -i ppp0 -s 192.168.0.0/16 -j spoofing
# Well Known Port <--- 6
iptables -N wn-port
iptables -A wn-port -j LOG --log-prefix "iptables wn-port: "
iptables -A wn-port -j DROP
iptables -A INPUT -i ppp0 -p tcp --sport :1023 --dport :1023 -j wn-port
iptables -A FORWARD -i ppp0 -p tcp --sport :1023 --dport :1023 -j wn-port
# Ping of death <--- 7
iptables -N ping-death
iptables -A ping-death -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A ping-death -j LOG --log-prefix "iptables ping-death: "
iptables -A ping-death -j DROP
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j ping-death
iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j ping-death
# Halfopen scan <--- 8
iptables -N hopen-scan
iptables -A hopen-scan -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A hopen-scan -j LOG --log-prefix "iptables hopen-scan: "
iptables -A hopen-scan -j DROP
iptables -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j hopen-scan
iptables -A FORWARD -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j hopen-scan
# Stealth scan <--- 9
iptables -N stealth-scan
iptables -A stealth-scan -j LOG --log-prefix "iptables stealth-scan: "
iptables -A stealth-scan -j DROP
iptables -A INPUT -i ppp0 -p tcp ! --syn -m state --state NEW -j stealth-scan
iptables -A FORWARD -i ppp0 -p tcp ! --syn -m state --state NEW -j stealth-scan
# SYN flood <--- 10
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 8 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "iptables syn-flood: "
iptables -A syn-flood -j DROP
iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood
iptables -A FORWARD -i ppp0 -p tcp --syn -j syn-flood
# NetBIOS <--- 11
iptables -N net-bios
iptables -A net-bios -j LOG --log-prefix "iptables net-bios: "
iptables -A net-bios -j DROP
iptables -A INPUT -i eth1 -p tcp -m multiport --sport 135,137,138,139,445 -j DROP
iptables -A INPUT -i eth1 -p udp -m multiport --sport 135,137,138,139,445 -j DROP
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 135,137,138,139,445 -j DROP
iptables -A INPUT -i eth1 -p udp -m multiport --dport 135,137,138,139,445 -j DROP
iptables -A INPUT -i ppp0 -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios
iptables -A INPUT -i ppp0 -p udp -m multiport --sport 135,137,138,139,445 -j net-bios
iptables -A INPUT -i ppp0 -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios
iptables -A INPUT -i ppp0 -p udp -m multiport --dport 135,137,138,139,445 -j net-bios
iptables -A FORWARD -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios
iptables -A FORWARD -p udp -m multiport --sport 135,137,138,139,445 -j net-bios
iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios
iptables -A FORWARD -p udp -m multiport --dport 135,137,138,139,445 -j net-bios
#######################################################################
# For Router
#######################################################################
# ICMP reply <--- 12
iptables -A OUTPUT -o ppp0 -p icmp -j ACCEPT
# Traceroute <--- 13
iptables -A INPUT -i ppp0 -p udp --dport 33434:33500 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --sport 33434:33500 -m state --state RELATED -j ACCEPT
# NTP Server <--- 14
iptables -A OUTPUT -o ppp0 -d $NTP1 -p udp --sport 123 --dport 123 -j ACCEPT
iptables -A OUTPUT -o ppp0 -d $NTP2 -p udp --sport 123 --dport 123 -j ACCEPT
iptables -A INPUT -i ppp0 -s $NTP1 -p udp --sport 123 --dport 123 -j ACCEPT
iptables -A INPUT -i ppp0 -s $NTP2 -p udp --sport 123 --dport 123 -j ACCEPT
# IDENT <--- 15
iptables -A INPUT -i ppp0 -p tcp --dport 113 -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -o ppp0 -p tcp --sport 113 --tcp-flags RST RST -j ACCEPT
# DHCP Server <--- 16
iptables -A INPUT -i eth1 -p udp -s 0.0.0.0 -d 255.255.255.255 --sport 68 --dport 67 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp -s $LOCAL -d 255.255.255.255 --sport 67 --dport 68 -j ACCEPT
# Loopback <--- 17
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Local Network <--- 18
iptables -A INPUT -i eth1 -s $LOCAL -d $LOCAL -j ACCEPT
iptables -A OUTPUT -o eth1 -s $LOCAL -d $LOCAL -j ACCEPT
#######################################################################
# For Local Server
#######################################################################
# HTTP <--- 19
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to $HTTP_SERVER
iptables -A FORWARD -i ppp0 -d $HTTP_SERVER -p tcp --dport 80 -m state --state NEW -j ACCEPT
# HTTPS <--- 20
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 443 -j DNAT --to $HTTP_SERVER
iptables -A FORWARD -i ppp0 -d $HTTP_SERVER -p tcp --dport 443 -m state --state NEW -j ACCEPT
# FTP port mode <--- 21
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 21 -j DNAT --to $FTP_SERVER
iptables -A FORWARD -i ppp0 -d $FTP_SERVER -p tcp --dport 21 -m state --state NEW -j ACCEPT
# FTP pasv mode <--- 22
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4000:4029 -j DNAT --to $FTP_SERVER
iptables -A FORWARD -i ppp0 -d $FTP_SERVER -p tcp --dport 4000:4029 -m state --state NEW -j ACCEPT
# SMTP <--- 23
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to $MAIL_SERVER
iptables -A FORWARD -i ppp0 -d $MAIL_SERVER -p tcp --dport 25 -m state --state NEW -j ACCEPT
# IMAP <--- 24
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 143 -j DNAT --to $MAIL_SERVER
iptables -A FORWARD -i ppp0 -d $MAIL_SERVER -p tcp --dport 143 -m state --state NEW -j ACCEPT
# SSH <--- 25
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 22 -j DNAT --to $SSH_SERVER
iptables -A FORWARD -i ppp0 -d $SSH_SERVER -p tcp --dport 22 -m state --state NEW -j ACCEPT
#######################################################################
# For Client
#######################################################################
# MSS <--- 26
iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Client <--- 27
iptables -A FORWARD -i eth1 -s $LOCAL -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -d $LOCAL -m state --state ESTABLISHED,RELATED -j ACCEPT
#######################################################################
# Log
#######################################################################
# LOG <--- 28
iptables -A INPUT -j LOG --log-prefix "iptables input-drop: "
iptables -A OUTPUT -j LOG --log-prefix "iptables output-drop: "
iptables -A FORWARD -j LOG --log-prefix "iptables forward-drop: "
|