All pastes #355814 Raw Edit

Someone

public text v1 · immutable
·published 2007-02-14 19:18 UTC
rendered paste body
#!/bin/sh

#########################
# configuration options #
#########################

INET_IP1="201.12.35.51"
INET_IP3="201.12.35.54"
INET_BROADCAST="201.12.35.63"
INET_IFACE="eth0"

LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_IFACE="eth1"

LO_IFACE="lo"
LO_IP="127.0.0.1"

ODIN_INT="192.168.1.134" 
ODIN_EXT="201.12.35.52"

SAINT_INT="192.168.1.53"
SAINT_EXT="201.12.35.54"
SAINT_RANGE="200.230.207.0/24"

SICREDI_EXT_IP="201.77.95.20"
SICREDI_RANGE="172.16.0.0/12"

IPT=`which iptables`
MODPROBE=`which modprobe`

LOG="-m limit --limit 1/m -j LOG --log-level debug --log-prefix"

################
# load modules #
################

$MODPROBE ip_conntrack_ftp
$MODPROBE ip_conntrack_irc

#######################
# /proc configuration #
#######################

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range

################
# set policies #
################

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

#########
# flush #
#########

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle

$IPT -X
$IPT -X -t nat
$IPT -X -t mangle

#################
# create chains #
#################

$IPT -N allowed_packets
$IPT -N denied_packets

$IPT -N tcp_packets
$IPT -N udp_packets
$IPT -N icmp_packets

########################
# chain denied_packets #
########################

# Log/Limit
$IPT -A denied_packets_packets -p tcp ! --syn -m state --state NEW $LOG "New not SYN:"
$IPT -A denied_packets -p tcp --tcp-flags ALL FIN,URG,PSH $LOG "Stealth XMAS scan: "
$IPT -A denied_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG $LOG "Stealth XMAS-PSH scan: "
$IPT -A denied_packets -p tcp --tcp-flags ALL ALL $LOG "Stealth XMAS-ALL scan: "
$IPT -A denied_packets -p tcp --tcp-flags ALL FIN $LOG "Stealth FIN scan: "
$IPT -A denied_packets -p tcp --tcp-flags SYN,RST SYN,RST $LOG "Stealth SYN/RST scan: "
$IPT -A denied_packets -p tcp --tcp-flags SYN,FIN SYN,FIN $LOG "Stealth SYN/FIN scan(?): "
$IPT -A denied_packets -p tcp --tcp-flags ALL NONE $LOG "Stealth Null scan: "
$IPT -A denied_packets -p tcp --tcp-option 64 $LOG "Bad TCP flag(64): "
$IPT -A denied_packets -p tcp --tcp-option 128 $LOG "Bad TCP flag(128): "
$IPT -A denied_packets -p tcp -m state --state INVALID $LOG "INVALID TCP: "
$IPT -A denied_packets -p tcp -m state --state INVALID $LOG "INVALID UDP: "
$IPT -A denied_packets -p icmp --icmp-type echo-request -m state --state INVALID $LOG "INVALID ICMP-request: "
$IPT -A denied_packets -p icmp ! --icmp-type echo-request -m state --state INVALID $LOG "INVALID ICMP-other: "
$IPT -A denied_packets -f $LOG "Fragmented packet: "

# Drop.
$IPT -A denied_packets -f -j DROP
$IPT -A denied_packets -m state --state INVALID -j DROP
$IPT -A denied_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A denied_packets -p tcp --tcp-option 64 -j DROP
$IPT -A denied_packets -p tcp --tcp-option 128 -j DROP 
$IPT -A denied_packets -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A denied_packets -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A denied_packets -p tcp --tcp-flags ALL FIN -j DROP
$IPT -A denied_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A denied_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A denied_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A denied_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A denied_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

#########################
# chain allowed_packets #
#########################

$IPT -A allowed -p tcp --syn -j ACCEPT
$IPT -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A allowed -p tcp -j DROP

#####################
# chain tcp_packets #
#####################

# accept ftp and passive ftp.
$IPT -A tcp_packets -p tcp --dport 21 -j allowed_packets
$IPT -A tcp_packets -p tcp --sport 1024: --dport 1024: -j allowed_packets

# accept pptp and gre protocol.
$IPT -A tcp_packets -p tcp --dport 1723 -j allowed_packets
$IPT -A tcp_packets -p 47 -j allowed_packets

