web安全之防火墙的安全配置
iptables介绍
iptables是与最新的2.6.x版本的linux内核集成的ip信息包过滤系统。如果linux系统连接到因特网lan、服务器或链接lan和因特网的代理服务器,则该服务器有利于在linux系统上更好的控制ip信息包过滤和防火墙配置。
neitfilter/iptables ip信息包过滤系统是一种强大的工具,可用于添加、编辑和出去规则,这些规则是在做信息包过滤时决定的防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链中。
隋坦netfilter/ iptables ip信息包过滤系统被称为单个实体,但实际上有两个组件netfilter和iptables组成。
neitfilter组件也称为内核空间(kernelspace),是内核一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables组件是一种工具,也成为用户空间(userpace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非晋正在使用RED HAT LINUX 7.1或更高版本
,否则需要下载该工具并安装使用它。
包交换和状态监测
防火墙通常使用的安全控制手段主要有包过滤、状态监测、代理服务。包过滤服务是一种简单、有效的安全控制技术。它通过在网络间相互连接的设备上加载允许、禁止来自某些特定的原地址、目的地址、TCP端口号等规则,对通过设备的数据包经行检测,限制数据包进出内部网络。
包过滤的最大优点是对用户透明,传输性能高。反由于安全控制层次在网络层、传输层。安全控制力度也只限于原地址、目的地址和端口号。因而只能进行较为初步的安全监测,对于恶意的拥塞攻击、内存覆盖或病毒等高层次的攻击手段,则无能为力。
状态监测是比包过滤更为有效的安全控制方法。对新建的应用连接,状态监测监察与此案时至的安全规则,允许符合规则的连接通过,并在内存中记录下该链接的相关信息,生成状态表。对该连接的后续数据包,只要符合状态表就可以通过。这种防治的好处在于:由于不需要对每一个数据包进行规则检查,而是一个连接的后续数据包(通常是大量的数据包)通过散列算法,直接进行状态检查,从而使得性能得到较大提高:而且由于状态表示动态的,因而可以有选择的、动态开通1024号以上端口,使得安全性得到进一步的提高。
现在防火墙主要分为以下三种类型:包过滤、应用代理、状态监测
包过滤防火墙:现在静态包过滤防火墙市面上已经看不到了,取而代之的是动态包过滤技术的防火墙哈~
代理防火墙:因为一些特使的报文可以轻松突破包过滤防火墙的保护,比如大家知道的SYN攻击、ICMP 洪水攻击,所以一代理服务器作为专门卫用户保密或者突破访问限制的数据转发通道的应用failing防火墙出现了哈~ 其实用了一种应用协议分析的新技术。
状态监测防火墙:其基于动态包过滤技术发展而来,加入了一种状态监测的模块,近一点发展了 会话过滤功能,会话状态的保留是有时间限制的,此防火墙还可以对报的内通进行分析,从而避免开放过多的端口。
iptables 功能介绍
基础的操作方法
启动指令:service iptables start
重启指令:service iptables restart
关闭指令: service iptables stop
iptables 的表与链
iptables具有Filter.NAT,Mangle,RAW四种内建表:
1Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么久默认使用filter表,它具有以下三种内件链:
INPUT链-处理来自外部的数据。
OUTPOT链-处理向外发送的数据。
FORWARD链-将数据转达到本机的其他网卡设备上。
2 NAT表
NAT 表有三种内建链:
PREROUTING 链-处理刚到达本机并在路由转发前的数据包。他会转换数据包中的目标IP 地址(destination ip address ),通常用于DNAT(destination NAT).
POSTROUTING链-处于即将离开本机的数据包。他会转换数据包中的原IP 地址(source ip address ) ,通常用于SNAT(source NAT)。
OUTPUT链-处理本机产生的数据包。
3 Mangle 表
Mangle 表用于指定如何处理数据包。他能改变TCP 头总的QoS位。Mangle表具有5个内建链:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4 Raw 表用于处理异常,他具有2个内建链:
PREROUTING chain
PUTPUT chain
下面展示了Iptables的三个內建表:
二、IPTABLES 规则(Rules)
牢记以下三点式理解iptables规则的关键:
RULES 包括一个条件和一个目标(target)
如果满足条件,就执行目标(target)中的规则或者特定值。
如果不满足条件,就判断下一条Rules
目标值 (Target Values)
下面是你可以在target例指定的特殊值:
ACCEPT- 允许防火墙接收数据包
DROP -防火墙丢弃包
QUEUE-防火墙数据包移交发哦用户空间
RETURN -防火墙停止当前连接中的后续Rules .并返回到调用链(the calling chain)中。
如果你执行iptables --list你将关防火墙上的可用规则、下列说明当前系统没有定义防火墙,你可以看到,他显示了默认的filter表,以及内默认的input连弩, forward链,output链。
查看mangle表:
查看NAT表:
查看RAW表
三、清空所有iptables规则
在配置iptables之前,你通常需要用iptables --list命令或者iptables-save命令查看有无存在规则,因为有时需要删除现有的iptables规则:
这两条命令式等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有linux发型版上的这个命令不会清除NAT中的规则,除此之外,此时只能手动清除:
四、永久生效
当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台不同,具体操作也不同,下面进行简单介绍:
1 Ubuntu
首先,保存现有规则:
然后新建一个bash 脚本,并保存到/etc/network/if-pre-up.d/目录下:
这样,每系统重启后Iptables规则都会被自动加载。
/!注意:不要尝试在。bashbrc 或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。
2 CentOS,Red Hat
查看当前规则:
五、追加Iptables规则
可以使用iptables -A命令追加新规则,其中-A 表示Append。因此,新的规则将追加到链尾。
一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用-A参数添加新规则,那么就是无用功。
1语法
Iptables -A chain firewall-rule
-A chain -指定添加规则链
filewall-rule -具体的规则参数
2 描述规则的基本参数
以下这些规则参数用于描述数据包的协议、原地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述
-P 协议(protocol)
指定的协议,如tcp,udp,icmp等,可以使用all来指定所有协议。
如果不指定-P 参数,则默认是all值。这并不明智,请总是明确指定协议名称。
可以使用协议(如tcp),或者协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
还可以使用-protocol参数代替-P参数
-S 原地址(source)
指定数据包的原地址
参数可以使用ip地址、网络地址、主机名
例如 :- s 192.168.1.101指定ip地址
例如: -s 192.168.1.10/24 指定网络地址
如果不指定-s参数,就代表所有地址
还可以使用-src或者-source
-d 目的地址(destination)
指定目的地址
参数-S 相同
还可以使用-dst或者-destination
-j 执行目标(jump to target)
-j 代表jump to target
-j 指定了当与规则(Rule)匹配第如何处理数据包
可能的值是ACCEPT DROP QUEUE RETURN
还可以指定其他链(Chain)作为目标
-i 输入接口 (input interface)
-i 代表输入接口(input interface)
-i 指定了要处理来自哪个接口的数据包
这些数据包即将进入INPUT FORWARD PREROUTE
例如: -i etho 制定了要处理经由etho进入的数据包
如果不指定-i参数,那么将处理进入所有接口的数据包
如果出现! -i etho,那么将处理所有经由etho以外的接口进入的数据包
如果出现-i eth +,那么将处理所有经由eth开头进入的数据包
还可以使用-in-interface参数
-o 输出 (out interface)
-o 代表 out interface
-o 指定了数据包由哪个接口输出
这些数据包即将进入FORWARD OUTPUT POSTROUTING 链
如果不指定-o etho 那么系统上的所有接口都可以作为输出接口
如果出现! -o etho ,那么将从etho以为的接口输出
如果出现-i eth+,那么将仅从eth开头的接口输出
还可以使用-out -interface参数
3 描述规则的扩展参数
对规则有了一个基本描述之后,有时候我们还希望指定宽口、tcp标志 ICMP类型等内容。
- sport 源端口 (source port) 针对-p tcp 与-sport ssh
/etc/services文件描述了上述映射关系。
从性能上将,使用端口号更好
使用冒号可以匹配端口范围,如 -sport 22:100
还可以使用 -source-port
--dport 目的端口 (destination port)针对-p tcp 或者-p udp
参数和-sport类似
还可以使用-- destination-port
--tcp-flags TCP 标志 针对-p tcp
可以指定由都好=分隔开的多个参数
有效值可以是:SYN ACK FIN RST URG PSH
可以使用all或者NONE
--icmp-type ICMP 类型 针对-p icmp
-icmp-type 0 表示Echo Reply
-icmp-type 8 表示Echo