赞
踩
目录
为了保护网络服务器,过滤企业不需要的访问,阻止恶意入侵等都需要防火墙防护。这里将详
述CentOS 6系统中的防火墙netfilter和iptables,以及CentOS 7系统中的防火墙firewalld。
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,体现在对包内的
IP地址、端口等信息的处理上,属于典型的包过滤防火墙(或称为网络层防火墙)。 Linux系统的
防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率。
iptables的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉
netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。netfilter和
iptables均可表示Linux防火墙,但是又有区别。
◆ netfilter:指的是 Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于
“内核态”( Kernel Space,又称为内核空间)的防火墙功能体系。
◆ iptables:指的是用来管理 Linux防火墙的命令程序,通常位于/sbin/ iptables目录下,属于“用户
态”( User Space,又称为用户空间)的防火墙管理体系。
其中,每个规则“表”相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个
表;在每个“表”容器内包括不同的规则“链”,根据处理数据包的不同时机划分为五种链;而决定是
否过滤或处理数据包的各种规则,按先后顺存放在各规则链中。四个规则表分别由独立的内核模块
实现;
◆ raw:主要用来决定是否对数据包进行状态跟踪。raw表对应的内核模块为iptable_raw,表内包
含两个规则链OUTPUT、PREROUTING。
◆ mangle : 修改数据包内容(TOS服务类型;TTL生存周期);给数据包设置Mark标记,用来实
现流量整形、策略路由等高级应用。mangle表对应的内核模块为iptable_mangle,包含五个规则链
INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING。
◆ nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口等信息。net表对应的内核模块为iptable_nat,表内包含三个规则链OUTPUT、PREROUTING、
POSTROUTING。
◆ filter:用来对数据包进行过滤,根据具体的规则要求决定决定是否放行该数据包(过滤)。filter表
对应的内核模块为iptable_ filter,包含三个链,即PREROUTING、POSTROUTING、OUTPUT。
注意:在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少。
◆ INPUT:处理入站数据包,匹配目标IP为本机的数据包。即当收到访问防火墙本机地址的数据包时使用此链表规则。
◆ OUTPUT:处理出站数据包,一般不在此链上做配置。即当防火墙本机向外发送数据包时使用
此链表规则。
◆ FORWARD:处理转发数据包,匹配流经本机的数据包。即当接收到需要通过防火墙中转发送
给其它地址的数据包时使用此链表规则。
◆ PREROUTING链:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于
把内网服务器的IP和端口映射到路由器的外网IP和端口上。
◆ POSTROUTING链:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内
网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。
注意:INPUT、 OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火
墙;而FORWARD、 PREROUTING、 POSTROUTING链多用在“网络型防火墙”中,如使用 Linux
防火墙作为网关服务器,在公司内网与 Internet之间进行安全控制。
规则表应用顺序依次为:raw → mangle → nat → filter
根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序取决于
数据包的流向。如图示:
4.2.1、主机型防火墙:
◆ 入站数据流向:来自外界的数据包到达防火墙后,首先被 PREROUTING链处理(是否修改
数据包地址等),然后进行路由选择(判断该数据包应发往何处);如果数据包的目标地址是防火
墙本机(如 Internet用户访问网关的Web服务端口),那么内核将其传递给 INPUT链进行处理(决
定是否允许通过等),通过以后再交给系统上层的应用程序(如 httpd服务器)进行响应。
入站数据(来自外界的数据包,且目标地址是防火墙本机) : PREROUTING --> INPUT --> 本机
的应用程序。
◆ 出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务
时),首先被 OUTPUT链处理,然后进行路由选择,再交给 POSTROUTING链进行处理(是否修
改数据包的地址等)。
出站数据(从防火墙本机向外部地址发送的数据包):本机的应用程序--
>OUTPUT-.>POSTROUTING
4.2.2、网络型防火墙:
◆ 转发数据流向:来自外界的数据包到达防火墙后,首先被 PREROUTING链处理,然后再进
行路由选择;如果数据包的目标地址是其他外部地址(如局域网用户通过网关访问QQ服务器),
则内核将其传递给 FORWARD链进行处理(允许转发或拦截、丢弃),最后交给 POSTROUTING
链进行处理(是否修改数据包的地址等)。
转发数据(需要经过防火墙转发的数据包) : PREROUTING --> FORWARD -->
POSTROUTING。
当数据包经过每条规则链时,依次按第一条规则、第二条规则……的顺序进行匹配和处理。链
内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则(使用L0G日志操作的规则除
外),则不再检查本链内后续的其他规则。如果比对完整个链,也找不到与数据包相匹配的规则,
就按照该规则链的默认策略进行处理(未修改的状况下,默认策略为允许)。
CentOS 7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭
firewalld防火墙,再安装iptables。
- [root@kang ~]# systemctl stop firewalld.service #关闭firewalld防火墙
- [root@kang ~]# systemctl disable firewalld.service
- [root@kang ~]# setenforce 0
- [root@kang ~]# yum -y install iptables-services #安装iptables 防火墙
- ……
- [root@kang ~]# systemctl start iptables.service #开启服务
- [root@kang ~]# systemctl enable iptables.service #设置iptables开机自启动
注意:选项、链名、控制类型使用大写字母,其余均为小写。
其中:
◆表名、链名:用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表,未指定
链名时,默认指表内的所有链;
◆管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
◆匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理(必须指
定);
◆控制类型:指的是数据包的处理方式,如允许、拒绝、丢弃等。
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志
记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下。
iptables 命令的常用管理选项如下 | |
选项 | 功能及特点 |
-A | 在指定链末尾追加(--append)一条新的规则 |
-I | 在指定链首行插入(--insert)一条新的规则,未指定序号默认作为第一条规则 |
-P | 设置指定默认策略(--policy) |
-D | 删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容 |
-R | 修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容 |
-L | 查看,列出(--list)指定链中所有的规则,若未指定链名,则列出表中所有的链 |
-F | 清空(--flush)指定链中所有规则,若未指定链名,则清空表中所有的链 |
-X | 清空自定义链的规则,不影响其他链 |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) |
-S | 查看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
-n | 使用数字形式(--numeric)显示输出结果,如显示IP地址而不是主机名 |
-v | 查看规则列表时显示详细(--verbose)信息,常跟-L一起使用 |
-h | 查看命令帮助信息(--help) |
--line-number | 查看规则列表时,同时显示规则在链中的顺序号 |
- [root@kang ~]# iptables -t filter -I INPUT -p icmp -j REJECT
- #在filter表(-t filter)中的INPUT链中插入(-I)一条规则,
- 拒绝(-j REJECT)发给本机的使用ICMP协议的数据包(-p icmp)。
- 使得其他主机无法ping通本机。
查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在
链内的顺序号。
- [root@kang ~]# iptables -vnL #显示详细信息,,没有指定表都显示默认filter表信息。注意这里语法格式vnL顺序是不能改变的
- Chain INPUT (policy ACCEPT 20 packets, 1220 bytes)
- pkts bytes target prot opt in out source destination
- 0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
- #在filter表input链中添加的规则添加的
- ……
- [root@kang ~]# iptables -nL #友好显示
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- ……
- [root@kang ~]# iptables -t nat -nL #或者指定表查看,
- ……
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain POSTROUTING (policy ACCEPT)
- target prot opt source destination
- RETURN all -- 192.168.122.0/24 224.0.0.0/24
- RETURN all -- 192.168.122.0/24 255.255.255.255
- ……
- [root@kang ~]#
规则表的作用:容纳各种规则链;表的划分依据:防火墙规则的作用相似。
规则链的作用:容纳各种防火墙规则;规则的作用:对数据包进行过滤或处理 ;链的分类依据:处
理数据包的不同时机。
四表:raw、mangle 、nat、filter
五链:INPUT、 OUTPUT、FORWARD、 PREROUTING、 POSTROUTING
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。