(二)Linux 防火墙----网络防火墙,NET,firewalld

2023-05-16

文章目录

  • 六. 网络防火墙
    • 综合实验:
  • 七. NAT
    • 2. SNAT
    • 3. DNAT(重点***)(端口映射,只能一对一)
    • 4. 转发(端口重定向redirect)重点
  • 八. firewalld服务(centos 7)
    • firewalld zone分类
    • 预定义服务
    • firewalld配置
    • firewall-cmd 命令选项
  • 九. firewall其它规则
    • 管理rich规则
    • rich日志规
    • 伪装和端口转发
    • 端口转发
    • 练习

六. 网络防火墙

iptables/netfilter网络防火墙
(1) 充当网关
(2) 使用filter表的FORWARD

注意的问题
(1) 请求-响应报文均会经由FORWARD链,要注意规则的方向性
(2) 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行

综合实验:

A:net网(内网)
B:桥接网卡(外网)
在这里插入图片描述
中间的要启用路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p生效

希望:内网A可以访问外网,
外网B不能访问内网
穿过forward

iptables  -A FORWARD -j RJECT

iptables -I FORWARD 1 -s 192.168.245.0/24 -p icmp --icmp-type 8 -j ACCEPT  请求同意
iptables -I FORWARD 1 -d 192.168.245.0/24 -p icmp --icmp-type 0 -j ACCEPT 应答

或者(意思是,只要ping出去,回来的报文就能收到)
iptables -I FORWARD 1 -s 192.168.245.0/24 -p icmp --icmp-type 8 -j ACCEPT  请求同意
iptables -I FPRWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

希望内网可以访问外网的http/https服务mod_ssl

iptables -I FORWARD 2  -s 192.168.245.0/24 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -I FPRWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

希望外网可以访问内网的http/https服务

iptables -I FORWARD 2  -d 192.168.245.129 -p tcp -m multiport --dports 80,443 -j ACCEPT

将内访问外网的规则规划为一个新的链
iptabkes -N TOINTERNET
在这里插入图片描述
将自定定义的规则关联到forward中
也就是在forward中塞入一个规则
iptables -I FORWORD 2 -j TOINTERNET
在这里插入图片描述
最后如果想有什么变化,就可以直接修改自定义连,而无需动用FORWARD链

删除自定义链

iptables -D FORWARD 2
iptables -F TOINTERNET
iptables -X TOINTERNET

共有ip
在这里插入图片描述

私有地址
在这里插入图片描述
查看自己先在用什么ip上网(公有地址)
在这里插入图片描述

不能用公有地址,配置自己的局域网
例如:如果自己的局域网配成8.8.8.8/8
那么8.0.0.0/8这个网段的主机会导致所有外网都不能访问
可与用NAT—套NAT解决(不建议)

七. NAT

实现局域网(用私有地址)访问互联网
一般会在NAT上设置正向代理

NAT: network address translation
PREROUTING,INPUT,OUTPUT,POSTROUTING
请求报文:修改源/目标IP,由定义如何修改
响应报文:修改源/目标IP,根据跟踪机制自动实现

在局域网方外外网是,他会将局域网中的私有地址(用NET)转换为共有地址,进而访问外网,同理回应包,也会转换为私有地址,给局域网内部

