免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1471 | 回复: 0
打印 上一主题 下一主题

OpenBSD + pf + pftop 防火墙配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-31 16:12 |只看该作者 |倒序浏览
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
donepf.conf 以及 pf2.conf 的脚本还在改进中!
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/64726/showart_512863.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP