firewall-cmd 使用总结
firewalld的简要说明:
        firewalld 、firewall-cmd 、firewall-offline-cmd它们Python脚本,通过定义的在/usr/lib/firewalld下面的xml配置信息,
      在启动时自动载入默认iptables配置,并应用到系统中,当使用firewalld-cmd添加防火墙规则时,它实际是转换成
      iptables规则后,在应用到系统中。
      
  firewalld定义了几个概念:
            zone:  它是安全域的范围,就类似于Window上的域网络,工作网络,家庭网络,Internet网络等,不同的安全作用域
                          其安全级别不同,安全程度不同,家庭zone的安全规则就是最宽松的。
            service: 它是zone里面的定义一个规则集,它将iptables中单独根据 入接口,出接口,源目端口,协议等定义单独规则
                            整合为一个规则集合,方便识别和管理。
            protocol: 定义协议规则
            port,source-port :基于端口定义规则,port我的理解:定义源和目标为指定端口的规则。
            source: 定义源地址规则
            interface: 定义基于出入接口的规则。
            direct:  直接定义原始iptables规则。
  白名单控制谁能操作firewalld 对规则做增删改:
            注: firewalld的白名单机制是控制,谁能操纵firewall-cmd来对现有规则进行增删改等操作。
            此选项支持四种控制方式:
                1. context : 根据SELinux的进程domain(域)的安全上下文类型来定义Whitelist(白名单)
                2. command: 根据命令的绝对路径做Whitelist.
                3. uid
                4. user: 可以使用用户名 或 UID来做Whitelist
  全局选项:
                --state                               #显示当前firewalld服务的运行状态。
                --runtime-to-permanent        #将运行时配置保存为永久配置。
  全局刷新配置:
                --reload                   #重新加载防火墙permanent(永久的)的规则配置,覆盖当前运行时配置,
                                                      在运行时添加的非permanent规则,都将丢失。
                --complete-reload     #完全重新加载防火墙,甚至netfilter内核模块。这很可能会终止活动连接,
                                                          因为状态信息会丢失。此选项仅在出现严重防火墙问题时使用。
                                                          例如,如果存在状态信息问题,则无法使用正确的防火墙规则建立连接。
  全局开启日志记录功能:
                    --get-log-denied          #查看是否启用了在所有规则中启用拒绝日志记录。
                    --set-log-denied=[all |unicast |broadcast |multicast |off]      
                                                      #设置启用或禁用在所有规则添加拒绝或删除日志记录功能。
  在进行一下操作前需要知道:
            增删查改:
                   增: --add-       或  --new-               #注: add:新增子选项 ;  new:新建新项目
                   删:  --remove-   或  --delete- 
                   查:  --query-
                   改:  --change-
            查看修改前: firewall-cmd  --reload
            然后查看:
                       --info-[zone |service |ipset |icmptype |helper]=[zone |service |ipset |icmptype |helper]
--path-[zone |service | icmptype |helper |ipset]=[zone |service | icmptype |helper |ipset]
--list-[all-zones |services |ports |protocols |source-ports |icmp-blocks |forward-ports |interfaces |sources]
--get-[zones |services |icmptypes ]=[zones |services |icmptypes]
      --get-zone-of-interface=网卡接口          #查看此网卡接口当前被附加到那个zone
                        --get-zone-of-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
--get-[default-zone |active-zones |target |ipsets |ipset-types |descripton |short |helpers]
  zone选项:
                注:
                     zone可设置target,即iptables的动作,默认public的动作是仅允许icmp报文.
                
--set-default-zone=<zone> #设置默认zone, 默认为:public
    创建zone有两种方法:
                          --new-zone=<zone>        #直接指定zone名称创建.
                          --new-zone-from-file=<filename> [--name=<zone>]     
                                                            #根据/etc/firewalld/zones/ 或 /usr/lib/firewalld/zones/下已有的zone.xml来创建.
                              例:
                                   firewall-cmd  --new-zone=test  --permanent  
                                   firewall-cmd  --reload            #任何操作完成后,都必须刷新后,才能查看到。
       注: 实际上firewalld也采用了多层结构来管理iptables规则,--permanent实际上是将当前在内存
        中的修改刷写到磁盘的配置文件中,这个配置文件就是默认zone的配置文件,默认在
          /etc/firewalld/zone/public.xml 
        --reload则是将内存中的数据同步到运行时的firewalld管理的runtime数据结构中。
