iptables防火墙

目录

一. iptables防火墙概述

1. netfilter

2. iptables

3. 工作层次

二. 四表五链

1. 四表

1.1 规则表

1.2 默认包括4个规则表

2. 五链

2.1 规则链

2.2 默认包括5种规则链

3. iptables的四表五链结构介绍

4. 数据包过滤的匹配流程

4.1 规则表之间的顺序

4.2 规则链之间的顺序

4.3 规则链内的匹配顺序

4.4 数据包在规则表、链间的匹配流程

二. 编写防火墙规则

1. iptables安装

2. iptables 基本语法、数据包控制类型

2.1 语法构成

2.2 数据包的常见控制类型

3. 添加、查看、删除规则等基本操作

3.1 iptables 命令的常用管理选项

3.2 添加新的规则 

3.3 查看规则列表

3.4 删除、清空规则

3.5 设置默认策略

4. 规则的匹配条件

4.1 通用匹配

4.2 隐含匹配

4.3 显式匹配

4.4 常见的连接状态


一. iptables防火墙概述

Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成

主要工作在网络层,针对IP数据包。针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)

netfilter/iptables:IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成

1. netfilter

  • 位于Linux内核中的包过滤功能体系
  • 称为Linux防火墙的“内核态”

2. iptables

  • 位于/sbin/iptables,用于管理防火墙规则的工具
  • 称为Linux防火墙的“用户态”

3. 工作层次

  • 主要是网络层,针对IP数据包
  • 体现在对包内的IP地址,端口等信息的处理上

二. 四表五链

1. 四表

1.1 规则表

表的作用:容纳各种规则链

表的划分依据:防火墙规则的作业相似

1.2 默认包括4个规则表

raw表:确定是否对该数据包进行状态跟踪;包含两个规则链:OUTPUT、PREROUTING

mangle表:为数据包设置标记;包含五个规则链:INPUT、OUTPUT、FORWARD、POSTROUTING、PREROUTING       

nat表:修改数据包中的源、目标IP地址或端口;包含三个规则链:OUTPUT、POSTROUTING、PREROUTING

filter:确定是否放行该数据包(过滤);包含三个规则链:INPUT、OUTPUT、FORWARD

2. 五链

2.1 规则链

规则的作用:对数据包进行过滤或处理

链的作用:容纳各种防火墙规则

链的分类依据:处理数据包的不同时机

2.2 默认包括5种规则链

INPUT:处理入站数据包,匹配目标IP为主机的数据包

OUTPUT:处理出站数据包,一般不在此链上做配置

FORWARD:处理转发数据包,匹配流经本机的数据包

PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器到外网IP和端口上

POSTROUTING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网

3. iptables的四表五链结构介绍

  • iptables的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理,为了更加方便的组织和管理防火墙规则
  • iptables采用了表和链的分层结构,所以它会对请求的数据包的包头数据进行分析,根据我们预先设定的规则进行匹配来决定是否可以进入主机
  • 其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链

4. 数据包过滤的匹配流程

数据包到防火墙

4.1 规则表之间的顺序

raw → mangle → nat → filter

4.2 规则链之间的顺序

数据包直接进入到防火墙所在的服务器的内部某一个应用程序当中,只是路过服务器,直接进入到服务

入站数据:来自外界的数据包,且目标地址是防火墙本机
出站数据:从防火墙本机向外部地址发送的数据包
转发数据:需要经过防火墙转发的数据包

入站:PREROUTING --> INPUT --> 本机的应用程序
出站:本机的应用程序-->OUTPUT-.>POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

4.3 规则链内的匹配顺序

  • 自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
  • 要么放行,要么丢弃
  • 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

4.4 数据包在规则表、链间的匹配流程

入站数据流向:来自外界的数据包到达防火墙后,首先被 PREROUTING 链处理(是
否修改数据包地址等),然后进行路由选择(判断该数据包应发往何处);如果数据包的
目标地址是防火墙本机(如 Internet 用户访问网关的 Web 服务端口),那么内核将其传
递给 INPUT 链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序
(如 httpd 服务器)进行响应。

转发数据流向:来自外界的数据包到达防火墙后,首先被 PREROUTING 链处理,然
后再进行路由选择;如果数据包的目标地址是其他外部地址(如局域网用户通过网关访
问 QQ 服务器),则内核将其传递给 FORWARD 链进行处理(允许转发或拦截、丢弃),
最后交给 POSTROUTING 链(是否修改数据包的地址等)进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网 DNS
服务时),首先进行路由选择,确定了输出路径后,再经由 OUTPUT 链处理,最后再
交 POSTROUTING 链(是否修改数据包的地址等)进行处理。

入站 > PREROUTING > INPUT > 应用程序 > OUTPUT > PORTROUTING

二. 编写防火墙规则

1. iptables安装

CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。

1.1 关闭firewalld防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

1.2 安装iptables 防火墙

yum -y install iptables iptables-services

1.3 设置iptables开机启动

systemctl start iptables.service
systemctl enable iptables.service

1.4 iptables防火墙的配置方法

使用iptables命令行
使用system-config-firewall centso7不能使用 centos 6可以使用

2. iptables 基本语法、数据包控制类型

2.1 语法构成

iptables  [-t 表名]  管理选项  [链名]  [匹配条件]  [-j 控制类型]

其中,表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表

  • 管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等
  • 匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理
  • 控制类型:指的是数据包的处理方式,如允许、拒绝、丢弃等

注:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

2.2 数据包的常见控制类型

ACCEPT允许数据包通过
DROP直接丢弃数据包,不给出任何回应信息
REJECT拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则
SNAT修改数据包的源地址
DNAT修改数据包的目的地址
MASQUERADE伪装成一个非固定公网IP地址

3. 添加、查看、删除规则等基本操作

3.1 iptables 命令的常用管理选项

选项示例
-A在指定链末尾追加一条,iptables -A INPUT (操作)
-I在指定链中插入一条新的,未指定序号默认作为第一条,iptables -I INPUT (操作)
-P指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D删除 iptables -t nat -D INPUT (操作)
-R修改、替换某一条规则 iptables -t nat -R INPUT(操作)
-L查看 iptables -t nat -L (查看)
-n所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看)
-v查看时显示更详细信息,常跟-L一起使用(查看)
–line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F清除链中所有规则 iptables -F (操作)
-X清空自定义链的规则,不影响其他链 iptables -X
-Z清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S查看链的所有规则或者某个链的规则/某个具体规则后面跟编号,iptables -t nat -S、iptables -t nat -S POSTROUTING

3.2 添加新的规则 

添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则

iptables -t filter -A INPUT -p icmp -j REJECT      //不允许任何主机ping本主机
iptables -t filter -I INPUT -p icmp -j REJECT
//-I表示插入到第一条,先执行,执行完之后就与主机失去联系,必须进入虚拟机打开终端输入命令删除,
把这条命令-I改成-D就可以了。

iptables -I  INPUT 2 -p tcp --dport 22 -j ACCEPT   //允许主机ssh端口进过我的


iptables -t filter -A INPUT -p tcp -j ACCEPT       //允许任何主机tcp
iptables -I INPUT -p udp -j ACCEPT                 //允许任何主机udp

若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)

3.3 查看规则列表

查看已有的防火墙规则时,使用管理选项“-L”,结合“–line-numbers”选项还可显示各条规则在链内的顺序号

iptables [-t表名] -n -L [链名] |[-- line-numbers]
或
iptables - [vn]L

若要查看 filter 表 INPUT 链中的所有规则,并显示规则序号, 可以执行以上操作

当防火墙规则的数量较多时,若能够以数字形式显示地址和端口信息,可以减少地址解析的环节,在一定程度上加快命令执行的速度

若要以数字地址形式查看 filter 表INPUT 链中的所有规则,可以执行以下操作

  • -n以数字地址形式显示
  • -v查看时显示更详细信息
  • -L查看

3.4 删除、清空规则

删除一条防火墙规则时,使用管理选项“-D”

 清空指定链或表中的所有防火墙规则,使用管理选项“-F”

  • 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
  • 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
  • 按内容匹配删数时,确保规则存在,否则报错

使用管理选项“-F”时,允许省略链名而清空指定表所有链的规则

