Linux系统加固:限制用户对资源的使用&禁止IP源路由&更改主机解析地址的顺序&设置umask值

Linux系统加固:限制用户对资源的使用&禁止IP源路由&更改主机解析地址的顺序&设置umask值

    • [1.1 限制用户对资源的使用](#1.1 限制用户对资源的使用)
    • [1.2 禁止IP源路由](#1.2 禁止IP源路由)
    • [1.3 更改主机解析地址的顺序](#1.3 更改主机解析地址的顺序)
    • [1.4 禁止ip路由转发](#1.4 禁止ip路由转发)
    • [1.5 设置umask值](#1.5 设置umask值)

|-----------------------------|
| 💖The Begin💖点点关注,收藏不迷路💖 |

1.1 限制用户对资源的使用

/etc/security/limits.conf是Linux系统中用来配置用户资源限制的文件。通过编辑这个文件,您可以为特定用户或用户组设置各种资源限制,如最大打开文件数、最大CPU时间、最大内存限制等。

在/etc/security/limits.conf文件中,每行包含以下字段:

domain:指定要应用限制的用户或用户组名。设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。取值可以是:

1、用户名

2、组名(组名前面加'@'以区别用户名)

3、*(表示所有用户)

type:指定要限制的资源类型,如soft(软限制)和hard(硬限制)。

1、soft 表示警告的设定,可以超过这个设定值,但是超过会有警告信息

2、hard 表示严格的设定,必定不能超过这个设定的值

item:指定要限制的资源类型,如:

core:限制内核文件的大小

data:最大数据大小

fsize:最大文件大小

memlock:最大锁定内存地址空间

nofile:打开文件的最大数目

rss:最大持久设置大小

stack:最大栈大小

cpu:以分钟为单位的最多CPU时间

nproc:进程的最大数目

as:地址空间限制

value:指定资源的具体限制值。

语法:<domain> <type> <item> <value>

加固方案:

1、编辑/etc/security/limits.conf文件

powershell 复制代码
vi /etc/security/limits.conf

2、添加如下类似配置,参数根据你实际需求自己设置:

powershell 复制代码
# 示例配置

# 设置用户`mfs`的最大打开文件数为10000
mfs soft nofile 10000
mfs hard nofile 10000

# 设置用户组`@group01`的最大CPU时间为1小时
@group01 soft cpu 60
@group01 hard cpu 60

# 设置所有用户的最大栈大小为8MB,进程的最大持久设置大小2M
* soft stack 8192
* hard stack 8192

* soft rss 2048
* hard rss 2048

# 设置用户`zyl`的最大锁定内存地址空间为256MB
zyl soft memlock 262144
zyl hard memlock 262144

# 设置所有用户的nproc(进程数)的软限制为4096,硬限制为8192。
* soft nproc 4096
* hard nproc 8192

这个示例展示了如何在/etc/security/limits.conf文件中配置不同用户和用户组的资源限制。你可以根据需要添加或修改其他限制项和数值。

在修改完/etc/security/limits.conf文件后,需要重新登录用户或重启系统才能使更改生效。

1.2 禁止IP源路由

禁止IP源路由是一种网络安全措施,旨在防止特定类型的网络攻击,主要包括源路由攻击。以下是禁止IP源路由的原因:

1、源路由攻击防范: 源路由攻击是一种网络攻击手法,攻击者可以通过在IP数据包的选项字段中设置源路由信息,强制数据包按照指定的路径传输,绕过网络中的安全控制点。禁止IP源路由可以有效防止这种攻击。

2、防止IP地址欺骗: 通过源路由,攻击者可以伪造源IP地址,使得数据包似乎来自于一个信任的主机或网络。禁止IP源路由可以减少IP地址欺骗的可能性,提高网络的安全性。

3、减少网络风险: 启用IP源路由可能会增加网络的复杂性和风险,因为数据包可以绕过正常的路由路径,导致网络不稳定或容易受到攻击。禁止IP源路由可以降低这种风险。

加固步骤:

1、执行以下命令查看参数accept_source_route的值。

powershell 复制代码
cat /proc/sys/net/ipv4/conf/*/accept_source_route

判定依据:accept_source_route的值为0则合规,否则为不合规。

2、如果此项检查失败,请执行以下命令进行修复:

powershell 复制代码
for f in /proc/sys/net/ipv4/conf/*/accept_source_route
do
   echo 0 > $f
done

3、验证结果:

powershell 复制代码
cat /proc/sys/net/ipv4/conf/*/accept_source_route

请注意,这个设置在系统重启后会失效。如果想要永久禁止IP源路由,可以编辑/etc/sysctl.conf文件并添加以下行:

powershell 复制代码
net.ipv4.conf.all.accept_source_route = 0

保存文件后,使更改生效。

powershell 复制代码
sysctl -p

补充:/etc/sysctl.conf文件参数解释:

java 复制代码
#禁用包过滤功能
net.ipv4.ip_forward = 0 
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1 
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0 
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0 
#控制core文件的文件名是否添加pid作为扩展
kernel.core_uses_pid = 1 
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1 
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536 
#整个系统最大消息队列数量限制
kernel.msgmax = 65536 
#单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节)
kernel.shmmax = 68719476736 
#所有内存大小(单位:页,1页 = 4Kb),计算公式16G*1024*1024*1024/4KB(页)
kernel.shmall = 4294967296 
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000 
#开启有选择的应答
net.ipv4.tcp_sack = 1 
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1 
#TCP读buffer
net.ipv4.tcp_rmem = 4096 131072 1048576
#TCP写buffer
net.ipv4.tcp_wmem = 4096 131072 1048576  
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216 
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节) 
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144 
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 262144 
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800 
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 262144 
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种"异常"的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0 
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1 
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1 
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1 
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1 
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000  
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 15 
#表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
net.ipv4.tcp_keepalive_time = 30 
#对外连接端口范围
net.ipv4.ip_local_port_range = 2048 65000
#表示文件句柄的最大数量
fs.file-max = 102400
 
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
 
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
 
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
 
# 开启并记录欺骗,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
 
# 处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
 
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
 
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
 
# 不充当路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
 
# 开启execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
 
# IPv6设置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
 
# 优化LB使用的端口
 
# 增加系统文件描述符限制
fs.file-max = 65535
 
# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
kernel.pid_max = 65536
 
# 增加系统IP端口限制
net.ipv4.ip_local_port_range = 2000 65000
 
# 增加TCP最大缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
 
# 增加Linux自动调整TCP缓冲区限制
# 最小,默认和最大可使用的字节数
# 最大值不低于4MB,如果你使用非常高的BDP路径可以设置得更高
 
# Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

1.3 更改主机解析地址的顺序

编辑文件/etc/host.conf,看是否存在如下内容:如果没有,在空白处加入下面三行:

powershell 复制代码
order hosts,bind
multi on
nospoof on

参数含义:

1、order hosts,bind : 设置首先通过DNS解析IP地址,然后通过hosts文件解析。

2、multi on: 设置主机可以拥有多个IP地址(比如有多个以太口网卡)。

3、nospoof on :设置启用对本机未经许可的IP欺骗保护。

这个配置指定了主机解析的顺序为首先查找/etc/hosts文件,然后再向DNS服务器查询。multi on表示允许主机名对应多个IP地址,nospoof on表示启用地址欺骗保护。

判定依据:文件/etc/host.conf存在如上配置则合规,否则不合规。

1.4 禁止ip路由转发

使用如下命令查看net.ipv4.ip_forward的值:

powershell 复制代码
sysctl -n net.ipv4.ip_forward

判定依据:net.ipv4.ip_forward的值为0表示合规,否则不合规。

加固步骤:

1、备份文件:

powershell 复制代码
cp -p /etc/sysctl.conf /etc/sysctl.conf_bak

2、vi /etc/sysctl.conf文件加上

powershell 复制代码
net.ipv4.ip_forward=0

3、使配置文件生效

powershell 复制代码
sysctl -p

1.5 设置umask值

设置umask值是为了控制新创建文件和目录的默认权限。umask值是一个八进制数,用来屏蔽掉文件和目录的权限位。具体来说,umask值中的每一位代表了对应权限位是否被屏蔽掉。

umask值的作用是确保新创建的文件和目录不会拥有过于宽松的权限,从而提高系统的安全性。

默认情况下,umask值通常设置为022,即屏蔽掉其他用户的写权限,保留所有者和所属组的读、写、执行权限。

检测方法

查看/etc/profile文件,检查umask值

powershell 复制代码
cat /etc/profile|egrep -v "^#|\""|grep "umask"|tail -1

判定依据: uamsk值为022则合规;否则不合规。

加固步骤

1、执行备份

powershell 复制代码
 cp /etc/profile /etc/profile.bak

2、编辑/etc/profile文件

vi /etc/profile,添加内容(存在则修改):

powershell 复制代码
 umask 022

保存退出。

3、立即生效

powershell 复制代码
source /etc/profile

|---------------------------|
| 💖The End💖点点关注,收藏不迷路💖 |

相关推荐
眠修11 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin3 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧5 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天5 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º6 小时前
【Linux网络编程】网络基础
linux·服务器·网络
笑衬人心。6 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
chanalbert8 小时前
CentOS系统新手指导手册
linux·运维·centos
星宸追风8 小时前
Ubuntu更换Home目录所在硬盘的过程
linux·运维·ubuntu
热爱生活的猴子9 小时前
Poetry 在 Linux 和 Windows 系统中的安装步骤
linux·运维·windows