服务器安全篇之三【系统安全】

服务器安全篇之三【系统安全】

设计者:普金

服务器安全全篇含:

服务器安全篇之一【网络安全】
服务器安全篇之二【ssh安全】
服务器安全篇之三【系统安全】
服务器安全篇之四【数据库灾备与恢复】
服务器安全篇之五【入侵检测】
服务器安全篇之六【入侵处理】

上篇讲解了Linux系统安全中最重要的一块ssh安全,接下来我们讲解一下Linux系统安全的加固和防御。

1、 用户帐号和环境

a) 将root管理员名称修改为rootadmin

useradd -u 0 -g 0 -o rootadmin
useradd pso

b) 清除除root用户外其他所有用户的登录权限

#cat /etc/passwd | grep -v ^root | grep ‘/bin/bash’ | awk -F : ‘{print $1}’

c) 验证是否有账号存在空口令的情况

#awk -F: ‘($2 == “”){print $1}’ /etc/shadow

d) 检查除了root以外是否还有其它账号的UID为0

#awk -F: ‘($3 == 0) { print $1 }’ /etc/passwd

e) 用户的home目录许可权限设置为700

用户home目录的许可权限限制不严可能会导致恶意用户读/修改/删除其它用户的数据或取得其它用户的系统权限

f) 为用户设置合适的缺省umask值

为用户设置缺省的umask值有助于防止用户建立所有用户可写的文件而危及用户的数据

g) 限制能够su为root 的用户

只有wheel组的用户可以su到root

h) 设置自动注销时间

vi /etc/profile TMOUT=600无操作600秒后自动退出

i) 防止IP欺骗

#vi /etc/host.conf 添加:nospoof on 不允许服务器对IP地址进行欺骗

2、 系统访问认证和授权

a) 限制普通用户一些命令不可用

如 shutdown kill rm –rf 等关键命令

b) 更改登录banner

/etc/mot
改变登录banner可以隐藏操作系统类型和版本号和其它系统信息,这些信息可以会对攻击者有用

c) 限制root用户登录或最好用密钥登录

通常应该以普通用户身份访问系统,然后通过其它授权机制(比如su命令和sudo)来获得更高权限,这样做至少可以对登录事件进行跟踪

d) 设置守护进程掩码

/etc/rc.d/init.d/functions
系统缺省的umask 值应该设定为022以避免守护进程创建所有用户可写的文件

3、 核心调整

主要调整优化一些系统参数和网络参数,提升系统整体性能,及实现轻量的DDOS syn flood防御等

fs.file-max = 999999

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 10240 87380 12582912

net.ipv4.tcp_wmem = 10240 87380 12582912

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 40960

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 75

net.ipv4.tcp_keepalive_time = 75

net.ipv4.ip_local_port_range = 1024 65000

4、 关闭不必要的服务

关系多余或不需要用到的服务

systemctl list-unit-files | grep enable 过滤查看启动项如下

abrt-ccpp.service enabled abrt为auto bug report的缩写 用于bug报告 关闭
abrt-oops.service enabled ----------------------
abrt-vmcore.service enabled ----------------------
abrt-xorg.service enabled ----------------------
abrtd.service enabled ----------------------
auditd.service enabled 安全审计 保留
autovt@.service enabled 登陆相关 保留
crond.service enabled 定时任务 保留
dbus-org.freedesktop.NetworkManager.service enabled 桌面网卡管理 关闭
dbus-org.freedesktop.nm-dispatcher.service enabled ----------------------
getty@.service enabled tty控制台相关 保留
irqbalance.service enabled 优化系统中断分配 保留
kdump.service enabled 内核崩溃信息捕获 自定
microcode.service enabled 处理器稳定性增强 保留
NetworkManager-dispatcher.service enabled 网卡守护进程 关闭
NetworkManager.service enabled ----------------------
postfix.service enabled 邮件服务 关闭
rsyslog.service enabled 日志服务 保留
snmpd.service enabled snmp监控 数据抓取 保留
sshd.service enabled ssh登陆 保留
systemd-readahead-collect.service enabled 内核调用–预读取 保留
systemd-readahead-drop.service enabled ----------------------
systemd-readahead-replay.service enabled ----------------------
tuned.service enabled
default.target enabled 默认启动项 multi-user.target的软连接 保留
multi-user.target enabled 启动用户命令环境 保留
remote-fs.target enabled 集合远程文件挂载点 自定
runlevel2.target enabled 运行级别 用于兼容6的SysV 保留
runlevel3.target enabled ----------------------
runlevel4.target enabled ----------------------

5、 开启系统审计服务

审计内容包括:系统调用、文件访问、用户登录等。编辑/etc/audit/audit.rules,在文中添加如下内容:

-w /var/log/audit/ -k LOG_audit
-w /etc/audit/ -p wa -k CFG_audit
-w /etc/sysconfig/auditd -p wa -k CFG_auditd.conf
-w /etc/libaudit.conf -p wa -k CFG_libaudit.conf
-w /etc/audisp/ -p wa -k CFG_audisp
-w /etc/cups/ -p wa -k CFG_cups
-w /etc/init.d/cups -p wa -k CFG_initd_cups
-w /etc/netlabel.rules -p wa -k CFG_netlabel.rules
-w /etc/selinux/mls/ -p wa -k CFG_MAC_policy
-w /usr/share/selinux/mls/ -p wa -k CFG_MAC_policy
-w /etc/selinux/semanage.conf -p wa -k CFG_MAC_policy
-w /usr/sbin/stunnel -p x
-w /etc/security/rbac-self-test.conf -p wa -k CFG_RBAC_self_test
-w /etc/aide.conf -p wa -k CFG_aide.conf
-w /etc/cron.allow -p wa -k CFG_cron.allow
-w /etc/cron.deny -p wa -k CFG_cron.deny
-w /etc/cron.d/ -p wa -k CFG_cron.d
-w /etc/cron.daily/ -p wa -k CFG_cron.daily
-w /etc/cron.hourly/ -p wa -k CFG_cron.hourly
-w /etc/cron.monthly/ -p wa -k CFG_cron.monthly
-w /etc/cron.weekly/ -p wa -k CFG_cron.weekly
-w /etc/crontab -p wa -k CFG_crontab
-w /var/spool/cron/root -k CFG_crontab_root
-w /etc/group -p wa -k CFG_group
-w /etc/passwd -p wa -k CFG_passwd
-w /etc/gshadow -k CFG_gshadow
-w /etc/shadow -k CFG_shadow
-w /etc/security/opasswd -k CFG_opasswd
-w /etc/login.defs -p wa -k CFG_login.defs
-w /etc/securetty -p wa -k CFG_securetty
-w /var/log/faillog -p wa -k LOG_faillog
-w /var/log/lastlog -p wa -k LOG_lastlog
-w /var/log/tallylog -p wa -k LOG_tallylog
-w /etc/hosts -p wa -k CFG_hosts
-w /etc/sysconfig/network-scripts/ -p wa -k CFG_network
-w /etc/inittab -p wa -k CFG_inittab
-w /etc/rc.d/init.d/ -p wa -k CFG_initscripts
-w /etc/ld.so.conf -p wa -k CFG_ld.so.conf
-w /etc/localtime -p wa -k CFG_localtime
-w /etc/sysctl.conf -p wa -k CFG_sysctl.conf
-w /etc/modprobe.conf -p wa -k CFG_modprobe.conf
-w /etc/pam.d/ -p wa -k CFG_pam
-w /etc/security/limits.conf -p wa -k CFG_pam
-w /etc/security/pam_env.conf -p wa -k CFG_pam
-w /etc/security/namespace.conf -p wa -k CFG_pam
-w /etc/security/namespace.init -p wa -k CFG_pam
-w /etc/aliases -p wa -k CFG_aliases
-w /etc/postfix/ -p wa -k CFG_postfix
-w /etc/ssh/sshd_config -k CFG_sshd_config
-w /etc/vsftpd.ftpusers -k CFG_vsftpd.ftpusers
-a exit,always -F arch=b32 -S sethostname
-w /etc/issue -p wa -k CFG_issue
-w /etc/issue.net -p wa -k CFG_issue.net
重启服务

开启审计后可用aureport定期生成升级报告并发送到运维人员检测

6、 禁止Control-Alt-Delete 键盘重启系统命令
默认配置:
ls /usr/lib/systemd/system/ctrl-alt-del.target

加固方案:
1.备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2.移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target

7、 最大文件打开数
默认配置:
ulimit –n
1024

