当前位置: 首页 > news >正文

Linux火墙管理及优化

网络环境配置

使用3个新的虚拟机【配置好软件仓库和网络的】

F1

192.168.150.133

NAT

F2

192.168.150.134

192.168.10.20

NAT

HOST-ONLY    网络适配仅主机

F3

192.168.10.30

HOST-ONLY    网络适配仅主机

1 ~]# hostnamectl hostname double1.timinglee.org     【更改虚拟机姓名】

[root@double2 ~]# hostnamectl hostname double2.timinglee.org

[root@double3 ~]# hostnamectl hostname double3.timinglee.org

2 ~]# vmset.sh ens192 192.168.10.20        【使用# ip a查看地址ens后面数字再更改】

3 ~]# vmset.sh ens160 192.168.10.30

# vim /etc/NetworkManager/system-connections/ens160.nmconnection     【修改网关】

# nmcli connection reload                【重启】

# nmcli connection up ens160             【启动ens160】

# route -n   查看结果:

什么是防火墙

从功能角度来讲

        防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出

从功能实现角度来讲,

        火墙是系统内核上的一个模块netfilter(数据包过滤机制)

        通过netfiler来管理kernelspace中的策略

netfilter简介

        Netfilter是Linux2.4.x引入的一个子系统

        它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪等等

        netfilter分析OSI七层协议的2、3、4层

        onetfiler可以直接分析数据包头部数据,包括硬件地址,软件地址、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析

        oInux的netfilter机制可以进行的工作有:

                。拒绝让Internet的数据包进入主机的某些端口

                。拒绝让某些来源ip的数据包进入

                。拒绝让带有某些特殊标志(flag)数据包进入,最常拒绝的是带SYN主动连接标志的包

                。分析硬件地址(MAC)来决定连接与否

                。地址转换

        防火墙并不能有效阻挡病毒或木马程序,并且防火墙对于内部LAN的攻击无能为力

netfiler策略管理工具

        onetfilter这个内核网络栈过滤框架的使用需要通过iptables或nftables来进行与netfilter进行交互工具常用种类

        oiptables服务使用iptables交互RHEL6之前系统默认使用此服务,管理手段丰富,配置比较复杂

        ofirewalld服务使用nftables交互RHEL6及之后的版本中默认使用此服务,配置类似windows火墙,功能模块度高,使用简单。

netfilter的五类hook函数及iptables的默认表和链

NF_IP_PRE_ROUTING【将要进入的】:位于路由之前,报文一致性检查之后(报文一致性检查包括:报文版本、报文长度和checksum

NF_IP_LOCAL_IN【进入主机的数据包】:位于报文经过路由之后,并且目的是本机的

NF_IP_FORWARD【经过的数据包】:位于在报文路由之后,目的地非本机的。

NF_IP_LOCAL_OUT【进入主机的数据包】:由本机发出去的报文,并且在路由之前。

NF_IP_POST_ROUTING【将要离开的】:所有即将离开本机的报文

内核空间的iptables

        oIptables是基于Netfilter框架实现的报文选择系统

        oiptables用于报文的过滤、网络地址转换和报文修改等功能

        oIptables本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标

1、raw表:

        第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于

PREROUTING和OUTPUT链,对应的动作为NOTRACK。

2、mangle表:

        第二优先级的表,根据规则,修改数据包的TOS(Typeofservice,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等。

3、nat表:

        第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)。

4、filter表:

        第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)。

5、security表:

        最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinuxo

iptables服务

        iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的iptables策略。

        iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用。

        iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存 到/etc/sysconfig/iptables中。

启动iptables 服务

2 ~]# dnf install iptables-nft-services.noarch -y           【下载】

# systemctl disable --now firewalld                  【开火墙】

# systemctl mask firewalld

# systemctl enable --now iptables.service

# iptables -L                  【列出iptables表】

# iptables -F               【刷新iptables表】

再次 # iptables -L 刷新结果:

# cat /etc/sysconfig/iptables         【查看iptables文件内容】

# service iptables save        【保存当前火墙状态】

# cat /etc/sysconfig/iptables   运行结果:

iptables命令参数

2 ~]# systemctl enable --now nginx

1/3 ~]# curl 192.168.(150/10).(134/20)可以访问到F2了

        -t  对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个。默认是filter表。

        -p  指定要匹配的数据包协议类型

        -s  --source address/mask:把指定的一个或者一组地址作为源地址,按此规则进行过滤。当后面没有mask时,address是一个地址,比如:192.168.1.1;当mask指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0

        -d  --destination address/mask:地址格式同上,但指定地址为目的地址,按此进行过滤

        -i  --in-interface name:指定数据包的来自来自网络接口,比如最常见的etho。注意:它只对INPUT,FORWARD,PREROUTING这三个链起作用。如果没有指定此选项,说明可以来自任何一个网络接口。同前面类似,"!"表示取反

2 ~]# iptables -A INPUT -i lo -j ACCEPT    【允许本机环回接口访问】

        -O  --out-interface name:指定数据包出去的网络接口。只对OUTPUT,FORWARD,POSTROUTNG三个链起作用

        -L  --list[chain]列出链chain上的所有规则,如果没有指定链,列出表上所有链的所有规则

        -A  --append chain rule-specification:在指定链chain的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定INPUT【限制对方进来】   FORWARD   OUTPUT【限制对方出去】

2 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.150.133 -j REJECT

【不允许80接口被133访问】

# iptables -t filter -A INPUT -p tcp --dport 80 ! -s 192.168.10.128 -j REJECT

【仅允许128访问80接口】

# iptables -nL   查看结果:

        -I  --insert chain [rulenum] rule-specification:在链chain中的指定位置插入条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号

注意:火墙读取策略是从第一条开始读取的

# iptables -I INPUT 1 -i lo -j ACCEPT    【添加到第一条,允许本机环回接口访问】

        -D  --delete chain rule-specification-D,--delete chain rulenum:在指定的链chain中删除一个或多个指定规则

# iptables -D INPUT 1       【删除第一条规则】

        -R  Replays替换/修改第几条规则

# iptables -R INPUT 1 -p tcp --dport 22 -s 192.168.150.133 -j ACCEPT     【替换端口为22】

        -P  --policy chain target:为指定的链chain设置策略target。注意,只有内置的链才允许有策略,用户自定义的是不允许的

        -F  --flush [chain]清空指定链chain上面的所有规则。如果没有指定链,清空该表上所有链的所有规则

        -N  --new-chain chain用指定的名字创建一个新的链

# iptables -N lee       【新建链表lee】

        -E  --rename-chain old-chain new-chain:用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响

# iptables -E lee LEE         【更改lee链表名字】

        -X  --delete-chain [chain]:删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链

# iptables -X LEE             【删除链表LEE】

        -Z  --zero [chain]:把指定链,或者表中的所有链上的所有计数器清零

        -j  --jump target<指定目标>:即满足某条件时该执行什么样的动作。target可以是内置的目标,比如ACCEPT,也可以是用户自定义的链

        -h  显示帮助信息

snat地址转换

2 ~]# iptables -F       【删除所有策略】

# iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.150.134

【将所有从ens160出去的网址都把地址改为2 ~]150.134,用# ip a 查看自身ens的号码】

# iptables -t nat -nL  查看结果:

3 ~]# ip route add default via 192.168.10.20         【添加网关】

# route -n 查看结果:

在做nat实验时需要开启双网卡主机的内核路由功能,否则双网卡主机的两个网卡如果不在同一个洪范范围是无法通信的。

2 ~]# vim /etc/sysctl.conf          【配置内核路由功能】

# sysctl -p  查看结果:

现在3 ~]10.128可以访问到1 ~]150.133了

dnat地址转换

2 ~]# iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 192.168.10.128

【将所有从ens160进入(访问)的网址都把地址改为3 ~]10.128

# iptables -t nat -nL 查看结果:

1 ~]# ssh -l root 192.168.150.134  访问结果:

firewalld管理

frewallid服务管理万式与iptables的管理方式区別

        • iptables是基于Linux内核的Netfiten子系统构建的,直接操作Netfilter;

libnftables库与Netfilter交互,提供了一个更高的抽象层

        • iptables使用基于表的规则集,包括filter、nat、mangle、raw及securty五个表;firewalld采用基于区域的规则集,包括default、public、internal、external和dmz五个区域

        • iptables的配置较为复杂,需要用户掌握特定的命令行语法;firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面

        • 由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilter的iptables来说较低

firewalld域

2 ~]# iptables -t nat -F          【清空指定nat表策略】

# systemctl disable --now iptables.service         【火墙】

# systemctl mask iptables.service

# systemctl unmask firewalld.service

# systemctl enable --now firewalld

# firewall-cmd --list-all  查看结果:

环境配置

2 ~]# vim /etc/firewalld/firewalld.conf         【修改firewalld默认管理底层】

# systemctl restart firewalld                【重启】

firewalld中默认使用的域是pubic

firewalld默认提供的九个zones的调用文件都保存在"/usr/lib/firewalld/zones/"目录下

firewall-cmd命令

2 ~]# firewall-cmd --get-default-zone     【查询默认区域】

# firewall-cmd --set-default-zone=trusted     【更改默认区域为trusted

# firewall-cmd --state           【查看当前状态】

# firewall-cmd --reload          【刷新】

# firewall-cmd --list-all            【查看默认区域】

# firewall-cmd --set-default-zone=public

# firewall-cmd --get-services           【查看可执行服务】

# firewall-cmd --add-service=dns          【临时添加允许dns访问】

# firewall-cmd --list-all 查看结果:

# firewall-cmd --permanent --add-service=dns          【永久更改】

# cat /etc/firewalld/zones/public.xml 查看结果:

# firewall-cmd --remove-service=dns

# firewall-cmd --reload                   【重启才会有效】

# firewall-cmd --permanent --remove-service=dns     【删除dns访问】

# firewall-cmd --reload

# firewall-cmd --list-all 查看结果:

# firewall-cmd --add-source=192.168.10.128/24 --zone=trusted     【默认允许10.128访问】

# firewall-cmd --remove-source=192.168.10.128/24 --zone=trusted     【删除访问策略】

# firewall-cmd --get-active-zones         【查看活跃域】

# firewall-cmd --list-all-zones             【显示所有网卡配置】

# vim /etc/nginx/nginx.conf              【配置网站端口】

# nginx -s reload                       【重启】

# netstat -antlupe | grep nginx  查看修改:

# firewall-cmd --add-service=http         【开启http也无法生效】

# firewall-cmd --add-port=8080/tcp        【允许8080端口访问】

# firewall-cmd --remove-port=8080/tcp      【删除端口】

firewalllld高级规则

Direct Rules

通过 firewall-cmd 工具,可以使用--direct选项在运行时间里增加或者移除链。如果不熟悉 iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。

I直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。

2 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 ! -s 192.168.10.128/24 -j ACCEPT        【禁止10.128访问】

# firewall-cmd --direct --get-all-rules         【查看规则】

地址伪装与端口转发

3 ~]# ip route add default via 192.168.10.20

# route -n 查看结果:

2 ~]# firewall-cmd --permanent --add-masquerade    【开启双网卡主机路由器】

# firewall-cmd --reload                        【reload完后F3就可以访问F1了】

2 ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=

192.168.10.128              【访问22端口都转到10.128】

# firewall-cmd --reload

1 ~]# ssh -l root 192.168.150.134  访问结果:

相关文章:

  • C++中IOstream解析
  • JAVA05基本数据类型和包装类的转换,转换成其他数据类型,包装类与字符串的转换+学生类的定义实例
  • 店铺长尾销售与动销率转型及开源AI智能名片链动2+1模式S2B2C商城小程序源码应用探讨
  • CloudCanal RAG x Ollama 构建全栈私有 AI 服务
  • C++可变参数宏定义语法笔记
  • 关于flutter中Scaffold.of(context).openEndDrawer();不生效问题
  • 【Golang笔记03】error、panic、fatal错误处理学习笔记
  • Go语言中内存释放 ≠ 资源释放
  • Java详解LeetCode 热题 100(20):LeetCode 48. 旋转图像(Rotate Image)详解
  • Linux入门(九)任务调度
  • 【Go】1、Go语言基础
  • 【Java高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
  • 今日行情明日机会——20250523
  • Selenium 测试框架 - Java
  • el-input宽度自适应方法总结
  • 深入解析Spring Boot与Redis集成:高性能缓存实践
  • [crxjs]自己创建一个浏览器插件
  • Android中Binder驱动作用?
  • 【AS32X601驱动系列教程】GPIO_点亮LED详解
  • 服务器修改/home的挂载路径
  • 可以看那种东西的浏览器/鄂州网站seo
  • 真人做爰视频网站免费/杭州网站优化方案
  • 网站个人简介怎么做/站长工具海角
  • 软件项目管理系统/青岛seo网络优化公司
  • 网站建设项目前分析/友情链接收录
  • 威海网站制作/全网整合营销