目录
- Iptables之实操
- 简介
- 名称概念:
- 四表中常用的表
- Nat表
- Filter
- iptables表和链的工作流程图
- iptables过滤图
- Iptables安装
- Iptables 命令说明
- Iptables常用命令
- Iptables常用语法
- 常见案例
- 模块
- multiport模块
- iprange模块
- string模块
- time模块
- icmp模块
- connlimit模块
- limit模块
- 补充知识:
- 查看centos版本
- 查看本机端口占用的命令:
- iptables脚本设置
- 补充案例
- 易错点
- 简介
Iptables之实操
简介
Netfilter/Iptables (以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好(本人曾经在赛扬500HZ cpu 64M内存的情况部署网关防火墙)提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙) Iptables是linux 2.4及2.6内核中集成的服务。其功能与安全性比其老一辈Ipfwadn,ipchains强大的多,Iptables主要工作在OSI七层的二、三四层,如果重新编译内核,Iptables也可以支持7层控制(squid 代理 iptables)。
名称概念:
- 容器:包含或者说属于的关系
- Netfilter/Iptables是表(四表)的容器
- 四表
- filter:过滤数据包
- nat:用于网络地址转换(IP、端口)
- mangle:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- raw表:决定数据包是否被状态跟踪机制处理
- 前三个常用
- IP tables的表又是链(五链)的容器
- INPUT链:过滤进入主机的数据包
- OUTPUT链:处理从主机发出去的数据包
- FORWARD链:负责转发流经主机的数据包,起转发的作用,和Nat表关系很大
- PREROUTING链:主机外报文进入位置,所有的数据包进来的时侯都先由这个链处理
- POSTROUTING链:报文经过路由被转发出去,所有的数据包出来的时侯都先由这个链处理
- 注意链名大写
- 链(chains)是规则的容器
- 规则(policy):一条条过滤的语句
注意:对于filter表的控制是我们实现本机防火墙功能的重要手段,特别是对INPUT链的控制
四表中常用的表
Nat表
负责网络地址转换,即来源与目的ip地址和port的转换。应用:和主机本身无关。一般用于局域网共享上网或者特殊的端口转换服务相关 NAT功能一般企业工作场景: 1))用于做企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)2)做内部外部P地址一对一映射(dmz),硬件防火墙映射I到内部服务器,ftp服务。(PREROUTING). 3 ) web,单个端口的映射,直接映射80端口(PREROUTING)。 这个表定义了三个链(Chains),nat 功能就相当于网络的 acl控制。和网络交换机 acl类似
表相关的链
- OUTPUT:和主机发出去的数据包相关
- INPUT:和进入主机的数据包相关
- PREROUTING:数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址,端口等,(通俗比喻,就是收信时,根据规则重写收件人的地址,这看上去很不地道啊!哈哈。)例如:把公网IP:124.42.60.113映射到局域网的10.0.0.19服务器上。如果是web服务,可以把80转为局域网的服务器上9000端口。
- POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包的源地址、源端口等,(通俗比喻,就是寄信时,写好发件人的地址,要让人家回信时能够有地址可回。) ,例如:我们现在的笔记本和虚拟机都是10.0.0.0/24,就是出网的时候被我们企业路由器把源地址改成了公网地址了。生产应用:局域网共享上网。
Filter表
强调:主要和主机自身有关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)。filter表是iptables 默认使用的表。这个表定义了三个链(Chains):.企业工作场景:主机防火墙。
表相关的链
INPUT
:负责过滤所有目标地址是本机地址的数据包。通俗的讲,就是过滤进入主机的数据包- FORWARD:负载流经主机的数据包,作用是转发的功能,和nat表关系很大
- OUTPUT:负责处理从主机发出去的数据包
代码语言:javascript复制Iptables过程(写这助理解)
流入本机:PREROUTING --> INPUT --> PROCESS(进程)
经过本机:PREROUTING --> FORWARD --> POSTROUTING
从本机流出:PROCESS(进程) --> OUTPUT --> POSTROUTING
iptables表和链的工作流程图
iptables过滤图
代码语言:javascript复制iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。
* 防火墙是层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的
* 如果匹配上规则,即明确表明是阻止还是通过,数据包就不再向下匹配新规则了
* 如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配直到匹配默认规则得到明确的阻止还是通过
* 防火墙默认规则是对应链的所有的规则执行完才会执行的
* Iptalbes防火墙规则的执行顺序默认从前到后(从上到下)依次执行,遇到匹配的规则就不在继续向下检查,只有遇到不匹配的规则才会继续向下进行匹配。
# 注意 :拒绝规则DROP如果写在最上层,下面的规则都将不匹配执行,所以插入新的规则可以用-I参数插到最上层
Iptables安装
- 查看是否安装了iptables:systemctl status iptables
- 安装iptables:yum install iptables* -y
- 启动iptables:systemctl start iptables
- 关闭防火墙: systemctl disable --now firewalld
- 关闭selinux:vim /etc/selinux/config
Iptables 命令说明
格式:iptables [-t 表名] [参数 链名] [参数 协议] [参数 端口] [参数 动作]
参数表如下:
参数符号 | 说明 |
---|---|
-t | 指定操作的表 |
-L | 列出当前的规则 |
-v | 显示数据包和数据包大小 |
-n | 不反解地址 |
-A | 追加一条规则到链中 |
-I | 插入一条规则,插入到顶部 |
-F | 清空 |
-Z | 清空计数器(包数量 、包大小) |
-D | 删除链中的规则 |
-R | 修改规则 |
-S | 列出所有的规则 |
-N | 创建一个自定义链 |
-X | 删除一个自定义链 |
-P | 指定链的默认策略 |
iptables使用协议表如下:
条件/协议名 | 说明 |
---|---|
TCP | 按TCP协议匹配,http归属到TCP中 |
UDP | 按UDP协议匹配 |
ICMP | 按ICMP协议匹配,类似ping |
ALL | 所有协议都可以 |