1.1 前言
企业中安全服务配置情况:
- selinux(生产中也是关闭的),ids入侵检测,md5指纹
- iptables(生产中看情况,内网关闭,外网打开)
企业中安全优化配置原则:
- 尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射
- 并发不是特别大的情况有外网IP,可以开启防火墙服务
- 大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全
学好iptables的基础:
- 熟悉OSI 7 层模型以及不同层对应的协议
- 熟悉TCP/IP三次握手、四次挥手过程,TCP HEADER,状态转换
- 了解常用的服务端口
- 了解常用服务协议原理,如http,icmp等
1.2 iptables防火墙简介
Netfilter/iptables是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑得非常好(赛扬500HZ cpu / 64M 内存等情况下部署网关防火墙)提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙(企业常用网络开源产品:iptables+zebra+squid)。
iptables是linux2.4及2.6内核中集成的服务。其功能与安全性比其老一辈ipfwadm,ipchains强大的多,Iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制(squid代理+iptables)
提示:Netfilter和iptables其实是不同的程序:
netfilter:防火墙的内核模块
iptables:控制Netfilter模块的工具软件
1.3 iptables名词和术语
1.3.1 容器
用来形容包含或者说属于的关系,Netfilter/iptables是表的容器,iptables的表又是链的容器。
1.3.2 表(tables)
表是链的容器,即所有的链(chains)都属于其对应的表(tables)。
1.3.3 链(chains)
链是规则(policys)的容器。
1.3.4 规则
规则就是iptables一系列过滤信息的规范和具体方法条款。
1.4 iptables工作流程
iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预设的规则进行匹配来决定是否可以进入主机。
- 工作流程小结:
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的
- 如果匹配上规则即明确表示是阻止还是通过,数据包就不再向下匹配新的规则
- 如果规则中没有明确表明是阻止还是通过,也就是没有匹配规则时,自动向下进行匹配,直到匹配默认规则得到明确的阻止还是通过
- 防火墙的默认规则是所有规则执行完才执行的
提示:iptables规则的执行顺序默认从前到后(从上到下)依次执行,遇到匹配的规则就不再继续向下检查,只有碰到到不匹配的规则才会继续向下进行匹配,匹配上拒绝的规则也是匹配。
[root@centos6 ~]# iptables -A INPUT -p tcp --dport 3306 -j DROP [root@centos6 ~]# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT [root@centos6 ~]# iptables -nvL --line-number Chain INPUT (policy ACCEPT 54 packets, 4272 bytes) num pkts bytes target prot opt in out source destination 1 3 156 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
说明:此时telnet 10.0.0.102 3306是不通的,原因就是telnet请求匹配上了拒绝规则,因此不会再找下面的规则。如果希望连通可以把ACCEPT规则中的-A改为-I,把允许规则放于INPUT链的第一行生效,默认规则时所有规则执行完才会执行的。
1.5 iptables表和链
iptables根据功能和表的定义划分包含4张表(filter/nat/mangle/raw)和5个链(INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING)。
1.5.1 表和链的对应关系表
表(tables) | 链(chains) | |
Filter | This is the default table (if no -t option is passed).
这是默认的表 |
|
INPUT | for packets destined to local sockets
对于指定到本地套接字的包,即到达本地防火墙服务器的数据包 |
|
FORWARD | for packets being routed through the box
路由穿过的数据包,即经过本地防火墙服务器的数据包 |
|
OUTPUT | for locally-generated packets
本地创建的数据包 |
|
NAT | This table is consulted when a packet that creates a new connec-tion is encountered.
当遇到新创建的数据包连接时将参考这个表 |
|
PREROUTING | for altering packets as soon as they come in
一进来就对数据包进行改变 |
|
OUTPUT | for altering locally-generated packets before routing
本地创建的数据包在路由之前进行改变 |
|
POSTROUTING | for altering packets as they are about to go out
在数据包即将出去时改变数据包信息 |
|
Managle | This table is used for specialized packet alteration.
这个表专门用于改变数据包 |
|
INPUT | for packets coming into the box itself
进入到设备本身的包 |
|
FORWARD | for altering packets being routed through the box
对路由后的数据包信息进行修改 |
|
PREROUTING | for altering incoming packets before routing
在路由之前更改传入的包 |
|
OUTPUT | for altering locally-generated packets before routing
本地创建的数据包在路由之前进行改变 |
|
POSTROUTING | for altering packets as they are about to go out
在数据包即将离开时更改数据包信息 |
|
Raw | 此表用处较少,可以忽略不计 |
1.5.2 表和链详细解释说明
- 利用思维导图辅助记忆:
注意:所有链名必须要大写。
1.5.3 filter表信息详细介绍
Filter表 | 强调:主要和主机自身相关,真正负责主机防火墙功能的表(过滤流入流出和流经主机的数据包)
filter表是iptables默认的表,这个表定义了三个链 企业工作场景:主机防火墙 |
INPUT | 负责过滤所有目标地址是本机地址的数据包
通俗的讲就是过滤进入主机的数据包 |
FORWARD | 负责转发流经主机的数据包,起转发作用,和NAT关系很大
LVS NAT模式,net.ipv4.ip_forward=1 |
OUTPUT | 处理所有源地址是本机地址的数据包
通俗的讲就是从主机发出去的数据包 |
提示:对于filter表的控制是我们实现本机防火墙功能的重要手段,特别是对INPUT链的控制。
1.5.4 NAT表信息详细介绍
NAT表 | 负责网络地址转换,即来源于目的IP地址和port的转换
应用:和主机本身无关一般用于局域网共享上网或者特殊的端口转换服务相关 工作场景: 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING) 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING) WEB单个端口的映射,直接映射80端口(PREROUTING) 这个表定义了3个链,NAT功能相当于网络的ACL控制,和网络交换机ACL类似 |
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
PREROUTING | 在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等
就是收信时根据规则重写收件人的地址 例如:把公网IP:xxx.xxx.xxx.xxx映射到局域网的xxx.xxx.xxx.xxx服务器上 如果是web服务,可以把80转换为局域网的服务器9000端口上 |
POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包的源地址,源端口等
写好发件人的地址,要让家人回信时有地址可回 例如:默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为公网地址 生产应用:局域网共享上网 |
1.5.5 Mangle表信息详细介绍
Mangle表 | 主要负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等,这个表定义了5个链 |
提示:由于这个表与特殊标记相关,一般情况下我们用不到这个表。
1.6 iptabels表和链工作的流程图
1.6.1 流程简化图
说明:上图如地铁环线和地铁直线:
地铁直线:主要是NAT功能
- 企业案例:
- 局域网上网共享(路由和网关),使用NAT的POSTROUTING链
- 外部IP和端口映射为内部IP和端口(DMZ功能),使用NAT的PREROUTING链
地铁环线:主要是filter功能,即防火墙功能FILTER INPUT FORWARD
- 企业案例:
- 主要应用就是主机服务器防火墙,使用filter的INPUT链
