自由的生活_软路由论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: peterchen

DIY抗DDOS的防火墙,(安装调试日记,经常更新)请高手指点。。

[复制链接]
发表于 2007-3-3 21:32:06 | 显示全部楼层
LZ的精神让人佩服,支持你
routeros
发表于 2007-3-15 07:21:07 | 显示全部楼层
楼主 现在搞到什么样了啊?
routeros
发表于 2007-4-3 12:50:04 | 显示全部楼层
编译内核handbook上有啊
routeros
发表于 2007-4-9 18:45:53 | 显示全部楼层
加油呀 好好研究!! 再把英语搞定了!可以做UNIX工程师!
routeros
 楼主| 发表于 2007-4-14 12:02:23 | 显示全部楼层
基于freebsd下 PF synproxy的DDOS防范方案

[摘要]
本文讲述了基于freebsd5.3 下PF synproxy的DDOS防范方案,对于中小型企业抵挡每秒3万个包的攻击不失为一种可用方案。

[环境]
防火墙:台式机P4 2G,512内存。 FREEBSD5.3
WEB服务器:笔记本PIII 700 256m, suse linux enterprise server 9
攻击机器:笔记本:PIII 700 256M, WIN2000 SERVER
攻击工具:HGOD v0.4
测试机:笔记本:PIII 700

拓朴:
=====
防火墙:xl0 外网卡:172.16.0.1; sis0 内网卡:192.168.100.1
WEB服务器:eth0 192.168.100.2
攻击机:172.16.0.194
测试机:172.16.0.195

一、编译内核
#cd /usr/src/sys/i386/conf
#cp GENERIC billy-pf
#vi billy-pf
添加:
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
#config billy-pf
#cd ../compile/billy-pf
#make depend;make make install
二、编辑启动脚本/etc/rc.conf
pf_enable="YES" # Enable PF (load module if required)
pf_rules="/etc/pf.conf" # rules definition file for pf
pf_flags="" # additional flags for pfctl startup
pflog_enable="YES" # start pflogd(8)
pflog_logfile="/var/log/pflog" # where pflogd should store the logfile
pflog_flags="" # additional flags for pflogd startup

gateway_enable="YES"

三、修改/etc/pf.conf
ext_if="xl0"
int_if="sis0"
internal_net="192.168.100.1/24"
external_addr="172.16.0.1"
web_server="192.168.100.2"
nat on $ext_if from $internal_net to any -> ($ext_if)
#($ext_if) 括起来的原因:如果你使用DHCP还配置外部地址,不括起来会存在问题。如果你分配的IP地址改变了,NAT仍然会使用旧的IP地址转换出去的数据包。这会导致对外的连接停止工作。为解决这个问题,应该给接口名称加上括号,告诉PF自动更新转换地址。
rdr on $ext_if proto tcp from any to $external_addr/32 port 80 -> $web_server port 80
#这一行重定向了TCP端口80(web服务器)流量到内部网络地址$web_server。因此,即使$web_server在网关后面的内部网络,外部仍然能够访问它。
pass in on $ext_if proto tcp from any to $web_server port 80 flags S/SA synproxy state
#连到外部地址的80端口,作SYNPROXY,以防DDOS攻击

四、修改192.168.100.2的网关IP为192.168.100.1

五、修改/etc/sysctl.conf
net.inet.ip.forwarding=1
使防火墙进行IP转发

重启

六、测试
攻击前先访问http://172.16.0.1/index.html,正常打开了WEB服务器上的主页
攻击:
往防火墙的外部IP172.16.0.1的80端口发动DDOS攻击。
hgod 172.16.0.1 80
观察WEB服务器192.168.100.2上的80端口连接情况和收到的包数。
统计防火墙上受攻击强度(包/每秒)。
speed.sh
#!/bin/sh
oldval=0
curval=0
while true
do
curval=`netstat -i | grep xl0 | head -1 | awk '{print $5}'
if [ $oldval = 0 ]; then
old=$curval
else
echo `date`" pkg inbound rate on xl0: $(($curval-$oldval)) pps"
oldval=$curval
fi
sleep 1
done
`


七、测试结果

DDOS攻击下,防火墙接收到的包速率为:2.6万-2.8万个包每秒
在PF的保护下,仅DDOS攻击时,WEB服务器没有收到一个包,说明防火墙全挡住了非法包。
去掉SYNPROXY的保护,即最后一条规则时,WEB服务器收到的包速成率与防火墙收到的包相当。访问WEB服务器时被拒绝。
在PF保护下,WEB_server的访问正常。

