防火墙工具iptables应用详解

news2024/9/20 6:19:22

文章目录

  • 前言
  • 一、Netfilter内核
  • 二、Netfilter与iptables的关系
  • 三、iptables的表与链
  • 四、iptables的常用命令与参数
  • 五、 iptables使用案例


前言

iptables是Linux系统中一款强大的防火墙工具,它基于Netfilter内核模块,允许管理员定义数据包的转发、过滤和NAT(网络地址转换)规则,以保护网络安全,限制网络流量。

一、Netfilter内核

Netfilter是Linux内核中的一个网络包过滤框架,它不是一个单独的模块,而是一个集成在内核中的子系统。它提供了一种钩子机制,允许其他内核模块(如conntrack、nat等)在这些钩子点上注册回调函数,以便在数据包通过时执行特定的操作。

Netfilter的主要功能:

  • 数据包过滤:根据源IP地址、目标IP地址、端口号等条件对数据包进行筛选,允许或拒绝数据包的传输。
  • 网络地址转换(NAT):修改数据包中的源IP地址或目标IP地址,以实现网络地址的映射和隐藏。
  • 数据包修改:修改数据包头部或有效载荷,例如更改TCP/UDP端口号、设置TTL值等。
  • 流量控制:限制特定协议或端口的流量速率,防止网络拥塞和攻击。
  • 负载均衡:将流量分发到多个服务器上,以实现负载均衡和故障转移。

二、Netfilter与iptables的关系

iptables是一个用户空间工具,用于配置和管理Netfilter规则。通过iptables命令,用户可以定义过滤规则、NAT规则和mangle规则等,这些规则会被iptables工具转换为Netfilter可以理解的格式,并注册到相应的钩子点上。
iptables与Netfilter之间的关系可以类比为“用户界面”与“后台处理系统”之间的关系。iptables提供了丰富的命令行接口和配置选项,使得用户可以方便地配置和管理网络规则;而Netfilter则负责在内核中实际执行这些规则,对数据包进行过滤和处理。

三、iptables的表与链

iptables具有四种内建表:Filter、NAT、Mangle、Raw,不同的表含有的链也不同。
在这里插入图片描述

  1. Filter表(默认表):

    • 主要负责过滤功能。
    • 包含的链:INPUT、FORWARD、OUTPUT。
      • INPUT:处理进入本机的数据包。
      • FORWARD:处理经过本机的转发数据包。
      • OUTPUT:处理本机发出的数据包。
  2. NAT表

    • 主要负责网络地址转换功能。
    • 包含的链:PREROUTING、POSTROUTING、OUTPUT。
      • PREROUTING:处理刚到达本机并在路由转发前的数据包。
      • POSTROUTING:处理即将离开本机的数据包。
      • OUTPUT:处理本机产生的数据包。
  3. Mangle表

    • 用于修改数据包的头部信息,如TTL、TOS等。
    • 包含的链:PREROUTING、OUTPUT、FORWARD、INPUT、POSTROUTING。
  4. Raw表

    • 用于控制数据包是否被状态追踪机制处理。
    • 包含的链:PREROUTING、OUTPUT。

四、iptables的常用命令与参数

iptables提供了丰富的命令和选项,用于对防火墙规则进行增删改查、保存和加载等操作。

  1. 添加规则-A):

    • 在指定链的末尾添加一条新的规则。
    • 示例:iptables -A INPUT -p tcp --dport 22 -j ACCEPT(允许TCP端口22的流量通过)。
  2. 删除规则-D):

    • 删除指定链中的某一条规则。
    • 示例:iptables -D INPUT -p tcp --dport 22 -j ACCEPT(删除允许TCP端口22的规则)。
  3. 插入规则-I):

    • 在指定链的指定位置插入一条新的规则,默认在第一行添加。
    • 示例:iptables -I INPUT 1 -p icmp --icmp-type echo-request -j DROP(拒绝所有ICMP回显请求)。
  4. 列出规则-L):

    • -t :表示想要查看那个表,这里查看的是nat表。(iptables的所有命令如果不指定-t,默认是filter表)
    • -L:表示列出该表所有的链和规则
    • -v:详细显示,会将规则匹配的进出网口也列出来
    • –line-numbers :表示给规则进行编号处理,编号能方便我们后续对规则进行修改、删除等操作
    • 示例:iptables -L INPUT(列出INPUT链的所有规则)。
  5. 清空规则-F):

    • 清空指定链中的所有规则。
    • 示例:iptables -F INPUT(清空INPUT链的所有规则)。
  6. 设置默认策略-P):

    • 设置指定链的默认策略。
    • 示例:iptables -P INPUT DROP(将INPUT链的默认策略设置为DROP)。

五、 iptables使用案例

#查看INPUT链的规则,显示行号
iptables -L INPUT --line-numbers
#删除INPUT链的第一条规则,行号从1开始
iptables -D INPUT 1
#拒绝进入防火墙的所有ICMP协议数据包
iptables -A INPUT -p icmp -j REJECT
#允许防火墙转发除ICMP协议以外的所有数据包。使用”!”可以将条件取反
iptables -A FORWARD -p ! icmp -j ACCEPT
#拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据
iptables -A FORWARD -s 192.168.1.10 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
#所有发给目标网口是wlan0 且目标ip是121.18.238.0/29 地址的包,都会被丢弃,不作任何回复
iptables -A OUTPUT -o wlan0 -d 121.18.238.0/29 -j DROP
#拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包,无任何回复
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
#web服务器开启80端口,可接收外部的http请求
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许ping。由于是双向的,所以INPUT链、OUTPUT链都要设置
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
##将本机的对8080端口请求转发至其他主机,主机IP:192.168.0.141,目标主机IP和端口:192.168.0.142:80;
#进入PREROUTING作目标地址转换。由192.168.0.141:8080转为192.168.0.142:80
iptables -t nat -A PREROUTING -d 192.168.0.141/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.142:80
#数据包进入POSTROUTING链,即将离开本机,做源地址转换,由客户端IP转换为192.168.0.141
iptables -t nat -A POSTROUTING -d 192.168.0.142/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.141
#将本机的对80端口请求重定向到8080端口
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
#清空所有iptables规则
iptables -F
#清除iptables nat表规则
iptables -t nat -F
#保存iptables规则
service iptables save

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ中如何防止消息堆积的情况发生?

