linux 防火墙iptables

iptables 是 Linux 中比较底层的网络服务,它控制了 Linux 系统中的网络操作,CentOS 中的 firewalld 和 Ubuntu 中的 ufw 都是在 iptables 之上构建的,只为了简化 iptables 的操作。同时,iptables 不仅仅是防火墙这么简单,它基本上能实现你在 linux 上对于网络的所有需求,最常用的就是数据转发、网络地址转换等,例如 LVS 可以利用 Iptables 实现SNAT模式。

1、iptables介绍

1.1)iptables的发展:

iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用;现在又叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。

netfilter是什么?

从ipchains开始,允许在用户空间中定义各种规则,ipchains、iptables是用来定义这些规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter(网络过滤器),它是Linux内核中实现包过滤的内部结构,真正的防火墙。

1.2)iptables工作机制:

这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。

  1. PREROUTING:路由前
  2. INPUT:数据包流入口
  3. FORWARD:转发管卡
  4. OUTPUT:数据包出口
  5. POSTROUTING:路由后

  1. 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。
  3. 本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。
  4. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出。

1.3)规则、表、链:

1)规则(rules):

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

2)链(chains):

每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

说明:除了INPUT、OUTPUT、FORWARD、PREROUTING 以及 POSTROUTING这几个预先设置的chain之外,还可以自定义chain

3)表(tables):

表(tables)提供特定的功能,iptables内置了4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。

  • RAW表:是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING
  • mangle表:主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)等,应用并不广泛。在内核版本2.4.18 后的linux版本中该表包含的链为INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)
  • nat表:主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包)
  • filter表:主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改

规则表之间的优先顺序:Raw>>>>mangle>>>>nat>>>>filter

2、iptables命令

iptables命令的一般格式:iptables [commands] [options]

2.1)commands:

1)规则相关:

  • -P --policy <链名> 定义默认策略
  • --list -L [chain [rulenum]]: 查看chain的规则信息
  • --append -A chain:在指定chain的规则列表最后增加1条规则
  • --insert -I chain [rulenum]:在指定chain的规则列表中,指定位置插入1条规则,默认rulenum位置是1
  • --delete -D chain:在指定chain的规则列表中,删除指定位置或匹配的规则
  • --flush -F [chain]:Delete all rules in chain or all chains

2)chain相关:

  • --new -N chain :Create a new user-defined chain
  • --delete-chain -X [chain] :Delete a user-defined chain
  • -N --new <链名> 创建自定义链
  • -X --delete-chain <链名> 删除自定义链