SNAT:source NAT POSTROUTING, INPUT
让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装(只替换原地址
请求报文:修改源IP

DNAT:destination NAT PREROUTING , OUTPUT
把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP(只替换目标地址

请求报文:修改目标IP

PNAT端口和IP都参与转换(每一台电脑对应一个端口)
端口和IP都进行修改

2. SNAT

请求报文:修改源IP,变成公网ip,也就是最后局域网的地址就会映射为公网ip(代替了内网的私有网络)

实现SNAT:局域网访问外网

网管关心(管理企业内部的网络)
在这里插入图片描述

nat表的target:

SNAT:固定IP,企业专线

--to-source [ipaddr[-ipaddr]][:port[-port]]固定的地址(防火墙上的公网地址)
--random
	最后的汇总用POSTROUTING,必须是局域网
	nat表,做地址转换
	
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP

示例:

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT 
 --to-source 172.18.1.6-172.18.1.9

MASQUERADE:动态IP,如拨号网络
需要伪装

--to-ports port[-port]
--random

-j MASQUERADE  伪装,一直用这一个公有地址替换
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

iptables  -nvL -t nat

示例:

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE

实现SNAT局域网访问外网

因为firewall和公网在同一网段,所以这里不需要网关

在这里插入图片描述
所以直接用ApingB,不通,因为B没有网关,消息回不来
所以给他配置SNAT,拿firewall右端的公网替代
注意中间的firewall的路由转发功能必须启用
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -s 192.168.245.0/24 -j SNAT --to-sourse 172.16.0.7
iptables -nvL -t nat

在这里插入图片描述

3. DNAT(重点***)(端口映射,只能一对一)

请求报文:修改目标IP(端口映射,只能一对一)

外网访问内网,当做调度器
在prorouting 链
nat表

运维关注:DNAT,反向代理,等
在这里插入图片描述

DNAT

--to-destination [ipaddr[-ipaddr]][:port[-port]]
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]

示例

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080


例如:外网可以访问内网(局域网),通过DNAT(如SNAT的图)
将访问172.16.0.7,转换成访问192.168.245.129
iptables -t nat -A PROROUTING -d 172.16.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.245.129

4. 转发(端口重定向redirect)重点

将用户访问,本地的端口,转发到另一个端口上去
例如将80------转发到 8080上
在本地服务器转发,而不是firewall转发
REDIRECT:
NAT表
可用于:PREROUTING OUTPUT 自定义链
通过改变目标IP和端口,将接受的包转发至不同端口

--to-ports port[-port]

示例:

80 端口转发给8080

 iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080

八. firewalld服务(centos 7)

firewalld是CentOS 7.0新推出的管理netfilter的工具
firewalld是配置和监控防火墙规则的系统守护进程。可以实现
iptables,ip6tables,ebtables的功能

firewalld服务由firewalld包提供
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
归入zone顺序
先根据数据包中源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone默认为public zone,管理员可以改为其它zone

网卡默认属于public zone,lo网络接口属于trusted zone(信任)
在这里插入图片描述
自己添加协议,端口等
在这里插入图片描述

firewalld zone分类

在这里插入图片描述
dmz两道防火墙,中间夹层(写入局域网可以被访问的主机)

在这里插入图片描述

预定义服务

在这里插入图片描述

firewalld配置

注意iptables和firewall会有所冲突,只能启用一个

firewall-cmd --get-services 查看预定义服务列表
预定义服务的配置
三种配置方法
firewall-config (firewall-config包)图形工具(立即生效)
缺点;如果某些服务,用的不是标准端口,那么就不行
可以自己(定义)添加
firewall-cmd (firewalld包)命令行工具

/etc/firewalld/ 配置文件,一般不建议

firewall-cmd 命令选项

--get-zones 列出所有可用区域
--get-default-zone 查询默认区域

--set-default-zone=<ZONE>设置默认区域
--get-active-zones 列出当前正使用的区域
--add-source=<CIDR>[--zone=<ZONE>]添加源地址的流量到指定区域,如果无--zone= 选项,使用默认区域
--remove-source=<CIDR> [--zone=<ZONE>] 从指定区域中删除源地址的流量,如无--zone= 选项,使用默认区域
--add-interface=<INTERFACE>[--zone=<ZONE>] 添加来自于指定接口的流量到特定区域,如果无--zone= 选项,使用默认区域

--change-interface=<INTERFACE>[--zone=<ZONE>] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域

--add-service=<SERVICE> [--zone=<ZONE>] 允许服务的流量通过,如果无--zone= 选项,使用默认区域

--add-port=<PORT/PROTOCOL>[--zone=<ZONE>] 允许指定端口和协议的流量,如果无--zone= 选项,使用默认区域

--remove-service=<SERVICE> [--zone=<ZONE>] 从区域中删除指定服务,禁止该服务流量,如果无--zone= 选项,使用默认区域

--remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] 从区域中删除指定端口和协议,禁止该端口的流量,如果无--zone= 选项,使用默认区域
--reload 删除当前运行时配置,应用加载永久配置
--list-services 查看开放的服务
--list-ports 查看开放的端口
--list-all [--zone=<ZONE>] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如果无--zone= 选项,使用默认区域

