Linux单服务器防火墙脚本框架
2010-06-01 TsengYia#126.com
####################################################################
#!/bin/bash
#### 2010.06.01 By TsengYia#126.com ####
#### 1.Define Varibles #// 定义相关变量,便于脚本的复用
INET_IF='eth0'
INET_IP='x.x.x.x'
LLAN_IF='eth1'
LLAN_IP='y.y.y.y'
IPT="/sbin/iptables"
LMD="/sbin/modprobe"
CTL="/sbin/sysctl"
IP_WLIST="/opt/ipfw/ipfw.wlist" #// IP地址白名单
IP_BLIST="/opt/ipfw/ipfw.blist" #// IP地址黑名单
#
#### 2.Load Modules #// 加载必要的内核模块
$LMD ip_conntrack
$LMD ip_conntrack_ftp
$LMD ip_conntrack_irc
# ......
#
#### 3.Proc Optimize #// 调整内核proc参数
$CTL -w net.ipv4.tcp_max_syn_backlog=3200 &> /dev/null
$CTL -w net.ipv4.tcp_syn_retries=3 &> /dev/null
$CTL -w net.ipv4.tcp_synack_retries=3 &> /dev/null
$CTL -w net.ipv4.tcp_syncookies=1 &> /dev/null
$CTL -w net.ipv4.tcp_fin_timeout=60 &> /dev/null
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts=1 &> /dev/null
$CTL -w net.ipv4.ip_default_ttl=128 &> /dev/null
$CTL -w net.ipv4.icmp_ignore_bogus_error_responses=1 &> /dev/null
$CTL -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=86400 &> /dev/null
#$CTL -w net.ipv4.conf.all.log_martians=1 &> /dev/null
#$CTL -w net.ipv4.conf.all.accept_source_route=0 &> /dev/null
#$CTL -w net.ipv4.conf.all.accept_redirects=0 &> /dev/null
#$CTL -w net.ipv4.conf.default.accept_redirects=0 &> /dev/null
#$CTL -w net.ipv4.conf.$INET_IF.accept_redirects=0 &> /dev/null
#$CTL -w net.ipv4.conf.$LO_IF.accept_redirects=0 &> /dev/null
#
#### 4.Setup Default Policy
$IPT -t filter -F #// 清空原有的防火墙策略,去除干扰
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F
$IPT -X
$IPT -Z
$IPT -P INPUT DROP #// 设置默认策略
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
#
#### 5.White List & Black List #// 检查启用黑名单
[ -r $IP_WLIST ] && for i in `grep -v "^#" $IP_WLIST`
do
$IPT -A INPUT -s $i -j ACCEPT
$IPT -A OUTPUT -d $i -j ACCEPT
done
[ -r $IP_BLIST ] && for i in `grep -v "^#" $IP_BLIST` #// 检查启用白名单
do
$IPT -I INPUT -s $i -j DROP
$IPT -I OUTPUT -d $i -j DROP
done
#
#### 6.Other Firewall Rules #// 设置适用于本机的具体防火墙策略
$IPT -A INPUT -p udp --sport 53 -j ACCEPT
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp -i $LLAN_IF -m multiport --dport 80,2128:2151,8080 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p icmp -m limit --limit 2/m --limit-burst 4 -j LOG --log-prefix "ICMP Packet
IN:"
$IPT -A INPUT -p icmp -m limit --limit 2/s --limit-burst 4 -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p tcp -o $INET_IF -m multiport --dport 25,80,443 -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ......
#
echo "Firewall Rule Setup ... Finished. "
阅读(1267) | 评论(0) | 转发(0) |