配置firewalld
安装firewalld:# yum install firewalld
启动:# systemctl start firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
停止:# systemctl stop firewalld
禁用:# systemctl disable firewalld
查看版本:# firewall-cmd --version
查看帮助:# firewall-cmd --help
显示状态:# firewall-cmd --state
查看区域信息:# firewall-cmd --get-active-zones
查看指定接口所属区域:$ firewall-cmd --get-zone-of-interface=ens33
拒绝所有包:# firewall-cmd --panic-on
取消拒绝状态:# firewall-cmd --panic-off
查看是否拒绝:# firewall-cmd --query-panic
更新防火墙规则:
# firewall-cmd --reload
# firewall-cmd --complete-reload
两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
使用下面的命令分别列出所有支持的 zone 和查看当前的默认 zone:
[root@xuegod63 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[root@xuegod63 ~]# firewall-cmd --get-default-zone
public
设置默认接口区域
# firewall-cmd --set-default-zone=public
立即生效无需重启
将接口添加到区域,默认接口都在public
# firewall-cmd --zone=public --add-interface=ens33
永久生效再加上 --permanent 然后reload防火墙
打开端口(貌似这个才最常用)
查看所有打开的端口:
# firewall-cmd --zone=dmz --list-ports
加入一个端口到区域:
# firewall-cmd --zone=dmz --add-port=8080/tcp
若要永久生效方法同上
打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹
# firewall-cmd --zone=work --add-service=smtp
移除服务
# firewall-cmd --zone=work --remove-service=smtp
# 输出区域 全部启用的特性。如果省略区域,将显示默认区域的信息。
firewall-cmd [–zone=] –list-all
[root@xuegod63 ~]# firewall-cmd --list-all
public (default, active)
interfaces: eno16777736
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@xuegod63 ~]# firewall-cmd --zone=work --list-all
work
interfaces:
sources:
services: dhcpv6-client ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
# 获取活动的区域
[root@xuegod63 ~]# firewall-cmd --get-active-zones
work
interfaces: ens33
# 根据接口获取区域
firewall-cmd -get-zone-of-interface=
[root@xuegod63 ~]# firewall-cmd --get-zone-of-interface=ens33
# 以下关于区域和接口的操作,就不一一举例了,可以根据实际情况修改.
# 将接口增加到区域
firewall-cmd [--zone=] --add-interface=
# 如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。
# 修改接口所属区域
firewall-cmd [--zone=] --change-interface=
# 这个选项与 –add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。
# 从区域中删除一个接口
firewall-cmd [--zone=] --remove-interface=
# 查询区域中是否包含某接口
firewall-cmd [--zone=] --query-interface=
# 注意:返回接口是否存在于该区域。没有输出。
# 列举区域中启用的服务
firewall-cmd [ --zone= ] --list-services
# 这两条简单点说,就是断网和连网.
firewall-cmd --panic-on
# 启用应急模式阻断所有网络连接,以防出现紧急状况
firewall-cmd --panic-off
# 查询应急模式
firewall-cmd --query-panic
#####通过配置文件来使用Firewalld的方法#####
系统本身已经内置了一些常用服务的防火墙规则,存放在/usr/lib/firewalld/services/
注意!
请勿编辑/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被编辑。
[root@xuegod63 ~]# ls /usr/lib/firewalld/services/
amanda-client.xml dhcpv6.xml high-availability.xml ipp-client.xml kpasswd.xml libvirt.xml
mysql.xml pmcd.xml pop3s.xml RH-Satellite-6.xml smtp.xml tftp.xml
bacula-client.xml dhcp.xml https.xml ipp.xml ldaps.xml mdns.xml nfs.xml pmproxy.xml
postgresql.xml rpc-bind.xml ssh.xml transmission-client.xml
bacula.xml dns.xml http.xml ipsec.xml ldap.xml mountd.xml ntp.xml pmwebapis.xml
proxy-dhcp.xml samba-client.xml telnet.xml vnc-server.xml
dhcpv6-client.xml ftp.xml imaps.xml kerberos.xml libvirt-tls.xml ms-wbt.xml openvpn.xml
pmwebapi.xml radius.xml samba.xml tftp-client.xml wbem-https.xml
动态添加一条防火墙规则如下:
以下例子均以系统自带的public zone 为例子.
假设自定义的 ssh 端口号为 12222,使用下面的命令来添加新端口的防火墙规则:
如果需要使规则保存到 zone 配置文件,则需要加参数 –permanent
举例如下:
[root@xuegod63 ~]# firewall-cmd --add-port=12222/tcp
success
[root@xuegod63 ~]# vim /etc/firewalld/zones/public.xml
Public
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.
发现没有写到配置文件里
[root@xuegod63 ~]# firewall-cmd --add-port=12222/tcp --permanent
success
[root@xuegod63 ~]# cat /etc/firewalld/zones/public.xml
Public
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.
已经写到配置文件里
# 注意:防火墙配置文件也可以手动修改,修改后记得重载
9.3.2 firewalld配置
如果想开放80端口供外网访问http服务,例子如下
1. 将 http.xml复制到/etc/firewalld/services/下面,以服务形式管理防火墙,
# 这个cp命令其实是可以省略的,系统会优先去读取 /etc/firewalld 里面的文件,读取完毕后,会去/usr/lib/firewalld/services/ 再次读取.为了方便修改和管理,建议复制到/etc/firewalld
[root@xuegod63 ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/
[root@xuegod63 ~]# ls /etc/firewalld/services/
http.xml
[root@xuegod63 ~]# ls /etc/firewalld/zones/
public.xml public.xml.old
(1) 修改public.xml,加入http服务
[root@xuegod63 ~]# cat /etc/firewalld/zones/public.xml
Public
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.
#这行是后加的,要匹配 /etc/firewalld/services/目录下的文件名
(2) 重新载入 两条命令都可以的
以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:
[root@xuegod63 ~]# firewall-cmd --reload
success
2. 修改防火墙ssh的端口方法
(1) 复制ssh.xml文件到/etc/firewalld/services/
[root@xuegod63 ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
(2) 修改ssh.xml文件 12222为ssh端口
[root@xuegod63 ~]# vim /etc/firewalld/services/ssh.xml
SSH
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.
(3) 重新载入 两条命令都可以的
以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:
[root@xuegod63 ~]# firewall-cmd --reload
success
3. 指定ip访问ssh端口
修改/etc/firewalld/zones/
# rule字段内为要限制的ip和使用的服务
[root@xuegod63 ~]# vim /etc/firewalld/zones/public.xml
Public
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.
[root@xuegod63 ~]# firewall-cmd --reload
success
4. 添加自定义服务
举例,添加8080端口为新的Service
(1) 添加新文件 8080.xml
vim /etc/firewalld/services/8080.xml
8080 Test
此处为文字说明
(2)编辑public.xml 文件,加入相应的Server
vim /etc/firewalld/zones/public.xml
Public
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.
# 这行是后加的,要匹配 /etc/firewalld/services/8080.xml 文件名
重新载入
[root@xuegod63 ~]# firewall-cmd --reload
success
SNAT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 你的公网ip
DNAT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -d 173.16.16.1 -p tcp--dport 2346 -j DNAT --to-destination 192.168.10.2:22