linux——Firewalld与iptables的基本配置

2023-11-15

Firewalld

Firewalld概述

  • 动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙,用以支持网络 “ zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
  • 系统提供了图像化的配置工具firewall-config、system-config-firewall,提供命令行客户端firewall-cmd,用于配置firewalld永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信

  • firewalld和iptables service 之间最本质的不同是:
    1、iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里
    2、使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接
    这里写图片描述
    基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域。

网络区名称 默认配置
trusted(信任) 可接受所有的网络连接
home(家庭) 用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服务连接
internal(内部) 用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接
work(工作) 用于工作区,仅接受ssh、ipp-client或dhcpv6-client服务连接
public(公共) 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external(外部) 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz(非军事区) 仅接受ssh服务接连
block(限制) 拒绝所有网络连接
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复

管理防火墙

1、安装防火墙软件
  • yum install firewalld firewalld-config -y
  • [root@client Desktop]# firewalld-config & firewalld的图形化管理
    这里写图片描述
2、启动和禁止防火墙
  • systemctl start firewalld
  • systemctl enable firewalld
  • systemctl stop firewalld
  • systemctl disable firewalld
3、使用命令行接口配置防火墙
  • 查看firewalld的状态
[root@client Desktop]# firewall-cmd --state 
running
  • 查看当前活动的区域,并附带一个目前分配给它们的接口列表
[root@client Desktop]# firewall-cmd --get-active-zones 
ROL
  sources: 172.25.0.252/32
public           ##网络区为公共
  interfaces: eth0
  • 查看默认网络区域
[root@client Desktop]# firewall-cmd --get-default-zone 
public
  • 查看所有可用区域
[root@client Desktop]# firewall-cmd --get-zones
ROL block dmz drop external home internal public trusted work
  • 列出指定域(public)的所有设置
[root@client Desktop]# firewall-cmd --zone=public --list-all 
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出指定域(block)的所有设置
[root@client Desktop]# firewall-cmd --zone=block --list-all 
block
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出所有预设服务
[root@client Desktop]# firewall-cmd --get-services 
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
  • 列出所有区域的设置
  • [root@client Desktop]# firewall-cmd --list-all-zones

  • 设置默认区域
[root@client Desktop]# firewall-cmd --set-default-zone=trusted 
success
[root@client Desktop]# firewall-cmd --get-default-zone 
trusted
[root@client Desktop]# firewall-cmd --get-active-zones 
ROL
  sources: 172.25.0.252/32
trusted      ##网络区为信任
  interfaces: eth0
  • 设置网络地址到指定的区域
  • firewall-cmd -permanent --add-source=172.25.254.27 --zone=trusted
  • firewall-cmd -permanent --add-source=172.25.254.27/24 --zone=trusted
    –permanent参数表示永久生效设置
    如果没有指定–zone参数,那么会加入默认区域
    172.25.254.27(IP指定)、172.25.254.27/24(网络位相同即可)
  • 删除指定区域中的网络地址
  • firewall-cmd -permanent --remove-source=172.25.254.27 --zone=trusted
  • 添加、改变、删除网络接口

查看指定级别的接口

[root@client Desktop]# firewall-cmd --list-interfaces 
eth0

查看指定接口的 Zone 信息

