网站首页 > 技术教程 正文
1.apache介绍
摘抄自百度百科:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。自1996年诞生以来,Apache由于其跨平台性、安全性和开源特性,一直占据着Web服务器领域的领先地位。以下是Apache的主要特点:
开源性。Apache的源代码公开,允许开发者查看和修改源代码,这使得Apache能够不断发展和完善。
跨平台性。Apache可以在几乎所有的计算机平台上运行,包括Windows、Linux、UNIX等操作系统。
模块化设计。Apache支持各种模块,可以处理Web访问中的各种问题,如高频访问、并发限制、日志监控、负载均衡、图像处理等。
稳定性与安全性。Apache以其稳定性和良好的安全性而被广泛使用。
apache官网:www.apache.org
学习手册:http://httpd.apache.org/docs/2.4/
yum/apt安装配置文件在:/etc/apache2/apache2.conf
编译安装配置文件在:/usr/local/apache/conf/httpd.conf
容器启动配置文件在:/usr/local/apache2/conf/httpd.conf
我基本都是使用nginx,对apache不是很熟悉。但是这些配置项都是经过实际测试效果的。本文环境以ubuntu22.04,apt安装apache最新版2.4.52为例。
2.安装apache
apache的安全基线配置与nginx大同小异,可以去看我以前写的nginx安全基线一文,无非是敏感信息隐藏、安全头配置、日志保存审计等。
- yum/apt安装:
#添加apache官方源
sudo apt install software-properties-common
sudo add-apt-repository $PPA:ondrej/apache2
sudo apt update
#安装apache2
apt-get install apache2
- 源码编译安装:
#安装依赖包
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libpcre3-dev libxml2-dev zlib1g-dev
#安装编译环境
wget http://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.5.tar.gz
tar -zxf apr-1.6.5.tar.gz && cd apr-1.6.5 && ./configure --prefix=/usr/local/apr && make && make install
cd .. && wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz && tar -zxf apr-util-1.3.12.tar.gz && cd apr-util-1.3.12 && ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config && make && make install
cd .. && wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip && unzip -o pcre-8.10.zip && cd pcre-8.10 && ./configure --disable-shared --with-pic --prefix=/usr/local/pcre && make && make install
#下载apache源码
wget https://downloads.apache.org/httpd/httpd-2.4.59.tar.gz
#解压并进入源码目录
tar -zxvf httpd-2.4.59.tar.gz && cd httpd-2.4.59
#配置apache编译环境
./configure --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre=/usr/local/pcre \
--prefix=/usr/local/apache --enable-so --with-ssl
#编译安装
make && make install
#配置apache为系统服务
cat >> /etc/systemd/system/httpd.service <<EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
#apache开机自启
sudo systemctl daemon-reload
sudo systemctl start httpd
sudo systemctl enable httpd
- docker运行:
docker run -itd -p 80:80 httpd
3.apache软件版本相关
3.1使用最新版本
#添加apache官方源
sudo apt install software-properties-common
sudo add-apt-repository $PPA:ondrej/apache2
sudo apt update
#安装apache2
apt-get install apache2
#查看apache版本
root@K8S:~# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2024-04-10T17:45:18
3.2禁止显示apache版本信息
隐藏Apache的版本信息可以减少攻击者获取服务器版本的机会,从而降低被已知漏洞攻击的风险。
vim /etc/apache2/conf-available/security.conf
#错误页面不显示版本信息
ServerSignature Off
#只显示软件名称
ServerTokens Prod
systemctl restart apache2
4安全传输相关
4.1配置HTTPS
配置https证书可以加密在互联中传输的数据,保证数据安全,但是要搭配ssl证书使用。注意:此时没有配置https重定向,相当于没有强制加密传输,http仍然可用。
vim /etc/apache2/sites-available/000-default.conf
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/apache2/cert/fanyum/cert.pem
SSLCertificateKeyFile /etc/apache2/cert/fanyum/key.pem
# Other SSL settings
</VirtualHost>
#启用ssl模块
a2enmod ssl
systemctl restart apache2
4.2启用HTTP严格传输
确保浏览器只通过HTTPS与服务器通信,以防止中间人攻击,必须搭配ssl证书使用。因为测试环境没有加载其他资源,所以只能体现重定向功能了。注意:如果网站上有任何非HTTPS资源,可能会导致内容加载问题。
vim /etc/apache2/sites-available/000-default.conf
#http虚拟主机下添加重定向配置
RedirectPermanent / https://你的域名/
vim /etc/apache2/sites-available/default-ssl.conf
#强制浏览器使用HSTS
#启用headers模块
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
#强制使用HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
4.3限制访问控制
使用`<Directory>指令限制对特定目录的访问,但是需要为特定用户或IP设置例外,不然都访问不了。
vim /etc/apache2/apache2.conf
#限制对pic目录的访问
<Directory /var/www/html/pic>
Order deny,allow
Deny from all
</Directory>
systemctl restart apache2
4.4禁用目录浏览
默认情况下,如果目录中没有索引文件,Apache会显示目录列表。禁用目录浏览可以防止暴露不必要的信息,用户只能访问明确的资源。
vim /etc/apache2/apache2.conf
<Directory "/var/www/html/pic">
Options -Indexes
</Directory>
systemctl restart apache2
4.5 防止内容类型嗅探
通过设置X-Content-Type-Options头,防止浏览器对响应内容进行MIME类型嗅探,可以防止潜在的MIME类型混淆攻击。
vim /etc/apache2/apache2.conf 或sites-available/的特定站点配置文件
#启用headers模块,可以写到主配置文件中
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
#启用防内容嗅探
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>
systemctl restart apache2
4.6 防止点击劫持
通过设置X-Frame-Options头,防止自己的网站被其他网站以iframe的形式嵌入,以防止点击劫持攻击。
vim /etc/apache2/apache2.conf 或sites-available/的特定站点配置文件
#启用headers模块,可以写到主配置文件中
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
#启用防点击劫持
<IfModule mod_headers.c>
Header always set X-Frame-Options "DENY"
</IfModule>
systemctl restart apache2
4.7 跨站脚本(XSS)保护
设置X-XSS-Protection头,启用浏览器的XSS过滤功能。但是有可能会导致一些合法的脚本也无法运行。
vim /etc/apache2/apache2.conf 或sites-available/的特定站点配置文件
#启用headers模块,可以写到主配置文件中
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
#启用xss保护
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
systemctl restart apache2
4.8跨站点请求伪造(CSRF)保护
设置X-CSRF-Token头,防止CSRF攻击。但是需要在应用程序中实现CSRF令牌的生成和验证,一定程度上增加开发工作量。
4.9限制上传目录的权限
确保上传目录的权限设置合理,避免用户直接执行上传的文件
4.10 启用ModSecurity
ModSecurity是一个Web应用防火墙,可以防止各种攻击。考虑安装和配置ModSecurity模块,提供额外的安全防护层。但是因为比较麻烦,我没有使用过。我个人一般是直接使用safeline对流量进行清洗和转发(后面会写一篇,十分简单且有效)。
5日志审计
5.1配置日志记录
编辑/etc/apache2/apache2.conf配置文件,设置日志记录文件、记录内容、记录格式。
access_log配置可以详细记录网站的访问记录,每当有客户端请求到达apache服务器时,无论是成功的请求还是失败的请求,nginx都会记录相关信息到这个日志文件中。这些信息包括但不限于请求时间、客户端IP、请求方法(GET、POST等)、请求的URL、HTTP响应状态码等。
error_log配置可以记录nginx的错误日志文件。错误日志用于记录服务器运行时发生的错误、警告和其他重要事件。设置为warn意味着日志将记录从警告级别(warn)及以上级别的消息,包括错误(error)、关键(crit)、警报(alert)和紧急(emerg)级别。debug、info和notice级别的日志不会被记录。
vim /etc/apache2/apache2.conf
#记录的日志等级
LogLevel warn
#combined格式记录正常访问日志
CustomLog /var/log/apache2/access.log combined
#错误日志记录
ErrorLog /var/log/apache2/error.log
5.2配置日志轮转
设置日志保存时间为6个月,以满足日志审计的要求。在Linux中最常用的工具是logrotate,logrotate的默认配置文件在/etc/logrotate.d/下。如果是编译安装的话则不存在/etc/logrotate.d/apache2文件,直接手动新增即可。
如果每天轮转一次觉得太频繁可以使用 weekly rotate 26每周轮转一次,记录26次也是180天
#备份默认的logrotate
mv /etc/logrotate.d/apache2 /etc/logrotate.d/apache2.bak
#修改apache2的备份配置,按天轮转180天。不要把注释复制进去,可能会产生奇怪的问题(我导致了无法重新读取apache2配置,无法重新生成access.log文件,找了好久的问题才解决)。
cat >> /etc/logrotate.d/apache2 <<EOF
/var/log/apache2/access.log {
daily #按天轮转
missingok #如果日志文件丢失,不产生错误
rotate 180 #保留180天的日志文件
compress #使用gzip压缩轮转后的日志文件
delaycompress #压缩操作延迟到下一次轮转时执行
notifempty #如果日志文件为空,则不进行轮转
create 640 root adm #创建新的文件日志并设置属主属组
sharedscripts #共享脚本,仅在所有日志都处理完后执行一次
postrotate
/usr/sbin/apache2ctl graceful > /dev/null 2>&1 || true
endscript #重新加载Apache配置,避免日志被锁定
}
/var/log/apache2/error.log {
daily #按天轮转
missingok #如果日志文件丢失,不产生错误
rotate 180 #保留180天的日志文件
compress #使用gzip压缩轮转后的日志文件
delaycompress #压缩操作延迟到下一次轮转时执行
notifempty #如果日志文件为空,则不进行轮转
create 640 root adm #创建新的文件日志并设置属主属组
sharedscripts #共享脚本,仅在所有日志都处理完后执行一次
postrotate
/usr/sbin/apache2ctl graceful > /dev/null 2>&1 || true
endscript #重新加载Apache配置,避免日志被锁定
}
EOF
5.2.1轮转测试
#测试配置是否正确。-v代表即详细模式,-f强制立即执行轮转。
logrotate -vf /etc/logrotate.d/apache2
#可以发现成功轮转和压缩,先轮转再压缩
ll /var/log/apache2/
root@K8S:/var/log/apache2# ls
access.log access.log.2.gz error.log.1 other_vhosts_access.log
access.log.1 error.log error.log.2.gz
猜你喜欢
- 2024-10-15 如何在 Linux 系统中查看系统日志
- 2024-10-15 网站被植入webshel??l导致网站瘫痪,网络安全防范太重要了
- 2024-10-15 Ngnix全局块的其他配置指令--daemon指令介绍,include指令介绍
- 2024-10-06 面向容器日志的技术实践(面向对象 容器)
- 2024-10-06 nginx反向代理压测问题记录(nginx反向代理http)
你 发表评论:
欢迎- 最近发表
-
- linux CentOS检查见后门程序的shell
- 网络安全工程师演示:黑客是如何使用Nmap网络扫描工具的?
- Linux中ftp服务修改默认21端口等(linux修改ftp配置文件)
- Linux系统下使用Iptables配置端口转发,运维实战收藏!
- 谈谈TCP和UDP源端口的确定(tcp和udp的端口号相同吗)
- Linux 系统 通过端口号找到对应的服务及相应安装位置
- 快速查找NAS未占用端口!Docker端口秒级排查+可视化占坑双杀技
- 【知识杂谈#2】如何查看Linux的(本地与公网)IP地址与SSH端口号
- 如何在Linux中查询 DNS 记录,这三个命令可谓是最常用、最经典的
- 【Linux系统编程】特殊进程之守护进程
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)