Linux防火墙--iptables防火墙(四表五链、iptables语法格式与参数、iptables规则示例及实验)

一、iptables概述

1.1 Netfilter与iptables

netfilter是主要的工作模块,位于内核中,在网络层的五个位置(就是防火墙四表五链中的五链)注册了一些函数,用来抓取数据包,将数据包的信息拿出来匹配各个链位置在对应表中的规则:匹配之后,进行相应的处理ACCEPT,DROP等等

  • netfilter
    位于Linux内核中的包过滤功能体系
    称为Linux防火墙的“内核态”
  • iptables
    位于/sbin/iptables,用来管理防火墙规则的工具,称为L inux防火墙的“用户态”

1.2 iptables四表五链

iptables的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理,为了更加方便的组织和管理防火墙规则,iptables采用了表和链的分层结构

其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链

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

iptables表
表名 意义
filter 过滤数据包(filter是默认的表,在使用iptables命令进行配置规则的时候,不特指其他的表就会默认filter)
nat 用来修改数据包的ip地址,端口号等信息
mangle 用来修改数据包的服务类型、生命周期,或者设置mark标记实现流量整形等高级应用
raw 决定数据包是否被状态跟踪机制处理
iptables链
链名 意义
INPUT 当收到访问防火墙本机地址的数据包时,应用此链中的规则
FORWORD 需要防火墙转发数据包时应用此规则链中的规则
OUTPUT 当防火墙本机向外发送数据包时,应用此链中的规则
PREROUTING 在对数据包做路由选择之前,应用此链中的规则
POSTROUTING 在对数据包做路由选择之后,应用此链中的规则

1.2.1iptables表与链的关系

在这里插入图片描述

1.3 数据包过滤匹配流程

1.3.1 规则表之间的顺序

raw–>mangle–>nat–>filter

1.3.2 规则链之间的顺序

入站: PREROUTING–>INPUT
转发: PREROUTING–>FORWORD–>POSTROUTING
出战: OUTPUT–>POSTROUTING

1.3.3 规则链内的匹配顺序

  • 按规则从第一条、第二条的顺序依次进行匹配处理,遵循“匹配即停止”的原则,一旦找到一条匹配规则将不再检查后续的其他规则
  • 如果一直找不到匹配的规则,就按默认规则处理。

二、 iptables语法格式与参数

2.1 语法格式

