一、防火墙介绍
-
所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。
-
防火墙是一种保护计算机网络安全的技术性措施,它通过在网络边界上建立相应的网络通信监控系统来隔离内部和外部网络,以阻挡来自外部的网络入侵。
-
Linux
操作系统在默认情况下就安装了防火墙,CentOS 7
内置的防火墙已经从Iptables
变成了Firewall
。
二、防火墙安装
-
yum
安装firewalld
# 非图形化界面安装 yum install firewalld # 图形化界面安装 yum install firewall-config # 图形化非图形化共同安装 yum install firewalld firewall-config
三、Iptables 和 Firewall 区别
四、Iptables 和 Firewall 详解
-
Firewall
-
简介
-
firewalld
是CentOS 7
的一大特性,最大的好处是支持动态更新,不用重启服务,并且加入了zone
概念 -
防火墙守护
firewalld
服务引入了一个信任级别的概念来管理与之相关联的连接和接口。它支持ipv4
与ipv6
,并支持网桥,采用firewall-cmd(command)
或firewall-config(GUI)
来动态的管理kernel netfilter
的临时或永久的接口规则,并实时生效而无需重启服务 -
firewalld
的字符界面管理工具是firewall-cmd
-
firewalld
默认配置文件有两个:/usr/lib/firewalld/
(系统配置,尽量不要修改)和/etc/firewalld/
(用户配置地址)
zone
Firewall
能将不同的网络连接归类到不同的信任级别,Zone
提供了以下几个级别级别 注解 drop 丢弃所有进入的包,而不给出任何响应 block 拒绝所有外部发起的连接,允许内部发起的连接 public 允许指定的进入连接 external 同上,对伪装的进入连接,一般用于路由转发 dmz 允许受限制的进入连接 work 允许受信任的计算机被限制的进入连接,类似 workgroup home 同上,类似 homegroup internal 同上,范围针对所有互联网用户 trusted 信任所有连接 过滤规则
规则 注解 source 根据源地址过滤 interface 根据网卡过滤 service 根据服务名过滤 port 根据端口过滤 icmp-block icmp 报文过滤,按照 icmp 类型配置 masquerade ip 地址伪装 forward-port 端口转发 rule 自定义规则 其中,过滤规则的优先级遵循如下顺序
- source
- interface
- firewalld.conf
-
-
使用
firewalld.service 基本操作
-
停止
systemctl stop firewalld.service
-
启动
systemctl start firewalld.service
-
重启
systemctl restart firewalld.service
-
查看状态
systemctl status firewalld.service
-
禁止 firewalld 开机启动
systemctl disable firewalld.service
-
设置开机启用防火墙
systemctl enable firewalld.service
-
查看服务是否开机启动
systemctl is-enabled firewalld.service
-
查看已启动的服务列表
systemctl list-unit-files|grep enabled
-
查看启动失败的服务列表
systemctl --failed
-
查看已经开放的端口列表
firewall-cmd --zone=public --list-ports
-
永久开启15672端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
-
重启防火墙使配置生效
firewall-cmd --reload
firewall-cmd 基本操作
-
查看版本
firewall-cmd --version
-
查看帮助
firewall-cmd --help
--zone=NAME # 指定 zone --permanent # 永久修改,--reload 后生效 --timeout=seconds # 持续效果,到期后自动移除,用于调试,不能与 --permanent 同时使用
-
查看运行状态
firewall-cmd --state
-
查看区域信息
firewall-cmd --get-active-zones
-
查看指定接口所属区域
firewall-cmd --get-zone-of-interface=ens33
firewall-cmd 规则设置
-
对外暴露指定端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent # 更新防火墙规则使修改生效 firewall-cmd --reload
-
添加多个端口
firewall-cmd --permanent --zone=public --add-port=8080-8083/tcp # 更新防火墙规则使修改生效 firewall-cmd --reload
-
开放http/80端口服务访问
firewall-cmd --zone=public --add-port=80/tcp --permanent # 或者 firewall-cmd --permanent --add-service=http # 更新防火墙规则使修改生效 firewall-cmd --reload
-
开放https/443端口服务访问
firewall-cmd --zone=public --add-port=443/tcp --permanent # 或者 firewall-cmd --permanent --add-service=https # 更新防火墙规则使修改生效 firewall-cmd --reload
-
查看已对外暴露端口列表
firewall-cmd --zone=public --list-ports
-
查看所有的规则暴露列表
firewall-cmd --list-all # 或者 iptables -nL
-
查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
firewall-cmd --list-all-zones
-
取消指定对外暴露的接口
firewall-cmd --zone=public --remove-port=9092/tcp --permanent # 更新防火墙规则使修改生效 firewall-cmd --reload
-
拒绝所有包
firewall-cmd --panic-on
-
取消拒绝状态
firewall-cmd --panic-off
-
查看是否拒绝
firewall-cmd --query-panic
-
设置指定服务的端口号只允许指定网段的服务器能访问的规则
规则场景一
# 添加规则,设定 MySQL 服务的 3306 端口只允许 192.168.1.1/24 网段的服务器能访问 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.1/24" port protocol="tcp" port="3306" accept" # 或者添加规则,设定 MySQL 服务的 3306 端口只允许 192.168.1.100 这个IP的服务器能访问 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept" # 当然除了设置远程服务器的指定 IP 可以访问以外,本地也需要支持可以访问的 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept" # 更新防火墙规则使修改生效 firewall-cmd --reload
规则场景二
# 访问 IP 匹配 10.30.125.* 的网段服务器都可以访问 3306 端口 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" port protocol="tcp" port="3306" accept" # 10.30.125.* 其它网段访问都会被丢弃(也就是说,这么设定以后,该网段服务器只能访问 3306 端口,其它端口或者服务都不能被访问),请注意这两个命令的执行顺序 firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" drop"
P.S
address="192.168.1.1/24" 的理解: 1. /8 是表示只要设置的前一个网段匹配,就能够适配 2. /16 是表示只要设置的前两个网段匹配,就能够适配 3. /24 是表示只要设置的前三个网段匹配,就能够适配 4. /32 是表示只要设置的所有网段都匹配,就能够适配(可以尝试指定 IP 而不进行网段匹配设置,如:address="192.168.1.1")
-
删除指定服务的端口号只允许指定网段的服务器访问的规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept" firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept"
-
更多 rich rule 规则设定请参考如下命令
man firewalld.richlanguage
-
端口转发,将到本机的3306端口的访问转发到192.168.1.1服务器的3306端口
# 开启伪装IP firewall-cmd --permanent --add-masquerade # 配置端口转发 firewall-cmd --permanent --add-forward-port=port=3306:proto=tcp:toaddr=192.168.1.2:toport=13306
P.S
如果不开启伪装 IP,端口转发会失败。其次,要确保源服务器上的端口(3306)和目标服务器上的端口(13306)是开启的。
-
-
-
Iptables(CentOS 7 以下版本适用)
-
打开/关闭/重启防火墙
# 开启防火墙(重启后永久生效) chkconfig iptables on # 关闭防火墙(重启后永久生效) chkconfig iptables off # 开启防火墙(即时生效,重启后失效) service iptables start # 关闭防火墙(即时生效,重启后失效) service iptables stop # 重启防火墙 service iptables restartd
-
查看打开的端口
/etc/init.d/iptables status
-
打开某个端口(以8080为例)
# 开启端口 iptables -A INPUT -p tcp --dport 8080 -j ACCEPT # 保存并重启防火墙 /etc/rc.d/init.d/iptables save /etc/init.d/iptables restart
-
打开49152~65534之间的端口(重启后永久生效)
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
-
其他打开方式
# 编辑 iptables 文件 vi /etc/sysconfig/iptables # 在该文件的最后一行添加如下开放指定端口的命令 -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
P.S
参数说明:–A 参数就看成是添加一条规则 –p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS –dport 就是目标端口,当数据从外部进入服务器为目标端口 –sport 数据从服务器出去,则为数据源端口使用 –j 就是指定是 ACCEPT -接收 或者 DROP 不接收
-