linux 防火墙iptables

news2024/11/20 23:31:27

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.coloradmin.cn/o/1038961.html

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

相关文章

C/C++代码静态检测工具PC-Lint常见错误总结

目录 1、PC-Lint 概述 2、PC-lint 常见错误列举 3、PC-Lint报告的语法错误 4、总结 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到…

看文章-做笔记

看文章-做笔记 小蓝本

想要防止视频被盗?用它给视频加水印

随着社交网络的普及&#xff0c;越来越多的人喜欢在网上分享自己制作的视频&#xff0c;但是&#xff0c;共享的视频可能会被其他人传播和滥用。因此&#xff0c;保护自己制作的视频非常重要。 那怎样才能够防止别人盗用自己制作的视频呢&#xff1f;一种简单易行的保护方法是…

printContent 点击打印多页时第一页之前出现白页

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; printContent 点击打印多页时第一页之前出现白页 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; printContent 点击打印多页时第一页之前出现白页 原因分析&#xff1a; 提示&am…

【中阳期货】分析市场数据和制定交易策略代码

当谈到期货与市场分析时&#xff0c;编写代码来分析市场数据和制定交易策略是一种常见的做法。在这篇文章中&#xff0c;我将向您展示如何使用Python编写代码来获取市场数据、进行基本分析以及制定简单的交易策略。我们将使用一些常见的Python库&#xff0c;如Pandas、Matplotl…

前有CAP理论,后有BASE理论,分布式系统理论基石

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

物联网如何改变智能家居技术?

物联网&#xff08;IoT&#xff09;已经在智能家居技术方面产生了深远的影响&#xff0c;其通过将各种设备、传感器和家居设备连接到互联网&#xff0c;实现了智能家居技术的创新和改进。 物联网(IoT)已经在智能家居技术方面产生了深远的影响&#xff0c;其通过将各种设备、传…

【手动实现nn.Linear 】

线性变换参数可视化图 class LinearLayer(nn.Module):def __init__(self, input_dim, output_dim):super(LinearLayer, self).__init__()self.weights nn.Parameter(torch.Tensor(output_dim, input_dim))self.bias nn.Parameter(torch.Tensor(output_dim))# 初始化权重和偏…

codesys自由编码器

1用于位置处理。 2它有个变量&#xff1a; SMC_FreeEncoder.diEncoderPosition 【DINT】 SMC_FreeEncoder_1.diEncoderPosition : GVL.电位器1; SMC_FreeEncoder.diEncoderPosition:hsi_cnt.diCurCountValue; //编码器位置 默认一圈是360.00 给它赋值&#x…

【AI画图】Stable Diffusion WebUI

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

机器学习西瓜书+南瓜书吃瓜教程学习笔记第三章(二)

南瓜书视频链接 以下是我的学习笔记 1、多元线性回归 首先跟着视频推了一遍&#xff0c;真的厉害&#xff0c;很清晰怎么来的 多元线性回归与一元线性回归同理利用最小二乘法求w和b。 这里我们讨论了如何使用线性模型进行回归学习&#xff0c;但若要做的是分类任务呢&#…

dhclient命令 – 动态获取或释放IP地址

参考链接&#xff1a;https://www.linuxcool.com/dhclient # dhclient命令 – 动态获取或释放IP地址 原文链接&#xff1a;https://www.linuxcool.com/dhclient

【计算机操作系统慕课版】第一章课后习题

课后习题目录&#xff1a; 一、简答题 1.在计算机系统上配置OS的目标是什么&#xff1f;作用表现在哪几个方面&#xff1f; 2.试说明OS与硬件、其他系统软件以及用户之间的关系。 3.试说明推动OS发展的主要动力是什么。 4.在OS中&#xff0c;何谓脱机I/O方式和联机I/O方式…

CVE-2023-42442:JumpServer堡垒机会话回放未授权访问漏洞复现

JumpServer堡垒机会话回放未授权访问漏洞&#xff08;CVE-2023-42442&#xff09; 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人…

【系统架构】软件可靠性基础知识

导读&#xff1a;本文整理关于软件可靠性基础知识构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件可靠性…

解决VSCODE 终端中显示中文乱码的问题

这里默认是UTF8 修改为GBK 选择通过编码保存 搜索GBK并选择即可 正常显示

【JVM】类加载子系统——自问自答

1、类加载的过程&#xff1a; java的类加载过程&#xff0c;是把字节码文件(.class file) 转换到JVM中运行时数据区内的过程。 类加载的过程由 类加载器子系统完成(Class Loader). 字节码文件可以像我们日常开发时在特定文件夹路径下的jar包里&#xff0c;也可以从网络中获取…

【RocketMQ】(七)事务实现原理

RocketMQ事务的使用场景 单体架构下的事务 在单体系统的开发过程中&#xff0c;假如某个场景下需要对数据库的多张表进行操作&#xff0c;为了保证数据的一致性&#xff0c;一般会使用事务&#xff0c;将所有的操作全部提交或者在出错的时候全部回滚。以创建订单为例&#xf…

6.5 图的遍历

前言&#xff1a; 主要内容&#xff1a; 这段文字描述的是图的遍历。图的遍历与树的遍历有些相似&#xff0c;都是从某个点开始&#xff0c;按照一定的规则遍历其他的点&#xff0c;但是图的遍历更加复杂&#xff0c;因为图中存在循环和回路&#xff0c;这意味着可能会多次访…

JavaWeb开发-09-MyBatis

官网&#xff1a;https://mybatis.org/mybatis-3/zh/index.html 一.Mybatis入门 1.快速入门 2.JDBC介绍 3.数据库连接池 官方地址&#xff1a;https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter 4.lombok 二.Mybatis基础增删改查 1.准备 2.删除 3.新增…