热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(CentOS+Nginx+PHP+Mysql)配置和WEB服务器安全配置方案

服务器的安全设置及其他主要内容:[设置Ngnix可提供AVI、MP3等的下载][设置网站并发数限制][设置nginx程序限制的1M上传问题][优化PHP][优化mysql][mysql的安全设置][系统整体安全调整][设置Ngnix可提供AVI、MP3等的下载]#viusrlocalwebserver

服务器的安全设置及其他

主要内容:
[设置Ngnix可提供AVI、MP3等的下载]
[设置网站并发数限制]
[设置nginx程序限制的1M上传问题]
[优化PHP]
[优化mysql]
[mysql的安全设置]
[系统整体安全调整]

[设置Ngnix可提供AVI、MP3等的下载]

# vi /usr/local/webserver/nginx/conf/mime.types
↑ 编辑mime.types文件
将需要提供下载的格式前的file.html' target='_blank'>文件类型修改为”application/octet-stream”
# vi /usr/local/webserver/nginx/conf/mime.types.default
↑ 编辑mime.types.default文件
将需要提供下载的格式前的文件类型修改为”application/octet-stream”

[设置网站并发数限制]
已在配置nginx.conf文件时加入并发数限制,具体参见官方维基百科(http://wiki.codemongers.com/NginxChsHttpLimit_zoneModule)”httplimit_zonemodule “部分

[设置nginx程序限制的1M上传问题]
已在配置nginx.conf文件时取消1M上传限制,具体参见nginx.conf文件内注释

[优化PHP]
具体参见(http://www.cnprint.org/bbs/blogs/1/blog312.html)”php 优化设置”部分
此处仅设置部分必要内容

# vi /usr/local/webserver/php/etc/php.ini
↑ 编辑php.ini文件

1.将“disable_functiOns=”
修改为 “disable_functiOns= phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status”
↑**这条建议在网站建成之后修改**该选项可以设置哪些PHP函数是禁止使用的,PHP中有一些函数的风险性还是相当大的,可以直接执行一些系统级脚本命令,如果允许这些函数执行,当PHP程序出现漏洞时,损失是非常严重的!
需注意:如果您的服务器中含有一些系统状态检测的PHP程序,则不要禁用shell_exec,proc_open,proc_get_status等函数。

2.将“upload_max_filesize = 2M”
修改为 “upload_max_filesize = 50M”
↑该选项设定PHP所能允许最大上传文件大小,默认为2MB。根据实际应用需求,可以适当增大该设置。

[优化mysql]
具体参见(http://www.cnprint.org/bbs/blogs/1/blog312.html)”mysql 优化及安全设置”部分
此处仅设置部分必要内容

# vi /usr/local/webserver/mysql/my.cnf ↑ 编辑my.cnf文件

1.将“table_cache = 64″
修改为 “table_cache = 512″
↑指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果您发现open_tables等于 table_cache,并且opened_tables在不断增长,那么您就需要增加table_cache的值了(上述状态值可以使用show status like ‘Open_tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

2.将sort_buffer_size = 512k”
修改为 “sort_buffer_size = 2M”
↑每个线程排序所需的缓冲

3.将“read_buffer_size = 128k”
修改为 “read_buffer_size = 2M”
↑当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果您认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

4.将“read_rnd_buffer_size = 512k”
修改为 “read_rnd_buffer_size = 4M”
↑加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作,应增加read_rnd_buffer_size的值以加速排序操作后面的行读取。仍然不明白这个选项的用处…

5.将“myisam_sort_buffer_size = 8M”
修改为 “myisam_sort_buffer_size = 32M”
↑用于REPAIR TABLE。不明白这个选项的用处,百度上找到的设置方向也是五花八门,有128M、64M、32M等,折中选一个。

[mysql的安全设置]
具体参见(http://www.cnprint.org/bbs/blogs/1/blog312.html)”Mysql 的安全设置”部分
此处仅设置部分必要内容

**iptables中设置**关闭远程连接,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过 MySQL的内建安全机制。(您必须确定,您是否真的不需要远程连接mysql)

[系统整体安全调整]

1、**最后设置**RHEL或Red Had Enterprise Linux 5.X 的用户要首先要打开SElinux,方法是修改/etc/selinux/config文件中的SELINUX=”" 为enforcing 。它可以保证您的系统不会非正常的崩溃。有些人认为应该关闭,我强烈不推荐,当然只是将RHEL用来玩玩,不是用于实际服务器则无所谓了。
2、**最后设置**启用iptables 防火墙,对增加系统安全有许多好处。设置好防火墙的规则。
iptables要求:
* 屏蔽所有端口
* 把SSH的缺省端口设置为56565
* 把56565、80、3306端口打开
* 把3306端口设置为只允许本机访问

Iptables规则:
# vi /usr/local/webserver/fw.sh
将以下脚本命令粘贴到 fw.sh 文件中
#!/bin/bash
# Stop iptables service
/sbin/service iptables stop
# Inital chains default policy
/sbin/iptables -F -t filter
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
# Enable Native Network Transfer
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Accept Established Connections
/sbin/iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# ICMP Control
/sbin/iptables -A INPUT -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT
# WWW Service
/sbin/iptables -A INPUT -p tcp –dport 80 -j ACCEPT
# SSH Service
/sbin/iptables -A INPUT -p tcp –dport 56565 -j ACCEPT
# Anti DDOS
/sbin/iptables -I INPUT -p tcp –syn -m ttl –ttl-eq 117 -j DROP
/sbin/iptables -I INPUT -p tcp –syn -m length –length :40 -j DROP
# mysql 3306 Accept
/sbin/iptables -A INPUT -p tcp -s 127.0.0.1 –dport 3306 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -s 127.0.0.1 –dport 3306 -j ACCEPT
# Start iptables service
/sbin/service iptables start

保存后执行以下命令
# chmod 755 /usr/local/webserver/fw.sh
# echo ‘/usr/local/webserver/fw.sh’ >> /etc/rc.d/rc.local
# /usr/local/webserver/fw.sh

3、执行setup关闭那些不需要的服务,少开一个服务,就少一个危险,已在<系统安装后的初始环境设置 >中设置
4、禁止Control-Alt-Delete键盘关闭命令
在”/etc/inittab”文件中注释掉下面这行(使用#):
# vi /etc/inittab
将”ca::ctrlaltdel:/sbin/shutdown -t3 -r now” 修改为: “#ca::ctrlaltdel:/sbin/shutdown -t3 -r now”
为了使这项改动起作用,输入下面这个命令:
# /sbin/init q
5、给”/etc/rc.d/init.d”下script文件设置权限
给执行或关闭启动时执行的程序的script文件设置权限。
# chmod -R 700 /etc/rc.d/init.d/*
这表示只有root才允许读、写、执行该目录下的script文件。
6、使”/etc/services”文件免疫
使”/etc/services”文件免疫,防止未经许可的删除或添加服务:
#chattr +i /etc/services
7.阻止您的系统响应任何从外部/内部来的ping请求。
既然没有人能ping通您的机器并收到响应,您可以大大增强您的站点的安全性。您可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。
# vi /etc/rc.d/rc.local
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
8、对您的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks)
如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
# vi /etc/security/limits.conf
下面的代码示例中,所有用户每个会话都限制在 10 MB,并允许同时有四个登录。第三行禁用了每个人的内核转储。第四行除去了用户 bin 的所有限制。
* hard rss 10000
* hard maxlogins 4
* hard core 0
bin -
激活这些限制
# vi /etc/pam.d/login 底部添加一行: session required /lib/security/pam_limits.so。
9、用chattr命令给下面的文件加上不可更改属性。
# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow
**mysql数据库密码变更后再设置**注意执行这个操作后,以root身份都不能向系统增加用户或者修改密码了。
如果我们要增加用户或者修改密码的。应该先用chattr -i /etc/passwd等命令解除不可写设置,再进行操作。
10、修改sshd的端口:
修改防火墙配置,开启新的远程端口(56565)
# vi /etc/sysconfig/iptables

修改/etc/ssh/sshd_config:
# vi /etc/ssh/sshd_config
将里面的 Port 改为 56565,(具体的端口随意,不能和其他程序的端口冲突)。并注释掉前面的#号

使sshd服务生效:
# pkill sshd
# service sshd start

修改防火墙配置,关闭旧的远程端口(22)
# vi /etc/sysconfig/iptables
注意:修改了防火墙配置文件后不得再使用setup修改防火墙设置,否则现在的设置会失效
11、 内核参数调整
编辑sysctl.conf文件:
# vi /etc/sysctl.conf
修改如下:
net.ipv4.conf.default.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_ignore_bogus_error_respOnses=1
net.ipv4.ip_conntrack_max=65535
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_synack_retries=1
net.ipv4.route.gc_timeout=100
net.ipv4.tcp_max_syn_backlog=32768
net.ipv4.conf.default.rp_filter=0
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
kernel.shmmax = 134217728
查看状态:
# sysctl -p
12、经常检查系统日志。系统日志主要位于/var/log/目录下。防患于未然。

- 数据自动备份

主要内容:
[安装NCFTP软件以支持自动上传数据库备份]
[数据库每日备份]
[数据库即时备份**按需操作**]
[日志备份]

[安装NCFTP软件以支持自动上传数据库备份]

# cd /software
# wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.2-src.tar.gz
# tar zxvf ncftp-3.2.2-src.tar.gz
# cd ncftp-3.2.2
# ./configure –prefix=/usr/local/webserver/ncftp
# make && make install

[数据库每日备份]
每天4:00,将数据库拷贝至/backup/day后进行压缩,然后上传至FTP服务器上,/backup/day/留有压缩文件一天。

# vi /usr/local/webserver/backupd.sh

↑ 编辑脚本/usr/local/webserver/backupd.sh

写入以下内容:

#!/bin/bash
rm -rf /backup/day/*
cd /backup/day/
cp -rf /usr/local/webserver/mysql/data/(此处为数据库名称)/ /backup/day/wp_db_$(date +%Y%m%d)
sleep 10
echo “ready to tar in 10s .”
tar zcvf `hostname`_wpdata_of_$(date +%Y%m%d).tar.gz wp_db_$(date +%Y%m%d)
sleep 10
echo “ready to upload in 10s .”
/usr/local/webserver/ncftp/bin/ncftpput -u backupd -p (FTP密码) (FTP服务器地址) / /backup/day/`hostname`_wpdata_of_$(date +%Y%m%d).tar.gz
sleep 30
echo “upload done .”
rm -f `hostname`_wpdata_of_$(date +%Y%m%d).tar.gz
sleep 5
rm -rf wp_db_$(date +%Y%m%d)
clear

保存,并设置计划任务:

# crontab -e

增加一行:

00 4 * * * /bin/bash /usr/local/webserver/backupd.sh

↑ 每天凌晨4点将自动备份数据库并上传。

[数据库即时备份**按需操作**]
每隔6小时,将数据库拷贝至/backup/hour目录进行备份,然后将压缩文件上传至FTP服务器上,/backup/hour/留有压缩文件一天。

# vi /usr/local/webserver/backuph.sh

↑ 编辑脚本/usr/local/webserver/backuph.sh

写入以下内容::

#!/bin/bash
rm -rf /backup/hour/*
cd /backup/hour/
cp -rf /usr/local/webserver/mysql/data/(数据库名称)/ /backup/hour/wp_db_$(date +%Y%m%d%H)
sleep 10
echo “ready to tar in 10s .”
tar zcvf `hostname`_wpdata_of_$(date +%Y%m%d%H).tar.gz wp_db_$(date +%Y%m%d%H)
sleep 10
echo “ready to upload in 10s .”
/usr/local/webserver/ncftp/bin/ncftpput -u backuph -p (FTP密码) (FTP服务器地址) / /backup/hour/`hostname`_wpdata_of_$(date +%Y%m%d%H).tar.gz
sleep 30
echo “upload done .”
rm -f `hostname`_wpdata_of_$(date +%Y%m%d%H).tar.gz
sleep 5
rm -rf wp_db_$(date +%Y%m%d%H)
clear

保存,并设置计划任务:

# crontab -e

增加一行:

0 */6 * * * /bin/bash /usr/local/webserver/backuph.sh

↑ 每6小时将自动备份数据库并上传一次。

[日志备份]
每天02:00,将/logs/下前一天的日志,进行压缩,然后上传至FTP服务器。

# vi /usr/local/webserver/logs.sh

↑ 编辑脚本/usr/local/webserver/logs.sh

写入以下内容::

#!/bin/bash
cd /logs/
mkdir logs_of_$(date -d “yesterday” +”%Y%m%d”)
cp $(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/access_$(date -d “yesterday” +”%Y%m%d”).log /logs/logs_of_$(date -d “yesterday” +”%Y%m%d”)
cp $(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/nginx_error_$(date -d “yesterday” +”%Y%m%d”).log /logs/logs_of_$(date -d “yesterday” +”%Y%m%d”)
sleep 10
echo “ready to tar in 10s .”
tar zcvf `hostname`_logs_of_$(date -d “yesterday” +”%Y%m%d”).tar.gz logs_of_$(date -d “yesterday” +”%Y%m%d”)
sleep 10
echo “ready to upload in 10s .”
/usr/local/webserver/ncftp/bin/ncftpput -u logs -p (FTP密码) (FTP服务器地址) / /logs/`hostname`_logs_of_$(date -d “yesterday” +”%Y%m%d”).tar.gz
sleep 30
echo “upload done .”
rm -f `hostname`_logs_of_$(date -d “yesterday” +”%Y%m%d”).tar.gz
sleep 5
rm -rf logs_of_$(date -d “yesterday” +”%Y%m%d”)
clear

保存,并设置计划任务::

# crontab -e

增加一行:

00 2 * * * /bin/bash /usr/local/webserver/logs.sh

↑ 每天凌晨2点将自动备份日志并上传。

文章作者:molutran


推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
author-avatar
杨艳奎_718
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有