服务器被挂马或被黑的朋友应该知道,黑客入侵web服务器的第一目标是往服务器上上传一个webshell,有了webshell黑客就可以干更多的事情,网站被挂马后很多人会束手无策,无从查起,其实并不复杂,这里我将以php环境为例讲几个小技巧,希望对大家有帮助。

先讲一下思路,如果服务器上被上传了webshell那么我们肯定能够查到蛛丝马迹,比如php文件的时间,如果我们可以查找最后一次网站代码更新以后的所有php文件,方法如下:

假设最后更新是10天前我们可以查找10天内生成的可以php文件:
Tags: ,
mysql中一个表的一个时间列是int类型,现在想修改这个字段的值,打算可读日期时间格式转成int,然后修改那个值。

这个转换函数就是UNIX_TIMESTAMP,将可读的时间转换成int类型,具体用法:

update xxx_table set xxx_time=UNIX_TIMESTAMP('2006-11-13 13:24:22') where ......

同时介绍一个另一个转换函数:FROM_UNIXTIME,将将时间戳转成常用时间格式

linux下常用分析日志命令 不指定

jed , 2012-2-10 11:52 , 服务器技术 , 评论(0) , 阅读(3560) , Via 本站原创
grep是一个很强大的命令。这里我们主要来讲使用grep命令来分析网站日志的方法和技巧。

1、合并网站日志

使用ls查看下待合并的日志

PHP curl使用示例 不指定

jed , 2012-2-9 00:38 , 代码编程 , 评论(0) , 阅读(2853) , Via 本站原创
首先.php 编程不会curl就是坑爹呢/所以, 这个必须会.
通过几个简单的例子说明问题,以后有需求,再研究.
1.获取页面源码.

<?php
$url = "http://www.baidu.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);

var_dump($result);
?>

如果不设置CURLOPT_RETURNTRANSFER的话,html会自动返回输出,通过这一选项,可以把输出保存到变量中去.
Tags: ,

iptables应用汇总 不指定

jed , 2012-2-9 00:34 , 服务器技术 , 评论(0) , 阅读(2348) , Via 本站原创
本文仅对iptables的使用做一些总结,如果您对原理感兴趣,请参阅其它文档,谢谢!

1. 匹配方式

   内建匹配方式:

   1.1 匹配网络接口 -i/-o,如 -i eth0 -o eth1
   1.2 匹配协议 -p,如 -p tcp、-p udp、-p icmp、-p all
   1.3 匹配地址 -s/-d,如 -s 192.168.1.188 -d 202.96.134.133、-s 192.168.1.0/24、-d www.google.cn (名称实际上会域名解析出地址)
   1.4 匹配端口 --sport/--dport,如 --sport 1024、--dport 21:25(最多匹配两个)
Tags: ,
我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效最关键的一点是,在server的设置里面添加这一行:


listen 80 default;


后面的default参数表示这个是默认虚拟主机。
Tags:

网站排障分析常用的命令 不指定

jed , 2012-1-15 01:21 , 服务器技术 , 评论(0) , 阅读(2873) , Via 本站原创
整理一些常用分析网站的小命令方便大家排障,内容均来源于网络。
系统连接状态篇:
1.查看TCP连接状态

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c


2.查找请求数请20个IP(常用于查找攻来源):

查看 php-cgi 进程数 不指定

jed , 2012-1-14 10:22 , 服务器技术 , 评论(0) , 阅读(2908) , Via 本站原创
通过命令查看服务器上一共开了多少的 php-cgi 进程

ps -fe |grep "php"|grep -v "grep"|wc -l


查看已经有多少个php-cgi进程用来处理tcp请求

netstat -anop |grep "php"|grep -v "grep"|wc -l
Tags: ,

防止SYN洪水攻击的脚本 不指定

jed , 2011-11-23 07:02 , 服务器技术 , 评论(0) , 阅读(3547) , Via 本站原创

#! /bin/sh
# 防止SYN_RECV攻击的脚本
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# 设置某个ip需要被列入黑名单的时间,单位是分钟
TIME_ZONE=30
DATE_ZONE=30
SYN_critical=500
DATE=$(date +%Y%m%d)
HOUR=$(date +%H)
MINITE=$(date +%M)
DATE_AGO=$(date -d "$DATE_ZONE days ago" +%Y%m%d)
DATE_1D_AGO=$(date -d "1 days ago" +%Y%m%d)
TIME_AGO=$(date -d "$TIME_ZONE min ago" +%H%M)
# 正常日志
LOG=/home/tools/syn_flood/syn.log
# 30分钟前的ip记录
LOG_ago=/home/tools/syn_flood/syn.log.ago
# 30分钟以内的ip记录
LOG_current=/home/tools/syn_flood/syn.log.current
#设置轮转日志的大小范围,单位k
LIMIT=16384
export PATH TIME_ZONE DATE_ZONE SYN_critical DATE HOUR MINITE DATE_AGO DATE_1D_AGO TIME_AGO
# 将proc文件系统的文件放入tmp
cat /proc/net/tcp6 /proc/net/tcp 2>/dev/null > /tmp/syn_recv
# 取到黑名单列表
awk '{print $2,$3,$4}' /tmp/syn_recv | awk '
BEGIN { # set fs
        FS = "[ ]*|:" ; }
# 只处理第五列是SYN_RECV的行
( $5 ~ /03/ ){
# get ipv4addr from file /proc/net/tcp
if (length($1) == 8)
{
  rem_addr_ip4 =  strtonum("0x"substr($3,1,2)) ;
  rem_addr_ip3 =  strtonum("0x"substr($3,3,2)) ;
  rem_addr_ip2 =  strtonum("0x"substr($3,5,2)) ;
  rem_addr_ip1 =  strtonum("0x"substr($3,7,2)) ;
}
else
# get ipv6addr from file /proc/net/tcp6
{
  rem_addr_ip4 =  strtonum("0x"substr($3,25,2)) ;
  rem_addr_ip3 =  strtonum("0x"substr($3,27,2)) ;
  rem_addr_ip2 =  strtonum("0x"substr($3,29,2)) ;
  rem_addr_ip1 =  strtonum("0x"substr($3,31,2)) ;
}
printf("%d.%d.%d.%d\n",rem_addr_ip1,rem_addr_ip2,rem_addr_ip3,rem_addr_ip4);
}' | uniq -c | grep -v '192.168.'  | awk  'BEGIN{
SYN_critical =  ENVIRON["SYN_critical"];
DATE = ENVIRON["DATE"];
HOUR = ENVIRON["HOUR"];
MINITE = ENVIRON["MINITE"];
}
( $1 >= SYN_critical ){ printf("[ %d %d%d ] %s %d\n",DATE,HOUR,MINITE,$2,$1) }'  >> $LOG
# 得到旧的ip列表
if [ $HOUR = "00" ] && [ $MINITE -le 30 ]
then
export DATE=$DATE_1D_AGO
fi
awk  'BEGIN{
DATE = ENVIRON["DATE"];
time_ago = ENVIRON["TIME_AGO"];
}
( $2 == DATE && $3 < time_ago ){ print $5 }' $LOG | uniq > $LOG_ago

# 得到30分钟内的ip列表
awk  'BEGIN{
DATE = ENVIRON["DATE"];
time_ago = ENVIRON["TIME_AGO"];
}
( $2 == DATE && $3 > time_ago ){ print $5 }' $LOG | uniq > $LOG_current
NUM_LOG_ago=$(wc -l $LOG_ago | awk '{print $1}' )
NUM_LOG_current=$(wc -l $LOG_current | awk '{print $1}' )
# 看iptables是否运行
IPTAB_STATUS=$(service iptables status | grep -c 'Firewall is stopped.')
# 如果30分钟以前有ip被列入黑名单,则删除掉
if [ $NUM_LOG_ago -ge 1 ]
then
  if [ $IPTAB_STATUS -eq 0 ]
   then
  
   for IP in $(cat $LOG_ago)
    do
      # 确认此ip是否在当前iptables列表中,在则删除该ip
      NUM_ip=$(grep -c $IP /etc/sysconfig/iptables)
      if [ $NUM_ip -ge 1 ]
       then
       iptables -D INPUT -s $IP  -i eth0 -j DROP
       service iptables save
      fi
    done
  fi
