iptables防火墙【☆】

news2024/9/21 18:59:21

  一、防火墙的基础      

        防火墙分为硬件防火墙软件防火墙,硬件防火墙有专门的设备:如国产华为、绿盟等,作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御,在核心业务上再添加软件防火墙提高安全性能。iptables防火墙是Linux系统软件类型防火墙的一种,是centOS7之前版本默认的防火墙,由netfilter和iptables组成。

        netfilter属于内核态的功能体系,是一个内核模块,有多个数据包过滤表组成,其中包含数据包的过滤处理规则集,并根据规则处理IP数据包(raw、mangle、 nat 和 filter 四个规则表,表中所有规则配置后,立即生效无需重启);iptables是属于用户态的管理工具,如同firewalld、ufw,是一个防火墙应用程序,用来实现防火墙规则集的增删改查

1)四表五链

iptables防火墙的四表五链的关系:表中有链,链中有规则。

四表

raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
mangle表修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

五链

INPUT:处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT:处理出站数据包,一般不在此链上做配置。
FORWARD:处理转发数据包,匹配流经本机的数据包(可以理解为一个路由器的功能)。
PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
POSTROUTING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

2)数据包过滤的匹配流程和优先级

规则表之间的顺序:raw ---> mangle ---> nat --->filter

3)链的匹配顺序

入站数据:PREROUTING ---> INPUT  --->本机应用程序

出站数据:本机应用程 ---> OUTPUT ---> POSTROUTING

转发数据:PREROUTING ---> FORWARD---> POSTROUTING

4)规则的匹配顺序

按顺序从上往下依次匹配,匹配到即停止(log策略除外);若没有匹配的规则,则按该链的默认策略处理。

过滤入站数据包:filter表中的INPUT链

过滤出站数据包:filter表中的OUTPUT链

过滤转发数据包:filter表中的FORWARD链

修改内网转发到外网数据包的源IP地址:nat表中的POSTROUTING链

修改外网转发到内网数据包的目的IP地址:nat表中的PREROUTING链

二、使用iptables

1)安装iptables和iptables-service服务

        centOS7默认使用firewalld防火墙,安装Linux系统时选择桌面安装也会安装iptables,想要使用iptables先要永久关闭firewalld,然后安装iptables和iptables-service,可以使用systemctl管理应用服务。

2)iptables命令行配置格式

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

iptables命令-t  指定表名操作选项链名匹配条件

-j 常用控制类

-t filter   或无,默认指定filter

-t nat     指定nat   

-t mangle   指定mangle   

-t raw  指定raw   

增  -A   -I

改  -R  -P

删  -D  -F

查  -L -n -v

INPUT

OUTPUT

FORWARD

PREROUTING

HOSTROUTING

-p 协议

-s  源IP

-d  目的IP

-i  入站网卡接口

-o 出站网卡接口

--dport 目的端口

--sport 源端口

ACCEPT

REJECT

DROP

SNAT

DNAT

3)常用的控制类型

ACCEPT:允许数据包通过;
DROP:拒绝通过,直接丢弃数据包,不给出任何回应信息;


REJECT:拒绝数据包通过,会给数据发送端一个响应信息;


SNAT:修改数据包的源地址;

DNAT:修改数据包的目的地址;
REDIRECT:重定向改变目的端口,将接受的包转发至本机的不同端口;
MASQUERADE:伪装成一个非固定公网IP地址;
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。

4)常用的操作选项

① 增操作

-A :在指定链的末尾追加(--append)一条新的规则

iptables -t 表名 -A 链名 匹配条件 -j 控制类型

-I :在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则

iptables -t 表名 -A 链名 序号 匹配条件 -j 控制类型

想要重新连接需要到服务器端把那条命令删除或替换成放开

② 修改操作

-R :修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容

iptables -t 表名 -R 链名 序号 序号 新规则内容


-P :设置指定链的默认策略(--policy)

iptables -t 表名 -P 链名 ACCEPT/DROP/REJECT

③ 删除操作

-D :删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容

iptables -t 表名 -D 链名 序号/内容


-F :清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链。(慎用)

