已申请专利,仿冒必究 作者:Xiwu Liu
a. 设置最短密码长度为8,密码的使用期限7-30天
b. 密码策略必须同时满足大小写字母、数字、特殊字符。
#CentOS7/RHEL7 开始使用pam_pwquality模块进行密码复杂度策略的控制管理。pam_pwquality替换了原来Centos6/RHEL6中的pam_cracklib模块,并向后兼容。
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1
retry=3 //重试次数
minlen=10 //密码最小长度
difok=3 //密码是否和以前相同
ucredit=-1 //大写字母
lcredit=-2 //小写字母
dcredit=-1 //数字
ocredit=-1 //标点符号
安装PAM的cracklib模块,cracklib能提供额外的密码检查能力
sudo apt-get install libpam-cracklib
设置最短密码长度和复杂度
sudo vim /etc/pam.d/common-password
sudo vim /etc/login.defs
搜索本地安全策略
设置
满足的要求
以centos为MySQL(可以用Ubantu)
Centos 7安装Mysql详细步骤
Variable_name Value
validate_password_check_user_name OFF
validate_password_dictionary_file //密码文件保存路径
validate_password_length 8 //密码长度,默认为8
validate_password_mixed_case_count 1 //密码中英文字母的个数,默认为1
validate_password_number_count 1 //密码中数字的个数,默认为1
validate_password_policy MEDIUM //密码强度(LOW、MEDIUM、STRONG)默认为MEDIUM
validate_password_special_char_count 1 //密码中特殊符号的个数,默认为1
default_password_lifetime = 30 30 // mysql用户的密码过期时间为30天
SHOW VARIABLES LIKE ‘validate_password%’; //查询密码策略
关于 mysql 密码策略相关参数;
1)、validate_password_length //固定密码的总长度;
2)、validate_password_dictionary_file //指定密码验证的文件路径;
3)、validate_password_mixed_case_count //整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count //整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy //指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy //的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count //整个密码中至少要包含特殊字符的个数;
mysql> SET GLOBAL default_password_lifetime=30; //修改语句
a.在用户登录系统时,应该有“For authorized users only”提示信息;
b.一分钟内仅允许3次登录失败的尝试,超过3次,登录帐号锁定1分钟;
c.远程用户非活动会话连接超时应小于等于5分钟。
交互式提示信息
vim /etc/issue
-----------warning-------------
For authorized users only
------------------------------
vim /etc/issue.net
-----------warning-------------
For authorized users only
------------------------------
vim /etc/motd
-----------warning-------------
For authorized users only
------------------------------
sshd
vim /etc/ssh/sshd_config
vim /etc/ssh/Banner //在ssh目录下新建一个文件Banner和sshd_config里的对应
service sshd restart
登录失败限制
sudo vim /etc/pam.d/login
写入
auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
参数
even_deny_root 也限制root用户;
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
在第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的
sudo vim /etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
service sshd restart
远程用户非活动会话连接超时
vim /etc/ssh/sshd_config
做交互式提示
交互式登录消息文本和标题
登录失败限制
远程用户非活动会话连接超时
(打开管理工具,找到远程桌面服务,进入远程桌面会话主机设置,右键RDP-Tcp属性,在会话栏目进行修改)
(做交互式提示,登录失败限制,远程用户非活动会话连接超时)
a.设置user1用户只能在上班时间(周一至周五)的9:00~18:00可以登录(Web)
b.设置操作系统中的关键目录(system32、hosts、Program Files、Perflogs)的权限为最优状态,即仅允许管理员用户进行读取及运行。
创建用户user1
设置上班时间
net user user1 /time:m-f,9am-6pm
查看net user user1
设置操作系统关键目录权限
找到hosts文件位置C:\Windows\System32\drivers\etc,右键hosts文件属性 -> 安全 -> 高级 -> 所有者,将所有者改为管理员组
高级 -> 权限 -> 更改权限,将包括可从该对象的父项继承的权限取消勾选
弹出窗口,点击删除,点击添加,将Administrators组加入,设置权限为读取和运行
剩下的system32、ProgramFiles、Perflogs设置方法都一样
(涉及mysqld服务要记得重启systemctl start mysqld)
1.为防止root用户密钥泄露禁止MySql以管理员帐号权限运行;
找到mysql配置文件; (/etc/my.cnf),在[mysqld]选项下加入user=mysql
//##添加
[mysql.server]
user=mysql
2.为防止非授权用户访问本地文件请禁用相关功能
vim /etc/my.cnf
#在[mysqld]下面加入
set-variable=local-infile=0
#local-infile=0
3.为防止用户在使用漏洞查询相关信息,请禁用使用mysql命令行历史记录
rm -f ~/.mysql_history
vim /etc/profile
在该配置文件末尾添加export MYSQL_HISTFILE=/dev/null
source /etc/profile
或
rm -rf /root/.mysql_history
ln -s /dev/null /root/.mysql.history
4.控制慢查询日志文件的权限
vim /etc/my.cnf
slow_query_log=1 //1:开启; 0:关闭
slow_query_log_file=/usr/java/mysql/db-server-slow.log //日志文件操作权限
chmod -R 777 /usr/java/mysql
long_query_time=1 //单位为秒, 超过1秒的都记录下来
在MySQL里
开启慢查询日志: set global slow_query_log = on;
设置慢查询阀值: set global long_query_time = 1;
确定慢查询日志路径: show global variables like "datadir";
确定慢查询日志的文件名: show global variables like "slow_query_log_file";
5.为监控使用者信息请开启数据审计功能
vim /etc/my.cnf
#在/etc/my.cnf中添加下述配置
[mysqld]
general_log = on // on为开启;off为关闭
general_log_file = /var/log/generalLog.log // 审计信息存储位置
log_timestamps = SYSTEM // 设置日志文件的输出时间为地方时
systemctl restart mysqld
6.使用 MySql 内置 MD5 加密函数加密用户user1的密码 (P@ssw0rd1!);
update mysql.user set password=md5("P@ssw0rd1!") where user="user1";
1.为防止攻击者利用页面报错获得网站目录等敏感信息,请关闭asp报错功能;
首先需要打开地址池启动32位应用程序
接着设置启动父路径设置为true
2.为防止文件枚举漏洞枚举网络服务器根目录文件,请禁止IIS短文件名泄露;
打开cmd输入fsutil 8dot3name set 1
//1表示禁用,0表示启用。如果不写盘符,则是全局设置,这时可选的有4个值:0(全部启动),1(全部禁用), 2(每个盘符单独设置),3(除系统盘外全部禁用)。全局设置也可以通过注册实现
或
注册表修改(重启服务器生效)
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDi sable8dot3NameCreation的值为1
如果你的web环境不需要asp.net的支持你可以进入Internet 信息服务(IIS)管理器 — Web 服务扩展 – ASP.NET 选择禁止此功能
3.为方便收到攻击后搜索黑客记录,请开启审计并修改默认的IIS日志文件配置为 W3C,只记录日期、时间、客户端IP地址、用户名、方法;
4.为防止攻击者更改文件后缀突破上传限制从而得到webshell,请删除不必要的应用程序扩展只保留.asp;
打开请求筛选 ,设置上传保留扩展名.asp
5.为防止黑客上传木马后还能执行请限制网站目录权限配置对 picture 和 upload 目录设置执行权限为无;
6.为了减轻网站负载,请设置网站最大并发连接数为1500;
1.为了防止密码在登录或者传输信息时被窃取,仅使用证书登录SSH(Log);
生成一对密钥 公钥
ssh-keygen -t rsa
得到两个文件 id_rsa(私钥) id_rsa.pub(公钥)
私钥给客户端 公钥存于 /home/user/.ssh/authorized_keys
这样就实现了验证的基础
如多个用户想省去多个公钥管理的烦恼可以将生成的多个公钥合成一个文件,每个公钥之间换行即可。
# ssh-keygen -t ed25519 -o -a 100 -C "Your comment here"
# ssh-keygen -t rsa -b 4096 -o -a 100 -C "Your comment here"
-t 表示证书密钥类型;-C 表示给证书添加一句注释的话,一般用于标记证书所有者和用途,免得回头自己都忘了哪个
证书是干什么的了。
ssh-keygen = 用于创建密钥的程序
-m PEM = 将密钥的格式设为 PEM
-t rsa = 要创建的密钥类型,本例中为 RSA 格式
-b 4096 = 密钥的位数,本例中为 4096
-C "azureuser@myserver" = 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址用作注释,但也可以使用
任何最适合你基础结构的事物。
-f ~/.ssh/mykeys/myprivatekey = 私钥文件的文件名(如果选择不使用默认名称)。 追加了 .pub 的相应公钥文
件在相同目录中生成。 该目录必须存在。
-N mypassphrase = 用于访问私钥文件的其他密码。
[root@lxw ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
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:
SHA256:FBdQsW+IZlMKhNhvCiodYm7blvwmaIkvLaGNkG+sdYA root@lxw
The key's randomart image is:
+---[RSA 2048]----+
| o .. oo=o |
| . o. o . |
| .. . o |
|.oo oo + o |
|E=.o o S . o |
|*o... o . . |
|*BB o |
|***B . |
|o*o +. |
+----[SHA256]-----+
cat id_rsa.pub >> ~/.ssh/authorized_keys
vim /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
40 #StrictModes yes
41 StrictModes no
45 #RSAAuthentication yes
46 RSAAuthentication yes
47
48 #PubkeyAuthentication yes
49 PubkeyAuthentication yes
53 #AuthorizedKeysFile .ssh/authorized_keys
54 AuthorizedKeysFile .ssh/authorized_keys
72 #PasswordAuthentication yes
73 PasswordAuthentication no
service sshd restart
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,请留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthentication no
最后,重启 SSH 服务:
[root@host .ssh]$ service sshd restart
然后把id_rsa这个私钥导入本机,然后再导入xshell(远程主机)中就可以进行登录
2.请开启 Web服务器审核策略并完成以下需求(Web);
a.登录事件 成功/失败;
b.特权使用 成功;
c.策略更改 成功/失败;
d.进程跟踪 成功/失败;
e.将审核策略的配置界面截图;
cmd输入gpedit.msc回车 ,计算机配置-Windows配置-安全设置-本地策略-审核策略
(PS:记得重启服务)
1.为加强ssh访问安全请修改ssh服务端口为2000;
vim /etc/ssh/sshd_config
17 Port 2000 //改为2000,修改/etc/ssh/sshd_config配置文件中的Port字段
18 #AddressFamily any
19 #ListenAddress 0.0.0.0
20 #ListenAddress ::
service sshd restart //重启sshd服务
###如果selinux和防火墙没开,修改端口可以直接改变,否则使用以下操作
如果selinux阻拦
semanage port -a -t ssh_port_t -p tcp 1024 #添加端口
systemctl restart sshd #重启服务
查看防火墙状态
2.为记录登录和注销活动请设置SSH中LogLevel状态;
查看防火墙的状态,关闭则开启
systemctl start firewalld #开启防火墙
systemctl status firewalld #查看防火墙状态
1
2
查看防火墙当前「默认」和「激活」zone(区域)
firewall-cmd --get-default-zone
public
firewall-cmd --get-active-zones
public
interfaces: ens33 #这里是网卡,可以使用ip addr查看你的网卡名称
#若没有激活区域的话,要执行下面的命令。
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-interface=eth0 #eth0 就是网卡名称
firewall-cmd --get-default-zone
public
firewall-cmd --get-active-zones
public
interfaces: ens33 #这里是网卡,可以使用ip addr查看你的网卡名称
#若没有激活区域的话,要执行下面的命令。
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-interface=eth0 #eth0 就是网卡名称
为 public zone 永久开放 1024/TCP 端口
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=1024/tcp
#成功后重载防火墙
firewall-cmd --reload
firewall-cmd --permanent --list-port # 这里看到我们所有暴露出来的端口
这是我们可以看到我们添加的端口生效了,接下来我们使用远程工具测试新端口,如果测试通过,接下来我们将22的端
口删除即可
vi /etc/ssh/sshd_config #将Port22注释
$ systemctl restart sshd #重启服务
$ ss -tnlp | grep ssh # 用 ss 命令检查 ssh 监听的端口,没有 22 证明修改成
##然后就可以修改ssh服务端口了
2.为记录登录和注销活动请设置SSH中LogLevel状态;
确保SSH LogLevel设置为INFO,记录登录和注销活动
编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):LogLevel INFO
操作时建议做好记录或备份
vim /etc/ssh/sshd_config
33 #LogLevel INFO
34 LogLevel INFO
3.为防止root用户密钥泄露SSH禁止ROOT用户远程登录;
vim /etc/ssh/sshd_config
37 #LoginGraceTime 2m
38 #PermitRootLogin yes
39 PermitRootLogin no //修改/etc/ssh/sshd_config配置文件中的PermitRootLogin字段为no
service sshd restart //重启sshd服务
4.为保障vsFTPd访问安全仅允许匿名用户进行浏览下载;
#不允许匿名用户认证
anonymous_enable=NO
#NO表示所有用户都可以跳出家目录,YES表示都不可以跳出,默认为都可以跳出
chroot_local_user=NO
#启用可以或不可以跳出家目录的例外
chroot_list_enable=YES
#当chroot_local_user=NO时,chroot_list里面配置的用户不可以跳出家目录,当chroot_local_user=YES时,
chroot_list里面配置的用户可以跳出家目录
chroot_list_file=/etc/vsftpd/chroot_list
#以下这些是关于Vsftpd虚拟用户支持的重要配置项目。默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配
置
#用户家目录可写,默认是只读的
allow_writeable_chroot=YES
#设定启用虚拟用户功能。
guest_enable=YES
#指定虚拟用户的宿主用户。
guest_username=other
#设定虚拟用户的权限符合他们的宿主用户。
virtual_use_local_privs=YES
#设定虚拟用户个人vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个vsftp虚拟用户个性的配
置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。
user_config_dir=/etc/vsftpd/vconf
#如果配置了以下配置,则还需要在user_list里面添加指定的虚拟用户,如ftptest,不然不能登录,如图
#NO表示所有用户均不可以登录ftp,YES表示所有用户均能访问ftp,默认是YES
userlist_deny=NO
#当userlist_deny=NO时,user_list是白名单,当userlist_deny=YES时,user_list是黑名单
userlist_file=/etc/vsftpd/user_list
anonymous_enable=YES #是否允许匿名用户登录
write_enable=YES #enable any form of FTP write command
anon_upload_enable=YES #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES #是否允许匿名用户创建目录
anon_other_write_enable=YES #是否允许匿名用户删除、重命名等
anon_umask=022 #权限掩码,匿名用户上传文档时预设的权限掩码;文件夹权限为 777-022=755,一般的文件权限为 666-022=644;默认权限掩码为077,匿名用户上传之后文件夹权限是700,文件的权限是600。
anon_world_readable_only=YES #当为YES时,文件的other用户必须有r权限才允许下载,即使文件的属主为ftp且对文件有r权限也无法下载,为了安全考虑,默认为YES;当为NO时,则只要属主为ftp且对文件有r权限即可下载;
#禁用匿名用户上传
anon_upload_enable=NO
#允许匿名用户下载
anon_world_readable_only=YES
5.为保障vsFTPd访问安全请开启vsFTPd 上传下载日志;
#找到/etc/vsftpd/vsftpd.conf配置文件
vim /etc/vsftpd/vsftpd.conf
#将xferlog_enable的值修改为YES,并检查是否有注释 (默认为yes)
xferlog_enable=YES
#重启vsftpd服务.
6.保障vsFTPd访问安全,公司vsFTPd客户端连接时的端口范围在50000和60000之间且本地用户登录活动范围限制在home目录;
vim /etc/vsftpd/vsftpd.conf
listen_port=21 #监听端口
pasv_enable=YES #开启被动模式
pasv_min_port=50000 #被动模式端口范围
pasv_max_port=60000
chroot_local_user=YES #使本地用户登录活动范围限制在home目录
重启vsftpd服务
所有服务器开启防火墙,请按需求对防火墙进行策略加固:
1.为防止网络嗅探请在web服务器上禁止ICMP功能;(Web)
方法1:
进入服务器后(快捷键:Win+R) 输入命令:
netsh firewall set icmpsetting 8
这样就可以在外部 Ping 到服务器了,非常简单实用!
同样道理,如果想禁止 Ping ,那运行如下命令:
netsh firewall set icmpsetting 8 disable
或
方法2:
进入控制面板—>管理工具—>找到 “高级安全 Windows防火墙”
点击 入站规则,找到 文件和打印机共享回显请求-ICMPv4-In (Echo Request – ICMPv4-In)
右键该规则 点击“启用规则(Enable)”
禁止 Ping 的方法相同。
2.为减少无用端口请在web服务器上禁止445、5335、139等端口;(Web)
# 防火墙新建入站和出站规则
# 注意:此方法只针对防火墙已开启的情况下才能实现禁用端口
(1)打开控制面板\系统和安全\Windows Defender 防火墙,在左侧选择“高级设置”。
(2)打开“入站规则”窗口,在右侧框中点击“新建规则”,出现如下界面,选择“端口”,点击下一步后,选择‘阻止连接’,继续下一步
禁止445、5335、139等端口
最后的配置文件全都选择,而且是出站规则和入站规则都要一起创建然后使用nmap就扫描不到端口了
3.为防止网络嗅探请在log服务器上禁止ICMP功能;(log)
linux系统默认是允许ping的,为了安全我们可以禁止ping包
临时允许ping
0,代表允许;1,代表禁止
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
永久允许或禁止ping
编辑/etc/sysctl.conf文件
文件尾部追加
net.ipv4.icmp_echo_ignore_all=1
1代表禁止,0代表允许 修改完成后保存退出
执行sysctl -p使配置生效
禁止icmp 端口
除192.168.62.1外,禁止其它人ping 我的主机
# iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT
# iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP
4.为保障远程访问安全,请使用防火墙禁止telnet对应端口;(log)
栗子:
ubuntu防火墙命令
1.查看防火墙当前状态
sudo ufw status
2.开启防火墙
sudo ufw enable
3.关闭防火墙
sudo ufw disable
4.查看防火墙版本
sudo ufw version
5.默认允许外部访问本机
sudo ufw default allow
6.默认拒绝外部访问主机
sudo ufw default deny
7.允许外部访问443端口
sudo ufw allow 443
8.拒绝外部访问443端口
sudo ufw deny 443
9.允许某个IP地址访问本机所有端口
sudo ufw allow from 192.168.0.1
linux-centos
firewall-cmd --permanent --permanent --remove-port=23/tcp
#firewall-cmd --reload
systemctl restart firewalld
linux-ubuntu
ufw deny 23
ufw reload
5.为保障log服务器不被非法访问请配置防火墙只允许管理员IP 172.16.1.1对其进行SSH访问;(log)
只允许在172.16.1.1上使用ssh 远程登录,从其它计算机上禁止使用ssh
# iptables -A INPUT -s 172.16.1.1 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP