我们必须要加强安全配置,如果做虚拟主机,建议禁止php函数列表如下:

disable_functions = phpinfo,system,exec,shell_exec,passthru,proc_open,proc_close, proc_get_status,

checkdnsrr,getmxrr,getservbyname,getservbyport, syslog,popen,show_source,highlight_file,dl,

socket_listen,socket_create,socket_bind,socket_accept, socket_connect, stream_socket_server,

stream_socket_accept,stream_socket_client,ftp_connect, ftp_login,ftp_pasv,ftp_get,

sys_getloadavg,disk_total_space, disk_free_space,posix_ctermid,posix_get_last_error,posix_getcwd,

 posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,

posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,

posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,

posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,

posix_times,posix_ttyname,posix_uname

PHP.ini 里面的 disable_functions 开关选项可关闭一些危险的函数,
比如: disable_functions = phpinfo , 如果在文件中调用phpinfo() 函数,
那么在 error_reporting 开启的情况下,会提示如下错误:
Warning: phpinfo() has been disabled for security reasons
目前发现万网主机是屏蔽此函数的。
利用 google: inurl:phpinfo.php 就可查看大量的主机信息,一般为管理员进行调试的时候放上未删除的文件。

禁用不安全的PHP函数,这是必须的.

另外,建议在php.ini里面,设置 open_basedir 到用户目录,然后设置 enable_dl = Off  和 allow_url_fopen = Off


lamp应该就已经是比较安全的,类似ssh proftpd wu-ftpd软件都能限制登陆的错误次数,也可以用iptables加以限制数据包的进出。但是更简单的办法,就是安装apf+bfd了。

下载apf
wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz
 
进入安装目录并安装
cd apf-<version>/ && ./install
 
修改apf配置文件
vi /etc/apf/conf.apf
 
几个重要参数设置
 
DEVEL_MODE="x"
x为0 每5分钟会关闭apf以防止误操作导致无法远程控制
x为1 为正常工作模式
 
INSTALL_PATH="/etc/apf"
定义安装目录,可以更改,但是不推荐
 
DLIST_DSHIELD="1"
改为1,此动作将从spamhausv收集恶意的IP地址加以屏蔽
 
IG_TCP_CPORTS="20,21,80,22,2222,6000_7000"
定义哪些TCP数据包允许从某些端口流入
 
EGF="1" #开启出站过滤
 
EG_TCP_CPORTS="21,25,80,443,43"
出口过滤
 
DLIST_PHP="1" #开启防止spam的IP
DLIST_SPAMHAUS="1" 
DLIST_DSHIELD="1"
DLIST_RESERVED="1"
 
apf -s
启动APF防火墙
 
wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
下载BFD
 
tar zxvf bfd-current.tar.gz 
cd bfd-<version>/ && ./install.sh
解压并安装
 
vi /usr/local/bfd/conf.bfd
更改BFD配置文件
 
EMAIL_ALERTS="0"
改为EMAIL_ALERTS="1"
发出邮件提醒
 
EMAIL_ADDRESS="root"
将root改为自己的邮件地址
 
vi /usr/local/bfd/ignore.hosts
填入可信任的IP
 
bfd -s
运行bfd后,有状况将会发邮件提醒
 
wget http://www.inetbase.com/scripts/ddos/install.sh
下载DDoS deflate进行小规模的DDOS保护
 
bash install.sh
安装DDoS deflate
 
vi /usr/local/ddos/ddos.conf
更改配置文件
 
FREQ=1 #分钟
NO_OF_CONNECTIONS=150 #连接大于等于150个将被屏蔽
APF_BAN=1 #有装APF就用APF屏蔽,如果为0就直接调用iptables
EMAIL_TO="root" # email给自己如果有状况的话
BAN_PERIOD=600 #屏蔽多少秒

直接运行ddos可得到当前apache连接的数量
DDOS deflate网站

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
下载chkrootkit
 
tar zxvf chkrootkit.tar.gz
解开压缩包
 
cd chkrootkit-<version>/ && make sense
进入chkrootkit并编译
 
./chkrootkit |grep INFECTED
如果有东西,那就不太妙了 :(

其实,如果面对的是DDOS,上面的办法也根本没有用,只能依靠硬件防火墙了。只不过任何的DDOS都是需要成本的,比如说购买肉鸡的成本,攻击的时间越长,成本就越高。

在php的函数接口里面,PHP已经为我们准备了FTP的相关函数。我们只要使用这些PHP的函数,就可以写出简单的FTP功能。这里只是些出一个上传的功能, 配合相关的网站备份脚本,就可以简单的把网站备份到其他的服务器。

#!/usr/bin/php -q
<?php
$IP = 'taovps.com';
$NAME = 'username'; //把username改为你的用户名
$PASSWD = 'password'; // 设置password为你的ftp密码
$file = 'filename.zip';
$fp = fopen($file, 'r');
$ID = ftp_connect($IP);
$RE = ftp_login($ID, $NAME, $PASSWD);
$res = ftp_size($ID, $file);
if ($res != -1) {
       echo "$file exists, filesize is $res bytes !\n";
} else {
       (ftp_fput($ID, $file, $fp, FTP_ASCII));
       echo "upload completed! $file\n";
}
ftp_close($ID);
?>
在遇到相同的文件名时,有可能是已经上传过的文件,这里就不必再重复上传了。

目前在网络上,无时无刻有人在扫描网络上主机的TCP 22端口。如果遇到有打开TCP 22端口的主机,则尝试输入弱密码进行尝试登录。如果您正巧密码被猜中,则你的主机成了黑客的肉鸡了。

1. 修改SSH配置文件

vi /etc/ssh/sshd_config

找到#Port 22 这一行,修改为 Port 8888

则8888是新的端口号了。 保存,退出,然后重启SSHD

/etc/init.d/sshd restart

2. 修改防火墙iptables的配置文件:

vi /etc/sysdconfig/iptables

在后面添加一行

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

保存退出。然后重启iptables,使得规则生效

service iptables restart

经过上面的修改规则,新的端口号开始生效。在登录的时候,则需要修改SSH的登录端口,否则网络连接失败。

此文介绍一种,每天自动备份网站以及数据库文件,发送EMAIL到邮箱,并上传网站和数据加文件到FTP空间,自动删除旧备份的方法。下面的代码只是适合CentOS和Redhat系列的Linux系统。如果需要在Debian或者Ubuntu上面执行,需要略做修改

首先安装EMAIL发送组件:

yum install sendmail mutt

脚本下载地址:http://taovps.net/soft/AutoBackupToFtp.sh

脚本代码如下(注意修改FTP服务器地址用户名密码):

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_USER=root                             #mysql用户名
MYSQL_PASS=123456                      #mysql密码
[email protected]                 #数据库发送到的邮箱
FTP_USER=cat                              #ftp用户名
FTP_PASS=123456                         #ftp密码
FTP_IP=imcat.in                          #ftp地址
FTP_backup=backup                          #ftp上存放备份文件的目录,这个要自己得ftp上面建的
WEB_DATA=/home/www                          #要备份的网站数据
#你要修改的地方从这里结束

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup
#导出数据库,一个数据库一个压缩文件
for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件为一个文件
tar zcf /home/backup/$DataBakName /home/backup/*.sql.gz
rm -rf /home/backup/*.sql.gz
#发送数据库到Email,如果数据库压缩后太大,请注释这行
echo "主题:数据库备份" | mutt -a /home/backup/$DataBakName -s "内容:数据库备份" $MAIL_TO
#压缩网站数据
tar zcf /home/backup/$WebBakName $WEB_DATA
#上传到FTP空间,删除FTP空间5天前的数据
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
delete $OldWeb
put $DataBakName
put $WebBakName
bye
END

给脚本添加执行权限:

chmod +x /root/AutoBackupToFtp.sh

利用系统crontab实现每天自动运行:

crontab -e

输入以下内容:

00 00 * * * /root/AutoBackupToFtp.sh

其中00 00为时间分/小时,可自行修改,例如:30 12 ***,就是每天12.30运行这个脚本。

附一个使用lftp备份文件

#!/bin/bash
#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
#导出mysql数据库
/usr/local/mysql/bin/mysqldump -uroot -ppassword --databases db1 > /home/backup/databackup.sql
#压缩数据库
tar zcf /home/backup/$DataBakName /home/backup/databackup.sql
rm -rf /home/backup/databackup.sql
#压缩网站数据
tar zcvf /home/backup/$WebBakName /home/wwwroot
#使用lftp同步备份目录
lftp -u user,password -e "mirror -R --only-newer /home/backup /backup" ftp.yoursite.cn
exit
END

转载自:http://imcat.in/auto-backup-site-files-database-upload-ftp/