加固方案:
1.备份配置文件
cp -a /etc/security/limits.conf /etc/security/limits.conf.default
2.添加以下两行配置到该文件最后

  • soft nofile 65535
  • hard nofile 65535

8、 用户最大进程数

默认配置
cat /etc/security/limits.d/20-nproc.conf
#Default limit for number of user’s processes to prevent
#accidental fork bombs.
#See rhbz #432903 for reasoning.

  •      soft    nproc     4096
    

root soft nproc unlimited

加固方案:
1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.default
2.修改配置文件vim /etc/security/limits.d/20-nproc.conf

  •      soft     nproc     65535
    
  •      hard    nproc     65535
    

9、 开启防火墙

我习惯使用iptables,就以iptables来做防火墙吧,默认centos7之后是用firewalld。我们要先关闭firewalld并安装iptables服务
Systemctl stop firewalld;systemctl disable firewalld;yum install iptables-services
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。

iptables基础
iptables的规则表和链
表(tables):提供特定的功能,iptables内置了4个表,即
filter表(实现包过滤)
nat表(网络地址转换)
mangle表(修改数据标记位规则表)
raw表(跟踪数据表规则表)
链(chains):当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

INPUT(入站数据过滤)
OUTPUT(出站数据过滤)
FORWARD(转发数据过滤)
PREROUTING(路由前过滤)
POSTROUTING(路由后过滤)

–>PREROUTING–>路由决定----->FORWARD------------->POSTROUTING
| ^
| |

                       INPUT--->LOCAL PRECESS-->OUTPUT

在这里插入图片描述

语法格式 :
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

常用命令:
-A 追加规则–>iptables -A INPUT
-D 删除规则–>iptables -D INPUT 1(编号)
-R 修改规则–>iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则–>iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则–>iptables -L INPUT 列出规则链中的所有规则,默认是filter表,如果列出nat表的规则需要添加-t,即iptables -t nat -L
-N 新的规则–>iptables -N allowed 定义新的规则

通用参数:
-p 协议 例:iptables -A INPUT -p tcp
-s源地址 例:iptables -A INPUT -s 192.168.1.1
-d目的地址 例:iptables -A INPUT -d 192.168.12.1
-sport源端口 例:iptables -A INPUT -p tcp --sport 22
-dport目的端口 例:iptables -A INPUT -p tcp --dport 22
-i指定入口网卡 例:iptables -A INPUT -i eth0
-o指定出口网卡 例:iptables -A FORWARD -o eth0
-j 指定要进行的处理动作

常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source–指定原地址
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链

示例:
1 空当前的所有规则和计数:
iptables -F
iptables -X
iptables -Z

2 允许ssh远程
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

3 允许本地环回
iptables -A INPUT -i lo -j ACCEPT

4 设置默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

5 配置黑白名单
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT/DROP
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT/DROP

6 开启端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

7 保存规则
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables

iptables高级
屏蔽IP
iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP #屏蔽单个IP
iptables -I INPUT -s 123.45.6.0/24 -j DRO #屏蔽IP端

指定转发接口
iptables -A FORWARD -o eth0

启动转发
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 1.1.1.1 #内网上网

端口映射
iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 2222 -j DNAT --to-dest 192.168.1.101:22
#本机2222端口映射到192.168.1.101的22端口

字符串匹配
iptables -A INPUT -p tcp -m string --algo kmp --string “weidaima” -j REJECT --reject-with tcp-reset
#收到tcp协议含weidaima的字符串则丢弃

Iptables延伸
防windows蠕虫攻击
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string “cmd.exe”

防DDOS攻击
#防御syn洪水攻击
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

#防止DOS大量连接
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#抵御DDOS攻击
iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

防CC攻击
当web站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。Iptables版本大于1.3.7,iptables需要安装kernel-smp-modules-connlimit模块。
配置规则示例:
(1) 控制单个IP的最大并发连接数
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT

(2) 控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT

验证:
	1模拟攻击 ab命令

	2 实时查看攻击机与80端口连接数

watch ‘netstat -tunap | grep 80 | grep<模拟攻击客户机的IP>| wc -l’

	3 查看iptables DROP的攻击机包数
	watch 'iptables -L -n -v | grep<模拟攻击客户机的IP>'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰河长歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值