Apache安全配置
一、确保apache无法访问根目录
查看apache配置文件,确定里面对根目录是拒绝所有请求
vim /etc/httpd/conf/httpd.conf
按箭头,下翻可以找到以下配置
其中,第一行和第四行,指明了目录,即Linux的根目录 /
第二行,表示禁止使用.htaccess文件,覆盖此处配置
第三行,表示禁止访问根目录
二、删除网站的目录浏览权限
apache会在默认路径下开启目录浏览
继续查看apache配置文件,如图,其中Indexes即为目录浏览权限,直接删除即可。
三、限制HTTP方法
apache默认没有限制限制http方法,我们可以在需要的路径下进行限制
在路径配置中加入
<LimitExcept GET POST >
Require all denied
</LimitExcept>
四、错误页面重定向
http的错误页面可能会暴露服务器信息,我们可以将错误页面都重点向到某文件
新建一个错误页面文件,文件内容为error
echo “error” > /etc/var/www/html/error.txt
编辑配置文件,指定错误代码400 401 402 403 404 500 指向error
ErrorDocument 400 /error.txt
ErrorDocument 401 /error.txt
ErrorDocument 402 /error.txt
ErrorDocument 403 /error.txt
ErrorDocument 404 /error.txt
ErrorDocument 500 /error.txt
五、限制POST数据大小
编辑配置文件
在文件中加下行,注意不要放在路径的申明中
LimitRequestBody 100
六、记录下post的数据
很多攻击行为由post发起,记录post数据可以便于追踪溯源
编辑配置文件
加载记录IO的模块
LoadModule dumpio_module modules/mod_dumpio.so
指定日志级别,记录IO (位置一定要对,不能随意编辑)
LogLevel dumpio:trace7
DumpIOInput On
七、保存退出,并重启服务
退出vim ,使用以下命令重启apache服务
systemctl restart httpd
八、验证配置
前面我们已经完成了apache的加固,下面进行验证,这里我们使用linux自带的curl工具进行验证
1、验证当前的HTTP限制的方法,如我们head方法进行测试
curl -I 127.0.0.1 ,其中 -I表示使用head方法
2、验证错误页面重定向
curl 127.0.0.1/test.html
因为服务器上并不存在test.html,所以重定向到了error.txt
3、验证限制post数据大小
curl使用-d选项时,会使用post,前面我们限制post的body为100字节,下面引号中输入足够长的数据即可
curl -d 'testtesttesttestsa 中间输入超过100个字符随便输入jfljaslfjlajflajlfjsfuwefjsljfljsttesttest' 127.0.0.1
4、验证日志记录post数据
使用下面命令向服务器post的数据为11223344
curl -d '11223344' 127.0.0.1
服务器无法处理post请求,直接报错error
查看日志,可以在日志中找到11223344
Mariadb安全配置
一、操作系统级权限检查
1、检查数据库的运行权限,不建议以root运行数据库,防止越权攻击
ps -ef | egrep "^mysql.*$"
显示mysqld的运行用户为mysql
2、禁用mariadb的历史记录功能
查找缓存文件
find $HOME -name ".mysql_history"
将缓存文件指向空文件
rm -f $HOME/.mysql_history
ln -s /dev/null $HOME/.mysql_history
3、查看并配置数据库存放路径权限
登录数据库
mysql -u root
查看数据库存放路径
show variables where variable_name = 'datadir';
退出数据库
Quit
查看数据库存放路径权限
ls -l /var/lib | grep mysql
如图权限为755,使用以下命令改为700
chmod 700 /var/lib/mysql
二、Mariadb数据库的通用安全配置
1、删除默认的test数据库
进入数据库
mysql -u root
查询数据库
show DATABASES LIKE 'test';
删除数据库
DROP DATABASE 'test';
2、禁用local_infile参数
查看local_infile参数是否开启
show variables where variable_name = 'local_infile';
3、修改secure_file_priv参数
查看secure_file_priv参数
SHOW GLOBAL VARIABLES WHERE Variable_name = 'secure_file_priv' ;
4、确定只有root用户有内置数据库mysql的权限
查看内置数据库的权限
SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y');
5、查看file_priv权限,确定只有root用户有
select user, host from mysql.user where file_priv = 'Y';
撤销用户权限
如果在上例检查中,发现非root用户,可以使用下面命令撤销
revoke file on *.* from 'user';
同时这里检查权限还应有process_priv、super_priv这些字段。
6、配置允许用户登录的主机
查看当前用户可以登录的主机
select user,host from mysql.user;
更新用户允许登录的主机,如
update mysql.user set host="192.168.1.200" where host="localhost" and user="root";
7、查看密码安全策略
show variables like 'validate_password%';