这篇文章原写于春节前,本打算作为第三周的分享,只是感觉不是很完善就一直放着,刚好这周在整理文章,便作些修改作为本周周分享。
基本操作
# 启动systemctl start firewalld
# 关闭systemctl stop firewalld
# 重启systemctl restart firewalldfirewall-cmd --reload
# 停止systemctl disable firewalld
# 查看当前状态systemctl status firewalldfirewall-cmd --state
注:firewall-cmd 命令只能在防火墙启用时才能使用。
修改
防火墙要添加例外端口无外乎两种方法:修改端口和服务。
添加端口
添加端口例外是最简单和直接的方法,也方便后续查看所有已添加的端口,唯一不便的是需要在防火墙运行的前提下才能操作。
# 查看 public 已打开端口firewall-cmd --zone=public --list-port# 查看指定端口是否开启firewall-cmd --zone=public --query-port=2022/tcp
# 添加端口firewall-cmd --zone=public --add-port=2022/tcp# 删除端口firewall-cmd --zone=public --remove-port=2022/tcp
# 重启服务systemctl restart firewalld
在上面的命令中zone
都是指定为 CentOS 7 默认的public
规则集,但是除了 public 之外还有另外 8 个 zone:
- drop:丢弃
- block:限制
- external:外部
- dmz:非军事区
- work:工作
- home:家庭
- internal:内部
- trusted:信任
如果不确定当前默认 zone,在已启用防火墙的情况下可以用命令firewall-cmd --get-default-zone
查看。
注:需在命令后增加参数--permanent
才会永久生效(需重启 firewall-cmd 服务)。
添加服务
添加服务的效果和添加端口是一样的,只不过是在对应服务中设置要开放的端口,优点在于方便管理某些服务需要用到多个端口的情况。
# 查看已开启那些服务firewall-cmd --zone=public --list-services# 查看可以开启那些服务firewall-cmd --get-services
# 添加服务firewall-cmd --add-service=telnet --permanent# 删除服务firewall-cmd --remove-service=telnet --permanent
CentOS 7 防火墙中的ssh 服务
中是使用 22 端口,如果修改了默认端口号,需要同时修改/usr/lib/firewalld/services/ssh.xml
文件中的端口。
提升
前面的两种操作中无论是添加端口,还是添加服务都需要在防火墙启用的情况下进行,但在通过 SSH 连接服务器时,直接启用防火墙可能会导致连接断开,此时就需要另一种方法达到目的。
在文件中添加端口
前面新增的端口和服务其实都会在文件public.xml
中体现,所以我们只要在里面添加对应的端口即可。
用 vi 打开/etc/firewalld/zones/public.xml
文件:
<?xml version="1.0" encoding="utf-8"?><zone> <short>Public</short> <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> <service name="dhcpv6-client"/> <service name="ssh"/></zone>
在最后行</zone>
前增加一句<port protocol="tcp" port="2022"/>
保存后即可启用防火墙。不过如果想以添加服务的形式修改,还需修改或新增对应服务的文件。
修改对应服务端口
因为 CentOS 7 默认是已添加 ssh 服务为例外的,所以可以直接用 vi 打开对应的 xml 文件/usr/lib/firewalld/services/ssh.xml
进行修改:
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <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> <port protocol="tcp" port="22"/></service>
主要关注<port protocol="tcp" port="22"/>
这一行,把 22 改为当前对应的 ssh 端口保存即可。