`
cooldesigner
  • 浏览: 68551 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

FreeBSD IPFilter防火墙的安装与设置

阅读更多
其实设置FreeBSD防火墙是一件比较简单的事情。结合自己的实践经验和一些网上的资料,我来向大家介绍一下具体设置的方法。本文包括:1.最大化安全设置2.设置网卡3.设置Kernel4.打开包转发、防火墙和NAT5.配置NAT/防火墙后面的机器6.熟悉IPFilter7.QoS8.参考文献

1. 最大化安全设置
锁定一台用作NAT防火墙的电脑的第一步是停止所有安装时不需要的服务。编辑/etc/rc.conf并确认inetd、portmap、sendmail这些守护者都被禁止了。除了设置
inetd_enable="NO"
portmap_enable="NO"
sendmail_enable="NO"

之外,为了以防万一,最好将/etc/inetd.conf中关于这些服务的设置注释掉。如果确实需要远程登陆,那么应该安装ssh并且家上

sshd_enable="YES"

到/etc/rc.conf。一旦你禁用了所有不需要的服务,你就可以到http://www.unixcircle.com/memberonly/portscan.php3去进行一次远程扫描,以便确认设置正确。注意别在防火墙里面进行这样的扫描,否则你得到的结果将是你的防火墙是否安全!如果没有条件出国的话,也可以用NetScanTools这样的工具,不过一定要确认你扫描的时候用的是当前子网外面的电脑。用CVSup获得一份最新的稳定版(-STABLE)FreeBSD源码也非常重要,因为和Windows一样,FreeBSD也需要经常打补丁。

2. 设置网卡
为了便于说明,我们假定你的计算机是用两块3com 509B网卡,并且它们对应的FreeBSD驱动的名字分别是ep0和ep1。当然,如果你不太喜欢3com,或者无论如何总之和我们用的不太一样的话,就把下面的对应ep0、ep1换成你需要的名字。第一块网卡将根据rfc1918使用不可路由的私有地址,而第二块则可以制定一个静态或动态的DHCP地址。
为了方便你的设置,这里引用一下那些不可路由的私有地址:
10.0.0.1 - 10.255.255.254 掩码(netmask) 255.0.0.0
172.16.0.1 - 172.31.255.254 掩码 255.240.0.0
192.168.0.1 - 192.168.255.254 掩码 255.255.0.0

在这里我们选用192.168.0.1(很多人都这么做),在/etc/rc.conf中设置

ifconfig_ep0="inet 192.168.1.1 netmask 255.255.255.0"

这样第一块网卡就能用了。如果第二块网卡打算是用静态IP,则在/etc/rc.conf中这样配置:

ifconfig_ep1="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

这里的IP和掩码(xxx部分)根据你的实际情况设置就可以了。相反,使用动态IP(DHCP):

ifconfig_ep1="DHCP"

并且要根据需要设置/etc/dhclient.conf

一定要确认你在两块网卡上都使用了正确的IP和掩码,而一旦确认了内部网的IP范围就不要改变。第一块网卡的IP地址将是内部网的默认网关地址。

3. 设置kernel
想编译新的kernel,首先需要的是源代码(通常这是你拿到的发行版本的一部分)。如果你没有安装它,那么就运行/stand/sysinstall来装上。然后执行下面的命令
# cd /sys/i386/conf
# cp GENERIC firewall

当然,我这么命名是因为那台机器叫firewall,这样便于记忆,当然你也可以使用其它的名字。编辑kernel配置文件:# vi firewall 在options小节中加入以下几行:

# 添加IPFilter、记录支持
options IPFILTER
options IPFILTER_LOG
# 默认禁止所有的包传递
options IPFILTER_DEFAULT_BLOCK
# 使用RANDOM_IP_ID阻止外界了解网关生成包的情况
options RANDOM_IP_ID

去掉所有和你的硬件无关的硬件相关options。一个比较有效的确定方法是观察dmesg输出。查看和kernel文件处于同一目录的LINT可以帮助你了解全部可用设置。修改完配置文件,重新制作、安装kernel:

# cd /usr/src
# make buildkernel KERNCONF=firewall

(kernel编译的输出结果)

# make installkernel KERNCONF=firewall
# reboot

这种编译方法将保留原来的kernel为kernel.old,这样如果你做错了什么,就有机会通过boot:出现时输入kernel.old来恢复。

4. 打开包转发、dhcp、防火墙和NAT功能
打开包转发功能:在/etc/sysctl.conf中加入
net.inet.ip.forwarding=1

加强转发安全性:
在/etc/sysctl.conf中作相应修改可以实现:

防御基于rfc1948的序号攻击,方法是使用随机的初始序号

net.inet.tcp.strict_rfc1948=1

验证进入的包的目的地址正确性

net.inet.ip.check_interface=1

增强性能:
net.inet.tcp.recvspace=65535
net.inet.tcp.sendspace=65535

过滤规则:
如果不知道应该禁止什么包的通过,则需要打开它们。在/etc/ipf.rules中加入:

pass in all
pass out all

NAT(网络地址翻译)规则:
为了让NAT后面的NAT和ftp可以正常工作,在/etc/ipnat.rules中加入:

# 在“主动”模式中使用ipfilter ftp proxy
map ep1 192.168.1.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
# 将所有来自192.168.1.0/24的tcp和udp连接映射到外部IP
# 并且将端口号改为40000到60000的不冲突的数(如果你监听OICQ端口会发现很多人这样做)
map ep1 192.168.1.0/24 -> 0.0.0.0/32 portmap tcp/udp 40000:60000

# 把其他IP包映射到外部IP地址
map ep1 192.168.1.0/24 -> 0.0.0.0/32

注意,所有的proxy行应该放到通用portmap行之前,因为只有首先匹配的行起作用。

透明代理:
如果在内部网有一个地址为192.168.1.2的邮件服务器,则需要使用rdr来进行透明代理。由于NAT在rdr之前生效,因此需要在/etc/ipf.rules中加入一个pass in规则,这样才能把翻译过的包发到邮件服务器上来。

/etc/ipnat.conf:

# 将进入的smtp数据重定向到NAT里面的邮件服务器上
rdr ep1 0.0.0.0/0 port 25 -> 192.168.1.2 port 25

/etc/ipf.rules:

# 允许包括碎片和SYN标志的经过翻译的包进入。
pass in quick on ep1 proto tcp from any to any port = 25 flags S keep state keep frags

均衡负载:
为了在NAT后面的6台镜象web服务器实现均衡负载,使用round-robin语句。IPFilter将把负载均衡分配给这些服务器,甚至在某台down掉的情况下。

rdr ep1 0.0.0.0/0 port 80 -> 192.168.1.1,192.168.1.2 port 80 tcp round-robin
rdr ep1 0.0.0.0/0 port 80 -> 192.168.1.3,192.168.1.4 port 80 tcp round-robin
rdr ep1 0.0.0.0/0 port 80 -> 192.168.1.5,192.168.1.6 port 80 tcp round-robin

现在,在/etc/rc.conf中打开NAT/防火墙功能:

ipfilter_enable="YES" #打开防火墙
ipfilter_flags="" #IPFilter作为kernel,而不是作为模块
ipnat_enable="YES" #NAT
ipmon_enable="YES" #记录防火墙的信息
ipmon_flags="-Dsn"

-D: ipmon作为守护者程序(daemon)加载
-n: 可能的情况下将IP地址和端口号映射成主机名和服务名
-s: 将包的信息送到syslogd而不是保存成文件

5. 配置NAT后面的机器
所有内部网的机器必须进行配置,用刚才那台FreeBSD网关的内部IP作为默认网关。假设我们的网关地址是192.168.1.254,则:
FreeBSD:在 /etc/rc.conf 中加入 defaultrouter="192.168.1.254"
Linux Redhat:在 /etc/sysconfig/network 中加入 GATEWAY=192.168.1.254
NetBSD: echo "192.168.1.254" > /etc/mygate
OpenBSD: echo "192.168.1.254" > /etc/mygate
Solaris: echo "192.168.1.254" > /etc/defaultrouter
Win2k: 开始-设置->控制面板->网络与拨号连接->局域网->属性->Internet 协议 (TCP/IP)->默认网关->192.168.1.254

6. 熟悉IPFilter
一旦NAT/防火墙连入了Internet,就应该看看http://www.unixcircle.com/ipf的IPFILTER-HOWTO这篇文章,并且在/etc/ipf.rules加入一些禁止规则。某些比较有用的信息可以在www.ipfilter.org主页找到。每次修改/etc/ipf.rules或/etc/ipnat.rules之后,需要让他们生效。重新加载规则将断开所有已经存在的连接。
# /sbin/ipf -Fa -f /etc/ipf.rules
# /sbin/ipnat -CF -f /etc/ipnat.rules

查看防火墙的统计信息:

# /sbin/ipfstat -t

查看ipfilter的版本:

# /sbin/ipf -V

查看当前的映射/重定向设置:

# /sbin/ipnat -l

其它的课以查看ipftest(1), mkfilters(1), ipf(4), ipl(4), ipf(8), ipfstat(8), ipmon(8), ipnat(8)的说明。

7. QoS
限制带宽:
FreeBSD包括了dummynet带宽管理机制。dummynet可以阻止潜在的超速连接阻塞另一个慢速连接。man dummynet(4)可以得到更多的说明。由于dummynet和ipfw -- FreeBSD专用防火墙捆绑在一起,因此你需要在设置dummynet的同时加入3个ipfw设置到kernel中。
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET

并且重新编译kernel,重启。

在/etc/rc.conf中设置dummynet:

firewall_enable="YES"
firewall_script="/etc/rc.dummynet"
firewall_type="open"
firewall_logging="YES"

假设你拥有一条快速以太网出口,并且需要把它限制在普通以太网的速度:建立一个从192.168.1.4到任意目的地址的pipe 1:

# /sbin/ipfw add 100 pipe 1 ip from 192.168.1.4 to any

将管道限制在10Mbits/s:
# /sbin/ipfw pipe 1 config bw 10Mbit/s

可以建立不同的、针对不同速度、协议的管道。需要删掉所有的管道时,执行:

# /sbin/ipfw flush

需要自动设置管道,把他们加入/etc/rc.dummynet.
分享到:
评论

相关推荐

    freebsd防火墙

    freebsd搭建防火墙,代理

    ipfilter.sh

    freebsd ipfilter 防火墙基本规则

    ipfilter的防火墙HowTo(中文)

    IP Filter Based Firewalls HOWTO <br> xiaojl <zhiyouxjl@sina.com><br> Brendan Conoboy Erik Fichtner $FreeBSD: src/share/examples/ipfilter/ipf-howto.txt,v 1.1.2.1 2002/04/27 20:04:18 ...

    FreeBSD配置防火墙开启SSH服务的方法.docx

    FreeBSD配置防火墙开启SSH服务的方法 FreeBSD作業系統是一個免費的開源作業系統,具有高安全性和穩定性。為了保護作業系統的安全,FreeBSD提供了一個防火墙系統,稱為ipfw。ipfw是一個基于规则的防火墙,可以根據...

    FreeBSD 8.4安装指南

    本指南将详细阐述FreeBSD 8.4的安装过程,以及如何在安装完成后部署Panabit网络管理软件。 一、FreeBSD 8.4安装步骤 1. 获取安装媒介:首先,你需要下载或制作FreeBSD 8.4的安装媒介,通常可以是ISO镜像文件,然后...

    FreeBSD_6.2安装指南

    安装设置prozilla(port下载加速) Prozilla是一个port下载工具,可以提高ports的下载速度。安装方法类似cvsup,但需手动下载源码包,解压,编译并安装。 #### 4.4 使用portsnap更新ports `portsnap`是另一种...

    FreeBSD安装设置大全(中文版)

    **一、FreeBSD的下载与安装** 1. **选择版本**:FreeBSD有多个稳定版本,如12.x和13.x系列,要根据自己的硬件兼容性和需求选择合适的发行版。 2. **下载ISO镜像**:访问FreeBSD官网,选择对应版本的ISO镜像进行下载...

    FreeBSD 8.1详细安装教程无桌面环境版

    在安装 FreeBSD 之前,需要先进入 BIOS 设置,常见的键是 F2、F10、Del 或 Alt+S。请按提示键进入 BIOS 设置画面。 Step 2: 设置开机顺序 在 BIOS 设置中,需要找到设置开机顺序的选项,通常会列出一些设备让您...

    FreeBSD11下安装Apache24

    FreeBSD11下安装Apache24的详细过程

    How to Build a FreeBSD-STABLE firewall with IPFILTER.pdf

    构建过程不仅能够帮助您搭建一个出色的防火墙,还能让您更好地理解和比较FreeBSD/IPFILTER与其他防火墙解决方案(如Linux/IPTABLES或OpenBSD/PF)之间的优缺点。 #### 三、系统配置与安全增强 **1. 服务禁用与...

    FreeBSD邮件服务器安装

    根据给定文件的信息,本文将详细介绍如何在FreeBSD系统上安装和配置邮件服务器,包括Postfix、vm-pop3d、OpenWebMail以及反垃圾邮件和病毒扫描组件ClamAV与Amavis-new等。 ### 一、环境准备 文档中提到的操作系统...

    FreeBSD 8.0虚拟机安装向导

    ### FreeBSD 8.0 在 VMware 上的安装指南详解 #### 一、概述 本文将详细介绍如何在 VMware 虚拟机环境下安装 FreeBSD 8.0 操作系统。FreeBSD 是一款基于 BSD 的开源操作系统,以其稳定性、安全性及性能著称,在...

    FreeBSD11下安装MySQL数据库

    输入你之前设置的密码,如果能成功登录并看到MySQL的欢迎信息,那么恭喜你,MySQL已经在FreeBSD 11上成功安装了。 以上就是在FreeBSD 11.0环境下安装MySQL数据库的详细步骤。在实际操作中,可能会遇到各种问题,如...

    freebsd u盘安装 教程

    ### FreeBSD U盘安装教程知识点详解 #### 一、前言 FreeBSD是一款强大的类Unix操作系统,因其稳定性、安全性和性能优化而备受服务器管理和技术爱好者的青睐。随着版本更新和技术进步,FreeBSD支持从U盘安装已成为一...

    FreeBSD服务器安装步骤

    FreeBSD服务器安装步骤 在本文中,我们将指导您一步步安装 FreeBSD 服务器,从下载 FreeBSD 的 ISO 镜像文件到安装后的配置。FreeBSD 是一个免费的、自由的操作系统,具有许多非凡的特性,例如抢占式多任务、多用户...

    FreeBSD6.0系统安装和服务器配置手册

    FreeBSD6.0系统安装和服务器配置手册

    FreeBSD防火墙设定.pdf

    FreeBSD防火墙设定.pdf

Global site tag (gtag.js) - Google Analytics