保存
   在命令的最后加 --permanent
生效 
   用firewall-cmd --reload

查看默认zone
firewall-cmd --get-default-zone
默认zone设为dmz
firewall-cmd --set-default-zone=dmz

在internal zone中增加源地址192.168.0.0/24的永久规则

firewall-cmd --permanent --zone=internal --addsource=192.168.0.0/24

在internal zone中增加协议mysql的永久规则

firewall-cmd --permanent –zone=internal --add-service=mysql

加载新规则以生效
firewall-cmd --reload

在这里插入图片描述

实验:配置firewalld
systemctl mask iptables 无法手动启动iptables
systemctl mask ip6tables 取消无法手动启动
systemctl status firewalld
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --zone=public --list-all
firewall-cmd --permanent --zone=public --add-port 8080/tcp
firewall-cmd —reload

九. firewall其它规则

在centos7中配置完iptables可以看到
而centos8看不到

当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
rich-rules 富规则,功能强,表达性语言

Direct configuration rules 直接规则,灵活性差
帮助:man 5 firewalld.direct

管理rich规则

rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发伪装和限制速率(拨号)

rich语法

rule
 [source]
 [destination]
 service|port|protocol|icmp-block|masquerade|forward-port
 [log]
 [audit]
 [accept|reject|drop]

man 5 firewalld.richlanguage

规则
规则实施顺序
该区域的端口转发,伪装规则
该区域的日志规则
该区域的允许规则
该区域的拒绝规则

每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效

rich规则选项

--add-rich-rule='<RULE>'              
		 Add <RULE> to the specified zone, or the default zone if no zone is specified.
--remove-rich-rule='<RULE>' 
	Remove <RULE> to the specified zone, or the default zone if no zone	is specified.
--query-rich-rule='<RULE>' 
	Query if <RULE> has been added to the specified zone, or the default
zone if no zone is specified. Returns 0 if the rule is	present,otherwise 1.

--list-rich-rules 
	Outputs all rich rules for the specified zone, or the default zone if no zone is specified.

rich规则示例
拒绝从192.168.0.11的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6
firewall-cmd --permanent --zone=public --add-rich-rule=‘rule
family=ipv4 source address=192.168.0.11/32 reject’

限制每分钟只有两个连接到ftp服务
firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m
accept’

抛弃esp( IPsec 体系中的一种主要协议)协议的所有数据包
firewall-cmd --permanent --add-rich-rule=‘rule protocol value=esp drop’

接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule=‘rule family=ipv4
source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept’

rich日志规

log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit
value="<RATE/DURATION>"]
<LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
<DURATION> s:秒, m:分钟, h:小时, d:天
audit [limit value="<RATE/DURATION>"]

接受ssh新连接,记录日志到syslog的notice级别,每分钟最多三条信息

firewall-cmd --permanent --zone=work --add-rich-rule='rule service
name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept

从2001:db8::/64子网的DNS连接在5分钟内被拒绝,并记录到日志到audit,每小时最大记录一条信息

firewall-cmd --add-rich-rule='rule family=ipv6 source
address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300

规则例子

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
address=172.25.X.10/32 service name="http" log level=notice
prefix="NEW HTTP " limit value="3/s" accept'

firewall-cmd --reload

tail -f /var/log/messages

curl http://serverX.example.com

伪装和端口转发

NAT网络地址转换,firewalld支持伪装和端口转发两种NAT方式
伪装NAT
firewall-cmd --permanent --zone= --add-masquerade
firewall-cmd --query-masquerade 检查是否允许伪装
firewall-cmd --add-masquerade 允许防火墙伪装IP
firewall-cmd --remove-masquerade 禁止防火墙伪装IP
示例