2.2)options:

  • –-line-number:显示规则的序列号,这个参数在删除或修改规则时会用到
  • -v:verbose mode 详细模式
  • -n:输出数字形式的地址和端口
  • --table -t table:要操作的表,默认是filter表
  • --jump -j target:指定规则的动作(见2.4)
  • --protocol -p proto:指定protocol by number or name, eg. `tcp'
  • --source -s address[/mask][...]:原ip地址设置
  • --destination -d address[/mask][...]:目的ip地址

2.3)其他:

规则中有很多动作,例如:

1)ACCEPT、DROP、LOG:

  • ACCEPT:允许数据包通过
  • DROP:丢弃数据包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

2)REJECT:

拦阻该数据包,并返回数据包通知对方,可以返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。范例如下:

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

3)SNAT:

在路由之后,做源地址转换,局域网中的主机访问外网通常使用该技术。

例如:A--->B--->C (比如我们想要访问百度,淘宝等网站)

 1.企业内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在主机B;

说明:B机:作为NAT转换机,两个网卡都有。IP:172.17.123.224 192.168.199.138,
需要在A机器上添加路由记录,route add default gw 192.168.199.138(B机器的外网ip)

2.B收到后将数据包源地址改为本机公网网卡的ip(源:ipA,目标:ipB),然后经互联网发送给C; 

说明:
需要在B机器上开启转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward
在B机器防火墙的postrouting chain上设置转换源地址策略,  
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

3.C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转发给B;
4.B收到回应包后修改其目的地址,即回应包改为(源:ipC,目标:ipA)然后将数据包转发给A。 

4)DNAT:
在路由之前,做目的地地址转换。当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部。
此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
例如:C--->B--->A (比如对外发布web网站)
1.互联网主机C想访问企业内部的web服务器A,但A的地址是私有地址,无法直接访问。此时,C可以访问防火墙的公网地址,
2.C的请求数据包(源:ipC,目标:ipB)到达防火墙B后,在B的prerouting上将请求数据包的目标地址进行修改,并将数据包(源:ipC,目标:ipA)发送给A。 

说明:在在NAT转换机上:iptables -t nat -I PREROUTING 1 -d 172.17.123.224 -j DNAT --to-destination 192.168.199.142 转换目标地址

3.A收到后进行回复发送响应包(源:ipA,目的ipC)到防火墙,防火墙收到后对数据包源地址进行修改,并将响应包(源:ipB,目标:ipC)给C。

5)REDIRECT:
在路由之后,将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。这个功能可以用来实作透明代理 或用来保护 web 服务器。DNAT和REDIRECT的区别在于,DNAT可以将其数据包发送到除本机以外的其他主机和端口,而REDIRECT则可以将收到的数据包转发到本机的其他端口,所以我理解就是DNAT的策略一般都制定在专门的NAT服务器上,而REDIRECT的策略一般制定在目标主机上当然也可以用来代替DNAT 

iptables -t nat -A PREROUTING -d 192.168.199.143 -p tcp --dport 80 -j REDIRECT --to-ports 8080

6)MASQUERADE:

改写封包来源 IP 为防火墙的 IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

7)RETURN :

结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

8)MARK:

将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:

9)MIRROR:

镜像数据包,也就是将来源 IP 与目的地 IP 对调后,将数据包返回,进行完此处理动作后,将会中断过滤程序。

2.3)示例:

1)查看规则信息:

#查看所有链的规则信息
$iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 19799 packets, 713K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       11  3497 ACCEPT     udp  --  eth1   *       0.0.0.0/0            0.0.0.0/0            udp spt:30010
2     658K   65M ACCEPT     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0            tcp spt:389
3        0     0 ACCEPT     all  --  *      *       172.27.3.212         0.0.0.0/0           
4        0     0 ACCEPT     all  --  *      *       10.53.195.24         0.0.0.0/0           Chain ETH1_TCP (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       21.0.0.0/8           0.0.0.0/0           
2    2966K  163M ACCEPT     all  --  *      *       9.0.0.0/8            0.0.0.0/0           
3     333K   16M ACCEPT     all  --  *      *       10.0.0.0/8           0.0.0.0/0           
4     481K   25M ACCEPT     all  --  *      *       11.0.0.0/8           0.0.0.0/0           
5     9497 1099K ACCEPT     all  --  *      *       30.0.0.0/8           0.0.0.0/0         #查看某一个链的规则信息
$iptables -L ETH1_TCP -nv --line-numbers
Chain ETH1_TCP (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       21.0.0.0/8           0.0.0.0/0           
2    2966K  163M ACCEPT     all  --  *      *       9.0.0.0/8            0.0.0.0/0           
3     333K   16M ACCEPT     all  --  *      *       10.0.0.0/8           0.0.0.0/0           
4     481K   25M ACCEPT     all  --  *      *       11.0.0.0/8           0.0.0.0/0           
5     9497 1099K ACCEPT     all  --  *      *       30.0.0.0/8           0.0.0.0/0  

2)添加规则:

#在INPUT chain上默认的filter表中第一位插入规则,指定原ip地址
iptables -I INPUT 1 -s 21.0.0.0/8 -j ACCEPT
iptables -A INPUT -s 20.0.0.0/8 -j DROP

3)删除规则:

 #在INPUT chain上默认的filter表中删除第4条规则iptables -D INPUT 4

4)其他:

#永久生效
service iptables save
service iptables restart

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO语言从入门到实战-Go语言简介:历史背景、发展现状及语言特性

一、简述Go语言背景和发展 1. 软件开发的新挑战 多核硬件架构超大规模分布式计算集群Web 模式导致的前所未有的开发规模和更新速度 2. Go的三位创始人 Rob Pike Unix 的早期开发者 UTF-8 创始人 Ken Thompson Unix 的创始人 C语言创始人 …

从零学习开发一个RISC-V操作系统(二)丨GCC编译器和ELF格式

本篇文章的内容 一、GCC&#xff08;GUN Compiler Collection&#xff09;1.1 GCC的命令格式1.2 GCC的主要执行步骤1.3 GCC涉及的文件类型 二、ELF简介2.1 ELF文件格式图2.2 ELF文件处理的相关工具2.3 练习 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记&…

【动手学深度学习-Pytorch版】门控循环单元GRU

关于GRU的笔记 支持隐状态的门控&#xff1a;这意味着模型有专门的机制来确定应该何时更新隐状态&#xff0c; 以及应该何时重置隐状态。 这些机制是可学习的&#xff0c;并且能够解决了上面列出的问题。 例如&#xff0c;如果第一个词元非常重要&#xff0c; 模型将学会在第一…

Docker文档阅读笔记-How to Commit Changes to a Docker Image with Examples

介绍 在工作中使用Docker镜像和容器&#xff0c;用得最多的就是如何提交修改过的Docker镜像。当提交修改后&#xff0c;就会在原有的镜像上创建一个新的镜像。 本博文说明如何提交一个新的Docker镜像。 前提 ①有一个可以直接访问服务器的运行终端&#xff1b; ②帐号需要r…

云计算安全:保护数字资产的前沿策略

文章目录 1. 云计算安全威胁1.1 数据泄露1.2 身份认证问题1.3 无法预测的网络攻击1.4 集中攻击 2. 云计算安全最佳实践2.1 身份和访问管理&#xff08;IAM&#xff09;2.2 数据加密2.3 安全审计和监控2.4 多重身份验证&#xff08;MFA&#xff09; 3. 安全自动化3.1 基础设施即…

springboot 获取参数

1.获取简单参数 2.实体对象参数

#倍增 #国旗计划

文章目录 题目&#xff1a;题解代码 题目&#xff1a; 国旗计划 题解 三个技巧&#xff1a; 断环成链&#xff1a; 具体而言就是&#xff1a; if(w[i].R < w[i].L) w[i].R m; m是环的长度&#xff1b; 贪心&#xff1a; 选择一个区间i后&#xff0c;下一个区间只能从左端…

第15篇ESP32 idf框架 wifi联网_WiFi AP模式_手机连接到esp32开发板

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

电子电气架构——无感刷写(Vector)协议栈方案介绍

电子电气架构——无感刷写(Vector)协议栈方案介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 对学习而言,学习之后的思考、思考之后的行动、行动之后的改变更重要,如果不盯住内层的改变量…

BIOMOD2模型、MaxEnt模型物种分布模拟,生物多样性生境模拟,论文写作

①基于R语言BIOMOD2模型的物种分布模拟实践技术应用 针对我国目前已有自然保护区普遍存在保护目标不明确、保护成效低下和保护空缺依然存在等问题&#xff0c;科学的鉴定生物多样性热点保护区域与保护空缺显得刻不容缓。 BIOMOD2提供运行多达10余种物种分布模拟模型&#xff0c…

【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1(HiDataPlus)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

接口测试练习步骤

在接触接口测试过程中补了很多课&#xff0c; 终于有点领悟接口测试的根本&#xff1b; 偶是个实用派&#xff5e;&#xff0c;那么现实中没有用的东西&#xff0c;基本上我都不会有很大的概念&#xff1b; 下面给的是接口测试的统一大步骤&#xff0c;其实就是让我们对接口…

长期用眼不再怕!NineData SQL 窗口支持深色模式

您有没有尝试过被明亮的显示器闪瞎眼的经历&#xff1f; 在夜间或低光环境下&#xff0c;明亮的界面会导致许多用眼健康问题&#xff0c;例如长时间使用导致的眼睛疲劳、干涩和不适感&#xff0c;同时夜间还可能会抑制褪黑素分泌&#xff0c;给您的睡眠质量带来影响。 这些问…

前端性能测试工具-lighthouse

Lighthouse简介 Lighthouse 是 Google 的一款开源工具&#xff0c;它可以作为一个 Chrome 扩展程序运行&#xff0c;或从命令行运行。只需要给 Lighthouse 提供一个要审查的网址&#xff0c;它将针对此页面运行一连串的测试&#xff0c;然后生成一个页面性能的报告。 Lightho…

计算机毕业设计 基于SSM+Vue的医院门诊互联电子病历管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

使用 Docker 安装 Elasticsearch (本地环境 M1 Mac)

Elasticsearchkibana下载安装 docker pull elasticsearch:7.16.2docker run --name es -d -e ES_JAVA_OPTS“-Xms512m -Xmx512m” -e “discovery.typesingle-node” -p 9200:9200 -p 9300:9300 elasticsearch:7.16.2docker pull kibana:7.16.2docker run --name kibana -e EL…

Ubuntu 20.04中docker-compose部署Nightingale

lsb_release -r可以看到操作系统版本是20.04&#xff0c;uname -r可以看到内核版本是5.5.19。 sudo apt install -y docker-compose安装docker-compose。 完成之后如下图&#xff1a; cd /opt/n9e/docker/进入到/opt/n9e/docker/里边。 docker-compose up -d进行部署。 …

华为OD机试 - 最小传输时延 - 深度优先搜索DFS(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明计算源节点1到目的节点5&#xff0c;符合要求的时延集合 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&…

牛客java训练题 day1

9.24 day1 Q 1. this 指针是用来干什么的&#xff1f; 2.基类和派生类分别是指什么&#xff1f; 3.为什么方法中不能写静态变量 4. 解释一下ASCII码和ANSI码和两者的区别 5.简述j ava.io java.sql java.awt java.rmi 分别是什么类型的包 6. 看下面一段代码&#xff1a;…

软考高级+系统架构设计师教程+第二版新版+电子版pdf

注意&#xff01;&#xff01;&#xff01; 系统架构设计师出新版教程啦&#xff0c;2022年11月出版。所以今年下半年是新版第一次考试&#xff0c;不要再复习老版教程了&#xff0c;内容改动挺大的。 【内容简介】系统架构设计师教程&#xff08;第2版&#xff09;作为全国计…