[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0
trusted

添加网络接口

[root@client Desktop]# firewall-cmd --add-interface=eth1 --zone=public 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
public

改变某接口至某信任等级,譬如改变 eth0 至 public

[root@client Desktop]# firewall-cmd --change-interface=eth0 --zone=public 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0
public
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
public

删除指定接口eth1

[root@client Desktop]# firewall-cmd --remove-interface=eth1 --zone=trusted 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
no zone
  • 添加、删除服务

添加

[root@client ~]# firewall-cmd --zone=public -add-service=http 
success
[root@client ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0 eth1
  sources: 
  services: dhcpv6-client http ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

删除

[root@client ~]# firewall-cmd --remove-service=http
success
[root@client ~]# firewall-cmd --reload   ##不完全刷新
success
[root@client ~]# firewall-cmd --list-all
[root@client ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0 eth1
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出、添加、删除端口
  • firewall-cmd --zone=public -list-ports
  • firewall-cmd --add-port=8080/tcp --zone=public
  • firewall-cmd --remove-port=8080/tcp --zone=public

  • 重新加载防火墙

    注意:这并不会中断已经建立的连接,如果打算中断,可以使用 –complete-reload选项)firewalld的规则被保存在/etc/firewalld目录下的文件中,你也可以直接编辑这些文件达到配置防火墙的目的。/usr/lib/firewalld目录下的内容是不可以被编辑的,但可以用做默认模板

4、Direct Rules
通过 firewall-wall-cmd 工具,可以使用 --direct 选项在运行时间里增加或者移除链。
如果不熟悉 iptables ,使用直接接口非常危险,因为可能会无意间导致防火墙被入侵。
直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。
直接端口模式添加的规则优先应用
firewall-cmd –-direct –get-all-rules   ##列出规则
firewall-cmd –-direct –add-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT   ##添加规则
firewall-cmd –-direct –remove-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT   ##删除规则

例如:不让50主机访问80端口的请求响应:
这里写图片描述
这里写图片描述

5、端口转发与地址伪装

在防火墙服务器上将伪装打开:
这里写图片描述
当50从端口登陆主机时,将50伪装
这里写图片描述
当访问本机22端口时,将其转到227这个主机上
这里写图片描述
刷新
这里写图片描述

IP为172.25.254.50的主机连接主机172.25.254.127时,将其转到主机172.25.254.227
测试
用50主机ssh连接136主机:
这里写图片描述
登陆的是227主机:
这里写图片描述
查看登陆者,登陆者是127。50主机被伪装起来了
这里写图片描述

Iptables

首先得保持一个纯净的环境,将firewalld关闭。安装iptables,并启动
  • yum install iptables-services -y 安装iptables
[root@client Desktop]# iptables -nL   ##查看策略
略,此时显示出的是 firewalld 的策略
[root@client Desktop]# systemctl stop firewalld.service 
[root@client Desktop]# systemctl disable firewalld.service 
[root@client Desktop]# systemctl start iptables.service 
[root@client Desktop]# systemctl enable iptables.service 
[root@client Desktop]# iptables -F    ##刷新策略
[root@client Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@client Desktop]#

(1)理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
(2)iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter
下面是数据包流向图:

这里写图片描述
数据包先经过PREOUTING,由该链确定数据包的走向:

  • 目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①—>②

  • 若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①—>③—>④—>⑥

  • 主机发送数据包时,流程则是⑤—>⑥

(3)iptables的规则书写:
基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]

iptables
[-t filter]
[-AI INPUT,OUTPUT,FORWARD]
[-io interface]
[-p tcp,udp.icmp,all]
[-s ip/nerwork]
[--sport ports]
[-d ip/network]
[--dport ports]
[-j ACCEPT DROP REJECT REDIRECT MASQUERADE LOG
DNAT SNAT MIRROR QUEUE RETURN MARK]

常用操作命令:
-A 在指定链尾部添加规则
-D 删除匹配的规则
-R 替换匹配的规则
-I 在指定位置插入规则


其他操作命令:
-L/S 列出指定链或所有链的规则
-F 删除指定链或所有链的规则
-N 创建用户自定义链
-X 删除指定的用户自定义链
-P 为指定链设置默认规则策略,对自定义链不起作用
-Z 将指定链或所有链的计数器清零
-E 更改自定义链的名称
-n ip地址和端口号以数字方式显示


常见规则匹配器说明:
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
–sport port1[:port2] 匹配源端口(可指定连续的端口)
–dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface
匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。
匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。


目标动作说明:
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方

实验

  • 显示filter表所有链的规则,默认为filter表
    这里写图片描述
    如上,可以看到filter三条链
  • 查看nat表的
    这里写图片描述
  • 注意一点:火墙设置的策略好坏会影响到传输速率的快慢,因为火墙规则读取是有先后顺序的。
  • NAT (Net Address Trancelate:网络地址转换)
  • SNAT(源地址转换)是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机
  • DNAT(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B

下面我们来模拟以下两个转换:

SNAT

实验准备:
双网卡主机:
这里写图片描述
单网卡主机:
IP:
这里写图片描述
网关:

这里写图片描述
注意:这里双网卡主机类似于路由器的功能。所以单网卡主机的网关必须是和本机ip处于同一网段而且是和双网卡主机上的一块网卡IP相同。

接下来在单网卡主机上ping网关,检查实验环境(结果如下图,说明双网卡主机网卡良好。):
这里写图片描述
在进行SNAT之前,单网卡主机是不能连接不同网段的172.25.254.50这台主机的 。
我们要用单网卡主机来连不同网段的主机,必须要做SNAT。在双网卡主机上做防火墙规则书写:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.127
查看火墙规则:
这里写图片描述
这时查看 net 表的ip转发功能,0代表未开启,则需要将其开启;1代表已开启:
这里写图片描述
注:开启方法

[root@client Desktop]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
[root@client Desktop]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1   ##添加
[root@client Desktop]# sysctl -p
net.ipv4.ip_forward = 1
[root@client Desktop]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1

此时在单网卡主机ping不同网段的主机,发现可以:
这里写图片描述
SNAT:局域网共享一个公网IP接入lnternel
好处如下:

  • 保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能。

  • Ipv4地址匮乏,很多公司只有一个ipv4地址,但是却有几百个用户需要上网,这个时候就需要使用SNAT。

  • 省钱,公网地址付费,使用SNAT只需要一个公网ip就可以满足几百人同时上网。

DNAT

在双网卡主机上书写规则:
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.20.227
这里写图片描述
从eth0接口进来的数据包我们将其目标地址转为172.25.20.227这台主机上

在172.25.254.50主机上测试——用ssh连接172.25.254.127:
这里写图片描述
但是却是登陆的172.25.20.227这台主机:
这里写图片描述
实现了目的地转换。

DNAT的用途(DNAT:向internel发布内网服务器 )
在内网中有服务器,如果想让公网用户访问有有两种方法:

  • 配置双网卡,一网卡对内,一网卡对外;一般是高访问量的web服务器,为了避免占用网关的流量才这样做,使用不是很广泛。

  • 内网web服务器,或是ftp服务器,为了用户在公网也可以访问,有不想买公网ip地址,采用DNAT方案。

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

linux——Firewalld与iptables的基本配置 的相关文章

随机推荐

  • 01Nginx源码分析之初探Nginx架构

    01Nginx源码分析之初探Nginx架构 注 接下来的源码分析我都是参考以下这位博主的 但是有些地方不对的我会修改 毕竟每个人理解不一样 并且版本为nginx stable 1 18 自娱自乐的代码人 1 初探Nginx架构 第一篇没什么
  • 深度学习之手写数字识别

    当我们开始学习编程的时候 第一件事往往是学习打印 Hello World 就好比编程入门有Hello World 机器学习入门有MNIST MNIST是一个入门级的计算机视觉数据集 它包含各种手写数字图片 它也包含每一张图片对应的标签 告诉
  • 【Python爬虫】urllib模块,User-agent

    通过 rullib模块 爬取html内容 文章目录 1 urllib模块分类 2 方法使用案例 3 重构User Agent 1 urllib模块分类 urllib request 请求模块 用于打开和读取 URL urllib error
  • 《宫本武藏》

    吉川英治 宫本武藏 地之卷 水之卷 火之卷 风之卷 http book sina com cn nzt his gongbenwuzang 空 二天之卷 http lianzai book qq com book 3746 缺少最后的 圆明
  • RealityCapture场景建模笔记

    Unity Photogrammetry Workflow 5 2 8 着色和贴纹理 Colorize or Texture 5 2 10 网格输出 Mesh export 输出附有颜色信息的Mesh 点云 5 2 8 着色和贴纹理 Col
  • kvm内存管理

    qemu kvm 进程很像一个普通的linux程序 它通过通常的malloc和mmap调用来申请内存 如果一个客户系统想使用1G物理内存 qemu kvm将会做一个malloc 1 lt lt 30 调用 在主机上申请1G的虚拟地址 然而
  • 固定阈值threshold Expected cv::UMat for argument 'mat'

    出错的原因是左边少了一个变量名 你的写法可能是这样 正确的应该是 加上那个变量名 后面用不着 但这里不加会报错 就好了
  • 6-JS的Fetch 跨域问题

    跨域访问 只要协议 主机 端口之一不同 就不同源 例如 http localhost 7070 a 和 https localhost 7070 b 就不同源 同源检查是浏览器的行为 而且只针对 fetch xhr 请求 如果是其它客户端
  • python常见方法汇总

    排序方法 sorted 对列表排序 sorted list 默认升序 对字典排序 def sorted by value dict data reverse True 字典按值降序排序 param dict data dict数据 reve
  • mysql error 1093(HY000) You can‘t specify target table ‘xx‘ for update in FROM clause

    错误代码 update sc set grade grade 1 1 where sno in select sno from sc group by sno having avg grade gt 75 报错详情 You can t sp
  • element UI的使用方法

    1 找官网 http element eleme io zh CN component quickstart 2 安装 cnpm i element ui S S表示 save 3 引入element UI的css 和 插件 import
  • MongoDB连接超时

    在java连接MongoDB时出现了如下连接超时的错误 解决如下 在MongoDB的配置文件中添加了bind ip 0 0 0 0表示任意地址都可以访问
  • WIFI探针原理

    WIFI 探针原理 WIFI 是基于IEEE802 11a b g n 协议 在标准协议中 定义了AP 无线接入点 和STA 站或客户端 的两种工作模式 协议中规定了BEACON ACK DATA PROBE 等多种无线数据帧类型 在站连接
  • Angular反向代理实现前端跨域

    angular2 提供了反向代理可以直接在前端代码中就可以实现跨域 具体的方法如下 在angular项目根目录新建了个proxy conf json配置文件 代码示例如下 api 将http localhost 4200 api通过代理实际
  • Failed to read artifact descriptor for

    使用idea建立的maven项目 pom文件报错 Failed to read artifact descriptor for org slf4j jcl over slf4j jar 1 7 22 less Ctrl F1 Inspect
  • 计量经济学学习与Stata应用笔记(二)小样本最小二乘法

    最小二乘法 OLS 是最基本的线性回归模型估计方法 小样本OLS 古典线性回归模型假定 古典线性回归模型有以下几个假定 线性假定 总体模型为 y i 1
  • excel函数把a列相同的数据所对应的b列整合到同一行

    把A列复制到C列 并删除重复值 然后再D列第一行使用如下函数 函数 TEXTJOIN TRUE IF A A C1 B B 写入函数之后 按Ctrl shift enter键
  • 学习笔记:yolo识别图片

    版权声明 本文为博主原创文章 未经博主允许不得转载 作用说明 我是菜鸟 这学习笔记 主要用于自我记录 YOLO 官方https pjreddie com darknet yolo 最新版本是YOLOv2 在使用前 要先安装Darknet 通
  • Java Math的 floor,round和ceil的总结

    floor 返回不大于的最大整数 round 则是4舍5入的计算 入的时候是到大于它的整数 round方法 它表示 四舍五入 算法为Math floor x 0 5 即将原来的数字加上0 5后再向下取整 所以 Math round 11 5
  • linux——Firewalld与iptables的基本配置

    Firewalld Firewalld概述 动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙 用以支持网络 zones 以分配对一个网络及其相关链接和界面一定程度的信任 它具备对 IP v4 和 IP v6 防火墙设置的支