以下加固应自己环境而定不是所有都适用
SSH加固
-
设置/etc/ssh/sshd_config文件不受非特权用户的未授权更改
chown root:root /etc/ssh/sshd_config chmod 600 /etc/ssh/sshd_config
-
/etc/ssh/sshd_config文件中参数的加固项
使用更加安全的openssh v2协议: Protocol 2 关闭不必要的功能,禁止X11、TCP端口和代理转发: X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no 禁止使用用户环境变量,防止用户通过自定义脚本绕过鉴权: PermitUserEnvironment no 禁止使用DNS查询,缩短用户登录时间: UseDNS no 禁止TCP保持连接: TCPKeepAlive no 禁止“root”用户直接登录,减少密码泄漏风险: PermitRootLogin no 使用推荐密码算法和散列算法,减少被攻击的风险: MACs hmac-sha2-512,hmac-sha2-256 当openssh版本低于6.5时: Ciphers aes256-ctr,aes192-ctr,aes128-ctr 当openssh版本等于或高于6.5时: Ciphers aes256-ctr,aes192-ctr,aes128-ctr,chacha20-poly1305@openssh.com 禁止ssh服务端和ssh客户端的端口转发功能: /etc/ssh/sshd_config GatewayPorts no /etc/ssh/ssh_config GatewayPorts no 禁止在每一次交互式登录时打印 /etc/motd 文件的内容: PrintMotd no 设置banner信息,用于在用户连接ssh时,显示相关警告信息: Banner /etc/issue.net 设置ssh日志等级: LogLevel VERBOSE 配置使用sftp功能,并设置日志级别,以记录用户登录信息: Subsystem sftp /usr/lib64/ssh/sftp-server -f LOCAL5 -l INFO 参数IgnoreRhosts指定在RhostsRSAAuthentication或HostbasedAuthentication中不使用.rhosts 和.shosts文件: IgnoreRhosts yes 尽管禁用/etc/pam.conf支持,.rhosts文件也会失效,禁用SSH的.rhosts文件提供了额外保护: HostbasedAuthentication no 不允许远程shell登录到无密码的帐户可以减少未授权登录的可能性: PermitEmptyPasswords no 设置空闲ssh连接超时断开: ClientAliveInterval 300 ClientAliveCountMax 0 设置认证失败重试次数,防止暴力破解: MaxAuthTries 2 不使用Kerberos认证方式: KerberosOrLocalPasswd no 由RFC-4252变为RFC-4256定义的登录认证机制: PasswordAuthentication no ChallengeResponseAuthentication yes 仅允许特定组和用户登录(为了不影响安全加固执行前已存在的帐户的正常登录,加固脚本会把现有可登录用户都加入AllowUsers): AllowUsers 当前系统现有用户可登录用户 hcp AllowGroups 当前系统现有用户可登录用户所在组 hcp
网络加固
-
TCP/IP相关内核参数加固(以下步骤需要打开/etc/sysctl.conf文件,查找以下参数,如果文件原本有这个参数,则修改,如果没有,则直接增加参数信息)
禁止从其他网口回应ARP: net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce =2 net.ipv4.conf.ethX.arp_announce = 2(其中ethX为系统中实际的网口名称,可使用“ifconfig -a”命令查询获得,对每个网口都进行了设置。) 禁用IP转发功能: net.ipv4.ip_forward = 0 net.ipv4.conf.all.forwarding = 0 net.ipv4.conf.default.forwarding = 0 禁止系统响应广播请求,防止“广播风暴”攻击: net.ipv4.icmp_echo_ignore_broadcasts = 1 禁止转发源路由包和源IP路由,不接收源路由信息包可以防止内部网络被探测: net.ipv4.conf.default.arp_filter = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 禁止接收和转发ICMP重定向消息避免恶意用户使用IP重定向来修改远程主机中的路由表,影响系统正常运行: net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.send_redirects = 0 禁止从默认网关接受ICMP重定向消息,可以有效防止ARP实行跨网段欺骗: net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 防止IP欺骗: net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 关闭tcp_timestamps支持,否则可能遭受拒绝服务攻击: net.ipv4.tcp_timestamps = 0 确保伪造ICMP包被丢弃,避免恶意ICMP包影响系统正常运行: net.ipv4.icmp_ignore_bogus_error_responses = 1 仅在必要时开启ARP代理,避免ARP报文攻击影响系统正常运行: net.ipv4.conf.all.proxy_arp = 0 net.ipv4.conf.default.proxy_arp = 0 设置从客户端连接请求等候确认的连接数,减少系统遭受SYN Flooding攻击受到的影响: net.ipv4.tcp_max_syn_backlog = 4096 设置socket序列,降低系统遭受SYN Flooding攻击的几率: net.ipv4.tcp_syncookies = 1 设置TCP协议中等待超时时间,避免由于等待时间过长遭受拒绝服务攻击: net.ipv4.tcp_fin_timeout = 60 固化别名IP: net.ipv4.conf.all.promote_secondaries = 1 关闭路径MTU探测: net.ipv4.ip_no_pmtu_disc = 1 设置合适的TCP数据接收缓冲: net.core.rmem_max = 3072000 记录可疑的Socket报文,方便查看服务器是否收到伪造的报文: net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 内核异常时panic并打印调用者信息,并且设置panic后5秒重启系统: kernel.panic_on_oops = 1 kernel.panic = 5 启用系统魔术键,系统异常时打印关键信息: kernel.sysrq = 1 启用地址随机化机制,减少栈溢出攻击的可能性: kernel.randomize_va_space = 2 禁止带有S位的程序进行内存转储,防止敏感信息泄漏: fs.suid_dumpable = 0 开启并记录欺骗,源路由和重定向包: net.ipv4.conf.all.log_martians=1 net.ipv4.conf.default.log_martians=1 设置需要限定速率的ICMPv4包类型: net.ipv4.icmp_ratemask=344096
-
/etc/host.conf文件中参数加固。
防止IP地址欺骗,减少网络攻击的风险: nospoof on 优先使用本地DNS,减少DNS攻击风险: order hosts, bind
-
删除危险的网络文件,防止恶意用户接入系统
rm -rf /root/.rhosts rm -rf /root/.shosts rm -rf /etc/hosts.equiv rm -rf /etc/shosts.equiv ln -s /dev/null /root/.shosts ln -s /dev/null /etc/shosts.equiv
用户鉴权
-
删除和创建指定文件
rm /etc/cron.deny rm /etc/at.deny touch /etc/cron.allow touch /etc/at.allow
-
设置文件权限
chmod 400 /etc/cron.allow chown -R root:root /etc/cron.allow chmod 400 /etc/at.allow chown -R root:root /etc/at.allow chmod og-rwx /etc/cron.d chmod og-rwx /etc/crontab chmod og-rwx /etc/cron.hourly chmod og-rwx /etc/cron.daily chmod og-rwx /etc/cron.weekly chmod og-rwx /etc/cron.monthly chown root:root /usr/bin/crontab chown root:root /usr/bin/at
-
单用户模式要求输入密码,防止随意进入系统。修改/etc/inittab文件,增加修改以下配置
~~:S:respawn:/sbin/sulogin -
开启用户的投影密码
执行pwconv命令,将 /etc/passwd内的帐户与密码移动到/etc/shadow中,只允许系统管理者读取,同时把原密码置换为“x”字符,有效的强化了系统的安全性:
-
禁止非法终端登录,减少非授权用户登录系统的风险,去掉/etc/securetty中以下字母开头的配置项:
vc
日志审计
加固目的
-
将操作系统的命令执行或者操作信息记入日志,以便在系统受到攻击时进行审计。
-
对日志审计的配置做安全加固,防止恶意用户绕过日志记录。
-
修改/etc/profile.local文件记录用户登录信息,并且将与历史记录相关的环境变量设置成只读
shopt -s cdspell shopt -s cmdhist shopt -s histappend export PROMPT_COMMAND='history -a' HISTFILESIZE=200000; export HISTFILESIZE HISTCONTROL=ignoredups; export HISTCONTROL HISTIGNORE="&:ls:[bf]g:ps:history:exit"; export HISTIGNORE HISTSIZE=10000;export HISTSIZE export TMOUT=60 MYTTY="$(echo $tty|sed 's#/dev/##g')" WHOISTHIS="$(who | grep "$MYTTY"|sed 's/ \{2,\}/ /g')" if [ ! -z "$HISTFILE" ] && [ ! -z "$WHOISTHIS" ]; then echo "#$(date +%s)" >> $HISTFILE echo " #Login: $WHOISTHIS" >> $HISTFILE fi -
修改/etc/login.defs文件记录登录鉴权失败时记录相应的信息
FAILLOG_ENAB yes
文件系统
加固目的
配置文件系统的挂载选项,可以防止系统挂载特殊设备、包含可执行二进制文件等,提高操作系统安全性
加固项说明
禁止普通用户挂载可移动设备,设置可移动设备挂载属性。修改/etc/fstab文件,增加修改以下配置:
/dev/cdrom /media/ udf,iso9660 noexec,noauto,nouser,nodev,nosuid 1 2
文件权限
加固目的
设置敏感文件的权限,减少普通用户获取其他用户的敏感信息,以及防止恶意用户修改敏感文件。
-
设置敏感文件的文件权限,减少普通用户获取其他用户的敏感信息。
chmod 440 /etc/sysctl.conf chmod 751 /etc/ssh chmod 644 /etc/passwd chmod 600 /etc/shadow chmod 1777 /tmp chmod 644 /etc/fstab chmod 600 /etc/pam.d/common-password chmod 640 /etc/login.defs chmod 640 /etc/syslog-ng/syslog-ng.conf chmod 640 /etc/logrotate.d/* chmod 644 /etc/logrotate.d/iscsiuiolog chmod 600 /etc/pam.d/* chmod 644 /etc/pam.d/su chmod 644 /etc/pam.d/su-l chmod 644 /etc/security/pam_pwcheck.conf chmod 600 /etc/security/opasswd chmod 644 /etc/hosts.allow chmod 644 /etc/hosts.deny chmod 600 -R /etc/ssl/certs/ chmod og-rwx /boot/grub/menu.lst chmod 750 /var/run/dbus chmod 750 /var/run/PolicyKit chmod 700 /var/log/miniOS/ chmod 600 /var/log/miniOS/usrRpm.log chmod 600 /var/log/miniOS/setup.log chmod 600 /var/log/miniOS/sysconfig.log chmod 600 /var/log/YaST2/mkinitrd.log chmod 600 /var/log/secure.log chmod -s -R /usr/lib/PolicyKit/* chmod -s /usr/lib64/pt_chown chmod -s /usr/bin/opiepasswd chmod -s /usr/bin/opiesu chmod -s /sbin/unix2_chkpwd chmod -s /lib/libachk.so chmod -s /lib64/libachk.so chmod -s /lib64/dbus-1/dbus-daemon-launch-helper chown root:root /etc/passwd chown root:root /etc/shadow chown root:root /var/log/news chown root:root /etc/fstab chown root:root /etc/ssh/*key chown root:root /etc/ssh/*key.pub chown root:root /var/lib/wwwrun chown root:messagebus /var/run/dbus chown polkituser:polkituser /var/run/PolicyKit
-
设置系统默认umask值为077,减少文件被篡改的风险。打开/etc/profile文件,查找umask参数项,如果没有则增加,如果有则修改为以下信息:
umask 077
-
执行source /etc/profile命令使修改生效。
删除ipv6服务
加固目的
当前操作系统加固方案,都是针对ipv4做的。对于ipv6没有特别针对性的进行加固,所以会有潜在的风险。鉴于当前eBackup备份服务不适用ipv6协议,所以在服务器上删除ipv6服务。
-
删除/etc/hosts中关于ipv6信息的行。
-
在/etc/modprobe.d/目录下创建一个叫做ipv6off.conf的文件,输入以下信息:
alias net-pf-10 off options ipv6 disable=1
-
执行以下命令,修改文件的权限:
chmod 600 /etc/modprobe.d/ipv6off.conf
-
/boot/grub2/grub.cfg中加入ipv6.disable=1
-
在/etc/sysctl.conf中加入net.ipv6.conf.default.disable_ipv6 = 1和net.ipv6.conf.all.disable_ipv6 = 1
设置警示消息
加固目的
警告消息通知尝试登录到系统的用户在系统中的法律地位。
-
执行如下命令,设置相关文件的权限
touch /etc/motd chown root:root /etc/motd chmod 644 /etc/motd chown root:root /etc/issue chmod 644 /etc/issue chown root:root /etc/issue.net chmod 644 /etc/issue.net
-
设置警示消息
echo "Authorized users only. All activity may be monitored and reported." > /etc/issue echo "Authorized users only. All activity may be monitored and reported." > /etc/issue.net
-
从文件/etc/motd, /etc/issue和/etc/issue.net中删除包含\m、\r、\s或\v的所有行。
端口监听项加固
加固目的
禁止rpcbind服务监听端口
-
执行systemctl stop rpcbind.socket命令停止rpcbind服务。
-
执行systemctl disable rpcbind.socket命令把rpcbind服务从启动列表删除
Iptables加固
加固目的
防火墙禁止指定消息类型的ICMP数据包
iptables -I INPUT -p icmp -m icmp --icmp-type redirect -j DROP
iptables -I INPUT -p icmp -m icmp --icmp-type timestamp-reply -j DROP
iptables -I INPUT -p icmp -m icmp --icmp-type address-mask-reply -j DROP
iptables -I INPUT -p icmp -m icmp --icmp-type 16 -j DROP
iptables -I OUTPUT -p icmp -m icmp --icmp-type redirect -j DROP
iptables -I OUTPUT -p icmp -m icmp --icmp-type timestamp-reply -j DROP
iptables -I OUTPUT -p icmp -m icmp --icmp-type address-mask-reply -j DROP
iptables -I OUTPUT -p icmp -m icmp --icmp-type 16 -j DROP
其他加固
加固目的
由于易用性,或者防止非受信任用户误操作、敏感信息泄露等,本节介绍操作系统做的一些其他的加固项。
-
易用性增强
允许插入自研内核模块。修改/etc/modprobe.d/unsupported-modules: allow_unsupported_modules 1 将console加入securetty,允许“root”用户登录终端。打开/etc/securetty文件,加入以下一行: console 设置系统默认编码,使系统可以显示中文。打开/etc/sysconfig/language文件,添加或修改以下配置项: RC_LANG="en_US.UTF-8" 设置硬件时钟使用utc时间。打开/etc/sysconfig/clock文件,添加或修改以下配置项: HWCLOCK="-u"
-
禁止产生core文件。修改/etc/security/limits.conf文件,添加以下两行内容:
* soft core 0 * hard core 0
-
将表示登录用户名和登录终端的环境变量设为只读。打开/etc/profile.local文件,添加以下两行内容
readonly SSH_CLIENT readonly LOGNAME
文章评论