Centos7使用的防火墙是Firewalld
如果你的系统上没有安装使用命令安装
安装firewalld 防火墙yum install firewalld
开启服务systemctl start firewalld.service
关闭防火墙systemctl stop firewalld.service
开机自动启动systemctl enable firewalld.service
关闭开机制动启动systemctl disable firewalld.service
为确认服务是否已经启动,运行下面的命令获取有效的服务列表。
firewall-cmd --get-services
禁止ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
查询端口是否开放
firewall-cmd --query-port=8080/tcp
开放80端口
firewall-cmd --permanent --add-port=80/tcp
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
重加载防火墙(修改配置后要重加载防火墙)
firewall-cmd --reload
参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、–permanent:表示设置为持久; 3、–add-port:标识添加的端口;
firewall-cmd --zone=public --permanent --add-port=80/tcp
firewall-cmd --zone=public --permanent --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-service=http
移除
firewall-cmd --permanent --zone=public --remove-service=http
增加范围端口
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
查看当前默认zone
firewall-cmd --get-default-zone
设置默认zone
firewall-cmd --set-default-zone=public
VPN L2TP+IPSec
firewall-cmd --zone=public --permanent --add-port=1701/udp
firewall-cmd --zone=public --permanent --add-port=4500/udp
仅允许部分IP访问本机服务配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" service name="http" accept"
允许部分IP访问ssh(不允许访问: drop/reject)
firewall-cmd --permanent --zone=public --add-rich-rule=’rule family=ipv4 source address=192.168.0.0/24 service name=ssh accept’
仅允许部分IP访问本机端口配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24"port protocol="tcp" port="8080" accept"
查看rich规则
Firewall-cmd --list-rich-rules
删除rich规则
firewall-cmd --permanent --zone=public --remove-rich-rule=’rule family=ipv4 source address=192.168.0.0/24 service name=ssh accept’
创建rich规则,可以指定日志的前缀和输出级别
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24"port port=8080 protocol="tcp" log prefix=proxy level=warning accept"
可以通过查看/var/log/messages日志文件
根据接口获取区域即需要查看哪个区域和这个接口绑定即查看某个接口是属于哪个zone的:
firewall-cmd --get-zone-of-interface=接口名
将接口(网卡)增加到区域
firewall-cmd [--zone=] --add-interface=接口名
修改接口所属区域
firewall-cmd [--zone=] --change-interface=接口名
查询区域中是否包含某接口
firewall-cmd [--zone=] --query-interface=接口名
启用区域中的 IP 伪装功能
firewall-cmd [–zone=区域] –add-masquerade
此操作启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4。
禁用区域中的 IP 伪装
firewall-cmd [–zone=区域] –remove-masquerade
查询区域的伪装状态
firewall-cmd [–zone=区域] –query-masquerade
启用区域的 ICMP 阻塞功能
firewall-cmd [–zone=区域] –add-icmp-block=icmp类型 此操作将启用选中的 Internet 控制报文协议(ICMP)报文进行阻塞。 ICMP 报文可以是请求信息或者创建的应答报文,以及错误应答。
11、禁止区域的 ICMP 阻塞功能
firewall-cmd [–zone=区域] –remove-icmp-block=icmp类型
12、查询区域的 ICMP 阻塞功能
firewall-cmd [–zone=区域] –query-icmp-block=icmp类型
13、在区域中启用端口转发或映射
firewall-cmd [–zone=区域] –add-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口或者是端口范围 – 。协议可以为tcp或udp。目标端口可以是端口号或者是端口范围 – 。目标地址可以是 IPv4 地址。受内核限制,端口转发功能仅可用于IPv4。
firewall-cmd控制端口与端口转发
一 、控制端口/服务 可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放http服务就是开放了80端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp还是udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。
firewall-cmd –add-service=mysql # 开放mysql端口
firewall-cmd –remove-service=http # 阻止http端口
firewall-cmd –list-services # 查看开放的服务
firewall-cmd –add-port=3306/tcp # 开放通过tcp访问3306
firewall-cmd –remove-port=80tcp # 阻止通过tcp访问3306
firewall-cmd –add-port=233/udp # 开放通过udp访问233
firewall-cmd –list-ports # 查看开放的端口
二、伪装IP
防火墙可以实现伪装IP的功能,下面的端口转发就会用到这个功能。
firewall-cmd –query-masquerade # 检查是否允许伪装IP
firewall-cmd –permanent –add-masquerade # 允许防火墙伪装IP
firewall-cmd –permanent –remove-masquerade# 禁止防火墙伪装IP
三、端口转发
端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。
如果配置好端口转发之后不能用,可以检查下面两个问题:
比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
其次检查是否允许伪装IP,没允许的话要开启伪装IP
将80端口的流量转发至8080
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
将80端口的流量转发至
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1192.168.0.1
将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。