iptables 【-t 表名】 管理选项{【链名】【匹配条件】 【-j 控制类型】
注意事项:

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

2.2 管理选项

参数 意义 用法
-A 在指定链末尾追加一条 iptables -A INPUT
-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT
-R 修改、替换某一条规则 iptables -t nat -R INPUT
-D 删除 iptables -t nat -D INPUT
-L 列出所有规则条目 iptables -L -t nat
-F 清除所有规则 iptables -F
-P 为指定的链设置默认规则 iptables -P为清空所有默认策略,不是ACCEPT就是DROP
-n 以数字形式显示地址、端口等信息 iptables -L -n’,iptables -nL
-n --line-number 显示规则的序号 iptables -L -n --line-number -t nat

2.3 数据包控制类型

控制类型 含义
ACCEPT 允许通过
DROP 直接丢弃,不给出任何回应
REJECT 拒绝通过,必要时给出提示
LOG 记录日志信息,然后传给下一条规则继续匹配

三、 配置示例

查看规则列表

[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere            
3    INPUT_direct  all  --  anywhere             anywhere            
4    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
5    INPUT_ZONES  all  --  anywhere             anywhere            
6    DROP       all  --  anywhere             anywhere             ctstate INVALID
7    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

允许所有数据包访问自己

[root@localhost ~]# iptables -I INPUT -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere   

允许来自192.168.200.0网段的数据包访问本机

[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.100.0/24 -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  192.168.200.0/24     anywhere            

四、规则的匹配条件

4.1 通用匹配

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

  1. 协议匹配
[root@localhost ~]#iptables-I INPUT -picmp-j DROP
[root@localhost ~]#iptables-AFORWARD! -p icmp-jACCEPT //感叹号”!”表示取反
  1. 地址匹配
    编写 iptables 规则时使用“-s 源地址”或“-d 目标地址”的形式指定,用来检查数据包的源 地址(–source)或目标地址(–destination)。
拒绝192.168.100.200主机的icmp协议
[root@localhost ~]# iptables -I INPUT -s 192.168.100.200 -p icmp -j REJECT
  1. 网络接口匹配
    编写 iptables 规则时使用“-i 接口名”和“-o 接口名”的形式,用于检查数据包从防火墙的 哪一个接口进入或发出,分别对应入站网卡(–in-interface)、出站网卡(–out-interface)。
[root@localhost ~]# iptables -A INPUT -i ens33 -s 192.168.100.0/24 -j DROP

4.2 隐含匹配

以指定的协议匹配作为前提条件,相当于子条件,因此无法独立使用, 其对应的功能由 iptables 在需要时自动(隐含)载入内核。常见的隐含匹配包括端口匹配、 TCP 标记匹配、ICMP 类型匹配。

  1. 端口匹配
    编写 iptables 规则时使用“–sport 源端口”或“–dport 目标端口”的形式,针对的协议为 TCP 或 UDP,用来检查数据包的源端口(–source-port)或目标端口(–destination-port)。
开放22为目标端口
[root@localhost ~]# iptables -I INPUT -p tcp -dport 22 -j ACCEPT
  1. ICMP 类型匹配
    编写 iptables 规则时使用“–icmp-type ICMP 类型”的形式,针对的协议为 ICMP,用来 检查 ICMP 数据包的类型(–icmp-type)。
。ICMP 类型使用字符串或数字代码表示,如 “Echo-Request”(代码为 8)、“Echo-Reply”(代码为 0)、“Destination-Unreachable”(代 码为 3),分别对应 ICMP 协议的请求、回显、目标不可达
[root@localhost ~]#iptables-AINPUT-p icmp --icmp-type 8-j DROP 
[root@localhost ~]#iptables-AINPUT-p icmp --icmp-type 0-jACCEPT 
[root@localhost ~]#iptables-AINPUT-p icmp --icmp-type 3-jACCEPT 

4.3 显式匹配

这种匹配方式要求有额外的内核模块提供支持,必须手动以“-m 模块名称”的形式调用 相应的模块,然后方可设置匹配条件。
常见的显式匹配包括多端口匹配、IP 范围匹配、MAC 地址匹配、状态匹配。

  1. 多端口匹配
允许本机开放 2580110143 端口,以便提供电子邮件服务
[root@localhost ~]#iptables-AINPUT-p tcp-m multiport--dport 25,80,110,143-jACCEPT
  1. IP 范围匹配
  2. 编写 iptables 规则时使用“-m iprange --src-range IP 范围”、“-m iprange --dst-range IP 范围”的形式,用来检查数据包的源地址、目标地址,其中 IP 范围采用“起始地址-结束地址”的形式表示。
禁止转发源 IP 地址位于 192.168.4.21  192.168.4.28 之间的 TCP
数据包
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28-jDROP

  1. MAC 地址匹配
    编写 iptables 规则时使用“-mmac–mac-source MAC 地址”的形式,用来检查数据包的 源 MAC 地址。
根据 MAC 地址封锁主机
[root@localhost ~]#iptables-AINPUT-m mac--mac-source00:0c:29:c0:55:3f -j DROP
  1. 状态匹配
    编写 iptables 规则时使用“-mstate --state 连接状态”的形式,基于 iptables 的状态跟踪 机制用来检查数据包的连接状态(State)。常见的连接状态包括 NEW(与任何连接无关的)、 ESTABLISHED(响应请求或者已建立连接的)和 RELATED(与已有连接有相关性的,如 FTP 数据连接)。
禁止转发与正常 TCP 连接无关的非--syn 请求数据包
[root@localhost ~]#iptables-AFORWARD-m state--stateNEW -p tcp! --syn -j DROP

五、 iptables的应用(SNAT和DNAT)

实验目的

验证SNAT和DNAT是否能实现防火墙功能

实验参数

VMware中三台虚拟机
内网web服务器:192.168.100.100
防火墙:192.168.100.100,12.0.0.1(双网卡)
外网服务器:12.0.0.2(CentOS7.6系统)

实验过程

SNAT防火墙规则

内网ip地址转换为外网ip地址

[root@localhost network-scripts]# vim /etc/sysctl.conf  //设置路由转发功能
net.ipv4.ip_forward=1  //添加路由转发的功能
[root@localhost network-scripts]# sysctl -p   //直接设置启动生效
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -o ens36 -j SNAT --to-source 12.0.0.1

DNAT防火墙规则

外网的IP地址和内网的IP地址做端口映射

[root@localhost network-scripts]# vim /etc/sysctl.conf  //设置路由转发功能
net.ipv4.ip_forward=1  //添加路由转发的功能
[root@localhost network-scripts]# sysctl -p   //直接设置启动生效
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100

外网服务器配置

双网卡的配置在之前已经写过,可以参考之前的博客

yum -y install httpd      ## 安装httpd服务
systemctl restart httpd   ##启动web服务
iptables -F               ##清空防火墙规则
iptables -t nat -F        ##清空防火墙nat规则
iptables -t nat -L        ##查看防火墙nat规则
cat /var/log/httpd/access_log   ##查看日志,看地址转换

内网服务器配置

yum -y install httpd
systemctl restart httpd
iptables -F 
iptables -t nat -F
iptables -t nat -L 
cat /var/log/httpd/access_log

猜你喜欢

转载自blog.csdn.net/kimowinter/article/details/107747252
今日推荐