分享 | 交流
让学习成为一种习惯

Firewalld常用防火墙规则设置

为什么选择FirewallD?

     firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念 ,实现多个区域的使用不同的规则。firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍。
Firewalld常用防火墙规则设置
以下记录来自Centos7.2系统:
firewalld 防火墙常用命令:
 
安装方法:
  1. yum install firewalld firewall-config -y
使用tab键补全命令提示:
  1. yum -y install bash-completion
 
图形界面:firewall-config
 
 
启动方法:
  1. systemctl start firewalld
  2. systemctl enable firewalld
 
Firewalld所有的配置及查看方法都通过命令firewalld-cmd [参数]来完成。
 
 
查看规则列表[所有]
  1. firewalld-cmd –list-all
只列出通过端口添加的规则
  1. firewall-cmd –list-ports
 
查看指定区域(public)的以端口方式添加的规则
  1. firewall-cmd –zone=public –list-ports
 
只列出通过服务名添加的规则[默认当前激活的公共区域]
  1. firewall-cmd –list-services
 
查看指定区域(public)的以服务名添加的规则
  1. firewall-cmd –zone=public –list-services
查看所有区域的规则情况
  1. firewall-cmd –list-all-zones
 
查看firewalldl默认支持的所有服务名列表
  1. firewall-cmd –get-services

说明:firewall-cmd –reload

 
–reload 命令会删除所有运行时配置并应用永久配置。因为 firewalld 动态管理规则集,所以它不会破坏现有的连接和会话。
 
 
添加常用服务,会添加到默认的区域
 
#以下四个规则重启服务会消失,只能临时生效,也是立刻生效的,如果要永久保存的规则就要添加参数:
–permanent,添加此参数后不会立刻生效。需要重载或重启服务才生效。
 
  1. firewall-cmd –add-service=ftp #开放 ftp 服务规则
  2. firewall-cmd –add-service=mysql # 开放mysql端口规则
  3. firewall-cmd –add-service=http # 开放http端口规则
  4. firewall-cmd –add-service=ssh # 开放ssh端口规则
 
 
#添加常用端口,默认会添加到默认的区域
  1. firewall-cmd –add-port=3306/tcp # 开放tcp访问3306规则
  2. firewall-cmd –add-port=22/tcp # 开放tcp访问22规则
  3. firewall-cmd –add-port=80/tcp # 开放tcp访问80规则
  4. firewall-cmd –add-port=443/tcp # 开放tcp访问443规则
  5. firewall-cmd –zone=public –add-port=4990-4999/udp   #添加4990-4999 udp端口
 
 
移除规则
  1. firewall-cmd –remove-service=http # 移除http端口规则
  2. firewall-cmd –remove-port=80tcp # 移除通过tcp访问3306规则
  3. firewall-cmd –add-port=233/udp  # 开放通过udp访问233规则
 
永久关闭 ftp 服务: 删除、移除
  1. firewall-cmd –remove-service=ftp –permanent
查询服务的启用状态[返回值yes/no]
  1. firewall-cmd –query-service ftp
 
将同一台服务器上80端口的流量转发至8080
  1. firewall-cmd –add-forward-port=port=80:proto=tcp:toport=8080
查看效果:
  1. [root@centos-test03-0001 ~]# firewall-cmd –list-all
  2. public (active)
  3.   target: default
  4.   icmp-block-inversion: no
  5.   interfaces: eth0
  6.   sources:
  7.   services: dhcpv6-client ssh
  8.   ports: 8001/tcp
  9.   protocols:
  10.   masquerade: no
  11.   forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  12.   sourceports:
  13.   icmp-blocks:
  14.   rich rules:
  
 
如果要将端口转发到另外一台服务器上,在需要的区域中激活 masquerade
 
  1. firewall-cmd –zone=public –add-masquerade
 
添加转发规则。
例子中是将本地的80端口的流量转发到IP地址为:10.0.10.15 的远程服务器上的8080端口。
 
  1. firewall-cmd –zone=public –add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.10.15
 
 
#伪装IP
防火墙可以实现伪装IP的功能,下面的端口转发就会用到这个功能。
  1. firewall-cmd –query-masquerade    # 检查是否允许伪装IP
  2. firewall-cmd –add-masquerade      # 允许防火墙伪装IP
  3. firewall-cmd –remove-masquerade   # 禁止防火墙伪装IP
 
#防火墙的区域:zone
 
区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public 将是默认区域。
 
区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal 区域上允许 DHCP,但在external 区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。
 
查看所有区域中的配置:
  1. firewall-cmd –list-all-zones
 
查看当前系统中默认使用哪个区域:
  1. firewall-cmd –get-default-zone
 
显示当前系统网络接口使用哪个区域:
  1. firewall-cmd –get-active-zones
 
修改默认区域:使用tab键会显示有哪些区域
  1. [root@k8s-node1 ~]# firewall-cmd –set-default-zone=internal
  2. block     dmz       drop      external  home      internal  public    trusted   work
修改后即时生效,而且reload、重启后也是生效的。
 
 
#获取指定区域的所有配置
  1. firewall-cmd –zone=public –list-all
 
#如果有多个网络接口可以通过此方法配置:
  1. firewall-cmd –zone=home –change-interface=eth0
设置区域为home的接口为eth0
 
 

危险命令:[立即生效]

 
  1. 拒绝所有包:firewall-cmd –panic-on
  2. 取消拒绝状态: firewall-cmd –panic-off
  3. 查看是否拒绝: firewall-cmd –query-panic
如果是远程的机器执行上面的规则会立刻断开网络连接,必须紧记不能随便执行。如果你只是虚拟机或者物理机器登陆就可以执行来调试。
 
 
 
#如果防火墙配置了规则很多如果清空规则呢?firewalld默认没有命令来清空规则。但是我们可以通过编辑配置文件来清除规则。
/etc/firewalld/zones/ 此处为配置生效后保存的配置文件,一般建议修改前先备份。
 
修改完重启服务或者重载服务。
 
 
 
#所有的默认规则都可以在此目录找到:
/usr/lib/firewalld/
 
#简单的方法就是复制默认目录下的规则到配置目录下:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
 
#配置文件中包含了服务名,端口,还有就是服务的相关说明,需要注意的时<service>表示服务,<zone>表示区域,它们都是按目录进行了区分的。 
 
  1. [root@openresty zones]# cat /usr/lib/firewalld/services/ssh.xml
  2. <?xml version=“1.0” encoding=“utf-8”?>
  3. <service>
  4.   <short>SSH</short>
  5.   <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  6.   <port protocol=“tcp” port=“22”/>
  7. </service>
 
 
上面的方法都是添加允许通过防火墙的规则。那么怎么添加拒绝的呢?
 
#添加禁止响应ping
  1. firewall-cmd –permanent –add-rich-rule=‘rule protocol value=icmp drop’
#如何查看是否有此规则[等号后面跟详细的名称]
  1. firewall-cmd –query-rich-rule=’rule protocol value=’icmp‘ drop’
#删除方法:
  1. firewall-cmd –remove-rich-rule=‘rule protocol value=icmp drop’
 
#添加拒绝某个IP访问ssh端口。
  1. firewall-cmd –add-rich-rule “rule family=ipv4 source address=10.0.10.1 service name=‘ssh’ reject”
我更喜欢直接丢弃:
  1. firewall-cmd –add-rich-rule “rule family=ipv4 source address=10.0.10.1 service name=‘ssh’ drop”
 
 
说明:
rule :规则
family:ipv4  指定ipv4的地址
source address=10.0.10.1  要拒绝的IP,可以是IP或者是IP段
service name=’ssh’指定的是ssh服务 
drop :就是此条规则的执行方法是丢弃
 
#也可以这样写
  1. firewall-cmd –add-rich-rule=‘rule family=ipv4 source address=10.0.10.1 port port=22 protocol=tcp reject’
如果要放行直接修改后面的reject为accept即可。
 
======================================================
 
#表示允许来自此IP允许通过防火墙
  1. firewall-cmd –add-rich-rule=‘rule family=”ipv4″ source address=”10.0.10.1″ accept’
#允许一个IP(10.0.10.1)仅能通过指定端口(8080-8090)访问到目标(10.0.10.13):
 
  1. firewall-cmd –add-rich-rule=‘rule family=”ipv4″ source address=”10.0.10.1″ destination address=”10.0.10.13/32″ port port=”8080-8090″ protocol=”tcp” accept’
 
#如果要移除规则相对麻烦些,要输入后面详细的记录:
 
  1. firewall-cmd –remove-rich-rule=‘rule family=”ipv4″ source address=”10.0.10.1″ destination address=”10.0.10.13/32″ port port=”80″ protocol=”tcp” accept’
 
 
不过发现它这个引号和单引号不像shell 那样要求非常严格,只要是对应出现就好了。
 

最后说明:

如果规则中没有加入参数:–permanent都是即时生效的,而且reload或者重启服务后都不会再有记录。
而加入了参数:–permanent后需要手动reload或者重启服务才生效。 同时可以加入–zone 应用于于哪个区域的参数。
未经允许不得转载:留时刻运维网 » Firewalld常用防火墙规则设置

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留时刻 - Linux系统教程,运维经验分享

加入我们给我留言