概述
CentOS中的防火墙有很多,如SELinux、Firewall、TCP Wrappers、iptables/netfilter。
每种防火墙都有各自擅长的地方。
这里主要讲两种:SELinux和Firewall。
SElinux
为什么需要SElinux?
Linux中的程序不能拥有过大的权限,否则就会侵入我们的系统,获取我们的数据(比如数据库文件),随意安装程序(比如后门)。
这就像是在Windows上下载一些非官方软件,安装后桌面上会出现“贪玩蓝月”,“传奇”或者广告等图标。
SElinux的作用:
SElinux主要用于防内部,比如内部的文件权限、端口权限。这样的话,应用程序就不会拥有过大的权限。
SELinux三种模式
enforcing #强制模式,拦截不合法请求(默认状态)
permissive #只警告不拦截
disabled #对于越权行为不警告也不拦截(即关闭SELinux)
查看当前SELinux的模式与状态
getenforce #查看SELinux当前的模式
getsebool -a #查询当前各项规则的布尔值
#举例:
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/ #放开httpd这个程序对/home/wwwroot/的权限
SELinux的开关
- 临时开关(无需重启)
setenforce 0 #临时关闭SELinux
setenforce 1 #临时开启SELinux
- 永久开关(需要重启)
vim /etc/selinux/config
SELINUX=disabled #将SELinux的状态设置为disabled(关闭)
- 通常如何关闭和开启SElinux
因为临时开关临时有效,永久开关需要重启。
所以我们通常结合两种方式。
比如,关闭SELinux:
setenforce 0 #临时关闭SELinux
vim /etc/selinux/config
SELINUX=disabled
Firewalld
与SELinux不同,这个防火墙主要用来防外部。比如:防止网络上其他主机对某端口的访问。
Firewalld还有其他很强大的功能:比如NAT转发。
临时放行端口
firewall-cmd --add-port=8080/tcp #放行8080端口的TCP协议
firewall-cmd --add-port=8080-8090/tcp #放行8080端口~8090端口的TCP协议
#注意:上面端口的UDP协议还是会被拦截。
临时放行某个协议
firewall-cmd --add-service=https #临时放行https协议(与放行443端口作用一样)
临时拦截某个协议
firewall-cmd --remove-service=https #临时拦截https协议(与拦截443端口作用一样)
#同理:拦截端口用的命令是--remove-port
查看firewalld中的规则
firewall-cmd --list-all #查看当前的规则(包括临时)
firewall-cmd --list-all --permanent #查看永久规则
永久放行或拦截
前面讲到的都是临时有效的,重启firewalld之后,规则就会失效(因为会重新读取配置文件)。
- 永久放行端口-方法1
firewall-cmd --add-port=8080/tcp --permanent #只会将规则写入文件,但不立即生效
firewall-cmd --add-port=8080/tcp
- 永久放行端口-方法2
firewall-cmd --add-port=8080/tcp --permanent #只会将规则写入文件,但不立即生效
firewall-cmd --reload #重启firewlld(会重新读取配置文件)