一次安装 CentOS 防火墙时发现一个问题,CentOS 7 默认防火墙已经从 iptables 变成了 firewall。但是启动 firewall 后默认会屏蔽所有端口,所以ssh的默认 22 端口也会被屏蔽;这就造成了服务器断开连接并且无法连接的问题了。文章源自JAVA秀-https://www.javaxiu.com/456.html
首先如果系统没有安装防火墙,或者装的是 iptables 防火墙,我们需要先检查是否安装了 iptables:service iptables status (查看iptables是否运行,查看iptable运行状态) ;如果显示正在运行,那我们就把它关闭:iptables:chkconfig iptables off(因为我们要安装最新的firewalld);最后安装firewalld:yum install firewalld 或者 apt-get install firewalld 。文章源自JAVA秀-https://www.javaxiu.com/456.html
一、firewall防火墙的启动过程
1、首先我们要先手动修改 firewall 防火墙配置文件
首先放行ssh默认的 22 端口的 TCP 规则防止启动防火墙后无法连接服务器!(当然你要是修改了ssh端口了的话,就放行你自己修改后的端口);在目录 /etc/firewalld/zones 下找到 public.xml 配置文件,打开后添加如下代码:文章源自JAVA秀-https://www.javaxiu.com/456.html
<?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="ssh"/> <service name="dhcpv6-client"/> <port protocol="tcp" port="22"/> #添加如此句代码 </zone>
2、开启或重启或禁用firewall防火墙:
systemctl start firewalld.service //开启防火墙命令 firewall-cmd --reload 或者 service firewalld restart //重启防火墙命令 systemctl stop firewalld //禁用防火墙 注:执行”systemctl start firewalld.service”时出现”Failed to start firewalld.service: Unit is masked.”错误。 附上解决办法: 输入”systemctl unmask firewalld.service”就能使用命令”systemctl start firewalld.service”
3、设置开机启动防火墙或者停止并禁用开机启动 :
systemctl enable firewalld.service 或者 systemctl enable firewalld //设置开机启动 sytemctl disable firewalld 或者 sytemctl mask firewalld //停止并禁用开机启动
4、查看防火墙状态:
systemctl status firewalld 或者 firewall-cmd --state iptables -nL --line-number #查看所有已开放端口 iptables -L -n #查看已添加的iptables规则
5、开启或关闭自己需要开启或关闭的端口(这里以开放80端口为例,其他端口一样;UDP端口只要把命令里的TCP换成UDP):
1. #添加即开启端口(--permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=80/tcp --permanent 2. #删除即关闭端口(--permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --remove-port=80/tcp --permanent 3. #重新载入(修改规则后使其生效) firewall-cmd --reload 4. #查看 firewall-cmd --zone=public --query-port=80/tcp
6、批量添加区间端口:
firewall-cmd --zone=public --add-port=4400-4600/udp --permanent firewall-cmd --zone=public --add-port=4400-4600/tcp --permanent
7、查看某个端口是否开放:
firewall-cmd --zone=public --query-port=80/tcp firewall-cmd --query-port=8080/tcp
8、查看端口列表:
firewall-cmd --permanent --list-port
二、一些常用的 firewall 命令
启动, 停止, 重启firewalld: 1. #停止 systemctl stop firewalld.service 2. #启动 systemctl start firewalld.service 3. #重启 systemctl restart firewalld.service 4. #查看状态 systemctl status firewalld 5. #禁止firewall开机启动 systemctl disable firewalld 6. #设置开机启用防火墙 systemctl enable firewalld.service 7. #停止firewalld服务 systemctl stop firewalld 8. #禁用firewalld服务 systemctl mask firewalld 查看firewall规则与状态: 1. #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) firewall-cmd --state 2. #查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略) firewall-cmd --list-all 3. #查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略) firewall-cmd --list-all-zones 4. #重新加载配置文件 firewall-cmd --reload 开启自己需要放行的端口: 1. #添加(--permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=80/tcp --permanent 2. #重新载入(修改规则后使其生效) firewall-cmd --reload 3. #查看 firewall-cmd --zone=public --query-port=80/tcp 4. #删除 firewall-cmd --zone=public --remove-port=80/tcp --permanent 配置 firewalld-cmd: 1. #查看版本: firewall-cmd --version 2. #查看帮助 firewall-cmd --help 3. #显示状态 firewall-cmd --state 4. #查看所有打开的端口 firewall-cmd --zone=public --list-ports 5. #更新防火墙规则 firewall-cmd --reload 6. #查看区域信息 firewall-cmd --get-active-zones 7. #查看指定接口所属区域 firewall-cmd --get-zone-of-interface=eth0 8. #拒绝所有包 firewall-cmd --panic-on 9. #取消拒绝状态 firewall-cmd --panic-off 10. #查看是否拒绝 firewall-cmd --query-panic systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。 1. #启动一个服务 systemctl start firewalld.service 2. #关闭一个服务 systemctl stop firewalld.service 3. #重启一个服务 systemctl restart firewalld.service 4. #显示一个服务的状态 systemctl status firewalld.service 5. #在开机时启用一个服务 systemctl enable firewalld.service 6. #在开机时禁用一个服务 systemctl disable firewalld.service 7. #查看服务是否开机启动 systemctl is-enabled firewalld.service 8. #查看已启动的服务列表 systemctl list-unit-files|grep enabled 9. #查看启动失败的服务列表 systemctl --failed
关于 iptables 防火墙的设置与命令请看我的另一篇文章(但推荐用firewalld防火墙): CentOS(Linux) iptables 防火墙的设置与命令文章源自JAVA秀-https://www.javaxiu.com/456.html

评论