iptables安全技术和防火墙

通信五元素

源ip和目标ip 源端口和目标端口 协议

通信四元素

源ip和目标ip 源端口和目标端口

iptables表链结构

Netfilter

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

Netfilter是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。

Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。

Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。
 

netfilter/iptables关系

netfilter:属于“内核态”又称内核空间的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables :属于“用户态”的防火墙管理体系。
是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。

netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。

表中所有规则配置后,立即生效,不需要重启服务。


iptables的四表五链结构介绍

iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)

规则链

规则作用:对数据包进行过滤处理

​ 规则表作用:容纳各种规则链

​ 链作用:容纳各种防火墙规则

​ 链分类依据:处理数据包不同时机

默认五种规则链

 INPUT:处理入栈数据包

​ OUTPUT:处理出栈数据包

​ FORWARD:处理转发数据包

​ POATROUTING链:在进行路由选择后处理数据包

​ PREROUTING链:在进行路由选择前处理数据包

表作用:容纳各种规则链

表划分依据:防火墙规则相似

默认包括四个规则表
raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包中源目标IP地址或端口

filter表:确定是否放行该数据包(过滤)(ip地址,端口协议)

按照顺序,依次查当前表中链,看链中是否有匹配规则,匹配到立即停止,找不到使用链默认策略处理

入栈:PREROUTING---------->INPUT

出栈:OUTPUT----------------->POSTROUTING

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

规则链内匹配顺序

按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配规则,则按该链默认策略处理
1.按照顺序查
raw表------->mangle表--------->nat表--------->filter表(input让不让数据进来,进不来丢弃)-------->路由转发(不允许转发,直接丢弃)--------->一般不会对数据限制------->r m n f-------->nat(对数据进行地址转换)--------->出去,送达
nat PREROUTING:目的地址转换,把公网IP换成内网IP(外网访问内网)
nat POSTROUTING:源地址转换,把内网地址转换成公网(内网转成公网地址才能上网
 

总结

四表五链

规则表的作用:容纳各种规则链
规则链的作用:容纳各种防火墙规则
总结:表里有链,链里有规则

内核中数据包的传输过程
1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。

2. 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。
数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达

3. 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程 httpd服务-目的转换-httpd
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING  httpd服务-out-源地址
转发:PREROUTING --> FORWARD --> POSTROUTING  -----FOR------

nat PREROUTING   目的地址转换,要把别人的公网IP换成你们内部的IP
nat POSTROUTING  源地址转换,要把你的内网地址转换成公网地址才能上网,一般用于对外发布内网的服务


规则内的匹配顺序
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)
 

iptables

iptables 安装
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。

1.关闭firewalld防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

2.安装iptables 防火墙

yum -y install iptables iptables-services

3.设置iptables开机启动

systemctl start iptables.service

systemctl enable iptables.service

4.iptables防火墙的配置方法:
1、使用iptables命令行。
2、使用system-config-firewall; centso7不能使用 centos 6可以使用
 

iptables的命令格式

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

-t:如果不指定  默认是filter
表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;

管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
 

注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链,一般不这么操作
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
 

数据包的常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。
在 iptables 防火墙体系中,最常用的几种控制类型如下
ACCEPT:允许数据包通过。 
DROP:  直接丢弃数据包,不给出任何回 应信息。 
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
SNAT:    修改数据包的源地址
DNAT:    修改数据包的本地地址 
LOG:   在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。

 iptables 命令的常用管理选项
管理选项         用法示例                                                     

 -A             在指定链末尾追加一条    iptables -A INPUT (操作)           
 -I             在指定链中插入一条新的,未指定序号默认作为第一条    iptables -I INPUT  (操作) 
 -P             指定默认规则    iptables -P  OUTPUT ACCEPT   (操作)        
 -D             删除    iptables -t nat -D INPUT   2 (操作)                                                                   
 -R             修改、替换某一条规则    iptables -t nat -R INPUT    (操作) 
 -L             查看    iptables -t nat -L (查看)                          
 -n             所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议                     端口号而不是服务名)    iptables -L -n,iptables -nL,iptables -vnL (查看) |
 -v             查看时显示更详细信息,常跟-L一起使用    (查看)             
 --line-numbers  规则带编号    iptables -t nat -L -n --line-number  iptables -t nat -L --line-number
 -F             清除链中所有规则    iptables -F   (操作)                   
 -X             清空自定义链的规则,不影响其他链      iptables -X            
 -Z             清空链的计数器(匹配到的数据包的大小和总和)iptables -Z      
 -S             看链的所有规则或者某个链的规则/某个具体规则后面跟编号

匹配的条件                   作用
-p                 指定要匹配的数据包的协议类型
-s                 指定要匹配的数据包的源IP地址
-d                 指定要匹配的数据包的目的IP地址
-i                 指定数据包进入本机的网络接口
-o                 指定数据包离开本机做使用的网络接口
--sport             指定源端口号
--dport             指定目的端口号

添加规则 
添加规则的两个常用选项:
-A,在末尾追加规则。
-I,在指定位置前插入规则。如果不指定,则在首行插入
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。

iptables -F #清空规则

iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主机ping本机

iptables -t filter -A INPUT -p icmp -j ACCEPT #允许ping通,-A在前一条规则后添加

iptables -t filter -I INPUT 1 -p icmp -j ACCEPT #指定序号插入,插入到第一条

iptables -t filter -A INPUT -p tcp -j REJECT   #允许任何主机tcp

iptables -I INPUT 1 -p udp -j ACCEPT        #允许任何主机udp

iptables  -nL  --line-number  #查看行规则的位置

iptables -t filter -A INPUT -s 192.168.233.22 -p icmp -j REJECT#拒绝某一台主机,其他的可以

iptables -t filter -A INPUT -s 192.168.233.22,192.168.233.23 -p icmp -j REJECT#拒绝多台主机

iptables -t filter -A OUTPUT -s 192.168.233.21 -p icmp -j REJECT#不允许21的数据包出去,其他的就都ping不通了

iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT#指定端口

iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 22 -j REJECT#指定IP地址的服务端口拒绝

iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 80 -j REJECT#禁止192.168.233.22:80的端口入访问

删除规则
D删除  :
1.根据序号删除内容
 iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则

2、内容匹配删除(有两个

相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的

注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。
直到删除最后一条时,才能将该规则全部清除 。
一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。
 

修改规则
-R 直接修改

iptables -R INPUT 1 -p icmp -j REJECT#原本的ACCEPT替换成了REJECT

修改默认规则
默认策略是指四表五链中链的默认策略,INPUT,FORWARD,OUTPUT,filter三条链的默认值为ACCEPT
就像是设定黑名单一样,默认其他的协议操作都是允许的,只有指定加入的且声明权限的为(DROP 或 REJECT)是拒绝禁止的对象。

iptables -P INPUT DROP 

注意:

1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决

此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可

第二种:操作服务器,重启iptables服务 

第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!

在生产中都是默认DROP

通用匹配
网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡  
感叹号”!”表示取反

网络协议

iptables -A INPUT ! -p icmp -j ACCEPT  #除了icmp以外,所有的协议都可以进入

IP地址

iptables -A INPUT -s 192.168.233.22 -j DROP   #禁止22的数据进入

使整个网段不能用指定的端口

iptables -t filter -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口

显示匹配
多端口匹配
要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表


iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT#多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则

iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP#多端口匹配,一次性放通多个udp网络协议的端口匹配规则

IP范围匹配
-m iprange --src-range  源IP范围
-m iprange --dst-range  目的IP范围
iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT#禁止网段内的ip地址ping主机

MAC匹配
-m mac --mac-source MAC地址
iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP

备份与还原
我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,所有的设置都会清空且还原为原本的设置。
为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原

备份iptables设置
格式:iptables-save >/指定的文件 

iptables-save >/opt/iptables.bak#备份到指定文件

iptables-restore </opt/iptables.bak #一键导入,设置为当前防火墙设置 

SNAT和DNAT
SNAT又称源地址转换。
源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址
(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,
即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。

就是把内网地址转成指定的IP地址,这个iP地址可以访问公网

DNAT:目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。
通常来说,合法地址的数量比起本地内部的地址数量来要少得多。

私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问
所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问
 

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

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

相关文章

CI/CD流水线实战

不知道为什么&#xff0c;现在什么技术都想学&#xff0c;因为我觉得我遇到了技术的壁垒&#xff0c;大的项目接触不到&#xff0c;做的项目一个字辣*。所以&#xff0c;整个人心浮气躁&#xff0c;我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末&#xff0c;我再次宅在…

k8s问题汇总

作者前言 本文章为记录使用k8s遇到的问题和解决方法&#xff0c;文章持续更新中… 目录 作者前言正常配置ingress&#xff0c;但是访问错误添加工作节点报错安装k8s报错使用kubectl命令报错container没有运行安装会出现kubelet异常&#xff0c;无法识别删除k8s集群访问dashboa…

Docker安装RabbitMQ单机版

Docker安装RabbitMQ单机版 先安装Docker服务&#xff0c;可参考安装Docker及学习 编写rabbitmq-composefile.yml文件 这里以rabbitmq 3.11.16 版本为例 cat << \EOF > /opt/rabbitmq-composefile.yml version: 3 services:rabbitmq:image: rabbitmq:3.10.0-managem…

【Apollo】推动创新:探索阿波罗自动驾驶的进步(含安装 Apollo的详细教程)

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

【密码学】维京密码

维京密码 瑞典罗特布鲁纳巨石上的图案看起来毫无意义&#xff0c;但是它确实是一种维京密码。如果我们注意到每组图案中长笔画和短笔画的数量&#xff0c;将得到一组数字2、4、2、3、3、5、2、3、3、6、3、5。组合配对得到24、23、35、23、36、35。现在考虑如图1.4所示的内容&a…

【变形金刚03】使用 Pytorch 开始构建transformer

一、说明 在本教程中&#xff0c;我们将使用 PyTorch 从头开始构建一个基本的转换器模型。Vaswani等人在论文“注意力是你所需要的一切”中引入的Transformer模型是一种深度学习架构&#xff0c;专为序列到序列任务而设计&#xff0c;例如机器翻译和文本摘要。它基于自我注意机…

iOS Epub阅读器改造记录

六个月前在这个YHEpubDemo阅读器的基础上做了一些优化&#xff0c;这里做一下记录。 1.首行缩进修复 由于分页的存在&#xff0c;新的一页的首行可能是新的一行&#xff0c;则应该缩进&#xff1b;也可能是前面一页段落的延续&#xff0c;这时候不应该缩进。YHEpubDemo基于XDS…

pycharm,VSCode 几个好用的插件

pycharm Tabnine AI Code 可以在编写程序的时候为你提供一些快捷方式&#xff0c;增加编程速度 Chinese 对英文不好的程序员来说是个不错的选择&#xff0c;可以将英文状态下的pycharm变为中文版的 ChatGPT 可以跟ai聊天&#xff0c;ai可以解决你80%的问题 &#xff0c;也可以帮…

变形金刚:从零开始【01/2】

一、说明 在我们的日常生活中&#xff0c;无论你是否是数据科学家&#xff0c;你都在单向地使用变压器模型。例如。如果您使用的是 ChatGPT 或 GPT-4 或任何 GPT&#xff0c;那么在为您回答问题的框中是变压器的一部分。如果您是数据科学家或数据分析师&#xff0c;则可能正在使…

【BASH】回顾与知识点梳理(二十九)

【BASH】回顾与知识点梳理 二十九 二十九. 进程和工作管理29.1 什么是进程 (process)进程与程序 (process & program)子进程与父进程&#xff1a;fork and exec&#xff1a;进程呼叫的流程系统或网络服务&#xff1a;常驻在内存的进程 29.2 Linux 的多人多任务环境多人环境…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型&#xff08;勘定Category&#xff09;栏目。 ・账号分配类型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原价Center&#xff08;成本中心。用于消耗物料采购 的过账&#xff09; 2&#xff0c;E 得意先…

【云原生之Docker实战】使用Docker部署Syncthing同步程序及基本使用

【云原生之Docker实战】使用Docker部署Syncthing同步程序及基本使用 一、Syncthing介绍1.1 Syncthing简介1.2 Syncthing特点1.3 备份和同步区别二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker comp…

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证&#xff0c;在工业机器人动态行为实验室中&#xff0c;设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素&#xff1a;带有直流电机和编码器的机器人;稳…

nvm管理node版本

nvm是什么&#xff1f; NVM全名叫做 nodejs version manage,即Node的版本管理工具。 使用NVM&#xff0c;可以通过命令很方便地在多个NodeJS版本之间进行切换。 nvm的下载与安装 下载地址&#xff1a;Releases coreybutler/nvm-windows (github.com) windows系统下载nvm-setup…

Arcgis中直接通过sde更新sqlserver空间数据库失败

问题 背景 不知道有没有人经历过这样一个情况,我们直接在Arcgis中通过sde更新serserver数据库会失败,就是虽然在sde更新sqlserver数据库,但是在Navicat中通过sql语句来查询,发现数据并没有更新,如:上图中,更新数据库后,第一张图是sde打开的sqlserver数据库,它的数据库…

项目管理工具和方法有哪些:了解项目管理的必备工具和有效方法

先谈谈什么是项目管理&#xff0c;简单直白&#xff0c;就是对项目进行管理。项目管理涉及有效的计划和对工作的系统管理&#xff0c;但很多工具可以使项目管理更有效、更高效。比如&#xff0c;Zoho Projects项目管理工具。 1.项目合理拆解 当确定了项目目标后&#xff0c;无疑…

我国农机自动驾驶系统需求日益增长,北斗系统赋能精准农业

中国现代农业的发展&#xff0c;离不开智能化、自动化设备&#xff0c;迫切需要自动驾驶系统与农用机械的密切结合。自动驾驶农机不仅能够缓解劳动力短缺问题&#xff0c;提升劳作生产效率&#xff0c;同时还能对农业进行智慧化升级&#xff0c;成为解决当下农业痛点的有效手段…

Pycharm社区版连接WSL2中的Mysql8.*

当前时间2023.08.13&#xff0c;Windows11中默认的WSL版本已经是2了&#xff0c;在WSL2中默认的Ubuntu版本已经是22.04&#xff0c;而Ubuntu22.04中默认的Mysql版本已经是8.*。 Wsl 2 中安装mysql WSL2中安装Mysql的方法参考自微软官方文档【开始使用适用于 Linux 的 Windows …

vector【2】模拟实现(超详解哦)

vector 引言&#xff08;实现概述&#xff09;接口实现详解默认成员函数构造函数析构函数赋值重载 迭代器容量size与capacityreserveresizeempty 元素访问数据修改inserterasepush_back与pop_backswap 模拟实现源码概览总结 引言&#xff08;实现概述&#xff09; 在前面&…

分布式定时任务系列5:XXL-job中blockingQueue的应用

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 Java并发编程实战1&#xff1a;java中的阻塞队列 引子 这篇文章的…