一、防火墙
1.什么是防火墙(firewall)
- 在计算机科学领域中,防火墙是一个架设在互联网与企业内网之间的信息 安全系统,根据企业预定的策略来监控往来的传输。
- 防火墙可能是一台专属的网络设备或是运行于主机上来检查各个网络接口上的网络传输。它是目前最重要的一直网络防护设备,从专业角度来说,防火墙是位于两个或多个网络间,实行网络间访问控制的一组组件集合之硬件或软件。
- 防火墙最基本的功能就是隔离网络。通过将网络划分成不同的区域(通常情况下称为ZONE),制定出不同区域之间的访问控制策略来控制不同信任程度区域间传送的数据流。
2.防火墙类型
- 网络层防火墙(数据包过滤型防火墙)
运作于TCP/IP协议堆栈上。
管理者会先根据企业/组织的策略预先设置好数据包通过的规则或采用内置规则, 只允许匹配规则的数据包通过 - 应用层防火墙
应用层防火墙是在TCP/IP堆栈的“应用层”上运作。
使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层 - 代理服务
代理(Proxy)服务器(可以是一台专属的网络设备,或是在一般电脑上的一套软件)采用应用程序的运作方式,回应其所收到的数据包(例:连接要求)来实现防火墙的功能,而封锁/抛弃其他数据包
二、IPTABLES
1.什么是IPTABLES
Iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理
2.IPTABLES发展
防火墙的发展史就是从墙到链再到表的过程,也即是从简单到复杂的过程。因为互联网越来越不安全了,所 有防火墙的的规则也越来越复杂。防火的工具变化如下:
- ipfirewall(墙)–>ipchains(链条)–iptables(表)
- 2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm;
- 2.2 版内核中,包过滤机制ipchain,管理工具是ipchains;
- 2.4版及以后的内核中,包过滤机制是netfilter,管理工具iptables
3.IPTABLES原理
- linux的防火墙由netfilter和iptables组成
- 用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能
- netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核态”
- iptables(用户空间)位于/sbin/iptables,是用来管理防火墙的命令的工具,为防火墙体系提供过滤规则/策 略,决定如何过滤或处理到达防火墙主机的数据包,称为Linux防火墙的“用户态”
4. IPTABLES实现方式
Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层
iptables有四表五链(其实有五表,是后来加进来的),四表分别是下图的的raw,mangle,nat,filter表。五链 分别是PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING链。表有什么用?链又有什么用呢?其实表 决定了数据报文处理的方式,而链则决定了数据报文的流经哪些位置
raw–>mangle–>nat–>filter
表由链组成,链由规则组成!
四表:
- filter表:确定是否放行该数据包(过滤)
- nat表:修改数据包中的源、目标IP地址或端口
- managle表:为数据包设置标记
- raw表:确定是否对该数据包进行状态跟踪
五链:
- input:处理入站数据包
- output:处理出站数据包
- forward:处理转发数据包(主要是将数据转发到本机其它网卡设置)
- prerouting:在进行路由选择前处理数据包(判断目标主机)
- postrouting:在进行路由选择后处理数据包(判断经由哪一接口送往下一跳)
两种基本策略:
- 黑名单:指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐
- 白名单:指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐
5.数据包过滤匹配流程
分析数据报文进入本机后应用了哪些表规则以及链规则
如filter表的规则,filter表决定是否放行数据包通过,那如果通过,则必须经由INPUT链流入数据包,INPUT 链是处理入站数据的,如果没问题,继续放行到用户空间,再经由OUTPUT链将数据包流出
如nat表的规则,nat表主要实现转发功能,数据包先经由PREROUTING链进行路由选择,选择好路线后再经 由FORWARD链转发数据,然后再进行一个路由选择,后由POSTROUTING链流出数据
6.IPTABLES命令
命令思路:
- 制定iptables表规则思路
- 基本语法结构
- 详细语法
- 语法结构解析
- 保存和载入规则
表规则思路:
- 选择一张表(此表决定了数据报文处理的方式)
- 选择一条链(此链决定了数据报文流经哪些位置)
- 选择合适的条件(此条件决定了数据报文做何种条件匹配)
- 选择处理数据报文的动作,制定相应的防火墙规则
应用:
==注:不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的缺省策 略,否则需要指定匹配条件
7.IPTABLES 详细语法
iptables—>表—>操作—>链—>条件匹配—>处理动作
- 表:
- filter表:确定是否放行该数据包(过滤)
- nat表:修改数据包中的源、目标IP地址或端口
- managle表:为数据包设置标记
- raw表:确定是否对该数据包进行状态跟踪
- 管理选项:
链管理–>规则管理—>规则显示- 链管理:
-N, --new-chain chain:新建一个自定义的规则链; -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链; -F, --flush [chain]:清空指定的规则链上的规则; -E, --rename-chain old-chain new-chain:重命名链; -Z, --zero [chain [rulenum]]:置零计数器; 注意:每个规则都有两个计数器 packets:被本规则所匹配到的所有报文的个数; bytes:被本规则所匹配到的所有报文的大小之和; -P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
- 规则管理:
链(默认):-A, --append chain rule-specification:追加新规则于指定链的尾部; -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部; -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则; -D, --delete chain rulenum:根据规则编号删除规则; -D, --delete chain rule-specification:根据规则本身删除规则;
- input:处理入站数据包
- output:处理出站数据包
- forward:处理转发数据包(主要是将数据转发到本机其它网卡设置)
- prerouting:在进行路由选择前处理数据包(判断目标主机)
- postrouting:在进行路由选择后处理数据包(判断经由哪一接口送往下一跳)
条件匹配:
- 条件匹配分为基本匹配和扩展匹配,扩展匹配又分为显示匹配和隐式匹配
- 基本匹配的特点是:无需加载扩展模块,匹配规则生效;扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。
- 隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模 块;
- 显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块 基本匹配的使用选项及功能:
-p 指定规则协议,tcp udp icmp all
-s 指定数据包的源地址,ip hostname
-d 指定目的地址
-i 输入接口
-o 输出接口
! 取反
隐式匹配的使用选项及功能:
-p tcp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--tcp-flags mask comp 匹配报文中的tcp协议的标志位
-p udp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--icmp-type
0/0: echo reply 允许其他主机ping
8/0:echo request 允许ping其他主机
显示匹配的使用选项及功能:
显式匹配的选项特别多,man iptables-extensions查看具体用法:
multiport(多端口)
--sport
--dports
iprange(ip范围)
time(时间范围)
string(字符串) #对报文中的应用层数据做字符串模式匹配检测(通过算法实现)
connlimit(连接限制)
limit(速率限制)
state(状态) #追踪本机上的请求和响应之间的数据报文的状态。状态有五种
--state state NEW:新连接请求
--state state ESTABLISHED:已建立的连接
--state state INVALID:无法识别的连接
--state state RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
--state state UNTRACKED:未追踪的连接
提示:
对于进入的状态为ESTABLISHED都应该放行
对于出去的状态为ESTABLISHED都应该放行
严格检查进入的状态为NEW的连接
所有状态为INVALIED都应该拒绝
8.处理动作
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给出任何回应信息
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG:在日志文件中记录日志信息,然后将数据包传递给下一条规则
QUEUE: 防火墙将数据包移交到用户空间
RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链
REDIRECT:端口重定向
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
9.保存和载入规则
iptables-save
保存:iptables-save > /PATH/TO/SOME_RULE_FILE
重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE
10.IPTABLES LAYER7
http://blog.51cto.com/xiexiaojun/1888364
11.IPTABLES和TCP_WRAPPER
Tcp wrapper是一款访问控制的工具,很类似iptables的功能,但是要比iptables功能要小很多,一般只有在 满足以下条件时才能使用tcp wrapper,必须是TCP协议
/etc/hosts.allow #允许配置文件
/etc/hosts.deny #拒绝配置文件