前言
提示:如果防火墙开启,我们pingLinux服务器的IP会ping不通,所以我们要对防火墙进行设置(一般情况下只需执行1里边的命令就可以了)
1.firewalld的基本使用
- 启动防火墙:
systemctl start firewalld
- 查看防火墙状态:
systemctl status firewalld
- 停止防火墙:
systemctl disable firewalld
- 禁用防火墙:
systemctl stop firewalld
- 屏蔽:
systemctl mask firewalld
- 屏蔽防火墙服务(让它不能启动)
ln -s '/dev/null''/etc/systemd/system/firewalld.service'
- 取消屏蔽:
systemctl unmask firewalld
- 显示服务(如 firewalld.service)
rm '/etc/systemd/system/firewalld.service'
2.systemctl指令
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。- 启动一个服务:
systemctl start firewalld.service
- 关闭一个服务:
systemctl stop firewalld.service
- 重启一个服务:
systemctl restart firewalld.service
- 显示一个服务的状态:
systemctl status firewalld.service
- 在开机时启用一个服务:
systemctl enable firewalld.service
- 在开机时禁用一个服务:
systemctl disable firewalld.service
- 查看服务是否开机启动:
systemctl is-enabled firewalld.service
- 查看已启动的服务列表:
systemctl list-unit-files|grep enabled
- 查看启动失败的服务列表:
systemctl --failed
配置firewalld-cmd
- 查看版本:
firewall-cmd --version
- 查看帮助:
firewall-cmd --help
- 显示状态:
firewall-cmd --state
- 查看所有打开的端口:
firewall-cmd --zone=public --list-ports
- 更新防火墙规则:
firewall-cmd --reload
- 查看区域信息:
firewall-cmd --get-active-zones
- 查看指定接口所属区域:
firewall-cmd --get-zone-of-interface=eth0
- 拒绝所有包:
firewall-cmd --panic-on
- 取消拒绝状态:
firewall-cmd --panic-off
- 查看是否拒绝:
firewall-cmd --query-panic
- 那怎么开启一个端口呢
- 添加
firewall-cmd --zone=public --add-port=80/tcp --permanent
(–permanent永久生效,没有此参数重启后失效) - 重新载入
firewall-cmd --reload
- 查看
firewall-cmd --zone=public --query-port=80/tcp
- 删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
- 修改端口启用
在每次修改端口和服务后 /etc/firewalld/zones/public.xml 文件就会被修改 所以也可以在文件中之间修改 然后重新加载
#systemctl start firewalld.service //开启服务
#systemctl enable firewalld.service //开机制动启动
#systemctl stop firewalld.service //关闭服务
#systemctl disable firewalld.service //禁止开机启动
- 获取 firewalld 状态
firewall-cmd --state
此举返回 firewalld 的状态,没有任何输出。可以使用以下方式获得状态输出:
firewall-cmd --state && echo "Running" || echo "Not running"
- 在不改变状态的条件下重新加载防火墙:
firewall-cmd --reload
如果你使用–complete-reload,状态信息将会丢失。这个选项应当仅用于处理防火墙问题时,例如,状态信息和防火墙规则都正常,但是不能建立任何连接的情况。 - 获取支持的区域列表
firewall-cmd --get-zones
- 获取所有支持的服务
firewall-cmd --get-services
- 获取所有支持的ICMP类型
firewall-cmd --get-icmptypes
- 列出全部启用的区域的特性
firewall-cmd --list-all-zones
输出格式是:
<zone> interfaces: <interface1> .. services: <service1> .. ports: <port1> .. forward-ports: <forward port1> .. icmp-blocks: <icmp type1> ....
输出区域 全部启用的特性。如果省略区域,将显示默认区域的信息。
firewall-cmd [--zone=<zone>] --list-all
-
获取默认区域的网络设置
firewall-cmd --get-default-zone
-
设置默认区域
firewall-cmd --set-default-zone=<zone>
流入默认区域中配置的接口的新访问请求将被置入新的默认区域。当前活动的连接将不受影响。 -
获取活动的区域
firewall-cmd --get-active-zones
这条命令将用以下格式输出每个区域所含接口:
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..
- 根据接口获取区域
firewall-cmd --get-zone-of-interface=<interface>
- 将接口增加到区域
firewall-cmd [--zone=<zone>] --add-interface=<interface>
如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。 - 修改接口所属区域
firewall-cmd [--zone=<zone>] --change-interface=<interface>
这个选项与 –add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被1添加到新的区域。 - 从区域中删除一个接口
firewall-cmd [--zone=<zone>] --remove-interface=<interface>
- 查询区域中是否包含某接口
firewall-cmd [--zone=<zone>] --query-interface=<interface>
返回接口是否存在于该区域。没有输出。 - 列举区域中启用的服务
firewall-cmd [ --zone=<zone> ] --list-services
- 启用应急模式阻断所有网络连接,以防出现紧急状况
firewall-cmd --panic-on
- 禁用应急模式
firewall-cmd --panic-off
应急模式在 0.3.0 版本中发生了变化 在 0.3.0 之前的 FirewallD版本中, panic 选项是 –enable-panic 与 –disable-panic. - 查询应急模式
firewall-cmd --query-panic
此命令返回应急模式的状态,没有输出。可以使用以下方式获得状态输出:
firewall-cmd --query-panic && echo "On" || echo "Off"
service iptables status可以查看到iptables服务的当前状态。
但是即使服务运行了,防火墙也不一定起作用,你还得看防火墙规则的设置 iptables -L
启动和关闭防火墙的命令:
- 重启后生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
- 即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
3.限制指定IP访问指定端口
例如:限制192.168.1.2可以访问mysql数据库3306端口
- 添加限制规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.2" port protocol="tcp" port="3306" accept'
说明:
- rule family="ipv4"指定了 IP 协议版本为 ipv4,也可以指定ipv6
- source address="192.168.1.2"表示访问来源的 IP 地址,可写IP段范围:192.168.1.0/24
- port protocol="tcp"指定了端口协议为 TCP(如果你的服务使用 UDP 协议,则改为 udp)
- port="3306"是要开放的端口号
- accept表示接受来自这个 IP 对这个端口的访问。可行值 reject、drop。表示直接丢弃数据,不回应客户端,直到客户端超时;reject则会返回一个拒绝的数据包
- 重新加载使其生效
firewall-cmd --reload
- 删除端口限制
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.2" port protocol="tcp" port="3306" accept'
4.端口转发
-
要打开端口转发,则需要先执行
firewall-cmd --zone=external --add-masquerade
PS: 关闭则执行firewall-cmd --zone=external --remove-masquerade
-
然后转发tcp1884端口至12884
firewall-cmd --zone=external --add-forward-port=port=1883:proto=tcp:toport=12884
-
转发1884端口数据至另一个ip192.168.78.100的相同端口上
firewall-cmd --zone=external --add-forward-port=port=1884:proto=tcp:toaddr=192.168.78.100
-
转发1884端口数据至另一ip192.168.78.100的21884端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=21884:toaddr=192.168.78.100
-
删除
只需将--add-forward-port
改为--remove-forward-port
,其他照写,示例:
firewall-cmd --zone=external --remove-forward-port=port=22:proto=tcp:toport=21884:toaddr=192.168.78.100