firewall-cmd --add-rich-rule='rule family=ipv4 source
address=192.168.0.0/24 masquerade'

端口转发

端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口。
通常要配合地址伪装才能实现

firewall-cmd --permanent --zone=<ZONE> --add-forwardport=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUM
BER>][:toaddr=<IPADDR>]

说明:toport= 和toaddr= 至少要指定一个
示例
转发传入的连接9527/TCP,到防火墙的80/TCP到public zone 的192.168.0.254
firewall-cmd --add-masquerade 启用伪装
firewall-cmd --zone=public --add-forwardport=port=9527:proto=tcp:toport=80:toaddr=192.168.0.254

rich规则语法

forward-port port=<PORTNUM> protocol=tcp|udp [toport=<PORTNUM>] [to-addr=<ADDRESS>]

示例
转发从192.168.0.0/24来的,发往80/TCP的流量到防火墙的端口8080/TCP
firewall-cmd --zone=work --add-rich-rule=‘rule family=ipv4 source
address=192.168.0.0/24 forward-port port=80 protocol=tcp toport=8080’

例如

firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source
address=172.25.X.10/32 forward-port port=443 protocol=tcp toport=22'

firewall-cmd --reload

ssh -p 443 serverX.example.com

练习

说明:以下练习INPUT和OUTPUT默认策略均为DROP
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100
个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允
许响应报文离开本机
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0
网络中的主机访问;数据下载请求的次数每分钟不得超过5个
3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的学号,新
请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机
4、拒绝TCP标志位全部为1及全部为0的报文访问本机
5、允许本机ping别的主机;但不开放别的主机ping本机

练习:判断下述规则的意义
iptables -N clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -d 172.16.100.7 -j RETURN
iptables -A INPUT -d 172.16.100.7 -j clean_in
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT

1 实现主机防火墙
放行telnet, ftp, web服务
放行samba服务
放行dns服务(查询和区域传送)
2 实现网络防火墙
放行telnet, ftp, web服务
放行samba服务
放行dns服务(查询和区域传送)

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

