Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1453074
  • 博文数量: 297
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3082
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 11:36
文章分类

全部博文(297)

文章存档

2011年(1)

2009年(45)

2008年(67)

2007年(184)

我的朋友

分类: LINUX

2007-11-19 15:14:14

7.防火墙

71  iptables类型防火墙:

711 iptables概念:

IptalbesIP包过滤器管理)是用来设置、维护和检查Linux内核的IP包过滤规则的。

可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。

通过使用用户空间,可以构建自己的定制规则,这些规则存储在内核空间的信息包过滤表中。这些规则具有目标,它们告诉内核对来自某些源、前往某些目的地或具有某些协议类型的信息包做些什么。如果某个信息包与规则匹配,那么使用目标 ACCEPT 允许该信息包通过。还可以使用目标 DROP REJECT 来阻塞并杀死信息包。对于可对信息包执行的其它操作,还有许多其它目标。

根据规则所处理的信息包的类型,可以将规则分组在链中。处理入站信息包的规则被添加到 INPUT 链中。处理出站信息包的规则被添加到 OUTPUT 链中。处理正在转发的信息包的规则被添加到 FORWARD 链中。这三个链是基本信息包过滤表中内置的缺省主链。另外,还有其它许多可用的链的类型(如 PREROUTING POSTROUTING),以及提供用户定义的链。每个链都可以有一个策略,它定义缺省目标,也就是要执行的缺省操作,当信息包与链中的任何规则都不匹配时,执行此操作。

建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。当信息包到达防火墙时,内核先检查信息包的头信息,尤其是信息包的目的地。我们将这个过程称为路由

如果信息包源自外界并前往系统,而且防火墙是打开的,那么内核将它传递到内核空间信息包过滤表的 INPUT 链。如果信息包源自系统内部或系统所连接的内部网上的其它源,并且此信息包要前往另一个外部系统,那么信息包被传递到 OUTPUT 链。类似的,源自外部系统并前往外部系统的信息包被传递到 FORWARD 链。

712 iptables实例1

       #!/bin/sh

# 禁止系统的转发包功能

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

# 清楚iptables原有规则,并设置iptables默认规则

iptables -t nat -F POSTROUTING

iptables -t nat -F PREROUTING

iptables -t nat -F OUTPUT

iptables -F

iptables -P INPUT DROP

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

# input规则中需要打开的tcpupd端口

iptables -A INPUT -j ACCEPT -p tcp --dport 80

iptables -A INPUT -j ACCEPT -p tcp --dport 22

iptables -A INPUT -j ACCEPT -p tcp --dport 25

iptables -A INPUT -j ACCEPT -p tcp --dport 1352

iptables -A INPUT -p udp --destination-port 53 -j ACCEPT

# input规则中状态为:STATE RELATED 的包都接受

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 启用系统ip转发功能

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

< --end-- >

713 iptables实例2

       注:这个实例中,只需要设置tcpudp端口和服务器网络段ip范围即可,其他已经默认设置好。

#!/bin/sh

# make:yongzhang

# time:2004-06-18

# e-mail: yongzhang@wiscom.com.cn

 

 

 

PATH=/sbin:/bin:/usr/sbin:/usr/bin

##tcp allow ports

TPORTS="80 22"

##udp allow ports

UPORTS="53"

##internal server_ip range

SERVER_IP="172.18.10.0/24"

##disable forwarding

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

##reset default policies

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

##del all iptables rules

iptables -F INPUT

iptables -F FORWARD

iptables -F OUTPUT

##clean all non-default chains

iptables -X

iptables -t nat -X

##iptables default rules

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

##allow ping packets

iptables -A INPUT -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT

iptables -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT

iptables -A INPUT -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT

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

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

#iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -m limit --limit 5/s -j ACCEPT

iptables -A FORWARD -p ICMP -j ACCEPT

##enable forwarding

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

##STATE RELATED for router

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

##accept internal packets on the internal i/f

iptables -A INPUT -s $SERVER_IP -p tcp -j ACCEPT

##open ports on router for server/services

##TCP PORTS

for ATP in $TPORTS

do