#####################
# chain udp_packets #
#####################

# accept dns.
$IPT -A udp_packets -p udp --destination-port 53 -j ACCEPT

# accept dhcp.
$IPT -A udp_packets -p udp -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT

# block fucking microsoft boxes requests.
$IPT -A udp_packets -p udp -i $INET_IFACE -d $INET_BROADCAST --destination-port 135:139 -j DROP

# block dhcp broadcast too.
$IPT -A udp_packets -p udp -i $INET_IFACE -d 255.255.255.255 --destination-port 67:68 -j DROP

######################
# chain icmp_packets #
######################

$IPT -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
$IPT -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT

#####################
# Mangle PREROUTING #
#####################

$IPT -t mangle -A PREROUTING -p tcp --dport 20 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A PREROUTING -p tcp --dport 21 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A PREROUTING -p tcp --dport 25 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A PREROUTING -p udp --dport 53 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A PREROUTING -p tcp --dport 80 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A PREROUTING -p tcp --dport 110 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A PREROUTING -p tcp --dport 443 -j TOS --set-tos Maximize-Throughput

##################
# NAT PREROUTING #
##################

# squid redirect.
$IPT -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 80 -j REDIRECT --to-port 3128

# redirect ftp to odin.
$IPT -t nat -A PREROUTING -d $ODIN_EXT -p tcp --dport 21 -j DNAT --to $ODIN_EXT

# redirect http to odin.
$IPT -t nat -A PREROUTING -d $ODIN_EXT -p tcp --dport 80 -j DNAT --to $ODIN_EXT

###############
# INPUT chain #
###############

# we don't want bad packets.
$IPT -A INPUT -p tcp -j denied_packets

# special rules not for internet.
$IPT -A INPUT -p all -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPT -A INPUT -p all -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A INPUT -p all -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPT -A INPUT -p all -i $LO_IFACE -s $INET_IFACE -j ACCEPT

# accept incoming packets from the internet.
$IPT -A INPUT -p all -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp -i $INET_IFACE -j tcp_packets
$IPT -A INPUT -p udp -i $INET_IFACE -j udp_packets
$IPT -A INPUT -p icmp -i $INET_IFACE -j icmp_packets

# accept esp/ike protocols for IPSEC.
$IPT -A INPUT  -p udp -i $INET_IFACE -d $INET_IP3 -s $SICREDI_EXT_IP --sport 500 --dport 500 -j ACCEPT
$IPT -A INPUT  -p 50 -i $INET_IFACE -d $INET_IP3 -s $SICREDI_EXT_IP -j ACCEPT

# stop multicasts from microsoft.
$IPT -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP

# log all other packets.
$IPT -A INPUT $LOG "INPUT blocked: "

#################
# FORWARD chain #
#################

# we don't want bad packets.
$IPT -A FORWARD -p tcp -j denied_packets

# set mss.
$IPT -A FORWARD -o $INET_IFACE -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# accept packets we actually want to forward.
$IPT -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# forward IPSEC.
$IPT -A FORWARD -i $INET_IFACE -o ipsec+ -j ACCEPT
$IPT -A FORWARD -i ipsec+ -o $INET_IFACE -j ACCEPT

# log all other packets.
$IPT -A FORWARD $LOG "FORWARD blocked: "

#################
# Mangle OUTPUT #
#################

$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 20 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 21 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 25 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p udp --dport 53 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 80 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 110 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 443 -j TOS --set-tos Maximize-Throughput
$IPT -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 6000:6063 -j TOS --set-tos Maximize-Throughput

################
# OUTPUT chain #
################

# we don't want bad packets.
$IPT -A OUTPUT -p tcp -j denied_packets

# set mss.
$IPT -A OUTPUT -o $INET_IFACE -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# accept all output packets.
$IPT -A OUTPUT -p all -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p all -s $LAN_IP -j ACCEPT
$IPT -A OUTPUT -p all -s $INET_IFACE -j ACCEPT

# log all other packets.
$IPT -A OUTPUT $LOG "OUTPUT blocked: "

###################
# NAT POSTROUTING #
###################

# set mss.
$IPT -t nat -A POSTROUTING -o $INET_IFACE -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# do NAT.
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP1