Linux中的火墙策略优化

2023-10-31

双网卡主机环境配置:
在这里插入图片描述
在这里插入图片描述
单网卡主机配置:
在这里插入图片描述

一、火墙介绍

netfilter内核上有个安全插件netfilter(访问控制列表),这个列表里有许多详细的规则,当对这个规则允许或拒绝时,可以控制其他主机是否能访问,极大的提高了安全性。
iptables管理netfilter的工具,通过iptables往netfilter表格里面写网络安全策略
iptables|firewalld对iptables进行管理,用iptables / firewalld手段来写网络安全策略

二、火墙管理工具切换

  • 在rhel8中默认使用的是firewalld

firewalld----->iptables

dnf install iptables-services-1.8.4-10.el8.x86_64 -y
systemctl disable --now firewalld.service
systemctl mask firewalld.service
systemctl enable --now iptables.service

iptales -------> fiewalld

systemctl disable --now iptables.service
systemctl mask iptables.service
systemctl unmask firewalld.service
systemctl enable --now firewalld.service

在这里插入图片描述

三、iptables的使用及火墙默认策略

  • /etc/sysconfig/iptablesiptables 策略记录文件
  • 永久保存策略
    iptales-save > /etc/sysconfig/iptables
    service iptables save

1.默认策略中的5条链

input 输入
output 输出
forward 转发
postrouting 路由之后
prerouting 路由之前

2.默认的3张表

filter 经过本机内核的数据(input output forward) 控制访问我主机的数据
nat 不经过内核的数据(postrouting,prerouting,input,output) 经过我主机作地址转换的数据
mangle 当filter和nat表不够用时使用(input output forward postrouting,prerouting,) 对于以上俩表的过滤方式进行补充说明

在这里插入图片描述

3.iptables命令

-t 指定表名称
-n 不做解析
-L 查看
-A 添加策略
-p 协议
–dport 目的地端口
-s 来源
-j 动作—ACCEPT #允许 DROP #丢弃 REJECT #拒绝 SNAT #源地址转换 DNAT #目的地地址转换
-N 新建链
-E 更改链名称
-X 删除链
-D 删除规则
-I 插入规则
-R 更改规则
-P 更改默认规则
iptables -nL #查看所有表
iptables -t filter -L #查看filter表
iptables -t filter -nL #不解析查看filter表
iptables -t filter -F #清除filter表信息(临时清除,重启iptables服务后仍有信息)
service iptables save #保存更改
iptables-save > /etc/sysconfig/iptables #保存更改
iptables -A INPUT -j ACCEPT #建立内容
iptables -D INPUT 1 #删除
iptables -A INPUT -j REJECT #建立所有都无法接入主机
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #指定端口22可以接入
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT #插入顺序第一条
iptables -R INPUT 1 -s 172.25.51.0/24 -p tcp --dport 22 -j ACCEPT #允许指定网段
iptables -P INPUT DROP #更改默认规则为DROP
iptables -N jiajiren #新建链
iptables -E jiajiren jiajirenlove #更改链名称
iptables -X jiajirenlove #删除链

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.数据包状态

RELATED 建立过连接的
ESTABLISHED 正在连接的
TABLISHED 正在连接的
NEW 新的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT #允许从回路接口进入
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT #允许所有主机都可通过22端口[ssh服务]进入此主机
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT #允许所有主机都可通过80端口[httpd服务]进入此主机
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT #允许所有主机都可通过53端口[dns服务]进入此主机
iptables -A INPUT -m state --state NEW -j REJECT #拒绝所有主机接入
service iptables save #保存

5.iptables中的NAT

(1)SNAT(源地址转换)

iptables -t nat -nL #查看nat表
iptables -t nat -A POSTROUTING -o ens3 -j SNAT --to-source 172.25.254.151 #
sysctl -a | grep ip_forward #检测内核路由功能,双网卡的俩网卡能通信的原因是内核是具备路由功能的,开了之后,双网卡的处于不同网段的ip才可以互相通信
vim /etc/sysctl.conf
///
net.ipv4.ip_forward=1
///
sysctl -p #功能立即开启

在这里插入图片描述
在这里插入图片描述

做了源地址转换后,172.25.51网段的主机也可以和172.25.254网段的主机通信
注:单网卡主机172.25.51网段的主机网关为双网卡主机中的172.25.51.100
在这里插入图片描述
(2)DNAT(目的地地址转化)

iptables -t nat -A PREROUTING -i ens3 -j DNAT --to-dest 172.25.51.200

在这里插入图片描述
做了目的地地址转换后,登陆双网卡172.25.254.151主机,ip地址显示的会是单网卡主机172.25.51.200的ip
在这里插入图片描述

四、firewalld

1.firewalld的开启

systemctl disable --now iptables.service
systemctl unmask firewalld.service
systemctl enable --now firewalld
systemctl mask iptables.service

2.关于firewalld的域

~ ~
trusted 接受所有的网络连接
home 用于家庭网络,允许接受ssh mdns ipp-client samba-client dhcp-client
work 工作网络 ssh ipp-client dhcp-client
public 公共网络 ssh dhcp-client
dmz 军级网络 ssh
block 拒绝所有
drop 丢弃 所有数据全部丢弃无任何回复
internal 内部网络 ssh mdns ipp-client samba-client dhcp-client
external ipv4网络地址伪装转发 sshd

实验

dnf install httpd -y
systemctl enable --now httpd
echo hello > /var/www/html/index.html
cat /var/www/html/index.html

(1)当默认域设定为trusted:

在这里插入图片描述

真机和b主机都可以访问且连接
在这里插入图片描述在这里插入图片描述
(2)当默认域设定为public:
在这里插入图片描述
都不能访问但ssh服务可以连接
在这里插入图片描述
在这里插入图片描述
(3)当默认域设定为block:
在这里插入图片描述
不能做任何操作
在这里插入图片描述在这里插入图片描述

3.关于firewalld的设定原理及数据存储

  • 火墙当前域的设定状态文件/etc/firewalld/firewalld.conf
  • firewalld服务将域的工作方式设定完成在/usr/lib/firewalld当中有已经封装好的域的配置文件
  • 火墙的应用模块在/usr/lib/firewalld/services

4.firewalld的管理命令firewalld的管理命令

firewall-cmd --state #查看火墙状态
firewall-cmd --list-all #查看默认域中的火墙策略
firewall-cmd --get-active-zones #查看当前火墙中生效的域
firewall-cmd --get-default-zone #查看默认域
firewall-cmd --set-default-zone=trusted #设定默认域
firewall-cmd --list-all --zone=dmz #查看指定域的火墙策略
firewall-cmd --get-services #查看所有可以设定的服务
firewall-cmd --permanent --add-service=westos #添加服务
firewall-cmd --reload #重新加载服务
firewall-cmd --permanent --remove--service=westos #移除服务
firewall-cmd --permanent --add-source 172.25.51.0/24 --zone=trusted #指定数据来源访问指定域
firewall-cmd --permanent --remove-source 172.25.51.0/24 --zone=trusted #删除自定域中的数据来源
firewall-cmd --permanent --remove-interface=ens3 --zone=public #删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens3 --zone=trusted #添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens3 --zone=public #更改网络接口到指定域

自己编写一个服务(firewalld的原理):
在这里插入图片描述

在这里插入图片描述
当指定数据来源访问指定域172.25.51.0/24:
在这里插入图片描述在这里插入图片描述

当删除添加指定域的网络接口:
在这里插入图片描述在这里插入图片描述

5.firewalld的高级规则

firewall-cmd --direct --get-all-rules #查看高级规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.51 -p tcp --dport 80 -j REJECT #除了254.51主机以外其他都拒绝
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 ! -s 172.25.254.51 -p tcp --dport 80 -j REJECT #删除

在这里插入图片描述

6.firewalld中的NAT

(1)SNAT

firewall-cmd --permanent --add-masquerade #开启地址伪装
firewall-cmd --reload

此时51.200的网段主机也可以访问254.51网段的主机
在这里插入图片描述
(2)DNAT

firewall-cmd --permanent --add-masquerade #必须在开启地址伪装的基础上
firewall-cmd --add-forward-port=port=22:proto=tcp:toaddr=172.25.51.200 #将登陆本台主机的地址转换到200的地址上去
firewall-cmd --reload
firewall-cmd --remove-forward-port=port=22:proto=tcp:toaddr=172.25.51.200 #删除

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中的火墙策略优化 的相关文章

  • 如何更改 Kubernetes 中的文件系统观察程序限制 (fs.inotify.max_user_watches)

    我在用着pm2 https github com Unitech pm2查看保存我的应用程序服务器的 NodeJS 程序源代码的目录 该程序在 Kubernetes 集群中运行 但是 我收到此错误 ENOSPC System limit f
  • 我如何知道用户在使用 ncurses (Linux) 的控制台中按下了 ESC 键?

    I have a problem in detecting whether I just got a plain ESC key just code 27 or whether it was another special key such
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • 在linux中使用setcap [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 要将 cap net raw 功能添加到 例如 bin ping 我们使用以下命令 setcap cap net raw ep bin ping ep
  • C 标准库函数与系统调用。哪个是“open()”?

    I know fopen 在C标准库中 所以我绝对可以调用fopen C 程序中的函数 我感到困惑的是为什么我可以打电话给open 功能也一样 open 应该是系统调用 所以它不是标准库中的C函数 因为我能够成功地调用open 函数 我调用
  • 我如何知道 std::map 插入成功还是失败?

    我在多线程应用程序中有一个映射 将名为 uuid 的类映射到指针 我想知道插入操作是否成功或失败 e g mymap insert hint MyMap value type entry uuid itemptr 如果失败的话会抛出异常或者
  • 并发 I/O - 缓冲区损坏、块设备驱动程序

    我开发块分层设备驱动程序 所以 我拦截WRITE请求并加密数据 并解密数据end bio 例行程序 在处理和READ要求 所以在单流中一切正常 但是 如果尝试同时从两个或更多进程执行 I O 我会遇到缓冲区内容损坏的情况 我没有任何本地存储
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • 我可以告诉 Linux 不要交换特定进程的内存吗?

    有没有办法告诉 Linux 它不应该将特定进程的内存交换到磁盘 它是一个 Java 应用程序 所以理想情况下我希望有一种方法可以从命令行执行此操作 我知道您可以将全局交换性设置为 0 但这明智吗 您可以通过以下方式执行此操作姆洛克尔 2 h
  • Git - 致命:无法获取当前工作目录?

    When I git clone从回购协议中 我得到 fatal Could not get current working directory No such file or directory 我该怎么办 我检查了服务器并发现 git文
  • Tomcat 中的 403 访问被拒绝

    我有以下内容tomcat users xml
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • 如何在 .zip 文件中使用 grep

    有 3 个文件 a csv b csv c csv 压缩为 abh zip 现在可以在 abh zip 上执行 grep 命令 是否有任何通配符 仅对里面的 c csv 文件运行 grep压缩 如果你有zipgrep 据我所知 它是随zip
  • 主动\被动模式下 FTP 服务器的适当 iptables 规则

    我在 CentOS6 上安装了 ProFTPD 服务器 如果我使 ftp 本地主机 我可以正确连接 但如果我从外部尝试 我会收到消息 没有到主机的路由 但有一条到主机的路由 因为我是通过 SSH 连接的 我尝试添加以下 iptable 规则
  • Java 内存错误:无法创建新的本机线程

    运行 java 服务器时 我在 UNIX 服务器上收到此错误 Exception in thread Thread 0 java lang OutOfMemoryError unable to create new native threa
  • 如何使用 sed 交换两行?

    有谁知道如何更换line a with line b and line b with line a使用 sed 编辑器在文本文件中 我可以看到如何用保留空间中的一行替换模式空间中的一行 即 Paco x or Paco g 但是如果我想采取

随机推荐

  • TypeScript入门二(类型)

    1 TypeScrip 的静态类型 TypeScript 的一个最主要特点就是可以定义静态类型 英文是 Static Typing 那到底是什么意思那 太复杂的概念性东西这里就不讲了 你可以简单的理解 静态类型 为 就是你一旦定义了 就不可
  • js 数据转换(保留两位小数,去除前面多余的0等)

    保留两位小数 不够的添0补齐 function changeTwoDecimal f x var f x parseFloat x if isNaN f x return 0 var f x Math round x 100 100 var
  • 为什么const 定义的对象和数组可以改变它的值呢

    碰到这个问题我第一反应是肯定不能改变 如果要改变值的话 用const定义干嘛 然后不信邪在浏览器控制台试试结果 卧槽 但是定义一个基本类型 确实改不了 那为什么const 定义的对象和数组可以改变它的值呢 我来为大家解释一下 都知道对象和数
  • Unity3D实战【七】Cinemachine & Post Processing 摄像机跟踪和后处理

    一 摄像机跟随 1 PackManger中安装Cinemachine 2 点击菜单栏的Cinemachine gt Create Virtual Camera 会代替原来的Main Camera 3 调整参数 Body Framing Tr
  • js中根据已知key得到某对象中相对应的value的方法

    给自己打个小广告 有开发APP 小程序 网站 后台系统需求 或者 想学习前端的可以私信我哈 var key accountBingFlag1 var value obj key var key accountBingFlag1 var va
  • 如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中 对于code的生成patch和打patch 应用patch 成为经常需要做的事情 什么是patch 简单来讲 patch中存储的是你对代码的修改 什么是生成patch 生成patch就是记录你对代码的修改并将
  • python-selenium-规避检测,无头浏览器

    1 无头浏览器 取消的浏览器的可视化界面 在一定程度上加了自动化速度 chrome options Options chrome options add argument headless chrome options add argume
  • Eclipse 解决JSON parse error: Invalid UTF-8 总结 完善

    今天在本地测试通过的代码 部署之Tomcat 服务器 前端同事给我反馈如下的错误信息 org springframework http converter HttpMessageNotReadableException message JS
  • 下载的python没有pip_python – 所有依赖项都不会通过“pip download”下载

    我正在尝试使用可以在没有互联网连接的计算机上重新安装的软件包来设置本地目录 但是我遇到了一些软件包的问题 我首先下载包 pip download r requirements txt d my packages no binary all
  • python_元组_1.07

    一 元组 1 定义 python的元组与列表类似 不同之处在于元组的元素一旦定义就不能修改 添加 删除 可以访问 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 course chinese ma
  • 微信小程序-消息提示框实例

    做Android的时候对toast是很熟悉的 微信小程序开发中toast也是重要的消息提示方式 提示框 wx showToast OBJECT 显示消息提示框 OBJECT参数说明 示例代码 wx showToast title 成功 ic
  • 第5讲:业务扩展模型图

    业务扩展模型图主要是将雨雾流程相关的重要人 事 物及这个业务流程所要达成的目标做一个链接 不过有关业务流程的内部细节 通常不会在这张图中介绍 一 元素 1 1 流程 Process 代表一连串有意义的工作流程 在一个 流程 中通常要达成一个
  • myeclipse出现Could not find the main class原因分析

    昨天晚上像往常一样打开myeclipse 随便运行一个类 run as java application 居然弹出Could not find the main class Program will exit 按照以往的经验 做如下检查 编
  • 【Unity】ShaderToys——将大神们写的shader搬到unity中来吧

    这篇文章翻译自国外的一篇文章 这里是原文链接 正在使用unity的你是否在shader toy上发现很多牛逼哄哄的shader却不知道如何使用 那么这篇文章就是帮助你来进行转换的 本文只是基础文章 那些对HLSL CG GLSL都很熟悉的大
  • 后台权限管理系统(2)——系统基础数据的展示

    目录 1 页面效果展示 2 具体实现 2 1 订单管理模块 2 1 1 订单展示页面 2 1 2 订单详情页面 1 页面效果展示 实现效果如下 订单管理页面 产品管理页面 2 具体实现 2 1 订单管理模块 2 1 1 订单展示页面 点击订
  • opencv imread图像读取不成功

    不论是imread读取相对路径还是绝对路径 如果imread读取不成功 显示Nnoe 很有可能是你的路径名字中含有中文 检查你的路径中是否含有中文 有的话将其改为英文 1 相对路径示例 import cv2 假如图像文件位于当前工作目录下的
  • 对 TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)函数在PWM应用中的理解

    注意 以下为本人理解 并非权威 仅做参考 虚心接受指正 首先看原函数如下 void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert
  • JSONP解决跨域数据访问问题

    介绍 JSONP JSON with Padding 是JSON 的一种 使用模式 可用于解决主流浏览器的跨域数据访问的问题 还是那句话 JSONP虽然用不到 但是要了解 后续要用CORS JSONP实现原理 由于浏览器同源策略的限制 网页
  • 001 linux 导学

    前言 本文建立在您已经安装好linux环境后 本文会向您介绍Shell的一些常用指令 什么是linux Linux是一种自由和开放源代码的类UNIX操作系统 该操作系统的内核由林纳斯托瓦兹在1991年首次发 布 之后 在加上用户空间的应用程
  • Linux中的火墙策略优化

    目录 一 火墙介绍 二 火墙管理工具切换 三 iptables的使用及火墙默认策略 1 默认策略中的5条链 2 默认的3张表 3 iptables命令 4 数据包状态 5 iptables中的NAT 四 firewalld 1 firewa