第三节 Linux防火墙配置(一)

亮子 2021-08-12 09:33:53 21316 0 0 0

Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及“zone”的区域功能概念。
使用图形化工具firewall-config或文本管理工具firewall-cmd。

1、区域概念与作用

防火墙的网络区域定义了网络连接的可信等级,我们可以根据不同场景来调用不同的firewalld区域。

特别需要注意的是firewalld服务有两份规则策略配置记录,必需要能够区分:

RunTime: 当前正在生效的。
Permanent: 永久生效的。

当下面实验修改的是永久生效的策略记录时,必须执行“–reload”参数后才能立即生效,否则要重启后再生效。

2、查看当前的区域

[root@CentOS7 ~]# firewall-cmd --get-default-zone
public

3、查询网卡的区域

[root@Centos7 ~]# firewall-cmd --get-zone-of-interface=eno16777736
public

4、在public中分别查询ssh与http服务是否被允许

[root@Centos7 ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@Centos7 ~]# firewall-cmd --zone=public --query-service=http
no

5、实例A:

允许https服务流量通过public区域,要求立即生效且永久有效。

  • 方法一: 分别设置当前生效与永久有效的规则记录。
[root@Centos7 ~]# firewall-cmd --zone=public --add-service=https  #当前生效
success
[root@Centos7 ~]# firewall-cmd --permanent --zone=public --add-service=https  #添加--permanent选项使规则永久生效
success
  • 方法二: 设置永久生效的规则记录后读取记录。
[root@Centos7 ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@Centos7 ~]# firewall-cmd --reload  #必须读取记录才能即时生效
success

6、实例B:

不再允许http服务流量通过public区域,要求立即生效且永久生效。

[root@Centos7 ~]# firewall-cmd --permanent --zone=public --remove-service=http
success
[root@Centos7 ~]# firewall-cmd --reload
success

7、实例C:

允许8080与8081端口流量通过public区域,立即生效且永久生效。

[root@Centos7 ~]# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
success
[root@Centos7 ~]# firewall-cmd --reload 
success

7、实例D:

查看模拟实验中的规则。

[root@Centos7 ~]# firewall-cmd --zone=public --list-services 
dhcpv6-client http https ssh
[root@Centos7 ~]# firewall-cmd --zone=public --list-ports 
8080-8081/tcp

8、实例E:

将访问主机888端口的请求转发至22端口。

[root@Centos7 ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.0.100
success
[root@Centos7 ~]# firewall-cmd --reload 
success

例如安装Nagios后,要开放5666端口与服务器连接,命令如下:

[root@centos7 ~]# firewall-cmd --add-port=5666/tcp #即时打开,这里也可以是一个端口范围,如1000-2000/tcp
success
[root@centos7 ~]# firewall-cmd --permanent --add-port=5666/tcp #写入配置文件
success
[root@centos7 ~]# firewall-cmd --reload #重新加载防火墙配置
success

例如需要对指定的ip开放http服务,指定的ip开放3306端口,命令如下:

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.17.0.1/16" port port="3306" protocol="tcp" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"'

附1:CentOS7快速开放端口

CentOS升级到7之后,发现无法使用iptables控制Linux的端口,baidu之后发现Centos 7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口。

开启端口:

[root@centos7 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp

取消端口开放:

[root@centos7 ~]# firewall-cmd --permanent --zone=public --remove-port=80/tcp

查询端口号80 是否开启:

[root@centos7 ~]# firewall-cmd --query-port=80/tcp

查询有哪些端口是开启的:

[root@centos7 ~]# firewall-cmd --list-port

命令含义:

--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

重新加载防火墙配置:

[root@centos7 ~]# firewall-cmd --reload

附2:CentOS6防火墙开放端口

在我们使用CentOS6系统的时候,CentOS6防火墙有时是需要改变设置的。CentOS6防火墙默认是打开的,设置CentOS6防火墙开放端口方法如下:

打开iptables的配置文件:/etc/sysconfig/iptables

修改CentOS6防火墙时注意:一定要给自己留好后路,留VNC一个管理端口和SSH的管理端口。

下面是一个iptables的示例:

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp –icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
COMMIT

修改CentOS6防火墙需要注意的是,你必须根据自己服务器的情况来修改这个文件。

举例来说,如果你不希望开放80端口提供web服务,那么应该相应的删除这一行:

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

全部修改完之后重启iptables:

service iptables restart

你可以验证一下是否规则都已经生效:

iptables -L

参考文档