linux防火墙过滤技术iptables的原理及操作命令详解
gudong366 2025-06-07 15:42 9 浏览
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:网络地址转换(Network Address Translate),数据包内容修改以及数据包过滤的防火墙功能!
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架!
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,一般Linux系统是默认自带启动的。
查看是否启动:sysctl -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载!
iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
iptables传输数据包的过程
当我们启用了防火墙功能时,报文需要经过如下关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。也就是说,根据实际情况的不同,报文经过"链"可能不同。
所以,根据上图,我们能够想象出某些常用场景中,报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING
链(chains)
我们知道,防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链",每个经过这个"关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。
5种链的说明如下:
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARDING:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTHING:发送到网卡接口之前
表(tables)
每个"链"上都放置了一串规则,但是这些规则有些很相似,我们把实现相同功能的规则放在一起;我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理。
iptables已经为我们定义了4个表: filter表、nat表、mangle表和raw表:每个表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围。
filter表:负责过滤功能,防火墙; 内核模块:iptables_filter
nat表:network address translation,网络地址转换功能; 内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装的功能; 内核模块: iptable_mangle
raw表:关闭nat表上启用的连接追踪机制; 内核模块:iptable_raw
表链关系
某些"链"中注定不会包含"某类规则",让我们看看每个"链"上的规则都存在于哪些"表"中:
PREROUTING链 的规则可以存在于:raw表,mangle表,nat表。
INPUT 链的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD链 的规则可以存在于:mangle表,filter表。
OUTPUT链 的规则可以存在于:raw表,mangle表,nat表,filter表。
POSTOUTING链 的规则可以存在于:mangle表,nat表。
但是,我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables,是因为从"关卡"的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,我们还要将各"表"与"链"的关系罗列出来:
表(功能)<--> 链(钩子):
filter表<-->三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
Nat表<-->三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
Mangle表<-->五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块
Raw表<-->两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理
iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下
优先级次序(由高而低):raw --> mangle --> nat --> filter
iptables操作
查看filter的详细规则:filter表<-->三个链:INPUT、FORWARD、OUTPUT
————————————————
[root@xing Desktop]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
注:OUTPUT 出站链
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED(三次握手状态)
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22(目标端口22)
2 318 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited(默认拒绝所有)
———————
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
注:FORWARD转发规则链(当源IP地址以及目标IP地址都不是本机的时候使用的规则)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
———————
Chain OUTPUT (policy ACCEPT 4 packets, 240 bytes)
注:OUTPUT 出站链
pkts bytes target prot opt in out source destination
————————————————
iptables的基本语法格式
iptables [-t 表名] 命令选项 [链名] [匹配条件] [-j 控制类型]
iptables 【-t filter】 -I 【INPUT】 【-p tcp --dport 80】 【-j ACCEPT】
命令选项:
————
添加新的规则
- -A 在链的末尾追加一条规则
- -I 在链的开头(或指定序号)插入一条规则
————
查看规则列表
- -L 列出所有规则条目
- -n 数字的形式显示地址、端口信息
- -v 以更详细的方式显示规则信息
- --line-number 查看规则时,显示规则的序号
[root@xing Desktop]# iptables -t filter -nvL --line-number
————
删除、清空规则
- -D 删除链内指定序号(或内容)的一条规则
- -F 清空所有的规则
[root@xing Desktop]# iptables -D FORWARD 2
[root@xing Desktop]# iptables -F(清空所有规则)
[root@xing Desktop]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
————
设置默认策略
-P :设置默认策略的(默认策略一般只有两种。默认是关的/默认是开的)
iptables -P INPUT (DROP|ACCEPT)
[root@xing Desktop]# iptables -P FORWARD DROP
———————
控制类型
ACCEPT 允许通过
DOROP 直接丢弃,不给出任何提示
REJECT 拒绝通过,必要时给出提示
LOG 记录日志信息,然后传给下一条规则继续匹配
———————
匹配条件【参数】
通用匹配:
协议匹配 -p [协议名]
地址匹配 -s [源地址] -d [目的地址]
接口匹配 -i [入站网卡] 、-o [出站网卡]
隐含匹配(需配合通用匹配一起使用):
端口匹配 --sport [源端口]、--dport [目的端口]
TCP标记端口 --tcp-flags [检查范围] [被设置的标记]
ICMP类型匹配 --icmp-type [ICMP类型]
常见的显示匹配条件
多端口匹配 -m multiport -- sport [源端口列表]、-m multiport -- sport [目的端口列表]
IP范围匹配 -m iprange --src-range [IP范围]
MAC地址匹配 -m mac --mac-source [MAC地址]
———————
注意事项:
不指定表名时,默认指向filter表
不指定链名时,默认表内所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
————————————————
[root@xing Desktop]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
注:命令严格区分大小写
———————
辅助命令:watch(可以帮你监测一个命令的运行结果)
格式:watch (选项) (参数)
选项
-n:指定指令执行的间隔时间(秒);
-d:高亮显示指令输出信息不同之处;
-t:不显示标题。
参数
指令:需要周期性执行的指令。
watch -n1 iptables -t filter -nvL
————————————————
规则备份与还原
iptables-save工具:可结合重定向输出保存到指定文件
将当前状态保存到一个桌面的文件中
[root@xing Desktop]# iptables-save > /root/Desktop/ipt.txt
将备份规则文件导入:
[root@xing Desktop]# iptables-restore < /root/Desktop/ipt.txt
将当前状态保存为默认规则
[root@xing Desktop]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
恢复到默认规则
[root@xing Desktop]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
————————————————
[root@xing Desktop]# iptables -t nat -nvL --line-number
[root@xing Desktop]# iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 172.168.1.0/24 -j SNAT --to-source 12.34.56.89
[root@xing Desktop]# iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 172.168.1.0/24 -j MASQUERADE
相关推荐
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
-
不会Linux的程序员不是好程序员,不会shell编程就不能说自己会Linux。shell作为Unix第一个脚本语言,结合了延展性和高效的优点,保持独有的编程特色,并不断地优化,使得它能与其他脚本语言...
- 小白7天掌握Shell编程:脚本的创建和执行
-
一、课前声明1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络攻防干货!二、知识点详解Shell脚本的格式要求:脚本要以!#/bin/bash开头,其中bash可以替换...
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
-
飞牛NAS本身就是Linux内核(Debian发行版),那为何还要安装一个Linux呢?因为飞牛的Linux是特殊版本,并不能运行PC端的带UI的程序,比如我需要登录微信,需要使用wps打字……,这是...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
- Apple尝试使用轻量级Linux虚拟机实现容器化
-
Apple于本周一发布了一个开源的容器化框架,用于在Mac上创建和运行Linux容器镜像。软件容器将应用程序及其依赖项组合成一个单元,在主机上运行于隔离环境中。由于它们基于符合OCI标准...
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
-
在享受容器带来的轻量与灵活的同时,我们也必须面对一个现实问题:安全隐患。容器并不是天然安全,错误配置甚至可能让攻击者“越狱”入侵主机!本篇将带你从多个层面强化Docker的安全防护,构建真正可放心...
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
-
5.1了解firewall防火墙基础概念与原理5.1.1Linux防火墙概述在网络安全领域,防火墙是保障网络安全的关键屏障,Linux系统中的firewall防火墙(firewalld服...
- 从零开始搭建 Linux PXE 无盘启动服务器
-
在企业环境或实验室中,PXE(PrebootExecutionEnvironment,无盘启动)被广泛用于大规模批量部署操作系统。通过PXE,无需U盘或CD,就能远程启动和安装Linux...
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
-
Fedora42正式发布FedoraLinux42现已正式发布!此版本基于最新的Linux内核6.14构建,带来了众多激动人心的新特性和改进,旨在提供更现代化、更强大、更易用的Li...
- Linux Kernel学习003——内核源码
-
Linux学习笔记:老版本内核的坑,新工具救场,代码门道藏着啥秘密.最近想学Linux内核,网上查资料发现现在的稳定版本都已经到5.x了,但我跟着教程选的是2.6.34。官网下载链接卡着老卡,后来用清...
- Linux:实现Hadoop集群Master无密码登录
-
以下所介绍的安装方式都是在线安装方式,如果你需要连网请参考:Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案环境:OS:LinuxUbuntu1...
- 除了Win10,微软还发布了一套“专业版Linux”系统
-
IT之家讯9月21消息,不知道大家是否还记得,微软CEO纳德拉曾在去年的一次活动中公开宣称“微软爱Linux”,其实那个时候的微软就已经在服务器方面拥抱Linux了。而最近,除了最新Windows1...
- Linux系统匿名上网小技巧(linux匿名文件)
-
Tails可以做什么+优点Tails所有数据连接通过Tor网络传输,可以为个人用户提供最好的匿名性和安全性,并且它是一个Linux系统,不会感染Windows系统的病毒,它可以存储在闪存盘上运行。-...
- Linux环境中DeepSeek AI大模型使用与管理之七:安装Cherry Studio
-
简介:在Linux系统中成功通过Ollama部署DeepSeek-R1大模型后,用户通常需要一个直观且易于操作的客户端来访问和交互。为了满足这一需求,本文将详细介绍如何在Linux环境中安装和配置Ch...
- Linux系统部署Go编程环境(一)使用Go语言编写简单web服务器
-
摘要:Go语言是一个开源的编程语言,Go语言被称为“互联网时代的C语言”。Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有for一种表示...
- 一周热门
- 最近发表
-
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
- 小白7天掌握Shell编程:脚本的创建和执行
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
- 如何在 Linux 中使用 Sysctl 命令?
- Apple尝试使用轻量级Linux虚拟机实现容器化
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
- 从零开始搭建 Linux PXE 无盘启动服务器
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
- Linux Kernel学习003——内核源码
- 标签列表
-
- linux一键安装 (31)
- linux运行java (33)
- ln linux (27)
- linux 磁盘管理 (31)
- linux 内核升级 (30)
- linux 运行python (28)
- linux 备份文件 (30)
- linux 网络测试 (30)
- linux 网关配置 (31)
- linux jre (32)
- linux 杀毒软件 (32)
- linux语法 (33)
- linux博客 (33)
- linux 压缩目录 (37)
- linux 查看任务 (32)
- 制作linux启动u盘 (35)
- linux 查看存储 (29)
- linux乌班图 (31)
- linux挂载镜像 (31)
- linux 软件源 (28)
- linux题目 (30)
- linux 定时脚本 (30)
- linux 网站搭建 (28)
- linux 远程控制 (34)
- linux bind (31)