(二)Linux 防火墙----网络防火墙,NET,firewalld 的相关文章

  • 如何使用Google TV设置Chromecast

    Justin Duino 贾斯汀 杜伊诺 Justin Duino Google changed up its streaming platform with the release of the Chromecast with Googl
  • 【SpringBoot教程】RequestBody对象数组提交接口开发实战

    专栏地址 系列教程更新中 x1f680 专栏介绍 本专栏为SpringBoot 43 Spring 43 Mybatis的系列零基础教程 xff0c 从框架的基础知识讲起 xff0c 从0开始实现一个在线教育实战项目 x1f680 源码获取
  • 【ChatGPT快速搭建】手把手教你搭建一个可快速响应的ChatGPT网站,并通过DNS域名部署上线

    x1f680 本篇文章会实现一个不用 魔法方法 也可以访问运行的ChatGPT网站 x1f680 实现 网站部署 gt 域名购买 gt DNS解析 gt 公开上线 ChatGPT搭建全流程 1 先看最终效果2 vervel网站部署工具简介3
  • C/C++语言:判断是否是素数

    题目 xff1a 给出一个大于等于2的正整数 n xff0c 判断它是不是一个素数 xff08 质数 xff09 注 xff1a 1 素数 xff08 质数 xff09 xff1a 除了1和它本身之外 xff0c 没有其他的因数 xff1b
  • 信息系统项目管理-信息化和信息系统-一

    一 信息资源日益成为重要生产要素 无形资产和社会财富 xff0c 被认为是与土地 能源 材料同等重要的战略资源 二 信息论 与控制论 系统论并称为现代科学的三论 三 信息系统突出的三大系统特性开放性 脆弱性 健壮性 四 管理模型是指系统服务
  • java中的异常处理

    异常概述 异常的作用 xff1a 增强程序的健壮性 java中异常以什么形式存在 xff1f 异常在java中以类的形式存在 xff0c 每一个异常类都可以创建异常对象 JVM执行到某一处觉得有异常 xff0c 会new异常对象 xff0c
  • 人工智能在医学影像中的研究与应用

    人工智能在医学影像中的研究与应用 韩冬 李其花 蔡巍 夏雨薇 宁佳 黄峰 沈阳东软医疗系统有限公司 xff0c 辽宁 沈阳 110167 慧影医疗科技 xff08 北京 xff09 有限公司 xff0c 北京 100192 东软集团股份有限
  • 开始

    文章目录 徐工本科生 希望明天更好 xff0c 今天开始扬帆起航 新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右
  • Linux-生产者消费者模型

    生产者消费者模型 生产者消费者模型概念生产者消费者模型特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型 模拟实现生产者消费者模型多生产者和多消费者 生产者消费者模型概念 生产者消费者模型
  • Ubuntu20.04下更新系统Python版本

    起因 xff1a 写Python时报错 xff1a TypeError unsupported operand type s for 61 dict and dict 原因 xff1a python3 9 支持对 dict 类型使用 xff
  • Ubuntu密码忘记怎么办

    1 重启Ubuntu xff0c 长按shift出现以下界面 xff0c 按回车键 2 紧接着进入如下界面 xff0c 选中recovery mode的选项 xff0c 按 e 进入界面 xff0c 务必记得不要按enter键 3 找到下图
  • 小程序视频截gif_3个简单的应用程序,可让您深入视频和GIF

    小程序视频截gif Deepfakes make it possible to manipulate videos and GIFs The technology has become so easy to use you can now
  • Spring框架详解(建议收藏)

    1 什么是Spring xff1f 官网 xff1a https spring io 侠义的Spring是指Spring框架 xff08 Spring Fremework xff09 https spring io projects spr
  • Debian (Linux)安装UFW防火墙

    Debian Linux 安装UFW防火墙 1ufw简介 UFW xff0c 即简单防火墙 xff0c 是iptables的接口 xff0c 旨在简化防火墙的配置过程 尽管iptables是可靠且灵活的工具 xff0c 但对于初学者而言 x
  • 高性能动画JSON动画

    animejs 它是一个js动画库 xff0c 是对transform进行封装 xff0c 使其受js控制 拥有更高性能和很好的兼容 最重要的是 xff1a 提供了很多回调 监听方法 eg 每帧回调 每次循环回调 循环开始的回调 提供了一个
  • C++ 生产者消费者示例代码

    三部分构成 xff1a 生产者 消费者 仓储 span class token macro property span class token directive keyword include span span class token
  • 7-1 将数组中的数逆序存放 (15 分)

    7 1 将数组中的数逆序存放 15 分 本题要求编写程序 xff0c 将给定的n个整数存入数组中 xff0c 将数组中的这n个数逆序存放 xff0c 再按顺序输出数组中的元素 输入格式 输入在第一行中给出一个正整数n xff08 1 n 1
  • JavaFX学习笔记(最全,最详细)

    文章目录 Java JavaFX桌面GUI开发1 基本概念2 最小框架代码3 控件布局4 xff0c 初步认识stage窗口5 xff0c stage窗口模式 StageStyle 6 xff0c screen类的使用7 xff0c Gro
  • vue3安装和开发环境搭建

    文章目录 一 xff0c 简介二 xff0c vue cil 搭建 vue3 开发环境三 xff0c 增加typescipt 一 xff0c 简介 二 xff0c vue cil 搭建 vue3 开发环境 1 xff0c 安装 xff1a
  • 使用vite创建vue项目和使用vue-cli创建项目的区别

    文章目录 一 xff0c 介绍二 xff0c vite创建项目介绍三 xff0c vue cli创建项目介绍 xff08 1 xff09 安装升级 xff08 2 xff09 创建项目 一 xff0c 介绍 Vite 是一个 web 开发构

随机推荐