iptables -t 表名 -F 链名     #如果不指定链名则删除清空所有链的规则

清空规则时需要注意到默认规则有没有指定为drop

④ 查看操作

iptables -t 表名 -L -n -v --line-numbers 链名

iptables -t 表名 -nvL --line-numbers 链名

-L :列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链


-n :使用数字形式(--numeric)显示输出结果,如显示 IP 地址而不是主机名


-v :显示详细信息,包括每条规则的匹配包数量和匹配字节数


--line-numbers:查看规则时,显示规则的序号


⑤ 设置白名单

√ 生产环境中通常使用白名单设置规则

iptables -t 表名 -A 链名 匹配条件 -j ACCEPT     #先配置需要开放的规则1...2...3...

iptables -t 表名 -A 链名 -j DROP #在规则最后设置指定默认为禁止所有

5)规则的匹配条件

① 通用的匹配

-i  指定入站网卡(可以是IP、网段、域名、空即任何地址)

-o 出站网卡接口(可以是IP、网段、域名、空即任何地址)

-p 协议

-s  源IP

-d  目的IP

----------------------------------------------------------------------------------------------------------------------------

② 隐含匹配

隐含匹配必须指定协议

-p tcp/udp --dport 目标端口/扣扣范围

-p tcp/udp --sport 目标端口/扣扣范围

-p icmp --icmp-type 8(请求) / 0 (回显) / 3 (目标不可达)

 iptables -A INPUT ! -p icmp -j ACCEPT     #取反

 --dport 目的端口

--sport 源端口

TCP标志位匹配:--tcp-flags TCP标志位

③ 显示匹配

-m 扩展模块支出类型,包括多端口、mac地址、IP范围、数据包状态等条件

多端口匹配:-m  -multiport --dport 端口号,端口号;端口号

ip地址范围匹配:-m  iprange --src-range 192.168.170.10-192.168.170.20 -j DROP

-m  iprange --dst-range 192.168.170.10-192.168.170.20 -j DROP 根据目标地址禁止访问

-m mac --mac-source 11:22:33:44:55:66 -j DROP         根据mac地址禁止访问

-m state --state RELATED,ESTABLISHED, [,NEW,INVALID]

用于放行本机发出去的数据包返回的应答包进站

6)规则的保存

iptables规则修改后会立即生效,但是重启后会恢复到原始设置。

iptables-save > 文件路径  #保存设置的规则

iptables-save > /etc/sysconfig/iptables   #设置成默认规则

iptables-restore < 文件路径       #导出、或者误删后还原规则    

7)注意事项

不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型和链名使用大写字母,其余均为小写

三、SNAT和DNAT策略配置,tcpdump抓包

1)SNAT策略配置

把从内网 --> 外网的数据的源内网地址转换成公网源地址

1、实验网络规划,环境部署。准备配置一台内网主机IP地址为192.168.237.100;一台网关服务器,准备2个网卡接口,分别连接内网和外网,接内网IP设置为192.168.237.10,接外网IP设置为20.0.0.10;一台外网主机IP地址为20.0.0.100。实验前请先检查镜像、本地yum仓库配置、光盘挂载、防火墙是否关闭,避免影响整体的过程。

2、配置内网客户机

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig 
iptables -nl
iptables -F

3、外网web服务器

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig
yum install -y httpd
systemctl start httpd.service
iptables -nl
iptables -F

4、配置网关服务器

先将虚拟机网络模式与内网客户端与外网客户端区分开,虚拟机网络设置,真机网络设置同步。

网关服务器首先要确保能够进行路由转发,cat /etc/proc/sys/net/ipv4/ip_forwad,值为0则表示关闭,临时开启修改此文件的值为1,sysctl -p立即生效;或者vim /etc/sysctl.conf文件,添加一行配置:永久生效。

添加规则的命令:iptables  -t nat  -A POSTROUTING  -s 内网的源地址/网段  -o 出站网卡  -j SNAT  --to 要转换的公网源地址

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
   --->设置内网卡ip为192.168.237.10
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
   --->复制ens33配置文件修改时需要注意,网卡设备的uuid都是唯一的,需要注释掉,修改文件里的网卡名 
   为ens36,,IP地址修改为20.0.0.10