RabbitMQ中如何防止消息堆积的情况发生? 消息堆积是消息队列系统中常见的问题,尤其是在高负载环境下。RabbitMQ作为一个流行的消息代理系统,也不可避免地会遇到这种情况。为了防止消息堆积,我们可以采取以下几种方法:…

基于node.js中国传统节日介绍网站32006-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,中国传统节日介绍网站当然也不能排除在外。中国传统节日介绍网站是以实际运用为开发背景,运用软件工程原理和…

Ubuntu22.04系统下,图像修复项目CodeFormer的部署——点动科技

Ubuntu22.04系统下,图像修复项目CodeFormer的部署——点动科技 一、前言:二、开始2.1 ubuntu和docker基本环境配置1.更新包列表:2. 安装docker依赖3. 添加docker密钥4.添加阿里云docker软件源5.安装docker6.安装完成docker测试7. docker配置国…

windows11远程桌面如何打开

随着远程办公的普及,选择合适的远程桌面工具变得尤为重要。在Windows 11上,用户可以利用系统自带的远程桌面功能,或选择更专业的第三方解决方案,如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面,并对比Win…

C语言——位运算

一、位运算符和位运算 C语言提供如下表所列出的位运算符: 说明: (1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。 (2)运算量只能是整型或字符型的数据,不能为实型数…

简单的docker学习 第4章 docker容器

第4章 Docker容器 4.1 容器基础 4.1.1 容器启动流程 通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到…

读零信任网络:在不可信网络中构建安全系统10认证身份

1. 用户所知道的信息 1.1. 只有用户本人知道的信息 1.2. 密码 1.2.1. 密码是常用的认证机制 1.2.2. 密码验证就是确认用户“所知”性的较好途径 1.2.3. 用户可以利用密码管理器来便捷地管理多个高强度密码,从而有效降低数据泄露风险 1.2.4. 长度足够长 1.2.4.1…

Docker数据管理,数据卷,容器服务器数据卷

一、容器的数据管理介绍 1.1 Docker容器分层 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到…

GroupMamba实战:使用GroupMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图,完工时间:,延期,机器负载,机器能耗。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &a…

Stack Overflow2024年度调查:76%的程序员正在或计划使用AI工具!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 1. 最受…

零售EDI:OBI欧倍德EDI项目案例

OBI欧倍德公司是德国建材和家居装饰零售连锁店,在德国以及其他欧洲国家拥有众多分店,是欧洲领先的DIY(Do It Yourself)零售商之一。为了更好地处理与全球供应商之间的业务数据往来,OBI采用EDI提高其供应链的自动化水平…

继承(一)

概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

基于Verilog HDL的FPGA开发入门

在电子设计自动化领域,FPGA(现场可编程门阵列)是一种强大的工具,它允许设计者在硬件层面上实现自定义的逻辑电路。Verilog HDL(硬件描述语言)是描述FPGA设计的主要语言之一,以其简洁性和强大的功…

工具收集 - tinytask(相当于迷你的按键精灵)

工具收集 - tinytask(相当于迷你的按键精灵) 简介首页 简介 TinyTask 是一款极简主义的 PC 自动化应用程序,您可以用它来记录和重复操作。顾名思义,它小得令人难以置信(仅 36KB!),极…

调度系统之Oozie

Apache Oozie 是一个工作流调度系统,专门设计用于管理在 Apache Hadoop 平台上运行的工作流。Oozie 提供了丰富的功能,使得大规模数据处理任务的调度和管理变得更加高效和灵活。以下是对 Oozie 的详细介绍: 核心功能 1. 工作流管理 Oozie 允…

营养学基础

目录 一,指标概念 二,中国居民膳食矿物质 三,婴儿奶粉矿物质计算 1,冲奶粉 2,奶粉营养表 3,计算示例 一,指标概念 简单来说,UL是上限,其他3个是推荐值。 RNI的可信…

牛客JS题(二十四)验证是否是身份证

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式一代与二代身份证判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><…

【旧数字组合新数字】有1,2,3,4个数字,求能组成多少个互不相同且无重复数字的三位数,都是多少

有1&#xff0c;2&#xff0c;3&#xff0c;4个数字&#xff0c;求能组成多少个互不相同且无重复数字的三位数&#xff0c;都是多少&#xff0c;使用C语言实现 具体代码&#xff1a; #include<stdio.h>int main(){int i,j,n;for(i1;i<5;i){for(j1;j<5;j){for(n1;…

消灭星星游戏程序设计【连载十】——小星星的残影轨迹

消灭星星游戏程序设计【连载十】——小星星的残影轨迹 大家每次都可以在页面中下载本节内容的实现代码&#xff0c;一步一步从简单开始&#xff0c;逐步完成游戏的各种功能&#xff0c;如果大家有任何问题也欢迎留言交流。 游戏整体效果展示&#xff1a; 1、本节要达到的效果 …