firewalld 网络端口安全详细介绍

redhat7 network port security 网络端口安全

目录:

* 1.firewald ---firewalld 服务

* 2.configuring a firewall---配置防火墙

* 3,managing rich rules---管理富规则

* 4,masquerade and port forwarding---伪装和端口转发

* 5,forwarding a port --端口映射

* 6,adding custom firewalld zone and services--添加自定义zone和服务

* 7,managing SElinux port labeling---管理selinux 端口标签

1.firewalld

firealld 和iptables 都是规则生成工具,真正的是生效的是基于内核上netfilter.
firewalld 的规则最终要转化成iptables规则。至于iptables工作原理不做介绍。
firewalld 具有特点:动态防火墙守护进程,具有主流防火墙zone的定义,支持ipv4和ipv6防火墙设置。
解释:动态防火墙:支持运行时配置,能立即生效。(iptables必须重启服务),还支持状态跟踪。
虽然iptables也支持状态跟踪,iptables 是基于模板的定义的状态跟踪。
解释:zone:规则的集合

firewalld 配置文件(自定义zone会详讲)
firewalld配置文件以xml格式为主(除了fireealld.conf)文件目录位置
1,/etc/firewalld/
2,/usr/lib/firewalld/

重点:当我们定义了多个zone.如果流量进来,是如何处理的?处理流程
1,如果进来的流量的源地址,被一个zone定义的源地址规则匹配,
那么这个流量被这个zone所处理。(源地址优先级最高)
2,如果进来的流量通过一个接口,那么流量将会被接口所定义的zone处理。 (接口次之)
3,如果流量没有被源地址和接口匹配,将会被默认zone处理(优先级最低,系统默认zone=public)

注解:首先查找数据流量的源地址,如果源地址被drop或者block这两个zone的源地址规则匹配。则不会再去找数据流入接口。
如果数据的流量的源地址,没有被定义被drop和block 两个zone的源地址规则匹配,而是被其它zone的源地址匹配,
那么数据的流量将会进入该zone,
如果数据流量的接口,被drop或者block这两个zone的接口匹配,
则不会交给默认zone处理
如果没有找到对应的服务。数据流量会去找接口所在的zone中的服务,
如果找到相应的服务,即能完成访问,如果接口没有找到对应的服务,
那么会交给默认zone来处理。及时有对应的服务也是拒绝访问。



实验环境:
物理主机,两台vm虚拟机,系统为redhat7.
物理主机的ip地址为192.168.0.111
(下面就称:防火墙)一台虚拟主机模拟防火墙设置两块网卡:一块设置为桥接类型,
模拟外网地址:192.168.0.200/24 gw:192.168.0.1 dns 8.8.8.8
第二块为hostonly,模拟内网地址:192.168.10.11/24 网关可以不用配置
第二台虚拟主机模拟内网设置一块网卡:网卡类型为hostonly:
地址为192.168.10.13/24 gw:192.168.10.11 必须和firewall内网在同一个vmnet中。

     在防火墙配置一个ftp服务。

     先打开防火墙的转发功能。
     echo 1 > /proc/sys/net/ipv4/ip_forward  ---零时生效。

     编辑:/usr/lib/sysctl.d/00-system.conf
     添加 net.ipv4.ip_forward = 1
     sysctl -p  /usr/lib/sysctl.d/00-system.conf 重新加载配置文件,可以永久有效

firewalld默认有9个zone(zone是firewalld的单位)

默认zone为public

drop(丢弃):任何接受的网络数据包都被丢弃,没有任何回复,
仅能有发送出去的网络连接(数据包不能进来,但是可以出去)

block(限制):任何接受的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。(和drop相比,比较宽松一些,主要是为了针对icmp)

piblic(公共):在公共区域内使用,不能相信网络内其他计算机不会对你造成危害,只能接受经过选取的连接。

external(外部):特别是为路由器启用了伪装功能的外部网,你不能信任来自网络的其他计算,不能相信他们不会对你造成伤害,只能接受经过选择的连接。

dmz(非军事区):用于你的非军事区内的电脑,此区域可公开访问,可以有限的进入你的内部网络,仅仅接受经过选择的连接。

work(工作):用于工作区,你可以基本信任网络内的其他电脑不会对你造成危害,仅仅接收经过选择的连接。

home(家庭):用于内部网络,你可以基本上信任网络内其他电脑不会对你造成危害,仅仅接收经过选择的连接。

internal(内部):用于内部网络,你可以基本上信任网络内其他电脑不会对你造成危害,仅仅接收经过选择的连接。

trusted(信任):可接受所有的网络连接。

firewalld 和iptables,ip6tables,ebtables 不能同时使用,我们写个脚本禁用它们

  #!/bin/bash
     for i in iptable ip6tables ebtables ;do
          systemctl stop $i
          systemctl  disable $i
          systemctl  mask $i
     done

2.configuring a firewall---配置防火墙

    systemctl start firewalld  启动防火墙
    systemctl enable firewalld  开机自启动
    systemctl disable firewalld 关闭开机自启动
    systemctl status firewalld 查看状态
    systemctl stop firewalld  停止防火墙
    systemctl  mask firewalld 屏蔽防火墙
    systemctl  unmask firewalld 关闭屏蔽防火墙
    firewall-cmd 命令的使用 (下面的xx表示上面九个zone中的一个)
    firewall-cmd --version 查看版本号
    firewall-cmd --help  查看帮助
    firewall-cmd 查看状态
    firewall-cmd --get-active-zones 查看活动的zone
   什么是active-zone 即:有source(源地址)或interface(有接口)的zone
 # firewall-cmd --get-active-zones
    home
        interfaces: eno33554992
    work
        sources: 192.168.0.0/24
    public
        interfaces: eno16777736
    firewall-cmd --reload 不停止服务,重新加载配置文件。
    firewall-cmd --get-default-zone 查看默认zone
    firewall-cmd --set-default-zone= 修改默认zone
    firewall-cmd --get-zone-of-interface=eno16777736 查看指定接口属于哪个zone
    firewall-cmd --list-all 查看默认zone信息
    firewall-cmd --list-all --zone=xx 查看指定zone信息
    firewall-cmd --list-all-zones 查看所有zone的信息
    firewall-cmd --list-interfaces 查看默认zone的接口 可以指定--zone=xxx
    firewall-cmd --list-ports 查看默认zone的端口 可以指定--zone=xx
    firewall-cmd --list-services 查看默认zone的服务 可以指定--zone=xx
    firewall-cmd --zone=xx --change-interface=eno16777736 将指定接口转移到xxzone
    ------------------------------------------------------
    firewall-cmd --add-source=xxx.xxx.xxx.xxx 在默认zone中添加源地址 如果换zone可以加--zone=xx
    firewall-cmd --add-interface=eno16777736 在默认zone中添加一个接口,如果换zone可以加--zone=xx
    firewall-cdm --add-port=portnumber/[tcp|udp]在默认zone中添加一个端口,如果换zone可以加--zone=xx
    firewall-cdm  --add-service=servername  在默认zone中添加一个服务。如果还zone可以加--zone
    firewall-cmd  --remove-source=xxx.xxx.xxxx.xxx 移除默认zone 中的源地址。可以指定--zone=xx
    firewall-cmd  --remove-interface=eno16777736 移除默认zone中的接口,可以指定--zone=xx
    firewall-cmd  --remove-port=portnumber/[tcp|udp] 移除默认zone中的端口 可以指定--zone=xx
    firewall-cmd  --remove-service=servername 移除默认zone 中的服务,可以指定--zone=xx
    firewall-cmd  --add-rich-rule ‘‘ 添加富规则 可以指定--zone=xx
    firewall-cmd  --remove-rich-rule ‘‘ 删除富规则 可以指定--zone=xx
    firewall-cmd  --add-forward-port 添加端口映射 可以指定--zone=xx
    以上的命令都可以接--permanent 表示永久生效。但必须要firewall-cmd --reload 

