admin
Linux基线加固
目录:
1.帐户安全
2.访问、认证安全
3.文件系统安全
4.服务安全
5.网络安全
6.日志记录
7.交互安全
8.防火墙
1. 帐户安全
1.1 账户文件
/etc/shadow和/etc/passwd文件属性只读
#chmod 777 /etc/shadow
#chmod 777 /etc/passwd
1.2 账户
删除或锁定无用的帐户
passwd username -l 锁定
passwd username -u 解锁
禁止无用的系统用户登录
usermod -s /sbin/nologin username
#一般以下这几个系统用户根据实际需要可以进行禁止登陆,可能现网系统还存在其他用户
空密码的帐户
awk -F ":" '($2=="!"){print $1}' /etc/shadow
口令策略
cat /etc/login.defs | grep PASS
chage
-m:两次更改密码的时间间隔最小天数
-w: 警告信息的天数
-E:帐号到期的日期
-d:上一次更改密码的日期
-i:停滞时期,超过天数禁用账户
-l:例出当前的设置
设定密码历史禁止重复使用最近5次的密码
cat /etc/pam.d/common-password | grep remember
remember=5
远程登录
cat /opt/ssh/etc/sshd_config
PermitRootLogin no
账户umask设置
#more /etc/profile
检查系统umask值
#vi /etc/profile
将umask值修改为027
1.3 帐户组
检查超级账户组用户
more /etc/group
more /etc/passwd
组ID为0的是超级账户组用户。
删除可能无用的用户组
groupdel groupname
移动普通账户到普通账户组
#查看账户组
more /etc/group
more /etc/shadow
#修改用户所属组
usermod –g group username
2. 访问、认证安全
2.1 操作系统版本信息
cat /etc/issue、/etc/issue.net、/etc/motd
#默认信息
Debian GNU/Linux 11
#修改为自定义信息,如
Access denied
2.2 远程登录取消telnet采用ssh
#查看ssh、telnet服务状态:
ps –ef | grep ssh
ps –ef | grep telnet
#修改/etc/inetd.conf文件,将telnet行注释掉
telnet stream tcp nowait root /usr/lbin/telnetd telnetd
#安装ssh软件包启动ssh
service sshd start
#如果必须使用telnet,建议禁止root用户直接远程telnet登录
/etc/securety文件,限制root登录
2.3 取消 ssh的banner信息
cat /etc/ssh/sshd_config
banner NONE
2.4 限制使用 ssh版本2.0
/etc/ssh/sshd_config Protocol 2,1 修改为 Protocol 2
2.5 ssh密匙
生成密钥
使用 ssh-keygen 命令生成
ssh-keygen 常用参数
-t: (type) 指定密钥的加密算法(一般 ed25519 , rsa),省略默认使用RSA。ssh-keygen -t rsa
-b: (bits) 指定密钥的二进制位数,数值越大加密解密的开销越大,同时密钥的安全程度越高,一般设置 1024 或者 2048 ssh-keygen -b 1024
-C: (comment) 指定密钥文件的注释,格式username@host: ssh-keygen -t rsa -b 2048 -C xxx1@email.com 生成
[root@host ~]$ ssh-keygen <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
安装公钥
cat id_rsa.pub >> authorized_keys
或者
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.2.200
#ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上
chmod 600 authorized_keys
chmod 700 ~/.ssh
打开密钥登录功能
vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
禁用密码登录:
PasswordAuthentication no
重启 SSH 服务:
service sshd restart
2.6 限制帐户FTP登录/禁止匿名登录
限制root、daemon、bin、sys、adm、lp、uucp、nuucp、nobody、hpdb、useradm等系统帐户FTP登录.
vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES #开启用户限制功能
anonymous_enable=NO #禁止匿名登录将此字段值从YES改为NO
vi /etc/vsftpd/chroot_list
#每一个帐户一行,添加以下帐户禁止FTP登录
root、daemon、bin、sys、adm、lp、uucp、nuucp、nobody、hpdb、useradm
2.7 认证失败次数锁定该账号
vi /etc/pam.d/system-auth
auth required pam_tally.so oneer=filad deny=6 unlock_time=300
设置为密码连续错误6次,锁定时间300 秒 。解锁用户:faillog -u -r
3. 文件系统安全
3.1 重要目录和文件的权限
/etc/、/tmp/、/etc/default、/etc/rc.config.d/
ls –l /etc/
ls –l /tmp/
ls –l /etc/default/
ls -l /etc/rc.config.d/
#使用chmod命令修改权限
chmod -R 644 /etc/
3.2 没有所有者的文件或目录
find / \( -nouser -o -nogroup \) -exec ls -al {} \
rm –rf filename
4. 服务安全
查看现有服务
chkconfig –list
chkconfig --list | grep 服务名称
4.1 禁止NIS/NIS+服务以守护方式运行
more /etc/rc.config.d/namesvrs
NIS_MASTER_SERVER=0
NIS_SLAVE_SERVER=0
NIS_CLIENT=0
NISPLUS_SERVER=0
NISPLUS_CLIENT=0
4.2 禁用打印服务以守护方式运行
more /etc/rc.config.d/tps
XPRINTSERVERS="''"
/etc/rc.config.d/lp
LP=0
/etc/rc.config.d/pd
PD_CLIENT=0
4.3 禁用SENDMAIL服务以守护方式运行
more /etc/rc.config.d/mailservs
SENDMAIL_SERVER=0
#或者
ch_rc -a -p SENDMAIL_SERVER=0 /etc/rc.config.d/mailservs
4.4 禁用不必要的标准启动服务
SNAplus2服务
more /etc/rc.config.d/snaplus2
START_SNAPLUS=0、START_SNANODE=0、START_SNAINETD=0
多播路由服务
more /etc/rc.config.d/netdaemons
MROUTED=0、RWHOD=0、DDFA=0、START_RBOOTD=0
DFS分布式文件系统服务
more /etc/rc.config.d/dfs
DCE_KRPC=0、DFS_CORE=0、DFS_CLIENT=0 、DFS_SERVER=0、DFS_EPISODE=0、EPIINIT=0、DFSEXPORT=0、BOSSERVER=0、DFSBIND=0、FXD=0、 MEMCACHE=0、DFSGWD=0、DISKCACHEFORDFS=0
RARP逆地址解析服务
more /etc/rc.config.d/netconf
RARPD=0、RDPD=0
PTY(伪终端)请求守护进程
more /etc/rc.config.d/ptydaemon
PTYDAEMON_START=0
响应VT(通过LAN登录其他系统)请求守护进程
more /etc/rc.config.d/vt
VTDAEMON_START=0
域名守护进程服务
more /etc/rc.config.d/namesvrs
NAMED=0
SNMP代理进程服务
more /etc/rc.config.d/peer.snmpd
PEER_SNMPD_START=0
授权管理守护进程服务
more /etc/rc.config.d/i4lmd
START_I4LMD=0
SNAplus2服务
more /etc/rc.config.d/snaplus2
START_SNAPLUS=0、START_SNANODE=0、START_SNAINETD=0
X字体服务
more /etc/rc.config.d/xfs
RUN_X_FONT_SERVER=0
语音服务
more /etc/rc.config.d/audio
AUDIO_SERVER=0
SLSD(Single-Logical-Screen-Daemon)服务
more /etc/rc.config.d/slsd
SLSD_DAEMON=0
SAMBA服务
more /etc/rc.config.d/samba
RUN_SAMBA=0
CIFS客户端服务
more /etc/rc.config.d/cifsclient
RUN_CIFSCLIENT=0
NFS启动服务
more /etc/rc.config.d/nfsconf
NFS_SERVER=0、NFS_CLIENT=0
Netscape FastTrack Server服务
more /etc/rc.config.d/ns-ftrack
NS_FTRACK=0
基于RPC的服务
ls /sbin/rc2.d/.NOS400nfs.core
4.5 禁用不必要的inetd服务
/etc/inetd.conf
在非必要服务前面加#注释
5. 网络安全
5.1 关闭IP转发
echo 1>/proc/sys/net/ipv4/ip_forward 0
5.2 关闭ping数据包的响应
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
5.3 非日志服务器禁止接收syslog
ch_rc -a -p SYSLOGD_OPTS="-N" /etc/rc.config.d/syslogd
/etc/sysconfig/syslog SYSLOGD_OPTIONS="-N"
6. 日志记录
6.1 检查SYSLOG
#检查rsyslogd日志管理系统进程,确保rsyslog的运行
ps -ef | grep rsyslog
#检查配置文件的内容
cat /etc/rsyslog.conf
#配置文件的内容应包括以下信息:
mail.debug /usr/spool/mqueue/syslog
*.info,mail.none /var/adm/syslog/syslog
*.alert /dev/console
*.alert root
*.emerg *
authpriv.* /var/log/secure
6.2 日志记录类型设置
rsyslog记录哪些日志,到底记录了什么样的日志,是通过这个/etc/rsyslog.conf配置文件来决定的。
authpriv.* /var/log/secure
认证相关服务.日志等级(服务名称[连接符号]日志等级 ) 日志记录的位置
服务名称
auth | 用户认证时产生的日志 |
---|---|
authpriv | ssh、ftp等登录信息的验证信息 |
daemon | 一些守护进程产生的日志 |
ftp | FTP产生的日志 |
lpr | 打印相关活动 |
mark | 服务内部的信息,时间标识 |
news | 网络新闻传输协议(nntp)产生的消息。 |
syslog | 系统日志 |
security | |
uucp | Unix-to-Unix Copy 两个unix之间的相关通信 |
console | 针对系统控制台的消息。 |
cron | 系统执行定时任务产生的日志。 |
kern | 系统内核日志 |
local0~local7 | 自定义程序使用 |
邮件日志 | |
user | 用户进程 |
连接符号
符号 | 说明 |
---|---|
* | 代表所有日志等级,比如:“authpriv.*"代表authpriv认证信息服务产生的日志,所有的日志等级都记录。 |
. | 代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:"cron.info"代表cron服务产生的日志,只要日志等级大于等于info级别,就记录。 |
.= | 代表只记录所需等级的日志,其他等级的都不记录。比如:"*.=emerg"代表任何日志服务产生的日志,只要等级是emerg等级就记录。 |
.! | 代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。 |
日志等级
日志等级 | 日志类型 | 说明 |
---|---|---|
7 | emerg | 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。 |
6 | alert | 需要立即修复的告警。 |
5 | crit | 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。 |
4 | error/err | 一般错误消息。 |
3 | warning/warn | 警告。 |
2 | notice | 不是错误,但是可能需要处理。 |
1 | info | 通用性消息,一般用来提供有用信息。 |
0 | debug | 调试程序产生的信息。 |
none | 没有优先级,不记录任何日志消息。 |
例:
# 记录mail日志等级为error及以上日志
mail.err /var/log/mail_err.log
# 记录kern所有日志
kern.* /var/log/kern.log
# 将mail的所有信息,除了info以外,其他的都写入/var/adm/mail
mail.*;mail.!=info /var/adm/mail
# 记录所有类型的warning等级及以上日志
*.warning /var/log/syslog_warn.log
# 将mail和news的info级别日志写入/var/adminfo
mail,news.=info /var/adm/info
6.2 记录FTP会话与命令
/etc/inetd.conf | grep ftp
#查看该文件的ftp行是否添加了ftpd –lL
6.3 检查系统日志文件权限
ls -l /var/log/
ls -l /var/log/syslog
chmod 640 <filename>
7. 交互安全
7.1 禁用图形界面登录
systemctl get-default multi-user.target 命令行/ graphical.target图形化
systemctl set-default multi-user.target
7.2 交互界面帐户超时自动退出
cat /etc/profile
TMOUT=600
7.3 自动锁屏功能
8. 防火墙
8.1 防火墙信息
查看是否开机自启动
systemctl is-enable firewalld
#开机自启服务
systemctl enable firewalld
#开机禁用服务
systemctl disable firewalld
查看规则
firewall-cmd --list-all
查看防火墙开启端口
firewall-cmd --list-ports
查看防火墙开启服务
firewall-cmd --list-services
8.2 区域管理
查看区域信息
firewall-cmd --get-active-zones
查看默认区域
firewall-cmd --get-default-zone
列出所有可用的区域
firewall-cmd --get-zones
查看指定接口所属区域
firewall-cmd --get-zone-of-interface=eth0
查看指定区域的接口
firewall-cmd --zone=public --list-interfaces
查看接口是否在该区域
firewall-cmd --zone=public --query-interface=eth0
设置默认区域
firewall-cmd --set-default-zone=block
向指定区域添加接口
firewall-cmd --zone=public --add-interface=eth0
修改接口所在区域
firewall-cmd --zone=public --change-interface=eth0
从区域移除接口
firewall-cmd --zone=public --remove-interface=eth0
8.3 服务管理
查看预定义服务
firewall-cmd --get-services
添加http服务到public区域
firewall-cmd --add-service=http --zone=public --permanent
查看public区域已配置的规则
firewall-cmd --list-all --zone=public
移除public区域的http服务,不使用–zone指定区域时使用默认区域
firewall-cmd --remove-service=http --permanent --zone=public
将多个服务添加到某一个区域,不添加–permanent选项表示是即时生效的临时设置
firewall-cmd --add-service=http --add-service=https
8.4 端口管理
开放80端口
firewall-cmd --permanent --add-port=80/tcp
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
允许TCP的3306端口到public区域
firewall-cmd --add-port=3306/tcp
从public区域将TCP的3306端口移除
firewall-cmd --remove-port=3306/tcp
允许某一范围的端口,如允许UDP的1-65535端口到public区域
firewall-cmd --add-port=1-65535/udp --zone=public
使用–list-ports查看加入的端口操作是否成功
firewall-cmd --list-ports
8.5 伪装ip
什么是地址伪装?
- 通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包
- 源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改
- 为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
相关命令
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --permanent --add-masquerade # 允许防火墙伪装IP
firewall-cmd --permanent --remove-masquerade# 禁止防火墙伪装IP
8.6 端口转发
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
查看当前生效的端口转发规则
firewall-cmd --list-forward-ports
添加转发规则
# 将888端口的tcp流量转发至22端口,永久生效模式
firewall-cmd --permanent --add-forward-port=port=888:proto=tcp:toport=80
# 将888端口的tcp流量转发至192.168.10.10的80端口,永久生效模式
firewall-cmd --permanent --add-forward-port=port=888:proto=tcp:toport=80:toaddr=192.168.10.10
删除转发规则
firewall-cmd --permanent --remove-forward-port=port=888:proto=tcp:toport=22
端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
