Linux防止PHPDDOS流量外出攻击

#!/bash/sh
DNSIP=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`
iptables -A OUTPUT -p udp -j DROP
iptables -I OUTPUT -p udp --dport 53 -d $DNSIP -j ACCEPT
iptables-save

 

 

保存为脚本或者直接运行

脚本意思是,从resolv获取本地dns地址,用iptables封udp out所有端口,最后再开放dns 53号端口,从而达到防止DDOS对外攻击

mknod

mknod:
mknod 装置名称 [bcp] [Major] [Minor]
参数:
装置种类:
b :设定装置名称成为一个周边储存设备档案,例如硬盘等;
c :设定装置名称成为一个周边输入设备档案,例如鼠标/键盘等;
p :设定装置名称成为一个 FIFO 档案;
Major :主要装置代码;
Minor :次要装置代码;
范例:
范例一:建立 /dev/hda10 这个磁盘储存装置
[[email protected] ~]# mknod /dev/hda10 b 3 10
# 上面那个 3 与 10 是有意义的,不要随意设定啊!


在 Linux 底下所有的装置都以档案来代表, 但是那个档案如何代表该装置呢?很简单!就是透过档案的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的, 不是随意设定的喔!举例来说,创建raw设别:mknod /dev/raw/raw1 c 162 1,如果以硬盘装置来说明,那么 /dev/hda 到 /dev/hdd 的 major 与 minor 代码是:
硬盘代号 Major Minor
/dev/hda 3 0~63
/dev/hdb 3 64~127
/dev/hdc 22 0~63
/dev/hdd 22 64~127

e2label(改标头名称):
e2label 装置名称 新的Label名称
[[email protected] ~]# e2label /dev/hdb5 hdb5

mknod fd0 b 2 0
mknod fd1 b 2 1
mknod hda b 3 0
mknod hda1 b 3 1
mknod hda2 b 3 2
mknod hda3 b 3 3
mknod hda4 b 3 4
mknod hda5 b 3 5
mknod hda6 b 3 6
mknod hda7 b 3 7
mknod hda8 b 3 8
mknod hdb b 3 64
mknod hdb1 b 3 65
mknod hdb2 b 3 66
mknod hdb3 b 3 67
mknod hdb4 b 3 68
mknod hdb5 b 3 69
mknod hdb6 b 3 70
mknod hdb7 b 3 71
mknod hdb8 b 3 72
mknod hdc b 22 0
mknod hdc1 b 22 1
mknod hdc2 b 22 2
mknod hdc3 b 22 3
mknod hdc4 b 22 4
mknod hdc5 b 22 5
mknod hdc6 b 22 6
mknod hdc7 b 22 7
mknod hdc8 b 22 8
mknod hdd b 22 64
mknod hdd1 b 22 65
mknod hdd2 b 22 66
mknod hdd3 b 22 67
mknod hdd4 b 22 68
mknod hdd5 b 22 69
mknod hdd6 b 22 70
mknod hdd7 b 22 71
mknod hdd8 b 22 72
mknod sda b 8 0
mknod sda1 b 8 1
mknod sda2 b 8 2
mknod sda3 b 8 3
mknod sda4 b 8 4
mknod sda5 b 8 5
mknod sda6 b 8 6
mknod sda7 b 8 7
mknod sda8 b 8 8
mknod sdb b 8 16
mknod sdb1 b 8 17
mknod sdb2 b 8 18
mknod sdb3 b 8 19
mknod sdb4 b 8 20
mknod sdb5 b 8 21
mknod sdb6 b 8 22
mknod sdb7 b 8 23
mknod sdb8 b 8 24
mknod sr0 b 11 0
mknod sr1 b 11 1
mknod tty c 5 0
mknod console c 5 1
mknod tty1 c 4 1
mknod tty2 c 4 2
mknod tty3 c 4 3
mknod tty4 c 4 4
mknod ram b 1 1
mknod mem c 1 1
mknod kmem c 1 2
mknod null c 1 3
mknod zero c 1 5

解决php服务器时区差异问题

 方法1、在php代码中增加如下命令:
<?php
date_default_timezone_set('PRC');//其他东八去时间表示均可
?>
方法2、配置php.ini文件,设置如下:
date.timezone=PRC; //中国:PRC如果没有此项在任意位置添加即可,添加后别忘记重启web服务器

东八区时区可用的有Asia/Chongqing、 Asia/Chungking、Asia/Hongkong、Asia/Shanghai、Asia/Taipei、PRC、Etc/GMT+8等

用linux下常用命令wget进行整站下载(递归下载至本地)

wget加上参数之后,即可成为相当强大的下载工具。

wget -r -p -np -k http://xxx.com/abc/

-r,  --recursive(递归)          specify recursive download.(指定递归下载)
-k,  --convert-links(转换链接)      make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)
-p,  --page-requisites(页面必需元素)    get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)
-np, --no-parent(不追溯至父级)          don't ascend to the parent directory.

另外断点续传用-nc参数 日志 用-o参数

安装denyhosts防止被扫口令

概述: 现在的互联网非常不安全,很多人没事就拿一些扫描机扫描ssh端口,然后试图连接ssh端口进 行暴力破解(穷举扫描),所以建议vps主机的空间,尽量设置复杂的ssh登录 密码!
 那么有什么办法设法阻止这些,就可以使用denyhosts这款软件了,DenyHosts是 Python语言写的一个程序,它会分析SSHD的日志文件,当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽 IP的功能。
DenyHosts官方网站为:http://denyhosts.sourceforge.net
目的: 阻止非授权的大量访问我们的ssh端口,造成负载过高
环境:vps主机 使 用型 centos5系统
安装:
一、使用原代码安装
1、下载原文件且解压
wget http://downloads.sourceforge.net/denyhosts/DenyHosts-2.6.tar.gz
tar zxvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
2、安装、配置和启动
python setup.py install
默认是安装到/usr/share/denyhosts/目录的,进入相应的目录修改配置文件
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
默认的设置已经可以适合centos系统环境,你们可以使用vi命令查看一下denyhosts.cfg和daemon-control,里面有详 细的解释
接着使用下面命令启动denyhosts程序
chown root daemon-control
chmod 700 daemon-control
./daemon-control start
如果要使DenyHosts每次重起后自动启动还需做如下设置:
cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts
chkconfig --add denyhosts
chkconfig --level 2345 denyhosts on
或者修改/etc/rc.local文件:
echo "/usr/share/denyhosts/daemon-control start" >> /etc/rc.local
DenyHosts配置文件denyhosts.cfg说明:
SECURE_LOG = /var/log/secure
 
#sshd日志文件,它是根据这个文件来判断的,不同的操作系统,文件名稍有不同。
 
HOSTS_DENY = /etc/hosts.deny
 
#控制用户登陆的文件
 
PURGE_DENY = 5m
 
#过多久后清除已经禁止的
 
BLOCK_SERVICE = sshd
 
#禁止的服务名
 
DENY_THRESHOLD_INVALID = 1
 
#允许无效用户失败的次数
 
DENY_THRESHOLD_VALID = 10
 
#允许普通用户登陆失败的次数
 
DENY_THRESHOLD_ROOT = 5
 
#允许root登陆失败的次数
 
HOSTNAME_LOOKUP=NO
 
#是否做域名反解
 
DAEMON_LOG = /var/log/denyhosts
 
#DenyHosts的日志文件
更多的说明请查看自带的README文本文件。
二、使用yum命令安装
1、下载和安装EPEL RPM
cd /tmp
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -Uhv epel-release-5-3.noarch.rpm
2、使用yum命令安装denyhosts
yum install denyhosts
主要配置文件/etc/denyhosts.cfg ,您可以看看,确保配置合适你的环境
3、添加系统启动自动运行
chkconfig --add denyhosts
chkconfig denyhosts on
如何你想把某个ip或者ip段放入白名单,可以使用下列命令,这样就可以避免把自己的ip阻止了
echo '208.85.151.*' >> /var/lib/denyhosts/allowed-hosts
这样208.85.151.*就可以不受到此程序的约束,请根据自己的环境进行设置
4、最后启动服务
service denyhosts start

Xen搭建pptpd服务

1.首先安装ppp服务
yum install -y ppp

2.下载pptpd最新版本的rpm包(比自己编译方便多了,删除也方便)
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-1.rhel5.1.i386.rpm

3.安装下载好的rpm包
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm

4.设置pptpd解析用的dns(把ms-dns前的#号去掉,#号代表注释,填上opendns的服务器地址)
vi /etc/ppp/options.pptpd
ms-dns 208.67.222.222
ms-dns 208.67.220.220

5.设置拨号时候用的:用户名、拨号方式、用户密码、来源ip地址(用户名和密码可以随便设置,拨号方式只能填pptpd,来源ip用*号代表不限制)
vi /etc/ppp/chap-secrets
myusername pptpd mypassword *

6.设置本地ip和远端ip(本地ip就是你等一下建立拨号后分配给你的,远端ip是分配给服务器的)
vi /etc/pptpd.conf
localip 192.168.9.1
remoteip 192.168.9.11-30

7.设置ip转发状态为生效,然后立即载入(和第9步的NAT转发有关)
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
/sbin/sysctl -p

8.启动pptpd服务,并且设置为开机启动
/sbin/service pptpd start
chkconfig pptpd on

9.启动iptables规则,设置NAT转发,然后保存(iptables本身就是开机启动的,不需要再用chkconfig iptables on了)
/sbin/service iptables start
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE
service iptables save

10.在windows下本地连接里建立vpn拨号,输入用户名和密码,就连接上了。

vps备份方法

 

 tar cf - 需要备份的目录路径 | zip -1 -q -P 你的密码 - - | ncftpput -c -V -u ftp用户名 -p ftp密码 ftp.example.com /ftp上文件名
if [ $? -eq 0 ]; then
 echo '备份成功'
fi

 

注意需要安装tar,zip和ncftp
这个备份方法有3个优点。。。
1. 不会生成本地文件,在备份大量文件时很有用,不会空间不足,而且IO占用低,对网站运行影响小。。
2. 备份的文件是压缩的,网站页面,数据库数据的压缩率还是很客观。
3. 备份的文件是加密的,主要你的密码足够复杂,放在ftp上很安全。。。

追记:
Zip格式所能支持的最大文件大小为4G!
过7za和rar,都对管道支持不好
所以对于有4G以上数据的情况下,就得用gzip或者bzip2压缩了
但这样就无法设置密码保护

Linux自动备份数据脚本

将脚本保存为文件,然后使用cron定时每日执行一次即可每日备份

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_USER=root #改成你的mysql用户名
MYSQL_PASS=HostLoc #改成你的mysql密码
FTP_USER=HostLoc #改成你的ftp用户名
FTP_PASS=HostLoc #改成你的ftp密码
FTP_IP=127.0.0.1 #改成你的ftp地址
FTP_backup=backup #ftp上存放备份文件的目录,这个要自己在ftp上面建
#你要修改的地方从这里结束

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
#删除本地3天前的数据
rm -rf /home/backup/Data_$(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
#上传到FTP空间,删除FTP空间5天前的数据
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
put $DataBakName
bye
END

Centos修改时区时间日期

修改时区
找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai
替换当前的/etc/localtime。
修改/etc/sysconfig/clock文件的内容为:
ZONE="Asia/Shanghai"
UTC=false
ARC=false

修改日期
时间设定成2008年9月10日的命令如下:
#date -s 09/10/2008
修改时间
将系统时间设定成上午10点25分0秒的命令如下。
#date -s 10:25:00
同步biso时间
同步BIOS时钟,强制把系统时间写入CMOS,命令如下:
#clock -w

lighttp+nginx前端获取真实IP方法

在使用nginx做反向代理时,lighttpd在后端默认是无法获得客户端真实IP,如果要做到后端获取真实IP,首先nginx需要重新编译,加入-with-http_realip_module作为参数,大概如下:
./configure -with-http_realip_module
nginx.conf的proxy_pass后加入如下指令:
Location ~ / {
proxy_pass   127.0.0.1:8080;
proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
}
注:Lighttpd只能通过X-Forwarded-For头获取realip,设置X-Real-IP是无效的。
Nginx配置好后,lighttpd仍然无法获得真实ip,必须在lighttpd中添加模块mod_extforward,并进行相应配置,步骤如下:
1、在server.modules中增加mod_extforward
2、指定forwarder ip:
extforward.forwarder = ("10.0.0.232" => "trust")
通过以上配置即可实现后端lighttpd获取真实客户端地址。

nginx反向攻略指南

nginx严格定义上来说是一个不折不扣的反向代理服务器,用来做前端非常不错!

 

aptitude install gcc g++ vim libncurses5-dev make libxml2-dev
 apt-get -y install subversion
 apt-get install libpcre3 libpcre3-dev libcurl4-openssl-dev
 wget -c  http://nginx.org/download/nginx-1.0.5.tar.gz 
tar -zxf nginx-1.0.5.tar.gz
 wget -c http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
 tar -zxf Nginx-accesskey-2.0.3.tar.gz
 svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only
 curdir=$(pwd)
 cd nginx-1.0.5 
./configure --user=nobody --group=nobody  --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid  --conf-path=/etc/nginx/nginx.conf   --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-pcre --with-http_sub_module --add-module=$curdir/substitutions4nginx-read-only --add-module=$curdir/nginx-accesskey-2.0.3   
 make 
make install 

 nginx安装过程就这样了,如果已经安装过nginx的可以搜索下nginx升级的方法来完成!

编译参数里面的--with-http_sub_module --add-module=$curdir/substitutions4nginx-read-only --add-module=$curdir/nginx-accesskey-2.0.3 保留其他自行斟酌更改,这里就不罗嗦了!

substitutions4ngin是用来做替换,支持正则式!

nginx-accesskey和本文关系不大,主要作用是用于封IP访问和防盗链之用!

然后是nginx.conf的配置,基本配置就不阐述了,下面贴一个反向hostloc论坛的实例

        server{
        listen 80;
        server_name bbs.kvm.la;  #绑定的域名
        root /var/www/html;  #网站目录(搭配lnamp的时候有用处!)
        access_log off;		#off 关闭日志
location / {
subs_filter 'www.hostloc.com' 'bbs.kvm.la' gi;  #substitutions4nginx替换 (使用方法参照官方)
subs_filter '全球主机交流论坛' '全球主机网' gi;  #substitutions4nginx替换 (使用方法参照官方)
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   Referer http://www.hostloc.com;		#强制定义Referer,程序验证判断会用到
proxy_set_header   Host www.hostloc.com;  				#定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host
proxy_pass http://174.127.189.179;						#指定目标,建议使用IP或者nginx自定义池
proxy_set_header Accept-Encoding "";					#清除编码
        }
}

更多详细Proxy设置参考nginx官方wiki说明:http://wiki.nginx.org/HttpProxyModule

反向实例http://bbs.kvm.la

 

 

 

Centos LAMP(二)

mkdir -p /tmp/src
cd /tmp/src
yum -y install patch make gcc gcc-c++ gcc-g77 flex bison file
yum -y install libtool libtool-libs autoconf kernel-devel
yum -y install libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel
yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel
yum -y install glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel
yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs
yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel
yum -y install openssl openssl-devel vim-minimal nano sendmail
yum -y install fonts-chinese gettext gettext-devel
yum -y install ncurses-devel
yum -y install gmp-devel pspell-devel
yum -y install unzip
yum install gcc gcc-c++ flex autoconf automake make m4 patch libtool openssl-devel file time mlocate sudo bind-utils -y
yum update -y
http://monkey.org/~provos/libevent-2.0.9-rc.tar.gz
tar -xzf libevent-2.0.9-rc.tar.gz
cd libevent-2.0.9-rc
./configure
make && make install
cd /tmp/src
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar -xzf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure
make && make install
cd /tmp/src
wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz
tar -xzf libmemcached-0.44.tar.gz
cd libmemcached-0.44
./configure
make && make install
cd /tmp/src
yum install mysql-server -y
rpm -ivh http://repo.webtatic.com/yum/centos/5/`uname -i`/webtatic-release-5-1.noarch.rpm
yum --enablerepo=webtatic install php-devel php php-mysql php-sockets php-process php-pecl-memcache php-pecl-gearman httpd php-mcrypt php-mbstring -y
cd /var/www/html
wget http://sourceforge.net/projects/phpmyadmin/files%2FphpMyAdmin%2F3.3.8.1%2FphpMyAdmin-3.3.8.1-all-languages.tar.gz/download
tar -xzf phpMyAdmin-3.3.8.1-all-languages.tar.gz
mv phpMyAdmin-3.3.8.1-all-languages phpmyadmin
cd /root

CentOS yum安装LAMP环境

本文适用于所有的vps,测试环境为NordicVPS 256M XEN
非LNMP,非一键安装包

yum -y update
yum -y install gcc gcc-c++ autoconf make automake libtool libevent libevent-devel
yum -y install ncurses ncurses-devel gd gd-devel freetype freetype-devel fontconfig
fontconfig-devel libjpeg libjpeg-devel zlib zlib-devel pcre pcre-devel
yum -y install libmcrypt mhash gmp gmp-devel
yum -y install mysql mysql-server mysql-devel
yum -y install httpd httpd-devel
yum -y install php*
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum install -y php-eaccelerator
#启动apache
/etc/init.d/httpd restart
#启动mysql
/etc/init.d/mysqld restart
chkconfig httpd on
chkconfig mysqld on
#生成phpinfo文件
cat>>/var/www/html/info.php< phpinfo();
?>
EOF

现在可以通过http://ip/info.php查看LAMP信息了
附1:mysql配置文件所在位置:/etc/my.cnf
附2:apache配置文件目录所在位置:/etc/httpd/
附3:php配置文件所在位置:/etc/php.ini

原文出自tony1999之手