Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42221
  • 博文数量: 13
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 08:56
文章分类

全部博文(13)

文章存档

2008年(13)

我的朋友
最近访客

分类: BSD

2008-03-31 16:12:13

OpenBSD + pf + pftop 防火墙配置

ping 一个ip发现反应时间大于100ms开始查最多并发连接数, 最大传输量的用户!
其中auto目录下的

run-10 为每10分执行一次,

run-30 为每30分执行一次,

run-120 为每2小时执行一次.  

pf.conf是默认(正常情况下执行的规则)

pf2.conf是在网速慢, 有用户大量下载时执行。

需要安装软件pftop


先安装 pftop
复制内容到剪贴板
代码:
#export PKG_PATH=ftp://ftp.freebsdchina.org/pub/OpenBSD/snapshots/packages/i386/



#pkg_add -v pftop-0.5.tgz
run-10
复制内容到剪贴板
代码:
#!/bin/sh

$CONFIG_PATH="/root/server"


# ping 一个设定的ip 取其最大的回显值

PING='ping -c 10 10.200.250.11 | awk '{print $7}' | grep ^time | cut -d"=" -f2 | cut -d"." -f1 |

sort | uniq | tail -n 1'

echo $PING



if [ $PING -gt 100 ]

then



# 输出当前所有在线用户并显示其连接数

pftop -ba | sed '1, 5d' | awk '{print $3}' |\

cut -d":" -f1 | grep ^192 | sort | uniq -c | sort > $CONFIG_PATH/log/conn_num.log


pftop -ba | sed '1, 5d' | awk '{print $3}' |\

cut -d":" -f1 | grep ^10 | sort | uniq -c | sort > $CONFIG_PATH/log/conn_server.log



# 提取连接数最多的前十名

tail -n 10 $CONFIG_PATH/log/conn_num.log | grep ^192 | awk '{print $2}' >

$CONFIG_PATH/log/conn_more.log



#抓取当前流量大于m 的ip

pftop -ab | awk '/M$/' | awk '{print $3}' | cut -d":" -f1 | grep ^192 |sort | uniq >

$CONFIG_PATH/log/conn_traff.log



# 提取既流量大连接数也大的ip

for NEW_IP in $(cat $CONFIG_PATH/log/conn_traff.log)
       do
     for OLD_IP in $(cat $CONFIG_PATH/log/conn_num.log)
          do
            if [ "X${NEW_IP}" != "X${OLD_IP}" ]
               then

                                echo $TWO_IP >> $CONFIG_PATH/log/conn_two.log
          fi
        done
    done



# 断开流量大的ip
       for KILL in $(cat $CONFIG_PATH/log/conn_two.log)
          do

                pfctl -k $KILL
done



# 清空 nat rules=filter tables queue

        pfctl -F nat

        pfctl -F rules

        pfctl -F Tables

        pfctl -F queue

        pfctl -f $CONFIG_PATH/pf2.conf

fi
run-120
复制内容到剪贴板
代码:
#!/bin/sh

$CONFIG_PATH="/root/server"


# ping 一个设定的ip 取其最大的回显值

PING='ping -c 10 10.200.250.11 | awk '{print $7}' | grep ^time | cut -d"=" -f2 | cut -d"." -f1 |

sort | uniq | tail -n 1'



echo $PING


if [ $PING -gt 100 ]

then



# 输出当前所有在线用户并显示其连接数

pftop -ba | sed '1, 5d' | awk '{print $3}' |\

cut -d":" -f1 | grep ^192 | sort | uniq -c | sort > $CONFIG_PATH/log/conn_num.log



pftop -ba | sed '1, 5d' | awk '{print $3}' |\

cut -d":" -f1 | grep ^10 | sort | uniq -c | sort > $CONFIG_PATH/log/conn_server.log



# 提取连接数最多的前十名

tail -n 10 $CONFIG_PATH/log/conn_num.log | grep ^192 | awk '{print $2}' >

$CONFIG_PATH/log/conn_more.log



#抓取当前流量大于m 的ip

pftop -ab | awk '/M$/' | awk '{print $3}' | cut -d":" -f1 | grep ^192 |sort | uniq >

$CONFIG_PATH/log/conn_traff.log



# 提取既流量大连接数也大的ip

for NEW_IP in $(cat $CONFIG_PATH/log/conn_traff.log)
        do
           for OLD_IP in $(cat $CONFIG_PATH/log/conn_num.log)
              do

if [ "X${NEW_IP}" != "X${OLD_IP}" ]
      then

                                echo $TWO_IP >> $CONFIG_PATH/log/conn_two.log

                        fi
     done

        done


# 断开流量大的ip

      for KILL in $(cat $CONFIG_PATH/log/conn_two.log)
       do
   pfctl -k $KILL

        done



# 清空 nat rules=filter tables queue

        pfctl -F nat

        pfctl -F rules

        pfctl -F Tables

        pfctl -F queue

        pfctl -f $CONFIG_PATH/pf2.conf

else



        rm -rf $CONFIG_PATH/log/conn_two.log >/dev/null 2>&1



        pfctl -F nat

        pfctl -F rules

        pfctl -F Tables

        pfctl -f $CONFIG_PATH/pf.conf

fi
/etc/inetd.conf
复制内容到剪贴板
代码:
#ftp            stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -US

#ftp            stream  tcp6    nowait  root    /usr/libexec/ftpd       ftpd -US

127.0.0.1:8021  stream  tcp     nowait  root    /usr/libexec/ftp-proxy  ftp-proxy -n -t 180

另外, 我对crontab执行的效果不好, 另写脚本加到rc.local后, 执行达到我要求:
run-10min
复制内容到剪贴板
代码:
#!/bin/sh

while :

do

        date

        sleep 600

        /root/server/run-10

done

auto-2hours
复制内容到剪贴板
代码:
#!/bin/sh

while :

do

        date

        sleep 7200

        /root/server/run-120

done
pf.conf 以及 pf2.conf 的脚本还在改进中!
阅读(1041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~