在默认zone 或 指定zone下可做的操作:
                 --add-port=<portid>[-<portid>]/<protocol>
                 --add-source-port=<portid>[-<portid>]/<protocol>
                 --add-protocol=<protocol>
                 --add-service=<service> 
                        注:
                               service就相当于port,source-port,protocol的集合,可将这些单独的元素,打包成一个服务来通过
                                       调用它,一并创建port,source-port,protocol规则。
                               创建服务和创建zone一样,也是两种方式:
                                   --new-service=<service>                              #指定服务名称来创建
                                   --new-service-from-file=<filename> [--name=<service>]      #根据已有xml文件来创建
在服务下可做的操作:
                                           --service=<service> --add-port=<portid>[-<portid>]/<protocol>
                                           --service=<service> --add-source-port=<portid>[-<portid>]/<protocol> 
                                                    注:
                                                         port 和 source-port都可以定义多个,但是测试发现,定义多个后,仅第一个会在iptables中的filter表中
                                                        创建允许规则。
                                                        若需要定义多个自定义端口,最好使用范围来创建允许一个端口范围的规则。
                                           --service=<service> --add-protocol=<protocol>             #它可以被创建为单独的一条运行某协议的iptables规则.
                                           --service=<service> --add-module=<module>                   #不知道如何使用
                                           --service=<service> --set-description=<description>      #定义一个具体功能描述说明
                                           --service=<service> --set-short=<description>                                        #定义一个简短描述名
                                           --service=<service> --set-destination=<ipv>:<address>[/<mask>]    #定义目标地址. 因为对于服务来说,它的源只能是自己。
   例:
                                       #创建服务的示例:
                                            firewall-cmd  --new-service=test  --permanent
                                            firewall-cmd  --service=test   --add-port=9090/tcp   --permanent
                                            firewall-cmd  --service=test   --add-source-port=10001-10003/tcp   --permanent
                                            firewall-cmd  --service=test   --add-protocol=udp  --permanent
                                            firewall-cmd  --service=test   --set-description='This is a  test  service !'  --permanent
                                            cat  /etc/firewalld/services/test.xml
      
    firewall-cmd --add-service=test --premanent #这样就执行创建iptables规则了。
                                          firewall-cmd  --reload
                                          iptables  -n -v -L
    在默认zone 或 指定zone下,添加网卡接口 和 源地址规则:   
                --add-interface=<interface>        
                        注:
                                  将指定物理网卡的接口添加到zone中.默认是添加到public zone中.
                             firewalld执行此操作后,会在INPUT链 和 FORWARD链中添加入站 和 转发规则。
                              firewall-cmd  --add-interface=eth1  --permanent
                              firewall-cmd  --reload
                              iptables  -v  -n  -L  |grep  -C3  'eth1‘
        
      --add-source=<source>[/<mask>]|<MAC>|ipset:<ipset> 
                        注:
                                将指定源地址添加到指定zone中,默认:public.
                            firewalld 执行此操作后, 会在INPUT链 和 FORWARD链中添加入站 和 转发规则.
                            firewall-cmd  --add-source=10.0.0.0/24  --permanent
                            firewall-cmd  --reload
                            iptables  -v  -n -L  |grep  -B3  ‘10.0.0.0/24’
      
ICMP相关的规则:
                  --add-icmp-block=<icmptype>
                  --add-icmp-block-inversion
    在默认zone 或 指定zone下启用NAT功能:
                注: 
                        它支持DNAT(端口转发) 和 SNAT(源地址转换)
                    --add-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]
                        例:
                             firewall-cmd  --add-forward-port=port=10003:proto=tcp:toport=22:toaddr=192.168.0.12
                                     注:
                                        添加一条临时规则,若--reload将被删除.
                                        此规则创建一个DNAT规则,将访问防火墙10003端口的报文转发给192.168.0.12的22号端口上。
                                        firewall-cmd执行此命令,实现DNAT的步骤如下:
                                          1.在mangle中添加一条规则去匹配目标端口是10003的报文,然后将其打上标记。
                                          2.在nat条中添加一条DNAT规则,通过匹配标记,将其源地址修改为192.168.0.12后,从转发filter表.
                                          3.在filter表中添加一条转发规则,只要匹配指定标记,就直接转发。
                                          4.开启系统的转发功能。
  #启用IPv4的动态IP伪装(即动态SNAT),它仅在POST_public_allow 链中添加了一条出接口非环回口的SNAT规则.
                --add-masquerade
direct选项:
                注:
                      此选项支持直接编写iptables规则.
                       --add-chain {ipv4|ipv6|eb} <table> <chain>
                       --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...
                             注:
                                   priority: 就是规则插入的行号,越靠前越优先。
                                   arg: iptables相关规则选项。
     Whitelist选项:
                firewall-cmd  --lockdown-on             #先开启功能,在设置谁能操纵firewall-cmd.
                firewall-cmd  --add-lockdown-whitelist-command=<command>
                                        --add-lockdown-whitelist-context=<context>
                                        --add-lockdown-whitelist-uid=<uid>
                                        --add-lockdown-whitelist-user=<user>
rich富语言选项用法:
              firewall-cmd [--zone=zone] [--add|--list|--query|--remove]-rich-rule='rule' [--timeout=seconds]
                                          注:
       --timeout: 设置规则超时时间,若超时则自动删除,单位:秒
    rule: 简略版
               [source]
               [destination]
               service|port|protocol|icmp-block|masquerade|forward-port
               [log]
               [audit]
               [accept|reject|drop]
      rule:详细版
                    [family="ipv4|ipv6"]
                    [source |destination] address="address[/mask]" [invert="True|yes"]
                    [[service name="service name" ]| [port port="number_or_range" protocol="tcp|udp"] | [protocol value="协议名"] ]
                    [ icmp-block name="icmptype name" ]
                    [masquerade]
                    [forward-port port="number_or_range" protocol="tcp|udp" to-port="number_or_range" to-addr="address"]
                    [log [prefix=prefix text] [level=log level] limit value=rate/duration]
                    [audit]
                    [accept | reject [type="reject type"] | drop]
masquerade:创建动态SNAT
  【即:自动判断用户要去的网络,查询路由后,将SNAT用户的源地址转换为可去往该网络的IP】
                创建SNAT:
                        firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 masquerade accept"
                        注:
                               更简单的动态SNAT配置: 
                                      firewall-cmd --permanent --add-masquerade
                                      firewall-cmd --permanent --query-masquerade       #可查看是否启动成功.
                                                若内部有多个网段时,它可自动识别不同网段,并完成SNAT.
                                  跟它类似的SNAT配置为:
                                      firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=1.1.1.0/24 invert=yes"
                                        注:
         invert=yes: 表示反转的意思,即只要不是1.1.1.0/24网络的都做SNAT.和直接写--add-masquerade类似.
                    验证:
                          #查看自动配置的转发规则,即SNAT回来的数据包,给予转发放行.
                              iptables -vnL |grep -C5  192.168.0.0/24
                          #查看自动配置的NAT表中的POSTROUTING链的的转化记录.
                              iptables -vnL -t nat |grep -C5 192.168.0.0/24
    客户端:
                          #客户端与SNAT服务器之间是192.168.0.0/24网络,SNAT端连接Internet.
                          #注意添加默认路由时,一定要指明是global,或使用via关键字,指明下一跳.
                          #否则创建的路由将是link类型的,系统将认为,我们其实是在一个网络中.于是
                          #当我们ping 1.1.1.2时,系统将认为,客户端和1.1.1.0/24在一个局域网中,
                          #于是发生ARP查询,这样肯定是查不到1.1.1.2的MAC的,就导致不通!
                          ip route  default via 192.168.0.1 dev eth0
                          ping  1.1.1.2
端口转发:
              #将源地址是172.24.8.0/24网络的,访问我的5432端口,则将其转发到我的22号端口.并记录日志,日志前缀为[ADMIN LOGIN]
              #而且限制每分钟只记录一条日志.
                 firewall-cmd --add-rich-rule="rule family=ipv4 source address=172.24.8.0/24 forward-port port=5432 \
         protocol=tcp to-port=22 log prefix='[ADMIN LOGIN]' limit value=1/m accept"
  简单的允许对任意源做端口转发:
                firewall-cmd  --add-forward-port=port=5432:proto=tcp:toport=22  --timeout=100
                      注:
                          格式:
                              [--permanent] [--zone=zone]  \
        --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] \
                                    [--timeout=seconds]
firewall-cmd 使用总结的更多相关文章
- Red Hat Enterprise Linux7的安装与oracle 12c的安装
		Red Hat Enterprise Linux7的安装与oracle 12c的安装 本文档中用到的所有参数均位于文末附录 Red Hat Enterprise Linux7的安装 新建完虚拟机后,挂 ... 
- 总zabbix配置-搭建-邮件报警-微信报警-监控mysql
		Centos7安装Zabbix4.0步骤 官方搭建zabbix4.0的环境要求: 1. 环境搭建LAMP 前提Centos系统安装完成: 确认一下: 1 2 cat /etc/redhat-rele ... 
- linux vue项目+npm run build + nginx
		系统 环境 vue nginx 步骤 1.打包vue项目 2.配置nginx 打包vue项目 1.项目配置 我们使用服务器的8000端口 2.打包 # npm run build 打包成功会创 ... 
- 在linux上安装tomcat
		(1)主要参考https://jingyan.baidu.com/article/3065b3b6e0fad2becff8a419.html(这个看后基本知道怎么安装tomcat) 其次参考:http ... 
- Centos7系统防火墙上开端口
		//permanent 永久生效 没有此参数重启失效 firewall -cmd --zone=public --add -port=80/tcp --permanent //开 ... 
- RHEL7、CentOS7防火墙管理
		经常start.stop.restart操作防火墙有两种方式: 1.service iptables stop 2./etc/init.d/iptables stop 但是经常会有这种错误,因为在RH ... 
- 【原】【BG】-一次虚拟化环境实践简要记录
		部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ... 
- Linux下部署配置Nginx
		1.安装工具包 yum install -y wget 下载工具 yum install -y vim-enhanced vim编辑器 yum install -y make cmake gcc gc ... 
- Linux下单机安装部署kafka及代码实现
		技术交流群:233513714 这几天研究了kafka的安装及使用,在网上找了很多教程但是均以失败告终,直到最后想起网络方面的问题最终才安装部署成功,下面就介绍一下kafka的安装部署及代码实现 一. ... 
- CentOS 7 samba server 配置
		samba是linux上的文件共享服务软件,相当与Windows上的共享文件夹,当然也是要在同一网段上的. 当前用的版本是4.4.4,好吧!下面介绍怎么去安装配置它,here we go! 1. 安装 ... 
随机推荐
- 如何给老婆解释什么是RESTful
			如何给老婆解释什么是RESTful Javdroider Hong 知乎专栏<Beautiful Java>的作者,一个热爱足球和健身的上进boy 1,543 人赞了该文章 老婆经常喜欢翻 ... 
- register_shutdown_function函数详解
			设定错误和异常处理三函数 register_shutdown_function(array(‘Debug’,'fatalError’)); //定义PHP程序执行完成后执行的函数 set_error_ ... 
- Page Design for Sexable Forum
			Design Demo 1. Home of Sexable Forum 1.1 home page not logined. 1,2 home page logined. 2. Pages wit ... 
- mt7620 wifi driver
			<*> Ralink RT2860 802.11n AP support [*] LED Support [*] WSC (WiFi Simple Config) [*] WSC 2.0( ... 
- openwrt 编译 gmediarender
			output_gstreamer.o: In function `my_bus_callback': output_gstreamer.c:(.text+0xf68): undefined refer ... 
- 微软开源 Try .NET - 创建交互式.NET文档
			微软近日开源了一个新平台--Try .NET,该平台可以让开发者在线上编写并运行 .NET 代码.微软介绍,Try .NET 是一个可嵌入的代码运行器,不仅可以直接在线上对自己或者他人的代码进行编辑. ... 
- H5新增表单属性
			一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ... 
- Entity Framework 6 Code First系列1: 实体类1:1配置
			从4.1版本开始,EF开始支持Code First模式,值得注意的是Code First不是和DataBase First或Model First平级的概念,而是和EDM平级的概念.使用Code Fi ... 
- MySQL基本语句优化10个原则
			在数据库应用中,程序员们通过不断的实践总结了很多经验,这些经验是一些普遍适用的规则.每一个程序员都应该了解并记住它们,在构造SQL语句时,养成良好的习惯.以下10条比较重要的原则供大家参考. 原则1: ... 
- LIS n^2&nlogn模板
			LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950 #include <iostream> #include <st ... 
