RH9+adsl+squid+iptables的防火墙脚本,试验通过!

由 太阳风 在 02-13-2004 09:23 发表:

RH9+adsl+squid+iptables的防火墙脚本,试验通过!

说明:本人愚笨,历时2个星期,在我的机器上试验通过,有些功能比如说bad_tcp_packets过滤,有可能影响网络性能,同时x-window也不能运行了。有没有高手解释一下。大家看着办吧!欢迎提出宝贵的修改意见!让这个脚本成为一个完美的脚本。

ps:现在网上有很多朋友用redhat+adsl+squid+iptables上网,一加上网上的一些iptables规则,squid就无法使用,这个脚本解决了!

vi /etc/rc.d/firewall

#!/bin/sh

#启用转发(FORWARD)功能

Enabling IP Forwarding......"

echo "Enabling IP Forwarding........"

echo 1 > /proc/sys/net/ipv4/ip_forward

#这一步不是很需要。

Non-Required proc configration

#echo 1 > /proc/sys/net/ipv4/ip_dynaddr

#开始定义iptables

Enabling iptables rules

Internet Configuration.

INET_IF="ppp0"

#外网网卡

EXT_IF="eth0"

#内网网卡

LAN_IF="eth1"

LAN_IP="192.168.0.1"

LAN_IP_RANGE="192.168.0.0/24"

TRUSTED_TCP_PORT="22 25 53 80 110 143 443 3128 6000 6001 6002 7100"

your LAN's IP range and localhost IP. /24 means to only use the first 24

bits of the 32 bit IP address. the same as netmask 255.255.255.0

Localhost Configuration.

LO_IF="lo"

LO_IP="127.0.0.1"

#加载模块,有些已经内建,为了以防万一,还是加上了

Module loading.

echo "modprobe modules"

modprobe ip_tables

modprobe ip_nat_ftp

modprobe ip_conntrack

modprobe ip_conntrack_ftp

规则初始化,设置为默认都为DROP

echo "Enabling iptables rules"

Reset the default policies in the tables

iptables -F

iptables -X

iptables -F -t mangle

iptables -X -t mangle

iptables -F -t nat

iptables -X -t nat

iptables -Z -t nat

Set policies

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

允许ping localhost,ping 192.168.0.1/2

Allow loopback access

iptables -A INPUT -p icmp -i lo -j ACCEPT

iptables -A OUTPUT -p icmp -o lo -j ACCEPT

允许代理和内网客户机互相传输数据(包括ping)

Allow ping LAN

iptables -A INPUT -p ALL -i $LAN_IF -s $LAN_IP_RANGE -j ACCEPT

iptables -A OUTPUT -p ALL -o $LAN_IF -d $LAN_IP_RANGE -j ACCEPT

允许外网的网卡与内网互相通讯。接收数据只接受响应封包,否则不予放行。发送数据没有限制。

Allow ppp0

iptables -A INPUT -p ALL -i $INET_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p ALL -o $INET_IF -j ACCEPT

建立用户定义的链

Creat userspecified chains

iptables -N allowed

iptables -N tcp_packets

iptables -N bad_tcp_packets

iptables -N icmp_packets

bad_tcp_packets规则链的作用是,将要求重新导向的联机记录起来,然后将封包丢弃(防止联机被绑架,但是会影响第三方交谈的服务,如MS Media Server)

bad_tcp_packets chain

iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"

iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

allowed规则链的作用是:允许要求联机封包或响应封包进入,其余丢弃。

allowed chain

iptables -A allowed -p tcp --syn -j ACCEPT

iptables -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A allowed -p tcp -j DROP

icmp_packets规则链的功能是:允许ping 封包进入,将其余封包丢弃。

ICMP rules

iptables -A icmp_packets -p icmp -s 0/0 --icmp-type 8 -j ACCEPT

iptables -A icmp_packets -p icmp -s 0/0 --icmp-type 11 -j ACCEPT

INPUT chain

进入防火墙主机的tcp封包必须先进行bad_tcp_packets过滤。但是有时候影响网络性能。

first bad_tcp_packets filter

iptables -A INPUT -p tcp -j bad_tcp_packets

从外网进入防火墙主机的icmp封包必须先进行icmp_packets过滤。这是防止黑客传送不完整的ip封包,系统会响应icmp封包通知对方,导致主机位置被侦测出来。

second icmp_packets filter

iptables -A INPUT -p icmp -i $INET_IF -j icmp_packets

打开信任的服务

Open trusted ports

echo "Open trusted ports....."

iptables -N services

for PORT in $TRUSTED_TCP_PORT; do

iptables -A tcp_packets -s 0/0 -p tcp --dport $PORT -j allowed

done

iptables -A INPUT -p tcp -i $INET_IF -j tcp_packets

拒绝外部使用内网ip欺骗。

deny local cheat

iptables -A INPUT -i $INET_IF -s 192.168.0.0/16 -j DROP

iptables -A INPUT -i $INET_IF -s 10.0.0.0/8 -j DROP

iptables -A INPUT -i $INET_IF -s 172.16.0.0/12 -j DROP

iptables -A INPUT -i $INET_IF -s 127.0.0.0/8 -j DROP

从LAN进入防火墙主机的DHCP封包,予以放行,只有当防火墙担任DHCP时才有用

allow DHCP_packets from LAN

iptables -A INPUT -p udp -i $LAN_IF --dport 67 --sport 68 -j ACCEPT

限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus