龙空技术网

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

tThisfeeling 71

前言:

眼前兄弟们对“mysql安全配置方案”大致比较关切,小伙伴们都需要知道一些“mysql安全配置方案”的相关知识。那么小编在网上汇集了一些有关“mysql安全配置方案””的相关内容,希望各位老铁们能喜欢,你们快快来学习一下吧!

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

本文介绍了如何在 Linux 服务器上设置 Nginx 以提供 AVI、MP3 等格式的下载,同时也提到了如何限制并发请求和上传大小,以及如何优化 PHP 和 MySQL 数据库的性能。此外,还提供了一些关于 MySQL 数据库安全设置的建议服务器的安全设置及其他

主要内容:

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

[设置网站并发数限制]

[设置 nginx 程序限制的1M 上传问题]

[优化 PHP]

[优化 mysql]

[mysql 的安全设置]

[系统整体安全调整]

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

#vi/usr/local/webserver/nginx/conf/mime.types

l.编辑 mimetypes 文件

将需要提供下载的格式前的文件类型修改为”application/octet-stream

#vi /usr/local/webserver/nginx/conf/mime.types.default

2.编辑 mime.types.default 文件

将需要提供下载的格式前的文件类型修改为”application/octet-stream

[设置网站并发数限制]

已在配置 nginxconf 文件时加入并发数限制,具体参见官方维基百科

( zoneModule)”httplimit zonemodule“部

[设置 nginx限1M 传]

已在配置 nginxconf 文件时取消1M 上传限制,具体参见nginxconf 文件内注释

[优化 PHP]

具体参见()php 优化设置”部分

此处仅设置部分必要内容

#vi/usr/local/webserver/php/etc/php.ini

编辑 php.ini 文件

1.将disable functions -”disable functionsphpinfo,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.将plead maxflesize - 2M

修改为“upload max flesize =50M

个该选项设定 PHP 所能允许最大上传文件大小,默认为2MB。根据实际应用需求,可以适

当增大该设置。

[化mysql]具体参见()mysql 优化及安全设置”部分此处仅设置部分必要内容

#vi/usr/local/webserver/mysql/mycnf个编辑mycnf文件

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 &lsquoOpen tables’获得)。注意,不能盲目地把 table_cache 设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

2.将“sort buffer size =512k”

修改为“sort buffer size =2M

个每个线程排序所需的缓冲

3.将“read buffer size =128k”

修改为“read buffer size =2M”

个当一个查询不断地扫描某一个表,MySQL 会为它分配一段内存缓冲区。read bufer_sizc变量控制这一缓冲区的大小。如果您认为连续扫描进行得太慢,可以通过增加该变量值以及

内存缓冲区大小提高其性能。

4将readmnd buffersize=512k”

修改为“read md 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]

具体参见()Mysql 的安全设置”部分

此处仅设置部分必要内容

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

[系统体安全调整]

l、**最后设置**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

将以下脚本命令粘贴到 fsh 文件中

#!/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 -AINPUT -ilo -ACCEPT

#Accept Established Connections

/sbin/iptables -AINPUT -m state -state ESTABLISHEDRELATED -ACCEPT

#ICMP Control

/sbin/iptables -ANPUT -p icmp -m limit -limit 1/s -limit-burst 10 -j ACCEPT

#WwW Service

/sbin/iptables -A INPUT -p tcp -dport 80 -jACCEPT

# SSH Service

/sbin/iptables -ANPUT -p tcp -dport 56565 -j ACCEPT

#Anti DDOS

/sbin/iptables -I INPUT -p tcp -sym -m ttl -ttl-eq 117 j DROP

/sbin/iptables -IINPUT -p tcp -syn -m length -length :40 -j DROP

# mysql3306 Accept

/sbin/iptables -A INPUT -p tcp -s 127.0.0.1 -dport 3306 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp -s 27.0.0.1 -dport 3306 ACCEPT

# Start iptables service

/sbin/service iptables start

保存后执行以下命令

#chmod 755 /sr/local/webserver/fw.sh

#echo“/usr/local/webserver/fwsh’>>/etc/rcd/rclocal

#/usr/local/webserver/fw.sh

3、执行 setup 关闭那些不需要的服务,少开一个服务,就少一个危险,已在< 系统安装后的

