- Linux管理员教程
- 首页
- CentOS概述
- 基本的CentOS Linux命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd服务启动和停止
- 使用systemctl进行资源管理
- 使用cgroups进行资源管理
- 进程管理
- 防火墙设置
- 在CentOS Linux中配置PHP
- 使用CentOS Linux设置Python
- 在CentOS Linux上配置Ruby
- 为CentOS Linux设置Perl
- 安装和配置Open LDAP
- 创建SSL证书
- 安装Apache Web服务器CentOS 7
- 在CentOS 7上设置MySQL
- 设置Postfix MTA和IMAP/POP3
- 安装匿名FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份和恢复
- 系统更新
- Shell脚本
- 包管理
- 卷管理
- Linux管理员有用资源
- Linux管理员 - 快速指南
- Linux管理员 - 有用资源
- Linux管理员 - 讨论
Linux管理员 - 防火墙设置
firewalld是CentOS上iptables的默认前端控制器。firewalld前端相对于原始iptables有两个主要优点:
使用易于配置和实施的区域来抽象链和规则。
规则集是动态的,这意味着当设置更改和/或修改时,有状态连接不会中断。
请记住,firewalld是iptables的包装器,而不是替代品。虽然可以使用firewalld使用自定义iptables命令,但建议使用firewalld以避免破坏防火墙功能。
首先,让我们确保firewalld已启动并启用。
[root@CentOS rdc]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago Docs: man:firewalld(1) Main PID: 712 (firewalld) Memory: 34.7M CGroup: /system.slice/firewalld.service └─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
我们可以看到,firewalld处于活动状态(在启动时启动)并且当前正在运行。如果未处于活动状态或未启动,我们可以使用:
systemctl start firewalld && systemctl enable firewalld
现在我们已经配置了firewalld服务,让我们确保它正在运行。
[root@CentOS]# firewall-cmd --state running [root@CentOS]#
我们可以看到,firewalld服务完全正常。
Firewalld基于区域的概念。通过网络管理器将区域应用于网络接口。我们将在配置网络中讨论这一点。但目前,默认情况下,更改默认区域将更改保留在“默认区域”默认状态的任何网络适配器。
让我们快速浏览一下firewalld自带的每个区域。
序号 | 区域及描述 |
---|---|
1 | drop 低信任级别。所有传入连接和数据包都被丢弃,并且只能通过状态性进行传出连接 |
2 | block 传入连接将回复一条icmp消息,让发起者知道请求被禁止 |
3 | public 所有网络都受到限制。但是,可以选择明确允许选定的传入连接 |
4 | external 配置用于NAT的firewalld。内部网络保持私有但可访问 |
5 | dmz 仅允许某些传入连接。用于DMZ隔离中的系统 |
6 | work 默认情况下,信任网络上的更多计算机,假设系统处于安全的工作环境中 |
7 | home 默认情况下,更多服务未过滤。假设系统位于家庭网络上,其中将使用NFS、SAMBA和SSDP等服务 |
8 | trusted 网络上的所有机器都受信任。大多数传入连接都允许不受限制。这并不适用于暴露于互联网的接口 |
最常用的区域是:public、drop、work和home。
每个常用区域的一些使用场景:
public - 这是管理员最常用的区域。它将允许您应用自定义设置并遵守LAN上操作的RFC规范。
drop - 使用drop的一个很好的例子是在安全会议、公共WiFi或直接连接到互联网的接口上。drop假设所有未经请求的请求都是恶意的,包括ICMP探测。因此,任何超出状态的请求都不会收到回复。drop的缺点是,在某些情况下,它可能会破坏应用程序的功能,这些应用程序需要严格遵守RFC。
work - 您位于半安全的公司LAN上。可以假设所有流量都相对安全。这意味着它不是WiFi,我们可能已部署了IDS、IPS和物理安全或802.1x。我们还应该熟悉使用LAN的人员。
home - 您位于家庭LAN上。您个人对LAN上的每个系统和用户负责。您知道LAN上的每台机器,并且没有一台机器被入侵。通常会为受信任的个人之间共享媒体而启动新的服务,并且您无需为了安全而花费额外的时间。
区域和网络接口以多对一的关系工作。一个网络接口一次只能应用一个区域。而一个区域可以同时应用于多个接口。
让我们看看有哪些区域可用以及当前应用的区域是什么。
[root@CentOS]# firewall-cmd --get-zones work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone public [root@CentOS]#
准备好向firewalld中添加一些自定义规则了吗?
首先,让我们看看从外部端口扫描程序的角度来看,我们的盒子是什么样子的。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00046s latency). Not shown: 1023 filtered ports PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds bash-3.2#
让我们允许传入端口80的请求。
首先,检查应用的默认区域。
[root@CentOs]# firewall-cmd --get-default-zone public [root@CentOS]#
然后,设置允许端口80到当前默认区域的规则。
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp success [root@CentOS]#
现在,让我们在允许端口80连接后检查我们的盒子。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00053s latency). Not shown: 1022 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp closed http Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds bash-3.2#
现在它允许对80进行未经请求的流量。
让我们将默认区域设置为drop,看看会发生什么情况。
[root@CentOS]# firewall-cmd --set-default-zone=drop success [root@CentOS]# firewall-cmd --get-default-zone drop [root@CentOs]#
现在让我们使用更安全的区域扫描具有网络接口的主机。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00094s latency). All 1024 scanned ports on centos.shared (10.211.55.1) are filtered Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds bash-3.2#
现在,所有内容都从外部过滤。
如下所示,当处于drop状态时,主机甚至不会响应ICMP ping请求。
bash-3.2# ping 10.211.55.1 PING 10.211.55.1 (10.211.55.1): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2
让我们再次将默认区域设置为public。
[root@CentOs]# firewall-cmd --set-default-zone=public success [root@CentOS]# firewall-cmd --get-default-zone public [root@CentOS]#
现在让我们检查我们当前在public中的过滤规则集。
[root@CentOS]# firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s5 sources: services: dhcpv6-client ssh ports: 80/tcp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: [root@CentOS rdc]#
如配置所示,我们的端口80过滤器规则仅在正在运行的配置的上下文中。这意味着一旦系统重新启动或firewalld服务重新启动,我们的规则将被丢弃。
我们很快将配置httpd守护进程,因此让我们使我们的更改持久化:
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent success [root@CentOS]# systemctl restart firewalld [root@CentOS]#
现在,我们public区域中的端口80规则在重新启动和服务重启后保持持久。
以下是使用firewall-cmd应用的常用firewalld命令。
命令 | 操作 |
---|---|
firewall-cmd --get-zones | 列出可以应用于接口的所有区域 |
firewall-cmd —status | 返回firewalld服务的当前状态 |
firewall-cmd --get-default-zone | 获取当前默认区域 |
firewall-cmd --set-default-zone=<zone> | 将默认区域设置为当前上下文 |
firewall-cmd --get-active-zone | 获取当前上下文中应用于接口的区域 |
firewall-cmd --zone=<zone> --list-all | 列出提供的区域的配置 |
firewall-cmd --zone=<zone> --addport=<port/transport protocol> | 将端口规则应用于区域过滤器 |
--permanent | 使对区域的更改持久化。标志与修改命令一起使用 |
这些是管理和配置firewalld的基本概念。
在更复杂的网络场景中,在CentOS中配置基于主机的防火墙服务可能是一项复杂的任务。CentOS中firewalld和iptables的高级用法和配置可能需要整个教程。但是,我们已经介绍了基础知识,这些知识应该足以完成大多数日常任务。