systemctl restart network
ifconfig
yum install -y iptables-services.x86_64 iptables
systemctl start iptables.service
vim /etc/sysctl.conf 
   ---> 添加net.ipv4.ip_forward=1
sysctl -p
iptables -nL
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.237.0/24 -o ens36 -j SNAT --to 20.0.0.100
iptables -t nat -nL --line-numbers 
ping 192.168.237.100
ping 20.0.0.100

5、内网ping命令验证能否联通外网即可

6、tcpdump抓包查看验证SNAT策略的整个过程

tcp开启监听icmp协议,从内网192.168.237.100 ping web服务端20.0.0.100,ping10个包,tcpdump抓包看看

#借助远程终端连接外网web端,开启监听抓包
tcpdump -i ens33 -s 0 -w ./test1.cap    #指定监听的网卡,保存抓包的文件为test1.cap

#内网客户端
ping -c 10 20.0.0.100

#外网web端退出监听,保存文件到本地
ctrl c 
sz test1.cap 

2)DNAT策略

将外网 -->  内网的数据包的目的地址有公网IP转换 端口 转换成内网IP 端口 
iptables  -t nat  -A PREROUTING   -i 入站网卡  -d 原公网目的地址  -p 协议 --dport 原目的端口  -j DNAT  --to 要转换的内网目的地址:端口

3)补充tcpdump抓包工具用法

监听特定网卡 tcpdump -i ens32

监听特定主机 tcpdump host 192.168.170.10

监听特定主机名来源的数据包 tcpdump src host hostname

监听特定主机名为目标的数据包 tcpdump dst host hostname

监听特定主机名所有的数据包 tcpdump host hostname

监听特定端口 tcpdump port XX

监听指定协议TCP/UDP  tcpdump tcp/udp/icmp

监听来源主机XX在端口XX上的TCP/UDP数据包  tcpdump tcp port 22 and src host 12.0.0.10

监听特定主机之间的通信  tcpdump ip host 192.168.117.10 and 210.10.10.10

抓包文件的保存 tcp 协议  port 端口 [src/dst]  net 网段     -i 网卡  -s 0  -w XXX.cap; sz test1.cap(这一步只能在远程终端实现)

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

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

相关文章

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…

国产操作系统上使用SQLynx连接数据库 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上使用SQLynx连接数据库 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在国产操作系统上使用SQLynx。这是一款功能强大的数据库管理工具&#xff0c;可以帮助用户高效地管理和操作数据库。本文将详细介绍…

《网关微服务技术架构:构建高效可扩展的服务网关》

随着微服务架构的流行&#xff0c;网关微服务作为微服务架构中的重要组成部分&#xff0c;扮演着连接客户端与后端微服务的关键角色。本文将深入探讨网关微服务的技术架构设计与实现&#xff0c;以及如何构建高效可扩展的服务网关。 ### 1. 网关微服务的作用与意义 网关微服务…

【Power Compiler手册】2.Power Compiler设计流程

当创建设计时,它从高层次的抽象转移到门级最终实现。功耗编译器工具在整个设计周期中,从RTL到门级,提供分析和优化。 有关设计流程的信息,请参见以下主题: • 设计周期中的功耗 • 功耗优化和分析流程 设计周期中的功耗 在每个抽象层次上,使用仿真、分析和优化来完善…

GMSL图像采集卡,适用于无人车、自动驾驶、自主机器、数据采集等场景,支持定制

基于各种 系列二代 G MS L 图像采集卡&#xff08;以下简称 二代图像采集卡&#xff09;是一款自主研发的一款基于 F P G A 的高速图像产品&#xff0c;二代图像采集卡相比一代卡&#xff0c;由于采用PCIe G en 3 技术&#xff0c;速度和带宽都相应的有了成 倍的提高。该图像…

递归的例子

例1&#xff1a;阶乘函数 #include<iostream> using namespace std; int f(int n) {if(n0)return 1;elsereturn f(n-1)*n; } int main() {int n;cin>>n;cout<<f(n);return 0; }例2&#xff1a;Fibonacci数列 无穷数列1&#xff0c;1&#xff0c;2&#xff0…