初始环境设置 >中设置

4、禁止 Control-Alt-Delete 键盘关闭命令

在”/etc/inittab”文件中注释掉下面这行(使用#):

# vi /etc/inittab

将cactrlaltdel:/sbin/shutdown -t3 -r now”修改为:“#cactrlaltdel:/sbin/shutdown -t3 -r now

为了使这项改动起作用,输入下面这个命令:

#/sbin/init q

5、给/etc/rcd/initd”下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 l>/proc/sys/net/ipv4/icmp_echoignore_all

8、对您的系统上所有的用户设置资源限制可以防止 DoS 类型攻击(denial of service attacks)如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:

# vi /etc/securitv/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/svsconfig/iptables

注意:修改了防火墙配置文件后不得再使用 setup 修改防火墙设置,否则现在的设置会失效11、内核参数调整

编辑 sysctl.conf 文件

# vi /etc/sysctl.conf

修改如下:

net.ipv4.conf.default.accept_source_route=0

net.ipv4.icmp_echo_ignore_broadcasts=l

net.ipv4.icmp_echoignore_all=l

net.ipv4.icmpignore_bogus error_responses=l

net.ipv4.ip_conntrack_max=65535

net.ipv4.tcp_syn_retries=l

net.ipv4.tcp_synack retries-l

net.ipv4.route.gc_timeout-l00

net.ipv4.tcp_max_synbacklog=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 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 服务器上,ackup/day留有压》啊獭椅械俪酶腻饥翌秦储雳晴煊式收蹦背引滴孀骈赖愫天。#vi /usr/local/webserver/backupd.sh个编辑脚本/usr/local/webserver/backupd.sh写入以下内容:#!/bin/bashm -rf /backup/day/*cd /backup/day/cp -f /usr/local/webserver/mysql/data/( 此处为数据库名称 ) backup/day/wp_db_S(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_S(date +%Y%m%d)

sleep 10

echo “ready to upload in 10s ”

/usr/local/webserver/ncftp/bin/ncftpput - backupd -p (FTP 密码)(FTP 服务器地址)//backup/day/~hostname wpdata_of S(date +%Y%m%d).tar.gz

sleep 30

echo“upload done ”

rm-f~hostname'wpdata of S(date +%Y%m%d).tar.gz

sleep 5

rm -rf wp_db_S(date +%Y%m%d)

clear

保存,并设置计划任务:

# crontab -e

增加一行:

004***/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/mysqldata/( 数 据库名称 ackup/hour/wp_db_S(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_S(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'wpdataof S(date +%Y%m%d%H)targz

sleep 30

echo“upload done ”

rm -f~hostname'wpdata of S(date +%Y%m%d%H).tar.gz

sleep 5

mm -rfwp_db_S(date +%Y%m%d%H)

clear

保存,并设置计划任务:

# crontab -c

增加一行:

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 S(date -d“yesterday”+”%Y%m%d”)

cp S(date -d “yesterday”+”Y”)/S(date -d “yesterday”+”m”)/access S(date -d “yesterday'+%Y%m%d”)log /logs/logs of S(date -d“yesterday”+”%Y%m%d”)

cp S(date -d“yesterday” +Y)/S(date -d “yesterday” +”m)/nginx error S(date -dyesterday”+%Y%m%d”).log /logs/logs of S(date -d “yesterday”+%Y%m%d”)

sleep 10

echo “ready to tar in 10s .”

tar zcvf "hostname' logs_of S(date -d “yesterday”+”%Y%md”)tar.gz logs of S(date -d

“yesterday”+”%Y%m%d”)

sleep 10

echo“ready to upload in 10s ”

/usr/local/webserver/nctp/bin/ncftpput logs p (FTP 密码) (FTP服务器地址)//logs/"hostname'_logs_of _S(date -d “yesterday”+”%Y%m%d”).tar.gz

sleep 30

echo “upload done ”

rm -fhostnamelogs_of_S(date -d“yesterday”+”%Y%m%d”)targz

sleep 5

rm -rflogs_of_S(date -d “yesterday”+”Y%m%d”)

clear

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

# crontab -e

增加一行:

002***/bin/bash /usr/local/webserver/logs.sh

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

标签: #mysql安全配置方案 #nginx144targz