运维安全之Linux网络安全(iptables)

devtools/2025/3/1 19:26:01/

在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。

  

<a class=运维安全之Linux网络安全(iptables)_源地址" height="267" src="https://i-blog.csdnimg.cn/img_convert/e8b5f098a336fb50f845d19a3c103154.png" width="611" />

  •      用于保护内网安全的一种设备
  •   依据规则进行防护
  •   用户定义规则
  •   允许或拒绝外部用户访问
  防火墙分类

  逻辑上划分,防火墙可以大体分为主机防火墙和网络防火墙

  主机防火墙:针对于单个主机进行防护

  网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是本地局域网

  网络防火墙主外(服务集体),主机防火墙主内(服务个人)

  

  物理上划分,防火墙可分为硬件防火墙和软件防火墙

  硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高

  软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火墙低,成本较低,对于 Linux系统已自带,直接使用即可

  防火墙性能
  •   吞吐量
  •   并发连接
  •   新建连接
  •   时延
  •   抖动
  硬件防火墙

<a class=运维安全之Linux网络安全(iptables)_源地址_02" height="488" src="https://i-blog.csdnimg.cn/img_convert/81562db6e7d8371cf3929715e065f951.png" width="741" />

   软件防火墙

  软件防火墙是单独使用具备配置数据包通过规则的软件来实现数据包过滤。多见于单主机系统或个人计算机。

  Web应用防火墙(WAF)

  Web应用防火墙是对web防护(网页保护)的安全防护设备(软件),主要用于截获所有HTTP数据或仅仅满足某些规则的 会话。多见于云平台中。  

  硬件防火墙和软件防火墙对比

  硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。

  软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用 于单机系统或个人计算机中,不直接用于计算机网络中。  

  iptables

  iptables是什么?

  •   iptables不是防火墙,是防火墙用户代理
  •   用于把用户的安全设置添加到安全框架中
  •   安全框架是防火墙
  •   安全框架的名称为netfilter
  •   netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块
  •   iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
  •   netfilter/iptables功能

  netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的 企业级硬件防火墙,能够实现如下功能:

  •   数据包过滤,即防火墙
  •   数据包重定向,即转发
  •   网络地址转换,即可NAT  

  注:

  平常我们使用iptables并不是防火墙的“服务”,而服务是由内核提供的。

  iptables概念

  iptables工作依据------规则(rules)

  iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为“如果数据包头符合这样的 条件,就这样处理这个数据包”。

  规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服 务类型(HTTP、FTP)等。

  当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、 丢弃(DROP)等

配置防火墙主要工作就是对iptables规则进行添加、修改、删除等

  小结:

  •   工作依据是规则
  •   规则存在表中
  •   规则指定了什么?源地址或目的地址或传输协议的类型
  •   如果数据包备匹配到,按照规则指定的动作去执行
  iptables中链的概念

  当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,

所 以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器

所 监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址,

我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内

核中设置“关口”,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被

阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做“链”。

------------恢复内容开始------------

  在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。

  

<a class=运维安全之Linux网络安全(iptables)_源地址" height="267" src="https://i-blog.csdnimg.cn/img_convert/e8b5f098a336fb50f845d19a3c103154.png" width="611" />

  •      用于保护内网安全的一种设备
  •   依据规则进行防护
  •   用户定义规则
  •   允许或拒绝外部用户访问
  防火墙分类

  逻辑上划分,防火墙可以大体分为主机防火墙和网络防火墙

  主机防火墙:针对于单个主机进行防护

  网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是本地局域网

  网络防火墙主外(服务集体),主机防火墙主内(服务个人)

  

  物理上划分,防火墙可分为硬件防火墙和软件防火墙

  硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高

  软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火墙低,成本较低,对于 Linux系统已自带,直接使用即可

  防火墙性能
  •   吞吐量
  •   并发连接
  •   新建连接
  •   时延
  •   抖动
  硬件防火墙

<a class=运维安全之Linux网络安全(iptables)_源地址_02" height="488" src="https://i-blog.csdnimg.cn/img_convert/81562db6e7d8371cf3929715e065f951.png" width="741" />

   软件防火墙

  软件防火墙是单独使用具备配置数据包通过规则的软件来实现数据包过滤。多见于单主机系统或个人计算机。

  Web应用防火墙(WAF)

  Web应用防火墙是对web防护(网页保护)的安全防护设备(软件),主要用于截获所有HTTP数据或仅仅满足某些规则的 会话。多见于云平台中。  

  硬件防火墙和软件防火墙对比

  硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。

  软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用 于单机系统或个人计算机中,不直接用于计算机网络中。  

  iptables

  iptables是什么?

  •   iptables不是防火墙,是防火墙用户代理
  •   用于把用户的安全设置添加到安全框架中
  •   安全框架是防火墙
  •   安全框架的名称为netfilter
  •   netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块
  •   iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
  •   netfilter/iptables功能

  netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的 企业级硬件防火墙,能够实现如下功能:

  •   数据包过滤,即防火墙
  •   数据包重定向,即转发
  •   网络地址转换,即可NAT  

  注:

  平常我们使用iptables并不是防火墙的“服务”,而服务是由内核提供的。

  iptables概念

  iptables工作依据------规则(rules)

  iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为“如果数据包头符合这样的 条件,就这样处理这个数据包”。

  规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服 务类型(HTTP、FTP)等。

  当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、 丢弃(DROP)等

配置防火墙主要工作就是对iptables规则进行添加、修改、删除等

  小结:

  •   工作依据是规则
  •   规则存在表中
  •   规则指定了什么?源地址或目的地址或传输协议的类型
  •   如果数据包备匹配到,按照规则指定的动作去执行
  iptables中链的概念

  当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,

所 以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器

所 监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址,

我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内

核中设置“关口”,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被

阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做“链”。

<a class=运维安全之Linux网络安全(iptables)_内网_05" height="442" src="https://i-blog.csdnimg.cn/img_convert/25ad412165505197cd1b3b9a764c5714.png" width="539" />

   上面的举例中,如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够

进行转发,那么这个转发就是本机内核所支持的IP_FORWARD功能,此时我们的主机类似于路由器功能,所以我们会

看到在iptables中,所谓的关口并只有上面所提到的input及output这两个,应该还有“路由前”,“转发”,“路由后”,

它们所对应的英文名称分别为“PREROUTING”,“FORWARD”,“POSTROUTING”,这就是我们说到的5链

  INPUT

  OUTPUT

  PREROUTING

  FORWARD

  POSTROUTING

<a class=运维安全之Linux网络安全(iptables)_源地址_06" height="737" src="https://i-blog.csdnimg.cn/img_convert/6f9ccf5107659f2e88253983dc133c18.png" width="1206" />

   通过上图可以看出,当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,

各报名经常 的“链”可能不同,如果报文目标地址是本机,则会经常input链发往本机用户空间,如果报

文目标不是本机,则会直接 在内核空间中经常forward链和postrouting链转发出去。

  所以,根据上图,我们能够想象出某些常用场景中,报文的流向:

  到本机某进程的报文:PREROUTING --> INPUT

  由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING

  由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

  

  有的时候我们也经常听到人们在称呼input为“规则链”,这又是怎么回事呢?

我们知道,防火墙的作用在于对经过的数 据报文进行规则匹配,然后执行

对应的“动作”,所以数据包经过这些关口时,必须匹配这个关口规则,但是

关口规则 可能不止一条,可能会有很多,当我们把众多规则放在一个关口

上时,所有的数据包经常都要进行匹配,那么就形成 了一个要匹配的规则

链条,因此我们也把“链”称作“规则链”。

<a class=运维安全之Linux网络安全(iptables)_源地址_07" height="627" src="https://i-blog.csdnimg.cn/img_convert/6f8bff7fb94bb4bc5065f04c24a43706.png" width="819" />

   INPUT:处理入站数据包

  OUTPUT:处理出站数据包

  FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)

  当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip 不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一 跳或目的主机。

  PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机

  POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往 下一跳

  

  iptables中表的概念

  每个“规则链”上都设置了一串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某一特定功能集合分 类,而这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明白每种表的作用。

  •   filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter
  •   nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat
  •   mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle
  •   raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw
  •   security:是否定义强制访问控制规则;后加上的

  

  iptables中表链之间的关系

  我们在应用防火墙时是以表为操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能。那么我们就应 该知道哪张表包括哪些规则链,然后在规则链上操作即可。

  •   filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT
  •   nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
  •   mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  •   raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT

<a class=运维安全之Linux网络安全(iptables)_数据_08" height="344" src="https://i-blog.csdnimg.cn/img_convert/5d174f36ef3b4739a6aba727df9a0d7d.png" width="649" />

   iptables中表的优先级

  raw-mangle-nat-filter(由高至低)

  数据包经由iptables的流程

<a class=运维安全之Linux网络安全(iptables)_源地址_09" height="649" src="https://i-blog.csdnimg.cn/img_convert/41387c6f895d9be0407e94b555190e0d.png" width="1177" />

   iptables规则匹配及动作

  规则:根据指定的匹配条件来尝试匹配每个流经此处的数据包,匹配成功,则由规则指定的处理动作进行处理。

  规则是由匹配条件和动作组成的,那么规则是什么呢?

  举例说明:

  两个同学,一个白头发,一个黑头发,同时进教室,而进教室的条件是只有黑头发可以进入,白头发拒绝进入,黑头 发和白头发就是匹配条件,而可以进入和拒绝进入就是动作。

  iptables规则匹配条件分类

  基本匹配条件:

  源地址,目标地址,源端口,目标端口等

  基本匹配使用选项及功能

-p 指定规则协议,tcp udp icmp all
-s 指定数据包的源地址,ip hostname
-d 指定目的地址
-i 输入接口
-o 输出接口
! 取反

   基本匹配的特点是:无需加载扩展模块,匹配规则生效

  扩展匹配条件:

  扩展匹配又分为显示匹配和隐式匹配。

  扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。

  隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块; 显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。

  隐式匹配选项及功能

-p tcp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--tcp-flags mask comp 匹配报文中的tcp协议的标志位
-p udp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--icmp-type 0/0:
echo reply 允许其他主机
ping 8/0:echo request 允许ping其他主机 

  常用显示匹配选项及功能

  multiport

  多端口

#在INPUT链中开放本机tcp 22 80端口
iptables -t filter -I INPUT -d 192.168.1.146 -p tcp -m multiport --dports 22,80 -j ACCEPT

   iprange

  多IP地址

iptables -t filter -A INPUT -d 192.168.1.146 -p tcp -m iprange --src-range 192.168.1.1-192.168.1.100 -j ACCEPT

   time

  指定时间访问范围

iptables -t filter -I INPUT -m time --weekdays 1,2,3 --timestart 09:00:00 --timestop 18:00:00 -j ACCEPT

   string  

  字符串,对报文中的应用层数据做字符串模式匹配检测(通过算法实现)。

--algo {bm|kmp}:字符匹配查找时使用算法
--string "STRING": 要查找的字符串
--hex-string “HEX-STRING”: 要查找的字符,先编码成16进制格式

#丢弃报文中包含字符OOXX的报文
iptables -t filter -I INPUT -m string --algo bm --string OOXX -j DROP

   connlimit

  连接限制,根据每个客户端IP作并发连接数量限制。

--connlimit-upto n 连接数小于等于n时匹配
--connlimit-above n 连接数大于n时匹配

#连接数大于3则丢弃
iptables -t filter -I INPUT -m connlimit --connlimit-above 3 -j DROP

   limit

  报文速率限制(使用较少)

  state

  追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.

--state state
NEW 新连接请求
ESTABLISHED 已建立的连接
INVALID 无法识别的连接
RELATED 相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
UNTRACKED 未追踪的连接

1、对于进入的状态为ESTABLISHED都应该放行;
2、对于出去的状态为ESTABLISHED都应该放行;
3、严格检查进入的状态为NEW的连接;
4、所有状态为INVALIED都应该拒绝;

   iptables规则中的动作

iptables规则中的动作常称为target,也分为基本动作和扩展动作。

  •   ACCEPT:允许数据包通过
  •   DROP:直接丢弃数据包,不给任何回应信息
  •   REJECT:拒绝数据包通过,发送回应信息给客户
  •   SNAT:源地址转换

  解释1:数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,接收方认为数据包的来 源是被替换的那个IP主机,返回响应时,也以被替换的IP地址进行

  解释2:修改数据包源地址,当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址 (目的IP地址不变),使网络内部主机能够与网络外部主机通信。

<a class=运维安全之Linux网络安全(iptables)_数据_10" height="338" src="https://i-blog.csdnimg.cn/img_convert/cdc506456f340a9fcb79e609270cd08c.png" width="824" />

 

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 202.12.10.100

  •    MASQUERADE:伪装,类似于SNAT,适用于动态的、临时会变的ip地址上,例如:家庭使用的宽带。 用发送数据的网卡上的IP来替换源IP,对于IP地址不固定场合使用
  •   DNAT:目标地址转换

  解释1:数据包从网卡发出时,修改数据包中的目的IP,表现为你想访问A,但因网关做了DNAT,把所有 访问A的数据包中的目的IP地址全部修改为B,实际终访问的是B。

  解释2:改变数据包目的地址,当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换 (源IP地址不变),重新转发到内网的主机。

  

<a class=运维安全之Linux网络安全(iptables)_内网_11" height="381" src="https://i-blog.csdnimg.cn/img_convert/79b3619f58b32ac1375b2dee79d885d3.png" width="892" />

 

iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1

  •    REDIRECT:在本机做端口映射
  •   LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则。
    注意:路由是按照目的地址进行路由选择的,因此,DNAT是在PREROUTING链上进行的,SNAT是在数据包发出的时 候进行的,因此是在POSTROUTING链上进行的。
     

  制定iptables规则策略

  黑名单 没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐

  白名单 没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策 略,推荐。

  

  iptables基础语法结构

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]

不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略,否则 需要指定匹配条件。

 

<a class=运维安全之Linux网络安全(iptables)_源地址_12" height="603" src="https://i-blog.csdnimg.cn/img_convert/eef9cf39e90c42539389bc1e27ee70e9.png" width="1124" />

   

  iptables-service安装

[root@localhost ~]# yum -y install iptables-services

   设置开启