iptables -A INPUT ! -s $SERVER_IP -d $SERVER_IP -p tcp --destination-port $ATP -j ACCEPT

          iptables -A FORWARD -p tcp --destination-port $ATP -j ACCEPT

done

##UDP PORTS

for AUP in $UPORTS

do

          iptables -A INPUT -p udp --destination-port $AUP -j ACCEPT

          iptables -A FORWARD -p udp --destination-port $AUP -j ACCEPT

done

##bad_packets chain

##drop INVALID packets immediately

iptables -A INPUT -p ALL -m state --state INVALID -j DROP

##limit SYN flood

#iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

##deny all ICMP packets,eth0 is external net_eth

#iptables -A INPUT -i eth0 -s  0.0.0.0/0 -p ICMP -j DROP

##allow loopback

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

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

##enable forwarding

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

< --end-- >

72 ipchains类型防火墙:

721 ipchains概念:

Ipchains 被用来安装、维护、检查Linux内核的防火墙规则。规则可以分成四类:IP input链、IP output链、IP forward链、user defined 链。

一个防火墙规则指定包的格式和目标。当一个包进来时, 核心使用input链来决定它的命运。 如果它通过了, 那么核心将决定包下一步该发往何处(这一步叫路由)。假如它是送往另一台机器的, 核心就运用forward链。如果不匹配,进入目标值所指定的下一条链,那有可能是一条user defined链,或者是一个特定值: ACCEPTDENYREJECTMASQREDIRECTRETURN

ACCEPT意味着允许包通过,DENY 扔掉包就象没有受到过一样,REJECT也把包扔掉,但(假如它不是 ICMP )产生一个 ICMP 回复来告诉发包者,目的地址无法到达(请注意DENYREJECT对于ICMP包是一样的)。
  MASQ 告诉核心伪装此包,它只对forward 链和user defined链起作用,想让它起作用, 编译核心时必需让 IP Masquerading 起作用。
  REDIRECT只对input链和user defined链起作用。它告诉核心把无论应送到何处的包改送到一个本地端口. 只有 TCP UDP 协议可以使用此指定. 任意用 '-j REDIRECT' 指定一个端口(名字或编号)可以使送往此的包被重定向到某个特殊的端口, 即使它被标记为送到其它端口。想让它起作用,编译内核时,必须让CONFIG_IP_TRANSPARENT_PROXY起作用。
  最后的一个目标指定是 RETURN, 它跳过它下面的所有规则, 直到链的末尾。
  任何其它的目标指定表示一个用户自定义的链。包将在那个链中通过. 假如那个链没有决定此包的命运, 那么在那个链中的传输就完成了,包将通过当前链的下一个规则。

722 ipchains实例:

    ##清除input规则的规则,并改变input默认的规则链策略为REJECT

-F input

-P input REJECT

##以下是允许input规则链的tcp端口为:80 81 22 123

-A input -s 0/0 -d 0/0 80 -p tcp -y -j ACCEPT

-A input -s 0/0 -d 0/0 81 -p tcp -y -j ACCEPT

-A input -s 0/0 -d 0/0 22 -p tcp -y -j ACCEPT

-A input -s 0/0 -d 0/0 123 -p udp -j ACCEPT

      

        ##设置除了以上允许的input规则链以为,拒绝010232049600060097100tcpupd端口,

-A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT

-A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT

-A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT

-A input -p udp -s 0/0 -d 0/0 2049 -j REJECT

-A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT

-A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT

##允许系本身统网卡上发生的所有包通过

-A input -s 0/0 -d 0/0 -i lo -j ACCEPT

-A input -s 0/0 -d 0/0 -i eth0 -j ACCEPT

-A input -s 0/0 -d 0/0 -i eth1 -j ACCEPT

        ##清除output规则的规则,并改变output默认的规则链策略为ACCEPT

-F output

-P output ACCEPT

##清除forward规则的规则,并改变forward默认的规则链策略为DENY,设置了forward规则链允许对10.10.11.0/24网段的包可以转发并且做伪装处理。

-F forward

-P forward DENY

-A forward -s 10.10.11.0/24 -j MASQ

       < --end-- >

阅读(1536) | 评论(0) | 转发(0) |
0

上一篇:linux 安全配置篇

下一篇:shell 小技巧

给主人留下些什么吧!~~