结论:
基于PF的防DDOS攻击对于每秒3万个包以下的攻击抵挡效果出色。对于更大流量的攻击,有待进一步测试。

进一步的工作:

结合ALTQ中RED算法的连接耖尽攻击防范。
尽管对于非法IP的拦截PF可以大显身手,但对于完整TCP连接的消耖攻击,同样非常重要,下一篇将讲述如何利用RED(Random Early Detection)算法来适当保护合法用户。利用二八原则来区分用户的合法性。在表面上区分不了连接的合法性时,只能作适当的牺牲,牺牲突然前来地访问的用户。

作为保护服务器的不停机运行的第三把利剑,还可结合负载均衡来增强WEB服务器的高可用性
routeros
 楼主| 发表于 2007-4-14 12:02:52 | 显示全部楼层
找到一片资料,,本贴,处于某些原因,俺准备重新启动
routeros
 楼主| 发表于 2007-4-15 20:53:40 | 显示全部楼层
非常,高兴+兴奋的一天,俺经过高人指点,终于把BSD的内核编译过了,网桥也通了,IPFW也起来了,现在准备做规则了
routeros
 楼主| 发表于 2007-4-16 03:25:43 | 显示全部楼层
BSD# cat rc.conf

# -- sysinstall generated deltas -- # Mon Apr 16 01:02:30 2007
# Created: Mon Apr 16 01:02:30 2007
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
defaultrouter="192.168.0.1"
hostname="BSD.FW"
ifconfig_xl0="inet 192.168.0.2  netmask 255.255.0.0"
kern_securelevel_enable="NO"
sshd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
firewall_type="OPEN"
firewall_logging="YES"
routeros
 楼主| 发表于 2007-4-16 03:27:35 | 显示全部楼层
options         BRIDGE
options         IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=30
options         DUMMYNET

是俺在内核编译里面加的东西
routeros
 楼主| 发表于 2007-4-16 03:28:44 | 显示全部楼层
BSD# cat /etc/sysctl.conf
# $FreeBSD: src/etc/sysctl.conf,v 1.8 2003/03/13 18:43:50 mux Exp $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl'' to adjust kernel values.  ``man 5 sysctl.conf'' for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
net.inet.ip.forwarding=1
net.link.ether.bridge=1
net.link.ether.bridge_cfg=rl0,rl1
net.link.ether.bridge_ipfw=1
routeros
 楼主| 发表于 2007-4-16 03:30:32 | 显示全部楼层
ipfw pipe 1 config bw 500Kbit/s
ipfw add 1100 pipe 1 ip from 192.168.1.0/24 to any
ipfw pipe 2 config bw 500Kbit/s
ipfw add 1200 pipe 2 ip from 192.168.2.0/24 to any
ipfw pipe 3 config bw 500Kbit/s
ipfw add 1300 pipe 3 ip from 192.168.3.0/24 to any
ipfw pipe 4 config bw 500Kbit/s
ipfw add 1400 pipe 4 ip from 192.168.4.0/24 to any
ipfw pipe 5 config bw 500Kbit/s
ipfw add 1500 pipe 5 ip from 192.168.5.0/24 to any
ipfw pipe 6 config bw 500Kbit/s
ipfw add 1600 pipe 6 ip from 192.168.6.0/24 to any
ipfw pipei 7 config bw 500Kbit/s
ipfw add 1700 pipe 7 ip from 192.168.7.0/24 to any
ipfw pipei 8 config bw 500Kbit/s
ipfw add 1800 pipe 8 ip from 192.168.8.0/24 to any
ipfw pipe 9 config bw 500Kbit/s
ipfw add 1900 pipe 9 ip from 192.168.9.0/24 to any
routeros
 楼主| 发表于 2007-4-16 03:30:57 | 显示全部楼层
routeros
 楼主| 发表于 2007-4-16 03:44:06 | 显示全部楼层
add 400 deny icmp from any to any
过滤ICMP
routeros
 楼主| 发表于 2007-4-16 09:21:54 | 显示全部楼层
突然发现IPFW只能做三层以下的操作,,,俺感觉被忽悠了
routeros
 楼主| 发表于 2007-4-18 18:41:49 | 显示全部楼层
我改变策略了,开始使用PF了,不使用IPFW了,
默认情况下PF不支持桥,就只有用IF桥了
routeros
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由论坛 ( 渝ICP备15001194号-1,渝公网安备 50011602500124号 )

GMT+8, 2021-4-23 06:28 , Processed in 0.086472 second(s), 15 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表