fi
# 处理30分钟内的ip列表,如果不在iptables里,则判断iptables的状态,并加入黑名单
if [ $NUM_LOG_current -ge 1 ]
then
# 看iptables是否打开
if [ $IPTAB_STATUS -eq 1 ]
  then
  service iptables start
fi
# 把ip加进去
for IP in $(cat $LOG_current)
  do
   # 确认此ip是否在当前iptables列表中,不在则加进去
    NUM_ip=$(grep -c $IP /etc/sysconfig/iptables)
    if [ $NUM_ip -eq 0 ]
     then
     iptables -A INPUT -s $IP  -i eth0 -j DROP
     service iptables save
    fi
  done
fi

# 如果iptables列表为空,判断其状态,如果是start ,则stop它
if [ $IPTAB_STATUS -eq 0 ]
  then
  # 判断iptables列表是否为空
  NUM=$(iptables -L -n | wc -l)
  if [ $NUM -eq 8 ]
   then
   service iptables stop
  fi
fi
# 按大小轮转日志,注意,日志轮转都放在晚上1点,这样节省脚本每次运行的if判断开销
################################## 日志轮转  #######################################
#if [ $HOUR == "01" ]
# then
#  size=$(ls -l -k $LOG | cut -d " " -f 6)
#
#  echo "$LOG size is $size, limit is $LIMIT"
#
#  if [ $size -ge $LIMIT ]
#
#    then
#
#    echo "rolling log file"
#    awk  'BEGIN{
#    DATE = ENVIRON["DATE"];
#    time_ago = ENVIRON["TIME_AGO"];
#    }
#
#     ( $1 == DATE && $3 > time_ago ){ print }' $LOG > /tmp/syn_log_tmp
#    cp $LOG $LOG.$DATE
#    mv -f /tmp/syn_log_tmp $LOG
#
#    else
#
#    echo "not big enough"
#
#  fi
#
#  # 按日期轮转日志
#  # 如果30天前有日志,说明是该到轮转的时候了
#  DATE_NUM=$(grep "$DATE_AGO" $LOG | head | wc -l | awk '{print $1}')
#  if [ $DATE_NUM -ge 1 ]
#   then
#    awk  'BEGIN{
#    DATE = ENVIRON["DATE"];
#    time_ago = ENVIRON["TIME_AGO"];
#    }
#
#     ( $1 == DATE && $3 > time_ago ){ print }' $LOG > /tmp/syn_log_tmp
#    cp $LOG $LOG.$DATE
#    mv -f /tmp/syn_log_tmp $LOG
#
#  fi
#
#fi
################################## 日志轮转  #######################################

RedHat AS4如何升级 不指定

jed , 2011-10-21 14:03 , 服务器技术 , 评论(0) , 阅读(2804) , Via 本站原创
众所周知,RedHat AS4需要付费升级,现在介绍一种第三方升级方法
第一步:下载第三方软件
#wget http://apt.sw.be/packages/apt/apt-0.5.15lor ... _64.rpm   (注意,不同的版本不一样)
第二步:下载rpm的密钥
#wget http-://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
第三步:安装第三方软件apt-get
#rpm -Uvh ./pt-0.5.15cnc6-4.2.el4.rf.i386.rpm
第四步:导入rpm密钥
#rpm --import RPM-GPG-KEY.dag.txt
第五步:编辑文件,让apt-get知道去哪里找升级包和密钥
#vi /etc/apt/sources.list.d/dag.list
添加下面一行:
#rpm http://apt.sw.be/ redhat/el4/en/i386 dag
保存退出
第六步:升级、安装
更新数据库
#apt-get update
真正的升级
#apt-get upgrade
Tags: ,
分页: 14/70 第一页 上页 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]