微服务:eureka的搭建,以及服务注册、服务发现、负载均衡

eureka 搭建 新建一个Module,maven项目&#xff0c;导入依赖。 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><…

Day 59 503.下一个更大元素Ⅱ 42.接雨水

下一个更大元素Ⅱ 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这意味着你应该循环…

JVM学习-动态链接和方法返回地址

动态链接–指向运行时常量池的方法引用 每一个栈帧内部包含一个指向运行时常量池中该栈帧所属方法的引用&#xff0c;包含这个引用的目的为了支持当前方法的代码能够实现动态链接(Dynamic Linking)&#xff0c;如invokednamic指令。在Java源文件被编译到字节码文件中时&#x…

【字典树(前缀树) 位运算】1803. 统计异或值在范围内的数对有多少

本文涉及知识点 字典树&#xff08;前缀树&#xff09; 位运算 LeetCode1803. 统计异或值在范围内的数对有多少 给你一个整数数组 nums &#xff08;下标 从 0 开始 计数&#xff09;以及两个整数&#xff1a;low 和 high &#xff0c;请返回 漂亮数对 的数目。 漂亮数对 是…

运维出现的问题 --集成

运维出现的问题 集成 macos 本地打的镜像&#xff0c;推到线上出现 images platform (linux/arm64) does not match the detected解决办法 macos 本地打的镜像&#xff0c;推到线上出现 image’s platform (linux/arm64) does not match the detected WARNING: The requested …

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具 抖音视频去水印保存部分源码&#xff1a; 通过使用Python中的requests、re和os等库&#xff0c;可以编写如下代码来实现抖音视频去水印保存的功能。 短视频爬虫提取手机下载工具的使用方法&#xff1a; 该工具主…

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-19讲 串口实验UART

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

跟着Kimi学习结构化提示词:19套内置提示词都在这里了!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

Android Studio 版本升级后 Gradle project sync failed(Android V 应用升级)

问题及解决方案 更新到蜥蜴 Android Studio Iguana 后&#xff0c;出现Gradle project sync failed的问题&#xff08;IDE更新版本的常态了&#xff09;。 背景&#xff1a;对应用进行Android V版本升级&#xff08;SDK35&#xff0c;gradle插件版本要 8.4.0&#xff09; 1、…

cn.hutool.poi.excel 实现excel导出效果 首行高度,行样式,颜色,合并单元格,例子样式

需求 接了需求&#xff0c;下载excel模版&#xff0c;本来看着还是简单的&#xff0c;然后实现起来一把泪&#xff0c;首先是使用poi&#xff0c;我查了好久&#xff0c;才实现&#xff0c;然后是我用easyexcel又实现了一遍&#xff0c;用了一个周多才实现。 这是需求&#x…

Linux|ubuntu22.04安装CUDA最新完整教程

文章目录 一、安装前准备工作查看GPU和型号查看GCC版本*下载gcc12 *检查驱动 二、安装CUDA Toolkit*安装驱动 三、安装后的工作必要操作推荐的操作开启守护进程模式删除本地下载安装包 四、验证删除CUDA常见问题及解决方案还需要安装cuDNN吗&#xff1f;nvcc: No such file or …

GitKraken克隆Git仓库

克隆Git仓库 修改本地仓库 在此新增了一个test.txt文件 GitKraken提醒有一处改变 暂存&#xff08;Stage&#xff09;该文件&#xff0c;添加描述后提交修改&#xff1a; 修改成功&#xff1a;

【数据结构】【C语言】堆~动画超详细解读!

目录 1 什么是堆1.1 堆的逻辑结构和物理结构1.2 堆的访问1.3 堆为什么物理结构上要用数组?1.4 堆数据上的特点 2 堆的实现2.1 堆类型定义2.2 需要实现的接口2.3 初始化堆2.4 销毁堆2.5 堆判空2.6 交换函数2.7 向上调整(小堆)2.8 向下调整(小堆)2.9 堆插入2.10 堆删除2.11 //堆…