注:

  • -F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要手动进行修改
  • -P设置了DROP后,使用-F 一定要小心!
  • 防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决

如果不写表名和链名,默认清空filter表中所有链里的所有规则

iptables -F              //清空filter表
iptables -t NAT -F       //清空nat表
iptables -t MANGLE -F    //清空mangle表

3.5 设置默认策略

iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种

iptables [-t表名] -P <链名> <控制类型>

若执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许

iptables -P INPUT DROP     输入后没显示  清除所有规则之后生效,因为下面只剩下DROP  添加远程端口22
iptables -F
iptables -P FORWARD DROP

清除所有规则后,无法登录22端口,xshell自动登出

重启虚拟机后可以重新登陆,所有规则恢复成默认策略规则

 一般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单

iptables -t filter -P FORWARD DROP

iptables -P OUTPUT ACCEPT

当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别

4. 规则的匹配条件

在编写防火墙规则时,匹配条件的设置起着决定性的作用。只有清晰、准确地设置好匹配条件,防火墙才知道要对符合什么条件的数据包进行处理,避免“误杀”。对于同一条防火墙规则,可以指定多个匹配条件,表示这些条件必须都满足规则才会生效。根据数据包的各种特征,结合iptables的模块结构,匹配条件的设置包括三大类:通用匹配、隐含匹配、显式匹配

4.1 通用匹配

通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。 常见的通用匹配包括协议匹配、地址匹配、网络接口匹配

  • 可直接使用,不依赖于其他条件或扩展
  • 包括网络协议、IP地址、网络接口等条件

协议匹配:-p 协议名
地址匹配:-s 源地址、-d目的地址 //可以是IP、网段、域名、空(任何地址)
接口匹配:-i入站网卡、-o出站网卡

iptables -A FORWARD ! -p icmp -j ACCEPT        
iptables -A INPUT -s 192.168.109.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.109.0/24 -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p tcp - -dport 22 -i ACCEPT
iptables -P INPUT
iptables -A FORWARD ! -p icmp -j ACCEPT           //感叹号”!”表示取反

4.2 隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件

端口匹配:

--sport 1000          #匹配源端口是1000的数据包
--sport 1000:3000     #匹配源端口是1000-3000的数据包
--sport :3000         #匹配源端口是3000及以下的数据包
--sport 1000:         #匹配源端口是1000及以上的数据包

TCP标记匹配:

--tcp-flags TCP标记
 
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
  • ICMP类型使用字符串或数字代码表示
  • Echo-Request(代码为8)表示请求
  • Echo-Reply (代码为0)表示回显
  • Destinat ion-Unreachable (代码为3)表示目标不可达
iptables -A INPUT -p icmp - icmp-type 8 -j DROP        #禁止其它主机ping本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT      #允许本机ping其它主机
 
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT      #当本机ping不通其它主机时提示目标不可达
#此时其它主机需要配置关于icmp协议的控制类型为REJECT
 
iptables -A INPUT -p icmp -j REJECT

4.3 显式匹配

要求以**“-m 扩展模块”**的形式明确指出类型

包括多端口、MAC地址、IP范围、数据包状态等条件

多端口匹配

-m multiport --sport  #源端口列表
-m multiport --dport  #目的端口列表

若要允许本机开放80、22、21、20、53端口,以便提供电子邮件服务,可以执行以下操作

iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT

MAC地址匹配

-m mac --mac-source MAC地址

iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止来自某MAC地址的数据包通过本机转发

IP范围匹配

-m iprange --src-range IP范围

iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
#禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包

状态匹配

-m state --state 连接状态

4.4 常见的连接状态

NEW与任何连接无关的,还没开始连接
ESTABLISHED响应请求或者已建立连接的,连接态
RELATED与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与ESTABLISHED 配合使用
INVALID不能被识别属于哪个连接或没有任何状态S(无效的)

禁止转发与正常TCP连接无关的非–syn 请求数据包(如伪造的网络攻击数据包)

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

若只开放本机的web服务(80端口),但发给本机的TCP应答数据包予以放行,其他入站数据包均丢弃,则对应的入站控制规则可以参考以下操作

iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHD -j ACCEPT
iptables -P INPUT DROP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值