3,managing rich rules---管理富规则

富规则;提供了log,地址伪装,端口转发,速率限制。是规则更加精细化
富规则的处理顺序:
端口转发和伪装 优先
log 日志 次之
允许 再次之
拒绝 最低

添加富规则的语法:firewall-cmd [--zone=xx] [--permanent] --add-rich-rule
    ‘rule [family="rule family"]
    [ source [NOT] [address="address"] [mac="mac-address"] [ipset="ipset"] ]
    [ destination [NOT] address="address" ]
    [ element ]
    [ log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] ]
    [ audit ]
    [ action ]‘
    解释:‘‘规则是用单引号包裹的
          rule 关键字
          [family="ipv4"后者"ipv6"]
          [source 关键字 address=xxx.xxx.xxx.xxx [mac="mac-address"]]
          [ destination 关键字 address="address" ]
    Elements:元素

        The element can be only one of the following element types: service, port, protocol, masquerade, icmp-block, forward-port, and source-port.
         元素类型只可能是这其中的一种:service, port, protocol, masquerade, icmp-block, forward-port, source-port.
        service name=service_name
        服务的表示法
        port port=number_or_range protocol=protocol
        端口的表示法,必须要跟协议
        protocol value=protocol_name_or_ID
         端口的值表示法
        icmp-block name=icmptype_name
        icmp 类型
        forward-port port=number_or_range protocol=protocol /
            to-port=number_or_range to-addr=address
         本机端口转发的表示法
        source-port port=number_or_range protocol=protocol
        源端口的表示法
        log [prefix=prefix text] [level=log level] limit value=rate/duration
         日志记录的表示发
         ferfix=text 表示;标识符
         level:日志记录的级别
         limit:限制(关键字)
         value=值(速率)
    action:

        accept | reject [type=reject type] | drop | mark set="mark[/mask]"
        accept:通过
        reject:拒绝
        drop:丢弃
        mask set= 打标记(集群服务会用到)
例子,以下的例子都是在默认zone为public。接口interface 也是在public zone中,其它zone没有定义源地址。

1,添加一条富规则,禁止源地址为192.168.0.111的主机访问
#firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.111/32" drop‘

2,删除已有的富规则,先用firewall-cmd --list-all 查看规则。在用firewall-cmd  --remove-rich-rule‘规则‘

` # firewall-cmd --remove-rich-rule ‘rule family="ipv4" source address="192.168.0.111/32" drop‘``

3,添加一条富规则,禁止源地址为192.168.0.0/24网段的地址,访问22端口
    # firewall-cmd --add-rich-rule
    ‘rule family=ipv4 source address=192.168.0.0/24 port port=22 protocol=tcp  reject‘
4,添加一条富规则。禁止所有的tcp连接
`firewall-cmd --add-rich-rule ‘rule family=ipv4 protocol value=tcp  reject‘`

5,添加一条富规则,禁止源地址为192.168.0.0/24网段的地址,访问ssh服务
`#firewall-cmd --add-rich-rule ‘rule family=ipv4 source address=192.168.0.0/24 service name=ssh reject‘`

6,添加一条富规则,显示ftp每分钟只接受两个新连接。
`#firewall-cmd  --add-rich-rule ‘rule family=ipv4 service name=ftp limit value=2/m accept‘ `

4,masquerade and port forwarding---伪装和端口转发

什么时候要用masquerade:当我们只有一个公网地址,内网主机需要上网的时候。
1,添加端口伪装,是后端(192.168.10.13)的主机能够访问互联网。

firewall-cmd --add-masquerade --permanent  -----必须先添加伪装
     firewall-cmd --add-rich-rule ‘rule family=ipv4 source address=192.168.10.13/32 masquerade‘ --permanent
     firewall-cmd --reload 

什么时候,需要用用到端口转发,比如说,httpd我们定义了一个非标准的端口(8009),可以把80端口访问都转发到那个非标准端口
2,本机的端口转发。来至192.168.0.0/24的主机访问端口443,都把流量转发到端口22上去。
```firewall-cmd --zone=public --permanent --add-rich-rule
‘rule family="ipv4" source address="192.168.0.0/24" forward-port port="443" protocol="tcp" to-port="22"‘
firewall-cmd --reload


## 5,forwarding a port --端口映射
  端口映射语法:
 ` firewall-cmd --add-forward-port=port=xx:proto=[tcp|dup]:toport=xx:toaddr`
  什么时候能用带端口映射,外网用户想访问内网的主机。
  1,把防火墙的80端口,映射到后端192.168.10.13的80端口上(注意,要关闭防火墙上的httpd服务,后端主机防火墙要开放http)

```#firewall-cmd --add-masquerade --permanent
##firewall-cmd --add-forward-   port=port=80:proto=tcp:toport=80:toaddr=192.168.10.13 --permanent
  #firewall-cmd --reload

6,adding custom firewalld zone and services--添加自定义zone和服务

firewalld配置文件以xml格式为主(除了fireealld.conf)文件目录位置
1,/etc/firewalld/
2,/usr/lib/firewalld/
如果修改配置文件的话,/usr/lib/firewalld/下的文件不能修改,可以复制到/etc/firewalld/对应目录下进行修改。
运行时用到的配置文件为/etc/firewalld/目录下文件

6.1,自定义zone

我们来看一下/etc/firewalld/zone/public.xml的语法格式
-----------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?> ---定义xml使用的版本和字符集类型
<zone>           ---用<zone>xxx</zone>封装一个zone
<short>Public</short>---用<short></short>封装zone的名字
<description>For use in public areas.
You do not trust the other computers on
networks to not harm your computer. Only selected
incoming connections are accepted.</description> --用<description></description>封装表述信息
<interface name="eno33554992"/>----用<interface></interface> 封装接口的名字
<service name="dhcpv6-client"/>用一个<service name=""> 表示一个服务
<service name="ssh"/>
<rule family="ipv4"> ---用<rule></rule>封装规则
<source address="192.168.10.13/32"/>---里面规则语句
<masquerade/>
</rule>
</zone>
  ------------------------------------------------------------------------
添加自定义zone方法:
创建一个zone模板3种方法:
  1,` firewall-cmd --permanent --new-zone=xx`  用命令创建模板
  2 ,` cp /usr/lib/firewalld/zone/public.xml /etc/firewalld/zone/xx.xml `
   复制创建模板,需要修改里面的<short>xx</short>.
  3,图形界面添加一个zone
  至于配置规则和系统自带的9个zone没有区别,可以用命令或者图形界面配置规则
  也可以手动修改xx.xml文件添加规则

6.2 自定义服务

  复制`/usr/lib/firewalld/service/http.mxl  /etc/firewalld/service/xxx.mxl `我们看一下语法格式
     <?xml version="1.0" encoding="utf-8"?>
     <service>
     <short>WWW (HTTP)</short>
     <description>HTTP is the protocol used to serve Web pages.
     If you plan to make your Web server publicly available,
     enable this option. This option is not required for viewing
     pages locally or developing Web pages.</description>
     <port protocol="tcp" port="80"/> --用一个<port protocol=xx port=xxx/> 定义一 个协议和端口
     </service>
创建-个service模板的3种方法
1,`firewall-cmd --permanent --new-service=xx`
2,` /usr/lib/firewalld/service/http.mxl  /etc/firewalld/service/xxx.mxl`
   需要修改<short></short>添加需要的名字,修改<port protocol=xx port=xxx/>修改为自己所需要的协议和端口
3,图形界面添加一个service

7,managing SElinux port labeling---管理selinux 端口标签

selinux定义了一些安全的端口。通过selinux的定义的端口通信,selinux是放行的。

查看所有selinux开放的安全端口。
# semanage port -l
如果你定义的端口没有在selinux定义安全端口中,则服务无法启动,需要加进安全端口里
#semanage port -t -a PORT-TYPE -p [tcp|dup] portnumber
例如:semanage port -a -t http_port_t -p tcp 81
详细请man semanage-port查看

花了一天多的时间,终于敲完了,纯手动敲打,如果有问题请见谅。这是我看文档,查资料总结的,如果有不对的地方希望大佬指点。

原文地址:http://blog.51cto.com/zhuxu91313/2148766

时间: 2024-10-13 09:54:14

firewalld 网络端口安全详细介绍的相关文章

storm详细介绍

Storm应用场景 Twitter列举了Storm的三大类应用: 1. 信息流处理{Stream processing}Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性. 2. 连续计算{Continuous computation}Storm可进行连续查询并把结果即时反馈给客户端.比如把Twitter上的热门话题发送到浏览器中. 3. 分布式远程程序调用{Distributed RPC} Storm可用来并行处理密集查询.Storm的拓扑结构是一个等待调用信息的分布函数,当它收

VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别.ziw

2017年1月10日, 星期二 VMware网络连接模式-桥接.NAT以及仅主机模式的详细介绍和区别 在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥接模式.NAT模式.仅主机模式.自定义网络连接模式.那么这几种网络连接模式都各自有什么主要用途,它们之间又有哪些区别呢? 磨刀不误砍柴工,为了更好地使用虚拟机,了解这几种连接模式的主要用途以及它们之

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-12-17 0 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置的方法: 即时生效(重启后失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 route add default gw 192.168.1.1 //添加网关 启动生效: vim /etc/sysconfig/ne

传输层协议详细介绍(重点4,网络小白必备知识)

一.首先我们先了解一下传输层里面的两种协议TCP协议特点:安全,低效.UDP协议特点:高效,不安全二.TCP报文段的详细介绍TCP协议就是端和端的连接,应用到应用的通信源端口号:你自己服务或应用的端口号目标端口号:对应的别人的服务或应用的端口号我们来了解一下常用的端口号序号:发送端为每个字节编号,便于接收端正确重组确认号:用于确认发送端的消息首部长度:这个TCP头部的长度标志位:URG:紧急指针位,是1就是开启,是0就是关闭,不经过缓存直接到对方主机的应用层PSH:快速接受传递给应用层,需要经过

自动化运维工具ansible详细介绍

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需求. 首先确认批量管理我们需要什么:无外乎主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 目录 1.      ansible与saltstack对比... 2.      ansible安装... 3.      ans

网络端口号布局与分类

1. 什么是网络端口 在网络技术中,端口(Port)大致有两种意思: 一. 物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等: 二. 逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等. 2.端口分类 (1)按端口号可分为3大类: <1> 公认端口(Well Known Ports):从0到1023,它们紧密绑定(bindin

抓包工具-Wireshark(详细介绍与TCP三次握手数据分析)

功能使用的详细介绍 wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP,UDP,等网络协议包.注:wireshark只能查看封包,而不能修改封包的内容,或者发送封包. 一.开始界面 开始界面,如图1所示: 图1(wireshark开始界面) 点击Caputre->Interfaces,出现图2所示对话框,选择需要捕获网络包的网卡,点击start按钮开始抓包. 注:如果

Ubuntu根目录下各文件夹的功能详细介绍

Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件. /sbin/    许多系统命令的存储位置,/usr/sbin/中也包括了许多命令. /root/    超级用户,即根用户的主目录. /home/    普通用户的默认目录,在该目录下,每个用户拥有一个以用户名命名的文件夹. /boot/    存放Ubuntu内核和系统启动文件. /boot/gr

Android manifest之manifest标签详细介绍

AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和permissionPART--02.01 permission标签PART--02.02 permission-group标签PART--02.03 permission-tree标签PART--02.04 uses-permission标签PART--03 instrumention标签PART--0