十三、selinux和防火墙
SElinux基本说明
selinux类型: Enforcing, Permissive, or Disabled
- Enforcing:既阻止用户的违规行为,同时对违规行为作日志记录
- Permissive:不对违规行为作阻止,只记录日志
- Disabled:SElinux不开启,不记录日志
配置文件: /etc/sysconfig/selinux
(重启生效)
seLinux 文件内容
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled #此处更改状态
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
图形工具
yum install policycoreutils-gui
system-config-selinux
在不重启状态下,如果当前的模式为enforcing或permissive,可以通过以下指令修改为另一种,但是不可以修改为disabled
获取当前SElinux工作状态
getenforce
运行时修改
setenforce 0 | 1
kernel参数的修改
当系统启动时,需要在kernel层对SElinux做控制时,可以使用以下参数:
selinux=0|1,如果设置为0时,开机后getenforce获取的状态为disabled
enforcing=0|1,如果设置为0时,开机后getenforce获取的状态为permissive
每个文件和进程都有上下文,查看的指令为:
ls -lZ 文件或目录(-d)
ps auxZ | less
SElinux的用户类型分为三种:
- 超级用户
- 系统用户
- 普通用户
文件或目录的SElinux权限控制主要设置的是第三列字段,type类型
修改文件标签的方法:
chcon -R -t public_content_t /srv/www
chcon表示运行状态下的修改,修改完立即生效,restorecon可以将之前的修改还原
在修复模式等特殊环境下,chcon做的修改会被重置还原
semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
semanage表示系统层的修改,修改完不会立即生效,需要通过重启或restorecon
触发更新,更改之后的标签类型,restorecon
无法还原,只能通过semanage
设置新的标签类型
restorecon -Rv /srv/www
表示还原或触发系统默认标签类型,-R
表示递归式还原,-v
表示显示还原标签的变化信息
布尔值:
主要是通过应用规则,保护服务器的文件目录不被破坏
获取布尔值的方法:getsebool -a
可以通过grep过滤需要设置的服务关键词,对布尔值作修改
修改布尔值的方法:
setsebool \[-P\] httpd\_enable\_cgi off/on
-P表示规则永久生效,不加-P时,规则在不重启的情况下生效
端口SElinux标签查看方法:
semanage port -l
SElinux日志机制:
- 如果SElinux的监听服务开启,
setroubleshootd(RHEL5/6)/auditd(RHEL7)
SElinux相关的日志存放在/var/log/audit/audit.log
文件中 - 如果SElinux的监听服务没有开启,则日志机制会被
rsyslog
代理监听,SElinux相关的日志会被存放在/var/log/messages
文件中
iptables
iptables netfilter 位于Linux内核中的包过滤功能体系,基于内核控制,实现防火墙的相关策略
iptables 位于/sbin/iptables
,用来管理防火墙规则的工具
iptables默认包括5种规则链
- INPUT:处理入站数据包
- OUTPUT:处理出站数据包
- FORWARD:处理转发数据包
- POSTROUTING链:在进行路由选择后处理数据包
- PREROUTING链:在进行路由选择前处理数据包
iptables默认包括4个规则表
- raw表:确定是否对该数据包进行状态跟踪 (kernel 2.6)
- mangle表:为数据包设置标记
- nat表:修改数据包中的源、目标IP地址或端口(网络地址转换)
- filter表:确定是否放行该数据包(过滤)
表与链的关联:
- raw:prerouting链 output链
- mangle:prerouting链 input链 forward链 output链 postrouting链
- nat:prerouting链 output链 postrouting链
- filter:input链 forward链 output链
语法构成
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
注意事项
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型
- ACCEPT:允许通过
- DROP:直接丢弃,不给出任何回应
- REJECT:拒绝通过,必要时会给出提示
- LOG:记录日志信息,然后传给下一条规则继续匹配
启用iptables的方法
首先需要安装iptables的服务包 yum install iptables-services
因为RHEL7默认使用防火墙工具为firewalld
所以需要关闭firewalld才能开启iptables
systemctl stop firewalld.service //仅停止,其他程序可调用
systemctl status firewalld.service //查看 firewalld 状态
systemctl mask firewalld.service //彻底关闭,其他程序无法调用
关闭firewalld后打开iptables
systemctl start iptables.service //开启 iptables
systemctl enable iptables.service //开启启动
systemctl start ip6tables.service //开启 ip6tables
systemctl enable ip6tables.service //开启启动
systemctl status iptables.service //查看 ip6tables 状态
iptables规则管理
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则 查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号 删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
-X:清空缓存信息
Firewalld
firewalld 动态链接防火墙,所做的配置可以实时生效
firewalld有两种配置状态:
运行状态和永久配置
当规则被增加时,默认添加为运行状态 firewall-cmd --add-service=mysql 比如 mySQL
查看当前运行状态下,firewalld开启的服务
firewall-cmd --list-services
如果想要一个规则永久生效,需要增加选项“--permanent”
firewall-cmd --permanent --add-service=mysql //此规则添加了--permanent 选项,永久生效
查看配置文件中,firewalld开启的服务 firewall-cmd --list-services --permanent
获取当前主机中firewalld的激活区域 firewall-cmd --get-active-zones
firewalld默认的激活区域为public,所以在配置防火墙规则时,如果不做“--zone=”区域的制定,默认的防火墙规则都会被写入到public区域中
根据网络地址,协议,端口同时对firewalld设置,可以使用富规则
通过指定协议增加防火墙的限制
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.11/24 service name=ssh accept'
通过指定端口增加防火墙的限制
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.11/24 port protocol=tcp port=22 accept'
防火墙规则设置时,如果没有加--permanent,表示当前生效,重启主机或重启firewalld,规则失效(firewall-cmd --reload)
防火墙规则设置时,如果增加了--permanent,规则不会立即生效,可以通过firewall-cmd --reload
,重新加载配置文件,使设置的规则生效
图形化工具
firewall-config
测试:
server: firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.2/24 forward-port port=443 protocol=tcp to-port=22'
client: ssh -p 443 主机名(连接失败)
server: firewall-cmd --reload
client: ssh -p 443 主机名(可以输入服务器密码,连接成功)