旌旗博客

2008-07-23

自动阻止SYN、DoS攻击

Filed under: I.T. — 标签:, — rocky @ 13:51

除了告警敦促人工处理SYN、DoS攻击,可以将嫌疑犯先抓起来再说:

netstat -na | grep :80 |awk '{print $5}'|awk -F '::ffff:' '{print $2}' | grep ':' | awk -F: '{print $1}' | sort | uniq -c | sort -r | awk -F' ' '{if ($1 > 50) print $2}' | sed 's/^.*$/iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s & --dport 80 --syn -j REJECT/' | sh

该脚本基于的基础是认为从一个IP过来的连接数过大(超过50个),则该IP可能在进行攻击。实际上可能误杀掉一些只能通过代理服务器访问的大公司用户,或者某些有点贪心的网络爬虫。可以在脚本中加入一些白名单以防止误杀,如:

netstat -na | grep :80 |awk '{print $5}'|awk -F '::ffff:' '{print $2}' | grep ':' | awk -F: '{print $1}' | sort | uniq -c | sort -r | awk -F' ' '{if ($1 > 50) print $2}' | grep -v xxx.xxx.xxx.xxx | sed 's/^.*$/iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s & --dport 80 --syn -j REJECT/' | sh


2008-05-16

自动短信提醒进行服务器状态告警

Filed under: I.T. — 标签:, — rocky @ 16:22

定时启动的脚本:

df | grep “/var” | awk ‘{ print $5 }’ | awk -F”%” ‘{print $1}’ | awk ‘{ if ($1 > 90){print “alert.sh \”139xxxxxxxx\” \”insufficient disk space on /var. “,$1,”\””} }’ | csh
ps -ef | grep httpd | grep -v cronolog | grep -v grep | grep -v root | wc -l | awk ‘{ if ($1 > 3000){print “alert.sh \”139xxxxxxxx\” \”apache process “, $1,”\””} }’ | csh
echo ‘show processlist’ | mysql | grep -v Id | grep -v processlist | wc -l | awk ‘{ if ($1 > 3000){print “alert.sh \”139xxxxxxxx\” \”mysql process “, $1,”\””} }’ | csh

alert.sh 脚本:

echo $2
echo -e “From:monitor<>\nReply-to:support <support.labs@etentec.com>\nSubject:$2\n\n$2\n.” | /usr/sbin/sendmail $1@139.com

一个监视服务器状态的shell脚本

Filed under: I.T. — 标签:, — rocky @ 14:03

#! /bin/bash

for1
do
    clear
    date
    echo -n ‘httpd process:             ‘;ps -ef | grep httpd | grep -v cronolog | grep -v grep | grep -v root | wc -l
    echo -n ‘http connection:   ‘;netstat -an | grep :80 | grep ESTABLISHED | wc -l
    echo -n ‘mysql process:             ‘;echo ‘show processlist’ | mysql | grep -v Id | grep -v processlist | wc -l
    echo -n ‘mysql connection:  ‘;netstat -an | grep 3306 | grep ESTABLISHED | wc -l
    echo ‘tcp connection stats:’;netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print ”   “,a, S[a]}’
    echo ‘sorted ESTABLISHED connections: ‘;netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -r +0n
    echo ‘sorted SYN connections: ‘; netstat -na|grep SYN|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -r +0n
    sleep 5
done

  1. ; ; []

2007-01-12

使用rsync同步

Filed under: I.T. — 标签:, — rocky @ 11:43

做网站开发经常碰到的问题是代码更新的问题。
直接用ssh登到服务器上操作总会遇到网络太慢的情况,于是传统的做法是在本地改,然后ftp上传。可是如果改的文件数量比较多,而且比较分散,就比较头疼了,费时费力而且很容易出错。如果你感到痛苦,就用rsync吧。
简单使用方法:

  • 1. 在服务器上配置文件:
    /home/kingtch/rsyncd.conf

    uid = rocky
    gid = rocky
    use chroot = no
    max connections = 1
    syslog facility = local5
    pid file = /var/run/rsyncd.pid

    [www]
    path=/home/kingtch/www
    comment = kingtch WWW repository (requires authentication)
    #auth users = rocky
    #secrets file = /home/kingtch/rsyncd.secrets
    hosts allow=221.217.166.54

    启动服务:rsync –daemon -v –port=10025 –config=/home/kingtch/rsyncd.conf

  • 2. 本地更新:
    从服务上更新本地代码:rsync -ruv –compress –links –progress –exclude=image rsync://www.kingtch.com:10025/www ./kingtch_www/

安全问题一直是r系列程序被世人诟病之焦点,所以需要注意:
1. 正确配置好配置文件中的uid、gid,使得服务器运行用户不可能越雷池。
2. 连接数作限制
3. 作IP限制
4. 目前rsync本身并不支持ssl,因此可能被窃取传输数据。但rsync可基于ssh等进行传输,所以问题不大。
5. 如果不麻烦的话,用完了就把服务器上的rsync服务关掉。

其实也有一些如FTPSync等软件可以实现基于FTP协议进行同步,相信是鼠标爱好者的同行们的可选项之一,只是其不支持加密的FTP,而且作者好像n年没更新了。

2007-01-08

常用shell命令

Filed under: I.T. — 标签: — rocky @ 12:56

1. basename
    strip directory and suffix from filenames
    myscript:
        echo “Usage: `basename $0` [option]”
        exit 1

2. dirname
     strip non-directory suffix from file name

3. fuser
    identify processes using files or sockets
    e.g.:  输出监听tcp 80端口的进程
             for name in `fuser 80/tcp 2>/dev/null` ; do echo $name; done | awk ‘{print “ps -fp “, $1}’ | sh| grep -v UID

4. strings, hexdump
    查看二进制文件内容。

5. awk
    pattern scanning and processing language

6. sed
    stream editor for filtering and transforming text

Powered by WordPress