[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service

   保存规则

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

   重载规则

[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables

   基本配置

  清除规则

iptables -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#配置默认链策略

   案例:白名单

[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
[root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT

   注意:最好不要修改默认策略为DROP来设置白名单,可以使用-A在尾部追加一条拒绝所有,然后保证默认策略为ACCEPT,否则如果不小心使用-F清除了规则,默认策略为DROP则所有连接都无法生效包括ssh,如果是远程设置则无解,只能去机房了。

  案例:黑名单

[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
[root@localhost ~]# iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCE

  案例

  使用服务httpd,vsftp,ssh测试

  安装服务

#yum -y install httpd vsftpd

   启动

systemctl start httpd vsftpd

   设置iptables规则

#清除
iptables -t filter -F
#开放对应端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
#规则后加拒绝所有
iptables -A INPUT -j REJECT

   存在问题

  1,本机无法访问本机

#ping 127.0.0.1
#允许本机回环口访问本机
#iptables -I INPUT -i lo -j ACCEPT

   

  ,2,本机无法访问其他主机

  例如:ssh remote_host   curl remote_host

  解决办法

 

iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  3,FTP无法访问

  解决办法1

[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
[root@localhost ~]# iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

   解决办法2:使用连接追踪模块

[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# modprobe nf_conntrack_ftp #临时方法,添加连接追踪模块
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
#启动服务时加载
#针对数据端口连接时,将三次握手第一次状态由NEW识别为RELATED

   第一种方法开启端口太多,建议使用第二种方法

  

  案例2:iptables标准流程

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT #允许内网任何访问
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j REJECT
[root@localhost ~]# modprobe nf_conntrack_ftp
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"

   iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT为iptables防火墙标配,尽量优先且需要配置。

  

  案例3:iptables扩展匹配

  icmp

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT

   作用:允许本机ping其他主机,不允许其他主机ping本机

<a class=运维安全之Linux网络安全(iptables)_内网_13" height="112" src="https://i-blog.csdnimg.cn/img_convert/b2e772d6d127bd13d21e414fd5dcf081.png" width="681" />

<a class=运维安全之Linux网络安全(iptables)_ip地址_14" height="168" src="https://i-blog.csdnimg.cn/img_convert/e0901104c472a5fce0def9678050103a.png" width="704" />

   iprange 设置一组ip

iptables -t filter -I INPUT -p tcp -m iprange --src-range 192.168.1.200-192.168.1.250 -j DROP

   multiport 设置多个不连续端口

iptables -t filter -I INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT

   -m tos 根据ip协议头部 type of service进行过滤

[root@localhost ~]# iptables -F
[root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv
#抓取远程主机访问本机的ssh数据包,观察TOS值
[root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv
#抓取远程从本机rsync或scp复制文件,观察TOS值
#ssh: tos 0x0 0x10
#scp: tos 0x0 0x8
#rsync: tos 0x0 0x8

#允许ssh登录
iptables -t filter -I INPUT -p tcp --dport 22 -m tos --tos 0x10 -j ACCEPT

#-m tcp 按TCP控制位进行匹配
Flags:SYN ACK FIN RST URG PSH ALL NONE

##--tcp-flags SYN,ACK,FIN,RST SYN 检查四个标记位,只有SYN标记位才匹配,即只允许三次握手中的第一次握手,等价于--syn
iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT

   #-m comment 对规则进行备注说明

 

iptables -I INPUT -s 192.168.2.250 -m comment --comment "cloud host" -j REJECT

<a class=运维安全之Linux网络安全(iptables)_内网_15" height="279" src="https://i-blog.csdnimg.cn/img_convert/5c65d3a8254c2d35204980e43c6e4ac9.png" width="1437" />

#-m mark 使用mangle表的标记方法,配合mangle表使用
[root@localhost ~]# iptables -t filter -A INPUT -m mark 2 -j REJECT

  案例4:扩展动作

  -j LOG记录到日志中

  修改日志配置文件设置日志存储位置

[root@node1 ~]# grep "kern*" /etc/rsyslog.conf
#$ModLoad imklog # reads kernel messages (the same are read from journald)
# Log all kernel messages to the console.
kern.* /var/log/kernel.log

   重启

systemctl restart rsyslog

#记录日志打一个标签为ssh
iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ssh"
#会把所有相关ssh日志记录
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

<a class=运维安全之Linux网络安全(iptables)_内网_16" height="213" src="https://i-blog.csdnimg.cn/img_convert/d005e88aba4a8bb0818537a6e67b16d1.png" width="1416" />

   

  #-j MARK 进行标记,可在LVS调度器中应用

[root@node1 ~]# iptables -t mangle -A PREROUTING -s 192.168.1.147 -j MARK --set-mark 1
[root@node1 ~]# iptables -t mangle -A PREROUTING -s 192.168.1.102 -j MARK --set-mark 2
[root@node1 ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT #按照标记匹配
[root@node1 ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

   标记为取值1-255

  设置完以后对应192.168.1.147可以正常访问,192.168.1.102拒绝访问

<a class=运维安全之Linux网络安全(iptables)_ip地址_17" height="72" src="https://i-blog.csdnimg.cn/img_convert/89565df7f45df72eb76c21bd54c34b16.png" width="658" />

<a class=运维安全之Linux网络安全(iptables)_内网_18" height="72" src="https://i-blog.csdnimg.cn/img_convert/32c0b1f8dc1f159b2a33f2e26004ab56.png" width="658" />

 

  iptables nat表应用案例

  nat表作用

  倒流

  nat表作用位置

  KVM或OpenStack中虚拟机或云主机与外部通信

  Docker管理的容器与外部通信

  nat表规则动作所对应的链

SNAT 源地址转换 应用于出口POSTROUTING
MASQUERADE 源地址转换 应用于出口POSTROUTING
DNAT 目标地址转换 应用于进口PREROUTING
REDIRECT 端口重定向 应用于进口PREROUTING

   源地址转换和目的地址转换

#源地址转换,适用于内网访问外网
#把内网的172.16.30.0/24地址替换为外网的源地址
[root@node1 ~]# iptables -t nat -I POSTROUTING -s 172.16.30.0/24 -j SNAT --to-source 192.168.1.146
#外网为动态IP则使用以下命令
iptables -t nat -A POSTROUTING -s 172.16.30.0/24 -j MASQUERADE
#目的地址转换,适用于外网访问内网
#外网访问通过80端口转发至内网172.16.30.100对应的web服务器的80端口
iptables -t nat -I PREROUTING -p tcp -d 192.168.1.146 --dport 80 -j DNAT --to-destination 172.16.30.100:80

  •   Firewalld

  Firewalld是什么

  Firewalld属于动态防火墙,是CentOS系统中用于对netfilter内核模块用户空间管理工具。

  FireWalld仅仅替代了iptables service部分,其底层还是使用iptables做为防火墙规则管理入口。

  总结

  •   动态防火墙
  •   用于管理netfilter用户空间的工具
  •   调用了iptables命令
  FireWalld中zone概念及作用

  区域(zone)是firewalld预先准备好的防火墙策略集合,即可策略模板,用于可以根据不同的应用场景进行切换。

  例如: 你有一台笔记本电脑,每天都要在公司办公室、咖啡厅和家使用。 我们来对场所进行安全性由高到低排序:

家、公司办公室、咖啡厅。

  我们希望为这台笔记本电脑指定如下防火墙策略规则: 在家中允许访问所有服务; 在公司办公室内仅允许访问文件

  共享服务; 在咖啡厅仅允许上网浏览。 在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区

  域集合, 随时都可以自动切换了,从而极大地提升了防火墙策略的应用效率。

  

  FireWalld中zone分类

  FireWalld不同区域之间的差异主要是每个区域对待数据包的默认行为不同

  Firewalld默认共9个zone,分别为:

  •   block(拒绝)
  •   dmz(非军事化)
  •   drop(丢弃)
  •        external(外部)
  •        home(家庭)
  •        internal(内部)
  •        public(公开) Firewalld默认区域
  •        trusted(信任)
  •        work(工作区)

  FireWalld文件

  Firewalld文件分为两大类:

  /usr/lib/firewalld/services:firewalld服务默认在此目录下定义了70多种服务,可以直接使用。

  /usr/lib/firewalld/zones:区域配置文件

   /etc/firewalld/zones:默认区域配置文件,配置文件中指定了编写完成的规则

  firewalld文件作用:人性化管理规则;通过服务组织端口分组更加高效,如果一个服务使用若干网络端口,则服务的

  配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。

  

  Firewalld语法

  命令语法

  命令语法

firewall-cmd [--zone=zone] 动作 [--permanent]

   如果不指定--zone选项,则为当前所在的默认区域,--permanent选项为是否将改动写入到区域配置文件中

   开启firewalld

systemctl start firewalld

   Firewall状态

[root@node1 zones]# firewall-cmd --state
running

  • 1.[root@localhost ~]# firewall-cmd --reload
  • success
    #重新加载防火墙,中断用户连接,临时配置清除掉,加载配置文件中的永久配置

[root@localhost ~]# firewall-cmd --complete-reload
success
#重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
[root@localhost ~]# firewall-cmd --panic-on
#紧急模式,强制关闭所有网络连接

   Firewalld中动作

[root@localhost ~]# firewall-cmd xxx
--get-icmptypes ##查看支持的所有ICMP类型
--get-zones ##查看所有区域
--get-default-zone ##查看当前的默认区域
--get-active-zones ##查看当前正在使用的区域
--get-services ##查看当前区域支持的服务
--list-services ##查看当前区域开放的服务列表
--list-services --zone=home ##查看指定域开放的服务列表
--list-all ##查看默认区域内的所有配置,类似与iptables -L -n
--list-all-zones ##查看所有区域所有配置

   更改区域操作

#把默认区域public更改成区域work
[root@node1 zones]# firewall-cmd --set-default-zone=work
success
#查看
[root@node1 zones]# firewall-cmd --list-all
work (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

   修改回来

[root@node1 zones]# firewall-cmd --set-default-zone=public

   新建规则

--add-interface=eth0 ##将网络接口添加到默认的区域内
--add-port=12222/tcp --permanent ##添加端口到区域开放列表中
--add-port=5000-10000/tcp --permanent ##将端口范围添加到开放列表中;
--add-service=ftp --permanent ##添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表
中的名称一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定区域
--add-masquerade ##开启SNAT(源地址转换)

   使用参数--permanent是持久化会把配置写入配置文件/etc/firewalld/zones/public.xml

  查看刚刚增加的规则

<a class=运维安全之Linux网络安全(iptables)_ip地址_19" height="329" src="https://i-blog.csdnimg.cn/img_convert/5801fdf92c79ce598729ff0c08d81d66.png" width="647" />

   删除规则

  删除--remove

[root@localhost ~]# firewall-cmd xxx
--remove-service=http ##在home区域内将http服务删除在开放列表中删除
--remove-interface=eth0 ##将网络接口在默认的区域内删除
--remove-source=192.168.1.1 ##删除源地址的流量到指定区域

   改变规则

[root@localhost ~]# firewall-cmd xxx
--change-interface=eth1 ##改变指定的接口到其他区域

   开启防火墙的80端口

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

   首先开启80端口,写到配置文件 使用--reload重载生效

<a class=运维安全之Linux网络安全(iptables)_源地址_20" height="310" src="https://i-blog.csdnimg.cn/img_convert/f5133949ae7c7f6c93ba9420afbefdfc.png" width="574" />

   删除

firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload

   使用协议添加

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

   查看

<a class=运维安全之Linux网络安全(iptables)_ip地址_21" height="301" src="https://i-blog.csdnimg.cn/img_convert/8e66963b7388c4ed3dd445300b14769b.png" width="588" />

   删除

firewall-cmd --remove-service=http --permanent
firewall-cmd --reload

   注意:使用参数--permanent可以即时同步配置到文件 然后再使用参数--reload生效,这样即时重启配置也不会丢失

  查询

#查询80端口是否开启
[root@node1 zones]# firewall-cmd --query-port=80/tcp
yes

#查询是否开启ssh服务
[root@node1 zones]# firewall-cmd --query-service=ssh
yes

  端口转发

  端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定ip的话就默

认为本机,如果指定了ip却没指定端口,则默认使用来源端口。

  #通过firewalld实现SNAT

 

firewall-cmd --add-masquerade --permanent
firewall-cmd --reload

   查看

<a class=运维安全之Linux网络安全(iptables)_内网_22" height="327" src="https://i-blog.csdnimg.cn/img_convert/f61b1a8ef32c142a89d4699c008ec4cd.png" width="629" />

   类似于iptables的SANT

  将222端口流量转发至22

[root@node1 zones]# firewall-cmd --add-forward-port=port=222:proto=tcp:toport=22
success

   查看

 

<a class=运维安全之Linux网络安全(iptables)_数据_23" height="310" src="https://i-blog.csdnimg.cn/img_convert/12bc45933922b448be43abf572017491.png" width="720" />

  验证

ssh root@192.168.1.146 -p 222

   将80端口的流量转发至内网web服务器

firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=172.16.30.100

   查看

<a class=运维安全之Linux网络安全(iptables)_内网_24" height="360" src="https://i-blog.csdnimg.cn/img_convert/97a177006f63a528b2354722949a2952.png" width="730" />

   类似于iptables中的DNAT

  通过iptables查看

<a class=运维安全之Linux网络安全(iptables)_数据_25" height="382" src="https://i-blog.csdnimg.cn/img_convert/3e3c26651c5a3b1acfec3d08524a8e29.png" width="1329" />

   删除

 

[root@localhost ~]# firewall-cmd --remove-forward-
port=port=80:proto=tcp:toaddr=172.16.30.100 --permanent

  Rich规则

   Rich规则帮助

 

[root@localhost ~]# man 5 firewalld.richlanguage

   Rich规则选项

--add-rich-rule=’rule’ ##新建rich规则
--remove-rich-rule=’rule’ ##删除rich规则
--query-rich-rule=’rule’ ##查看单条rich规则
--list-rich-rules ##查看rich规则列表

   Rich规则案例

  拒绝某一主机访问

firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.1.147/32 reject"
firewall-cmd --reload
firewall-cmd --list-all

<a class=运维安全之Linux网络安全(iptables)_源地址_26" height="350" src="https://i-blog.csdnimg.cn/img_convert/13a7d4f5b4d8c8b4653c0cc9be7f4f4d.png" width="940" />

   删除刚刚配置的规则

firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=192.168.1.147/32 reject"
firewall-cmd --reload
firewall-cmd --list-all

  抛弃icmp协议所有数据包

 

[root@node1 ~]# firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule protocol value="icmp" drop

   删除

 

[root@node1 ~]# firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop'
success
[root@node1 ~]# firewall-cmd --reload
success

   允许某一网段一段端口通过

[root@node1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.1.0/24" port port="7900-7905" protocol="tcp" accept

   开启SNAT

[root@node1 ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 masquerade'
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="172.16.30.0/24" masquerade

   端口转发

  开启masquerade

 

firewall-cmd --add-masquerade --permanent

   设置端口转发

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.146/24 forward-port port=80 protocol=tcp to-port=80 to-addr=172.16.30.100'
firewall-cmd --reload
firewall-cmd --list-al

   设置访问192.168.1.146转发至内部主机172.16.30.100的80端口

  注意:source address=192.168.1.146/24需要加掩码位数24 不能不加或者使用掩码32 否则无法访问

网络安全学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

需要网络安全学习路线和视频教程的可以在评论区留言哦~

最后

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失


http://www.ppmy.cn/devtools/163707.html

相关文章

蓝桥杯好题推荐----高精度乘法

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 题目链接 P1303 A*B Problem - 洛谷https://www.luogu.com.cn/problem/P1303 解题思路 这道题的思路&#xff0c;其实和前面差不多&#xff0c;我们主要说一下最为关键的部分&…

Excel文件合并、拆分工具 、 Excel数据批量转Word

​Excel文件合并、拆分工具 此外&#xff0c;工作中也总是会遇见将两个Excel文件合并起来的情况&#xff0c;这时我们就能用这个工具来帮助我们快速处理~提高我们的工作效率 使用时&#xff0c;只需将要合并的数个文件拖进去&#xff0c;并根据自己的工作表来完成相关的设置即可…

ssh配置 远程控制 远程协作 github本地配置

0.设备版本 windows11 ubuntu24.0.4 1.1 在 Linux 上启用 SSH 服务 首先&#xff0c;确保 Linux 计算机上安装并启用了 SSH 服务。 安装和启动 OpenSSH 服务&#xff08;如果未安装&#xff09; # 在终端安装 OpenSSH 服务&#xff08;如果尚未安装&#xff09; sudo apt …

python-leetcode-第 N 个泰波那契数

1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 解法 1&#xff1a;递归&#xff08;O(3^n)&#xff0c;不推荐&#xff09; 递归直接按照数学定义实现&#xff0c;但时间复杂度高&#xff0c;不适合大 n。 class Solution:def tribonacci(self, n: int) -…

Linux:ELF文件-静动态库原理

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ ELF文件 什么是编译&#xff1f;编译就是将程序源代码编译成能让CPU直接执行的机器代码 如果我们要编译一个 .c文件&#xff0c;使用gcc -c将.c文件编译为二进制文件.o &#xff0c;如果一个项目有多个.…

Grok3使用体验与模型版本对比分析

文章目录 Grok的功能DeepSearch思考功能绘画功能Grok 3的独特功能 Grok 3的版本和特点与其他AI模型的比较 最新新闻&#xff1a;Grok3被誉为“地球上最聪明的AI” 最近&#xff0c;xAI公司正式发布了Grok3&#xff0c;并宣称其在多项基准测试中展现了惊艳的表现。据官方消息&am…

飞鱼科技游戏策划岗内推

协助策划完成相关工作&#xff0c;包括但不仅限于策划配置&#xff0c;资料搜集&#xff0c;游戏体验&#xff1b; 游戏策划相关作品&#xff1b;游戏大赛经历&#xff1b;游戏demo制作经历&#xff1b;游戏公司策划岗位实习经历优先 内推码 DSZP7YFU

【面试】Java 之 String 系列 -- String 为什么不可变?

在 Java 编程中&#xff0c;String 类是一个使用频率极高的类。而 String 对象具有不可变的特性&#xff0c;这一特性在 Java 设计中有着重要的意义。本文将深入探讨 String 不可变的含义、原因以及带来的好处。 一、String 不可变的含义 1. 概念解释 所谓 String 不可变&am…