一、基本命令
### 防火墙 ###
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --reload #重启防火墙
firewall-cmd --state #查看防火墙状态,是否是running
firewall-cmd --add-port=80/tcp --permanent #永久添加80端口
firewall-cmd --list-all #查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)
### 服务 ###
systemctl is-enabled firewalld.service #查看服务是否开机启动
systemctl list-unit-files|grep enabled #查看已启动的服务列表
### 时间 ###
timedatectl #查看时间设置,一般如果按照的时候选择中文界面,默认时区是上海的
timedatectl list-timezones #列出所有时区
timedatectl set-timezone Asia/Shanghai #修改时区为上海
timedatectl set-ntp 1 #开启时间同步,如果只是设置yes就是ntp,但并不同步
二、防火墙设置原理
使用时的规则是这样的:
第一个目录:/etc/firewalld/
第二个目录:/usr/lib/firewalld/
当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找
配置文件分两步,这样做就可以做到只需修改对应service的端口,无需去修改上层对应规则,首页找到规则对应的service(service配置文件的命名规则是.xml),模板在(/usr/lib/firewalld/zones),设置是否放行;其次找到service的单独配置文件(/usr/lib/firewalld/service),设置其对应的端口
默认的/etc/firewalld/zones/public.xml加了ssh,然后ssh的端口是22
通用配置方法,比如http 8080端口需要访问网站,举例说明:
# 复制services/http.xml文件
cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/
# 修改service配置
vi /etc/firewalld/services/http.xml
# 找到, 其中protocol是协议: tcp | udp,port是端口:80 | 80,81 | 80:100 格式,和iptables一样
# 在加入public.xml加入http的service,复制一个,将name值改成对应的http(service命名规则是.xml)
vi /etc/firewalld/zones/public.xml
#重载防火墙配置
firewalld-cmd --reload
三、命令设置规则
--permanent参数 永久生效,写入xml文件,需要firewall-cmd --reload重加载生效,不加则重启firewall失效systemctl restart firewalld
--zone加入的区域,默认为public
# 某个端口和协议开放/删除
firewall-cmd --add-port=8080/tcp
firewall-cmd --remove-port=80/tcp
# 设置允许某个协议
firewall-cmd --add-service=smtp
# 开启或者删除某个服务,在services文件夹下面的,比如开启mysql服务
firewall-cmd --add-service=mysql
firewall-cmd --remove-service=mysql
# 查看开放的服务
firewall-cmd --list-services
# 端口转发
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
# 信任
firewall-cmd --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-port=1-22/tcp #开放端口
firewall-cmd --zone=trusted --add-interface=docker0 # 无条件信任接口,比如docker容器间访问
# 黑名单,和白名单雷同,只是改--zone=drop 区域
firewall-cmd --zone=drop --change-interface=eth0
# 使用--add-rich-rule
firewall-cmd --add-rich-rule="rule family='ipv4' source address='192.168.1.1' reject"
# 封锁ip段
firewall-cmd --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"
firewall-cmd --reload