免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wangbin
打印 上一主题 下一主题

有没有人有兴趣和我探讨一下基于pf的web服务器安全? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-05-15 21:36 |只看该作者

论坛徽章:
0
12 [报告]
发表于 2007-05-15 21:41 |只看该作者
FreeBSD5.4 + pf + oops实现透明代理
  文章正文 网友评论(0) 发表评论 推荐给好友 文章下载 打印
硬-盘 < linuxmine # gmail.com >

本文基本实现oops+pf实现透明代理,oops其他认证,带宽管理都没用上,希望能够抛砖引玉,肯请用过oops的大侠指教!谢谢。

安装过程
1, cd /usr/ports/www/oops/
make config 选中
[X] DB4 Berkeley DB v4 storage
make install clean
2, 修改/usr/local/etc/oops/oops.cfg
3,cd /usr/local/sbin/
oops -z -c /usr/local/etc/oops/oops.cfg (创建其磁盘高速缓存)
4,vi /etc/rc.conf加入oops_enable="yes"
5,reboot

配置
more /etc/rc.conf
defaultrouter="218.75.x.x"
gateway_enable="YES"
hostname="firewall.test.com"
ifconfig_fxp0="inet 218.75.y.y netmask 255.255.255.128"
ifconfig_fxp1="inet 192.168.0.1 netmask 255.255.255.192"
ifconfig_fxp1_alias0="inet 192.168.1.62 netmask 255.255.255.192"
ifconfig_fxp1_alias1="inet 192.168.2.62 netmask 255.255.255.192"
ifconfig_fxp1_alias2="inet 192.168.3.62 netmask 255.255.255.192"
sshd_enable="YES"
pf_enable="YES"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
sendmail_enable="NONE"
ntpdate_enable="YES" # Run ntpdate to sync time on boot (or NO).
ntpdate_flags="207.46.232.189" # time.windows.com
oops_enable="yes"

more /etc/pf.conf
#firewall by tds 20050601

#macros
wanif="fxp0"
lanif="fxp1"
oops="127.0.0.1"
tcpsrv="{22,113}"
lan0="{192.168.0.0/26}"
lan1="{192.168.2.0/26}"
lan3="{192.168.3.0/26}"
lan4="{192.168.1.0/26}"
ftpsrv="192.168.0.8"
bt1="192.168.0.38"
bt2="192.168.0.39"
noroute="{127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16}"

#options
set block-policy return
set loginterface $wanif
set optimization aggressive

#scrub
scrub in all

#nat and rdr
nat on $wanif from $lan0 to any -> $wanif
nat on $wa nif from $lan1 to any -> $wanif
nat on $wanif from $lan3 to any -> $wanif
nat on $wanif from $lan4 to any -> $wanif

rdr on $lanif proto tcp from any to any port 80 -> $oops port 3128
rdr on $wanif proto tcp from any to any port 21 -> $ftpsrv
rdr on $wanif proto tcp from any to any port 18888 -> $bt2
rdr on $wanif proto tcp from any to any port 4662 -> $bt2
rdr on $wanif proto udp from any to any port 4672 -> $bt2
rdr on $wanif proto tcp from any to any port 3389 -> $bt2
rdr on $wanif proto tcp from any to any port 3388 -> $bt1 port 3389

#filter rules
block all
block drop in quick on $wanif from $noroute
block drop out quick on $wanif from any to $noroute
block drop out quick on $wanif from any to 202.103.67.53
pass quick on lo0 all
pass in quick on $lanif from $lanif:network to any keep state
pass out quick on $lanif from any to $lanif:network keep state

pass in quick on $wanif proto tcp from an y to $wanif port $tcpsrv flags S/SA keep state
pass in quick on $wanif proto tcp from any to $ftpsrv port 21 flags S/SA keep state
pass in quick on $wanif proto tcp from any to $bt2 port {3389,4662,18888} flags S/SA keep state
pass in quick on $wanif proto tcp from any to $bt1 port 3389 flags S/SA keep state
pass in quick on $wanif proto udp from any to $bt2 port 4672 keep state
pass out on $wanif proto tcp all flags S/SA keep state
pass out on $wanif proto {udp,icmp} all keep state&n bsp;

more /usr/local/etc/oops/oops.cfg

只记录修改部分

nameserver 127.0.0.1
nameserver 220.168.208.3
nameserver 220.168.208.6

http_port 3128
#icp_port 3130
userid oops

logfile /var/log/oops/oops.log { 3 1m } unbuffered
accesslog /var/log/oops/access.log { 3 1m } unbuffered
pidfile /var/run/oops/oops.pid
statistics /var/run/oops/oops_statfile
mem_max 128m
lo_mark 80m
disk-low-free 3
disk-ok-free 5

force_http11
force_completion 85
maxresident 1m
insert_x_forwarded_for no
insert_via no
always_check_freshness

group mynet {
##
# You can describe group ip adresses here, or using src_ip acl's
# with networks_acl directive.
# networks_acl always have higher preference (checked first) and
# are checked in the order of appearance.
# If host wil not fall in any networks_acl - we check in networks.
# networks are ordered by masklen - longest masks(most specific networks)
# are checked first.
##
networks 192.168/16 127/8 ;
redir_mods transparent;(添加此行实现透明代理)
# networks_acl LOCAL_NETWORKS !BAD_NETWORKS ;
badports [0:79],110,138,139,513,[6000:6010] ;
miss allow;

module&nb sp;transparent { (实现透明代理)
# myport can have next form:
# myport [{hostname|ip_addr}:]port ...
myport 3128
# broken_browsers MSIE
}

storage {
path /usr/local/oops/storages/oops_storage ;
# Size of the storage. Can be in bytes or 'auto'. Auto is
# usefull for pre-created storages or disk slices.
# NOTE: 'size auto' won't work for Linux on disk slices.
# To use large ( > 2G ) files run configure with --enable-large-files

size 200m ; (磁盘高速缓存)

参考文章
高性能、多线程的高速Web代理服务器--OOPS!

论坛徽章:
0
13 [报告]
发表于 2007-06-13 16:00 |只看该作者
FREEBSD+PF 在6.2上的架设
现网站和外挂经常带arp和ddos攻击,本来用ros做网吧路由器顶不住ddos,只能换FB6.2+pf,前几天用FB6.1+PF,人多时出watchdog timeout,老大说用FB6.2可能不会出了,那就装起测测看,下面是安装步骤,操作一个写一个,

cd /usr/src/sys/i386/conf
cp GERENIC PFOK
ee FFOK

修改并加入下面东东

ident       PFOK
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
options ALTQ_NOPCC
options PANIC_REBOOT_WAIT_TIME=0
options DEVICE_POLLING
options HZ=2000
options IPSTEALTH
# options RANDOM_IP_ID
options TCP_DROP_SYNFIN

config PFOK
cd /usr/src/sys/i386/compile/PFOK
make depend
make
make install
reboot

ee /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet.tcp.drop_synfin=1
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=65536
#net.inet.udp.sendspace=65535
net.inet.udp.maxdgram=65535
net.local.stream.sendspace=65535
net.inet.tcp.rfc1323=1
#net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1
kern.ipc.maxsockbuf=2097152
kern.maxfiles=65536
kern.maxfilesperproc=32768
kern.polling.enable=1
kern.polling.burst_max=500
kern.ipc.somaxconn=2048
kern.ipc.nmbclusters=32768
net.inet.tcp.delayed_ack=0
net.inet.icmp.icmplim=100
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

ee /boot/loader.conf
autobootdelay="2"

ee /etc/rc.conf
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
clear_tmp_enable="YES"
update_motd="NO"
tcp_drop_synfin="YES"
#icmp_drop_redirect="YES"
#icmp_log_redirect="YES"
#log_in_vain="YES"
#accounting_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
#pflog_enable="YES"
#pflog_logfile="/var/log/pflog"

这里我就加了句pf_enable="YES"

uname -a
FreeBSD pf.com 6.2-RC1 FreeBSD 6.2-RC1 #0: Thu Nov 23 04:20:46 CST 2006   sshpf@pf.com:/usr/src/sys/i386/compile/PFOK i386


我的pf.conf

#pfctl -e -F all -f /etc/pf.conf

#只重新load过滤规则
#pfctl -F rules -Rf /etc/pf.conf

#pfctl -f /etc/pf.conf # 重新加载pf.conf 设定档
#pfctl -nf /etc/pf.conf # 确认语法有无符合,但不载入
#pfctl -Nf /etc/pf.conf # 只加载 NAT 的设定档
#pfctl -Rf /etc/pf.conf # 只加载防火墙的过滤设定档

#pfctl -sn # 显示现阶段 NAT 的规则
#pfctl -sr # 显示现阶段过滤的规则
#pfctl -ss # 显示现阶段封包运作状态
#pfctl -si # 显示现阶段过滤封包的统计资料
#pfctl -sa # 显示现阶段所有统计的数据

ext_if="rl0"
#edu_if=""
int_if="fxp0"

ext_addr="192.168.1.51"

int_net="172.16.0.0/16"
ext_net = "192.168.0.0/16"
loop = "{lo0, 127.0.0.1}"
OpenPorts = "{21, 22, 80, 88, 4899}"
InsideManagerIPs = "{172.16.0.100}"
InsiteManagerOpenPorts = "{21, 22, 23, 24, 25, 80, 4899}"
priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12}"   # 定義符合 RFC 1918 私有IP 部份
tcp_services = "{ 22, 88, 4899, 123 }"   # 定義 port 22, 113 服務
icmp_types = "echoreq"   # 定義 tcmp 回應狀態     


## down inactive connection quickly
set optimization aggressive

# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all

nat on $ext_if from $int_net to any -> ($ext_if)
#nat on $ext_if from $int_net to $ext_net -> ($ext_if)

#web server map
#rdr pass on $ext_if proto tcp from any to $ext_if port {www,3389,4899,7745} -> $web_server


#----------------------------以下防DOS攻击--------------------------------
#每个IP最大可以有120个非并发的连接(为局域网用户访问本站考虑)
#每个IP最大连接建立的速率小于每秒8个
#单个IP的最大持续连接数 30
#违反以上规则,把这个ip添加到<abusive_hosts>表中
table <abusive_hosts> persist       #维持一个持续的表
block in quick from <abusive_hosts>   #阻止表中的ip
pass in on $int_if inet proto tcp from any to $int_if flags S/SA keep state \
(source-track rule,max-src-conn 100, max-src-conn-rate 15/3,max-src-states 30,overload <abusive_hosts> flush, src.track 1)

LSassVirusPort = "{445, 135, 139, 593, 512, 5554, 9996, 9995}"
block quick on $int_if inet proto tcp from any to any port $LSassVirusPort

BitTorrentPort= "{ 512, 2049, 4662, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, \
6890, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, 8890, 6969, 10700, 21881}"
block quick on $int_if inet proto tcp from any to any port $BitTorrentPort
block quick on $int_if inet proto tcp from any port $BitTorrentPort to any
block quick on $ext_if inet proto tcp from any to any port $BitTorrentPort
block quick on $ext_if inet proto tcp from any port $BitTorrentPort to any

#gameClientPorts = "{4002, 2000, 3838, 4410, 4210, 4230, 5005, 4290, 10010 }"
#GameDenyClients ="{192.168.128.0/24, 192.168.132.0/24}"
#GameServerIps = "{204.251.15.167, 61.152.93.145}"
#block quick on $int_if inet proto tcp from $GameDenyClients to any port $gameClientPorts
#block quick on $ext_if from $GameServerIps to $GameDenyClients
#block quick on $int_if from $GameDenyClients to $GameServerIps

denyserverips = "{202.108.193.21}"
block quick on $int_if from any to $denyserverips

#LSassVirusIp ="{192.168.1.194}"
#block quick on $int_if from $LSassVirusIp to any

论坛徽章:
0
14 [报告]
发表于 2007-06-13 16:02 |只看该作者
pf 带宽控制 例子
wan_ip="61.183.X.X"
lan_ip="X.X.0.0/16"

lan_5_ip="X.X.5.0/24"
lan_6_ip="X.X.6.0/24"
lan_7_ip="X.X.7.0/24"
lan_8_ip="X.X.8.0/24"
lan_9_ip="X.X.9.0/24"
lan_10_ip="X.X.10.0/24"
lan_11_ip="X.X.11.0/24"
lan_15_ip="X.X.15.0/24"

#ip_deny="{X.X.6.56,X.X.7.119}"
ip_deny="{X.X.7.119}"

wan_if="em0"
lan_if="em1"

# Normalization:
# reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all

# Queueing: rule-based bandwidth control.

# Outgoing bandwidth limit
altq on $wan_if cbq bandwidth 20Mb queue { std_out }
queue std_out bandwidth 10Mb cbq(default)


altq on $lan_if bandwidth 100Mb cbq queue {lan_5,lan_6,lan_7,lan_8,lan_9,lan_10,lan_11}
queue lan_5 bandwidth 2Mb
queue lan_6 bandwidth 80Mb cbq(default)
queue lan_7 bandwidth 2Mb
queue lan_8 bandwidth 2Mb
queue lan_9 bandwidth 2Mb
queue lan_10 bandwidth 2Mb
queue lan_11 bandwidth 4Mb


#------------NAT---------------------
nat on $wan_if from $lan_ip to any -> ($wan_if)

#------Filter Rules------------------
#block in quick proto icmp from any to $wan_if
#block in from any to any
#block out from any to any

block in proto tcp from $ip_deny to any
block in log quick on $lan_if inet proto tcp from $ip_deny to any
block drop in quick proto {tcp,udp} from any to any port {135,139,445,1433,1434}
#block drop in quick proto {tcp,udp} from X.X.5.164 to any port {3128}
#block drop in quick proto {tcp,udp} from any to X.X.5.164 port {3128}
pass out on $wan_if proto tcp from any to any flags S/SA modulate state
pass in on $lan_if proto tcp from any to any flags S/SA keep state (source-track, max-src-states 120)

pass out on $wan_if proto tcp from $lan_ip to any queue std_out

pass out quick on $lan_if from any to $lan_5_ip queue lan_5
pass out quick on $lan_if from any to $lan_6_ip queue lan_6
pass out quick on $lan_if from any to $lan_7_ip queue lan_7
pass out quick on $lan_if from any to $lan_8_ip queue lan_8
pass out quick on $lan_if from any to $lan_9_ip queue lan_9
pass out quick on $lan_if from any to $lan_10_ip queue lan_10
pass out quick on $lan_if from any to $lan_11_ip queue lan_11

pass out on $wan_if proto { udp, icmp } from any to any keep state
pass out on $wan_if proto { udp, icmp } from any to any keep state

论坛徽章:
0
15 [报告]
发表于 2007-06-13 16:03 |只看该作者

论坛徽章:
0
16 [报告]
发表于 2007-06-13 17:25 |只看该作者
配置网络界面

网络界面实际就是网卡的驱动程序,操作系统使用它与网络硬件打交道,而配置网络界面的操作应该通过命令 ifconfig来完成。这个命令能够完成对网络界面的IP层的设置,也能够完成对网络界面的一些网络访问层的设置。大多数情况下,对IP的设置最为基本,而对网络界面的网络访问层的设置则很少需要。

1) 网络界面基本设置
理解了 IP协议之后,使用ifconfig设置网络界面相当简单。

# ifconfig xl0 inet 192.168.1.64 netmask 255.255.255.0 up
其中 xl0标识一个3c905B的网络界面,inet为inetnet的简写,标识IP协议,FreeBSD也支持其他几种协议,如ipx、atalk等。设置本网络界面地址为192.168.1.64,网络掩码为255.255.255.0,up表示将这个网络界面运行起来,通常这个参数缺省已经蕴涵在配置命令本身了,而不需要单独指定。

一般情况下不需要这么复杂的写法,简单的使用下面命令将使用缺省网络掩码配置这个网络。

# ifconfig xl0 192.168.1.64
使用 down参数可以简单停止网络界面的工作:

# ifconfig xl0 down
此外,还可以在一个网络界面上捆绑上多个 IP地址,第二个及其之后的IP地址可以使用alias参数指定,如果不再想使用这个地址,可以使用delete命令删除这个ip别名,而-alias、remove与delete具备同样的含义。

# ifconfig xl0 alias 192.168.2.100

# ifconfig xl0 delete 192.168.2.100

设置完毕之后,可以查看设置的结果:

# ifconfig xl0 inet

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

inet 192.168.2.100 netmask 0xffffff00 broadcast 192.168.2.255

配置界面完成之后,就可以将结果保存在 rc.conf之中,以后启动就可以自动设置网络了。这需要设置相应的rc.conf变量ifconfig_xl0,表示xl0的ifconfig配置,这个变量的值就是需要执行的内容,而ifconfig_xl0_alias0为xl0的第一个别名配置等等:

ifconfig_xl0= “ 192.168.1.64 ”

ifconfig_xl0_alias0= “ 192.168.1.100 netmask 255.255.255.255 ”

ifconfig_xl0_alias1= “ 192.168.2.100 netmask 255.255.255.0 ”

需要注意的是,对一个网络界面每添加一个 IP地址,就意味着这个地址对应的网络可以通过这个网络界面来访问,这就是要添加一个路由数据。例如,下面的操作需要增加两次对192.168.1.0网络的路由数据,因此会失败。

# ifconfig xl0 192.168.1.64

# ifconfig xl0 alias 192.168.1.100

ifconfig: ioctl (SIOCAIFADDR): File exists

# ifconfig xl0 inet

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255

然而, IP地址仍然绑定在网络界面上了,上面的操作如果是针对两个不同的网络界面设置同一个网络地址,显然是错误的,因为路由是冲突的,系统要与192.168.1.0网络通信的时候,无法选择正确的网络界面。但是,由于上面是对一个网络界面设置的别名,因此网络通信仍然可以正确进行。但是为了避免路由错误,应该指定不同的子网掩码,告诉系统这是不同的网络。

# ifconfig xl0 192.168.1.64

# ifconfig xl0 alias 192.168.1.100 netmask 255.255.255.255

很多人有这样的想法的来源是希望能完成网络流量的负载均衡,就是希望通过两个或更多的网络界面来访问同一个网络。例如,将两个网卡连接在同一个网络上,希望能增加网络性能。基本上,如果仅仅使用地址配置的方法,这种目的并不能达到,除非在特定情况下才可能,例如,虽然是同一个物理网络,但使用两套完全独立的 IP网络地址,此时可以让一个网络界面对应一个地址进行操作。这个时候,系统可能会报告一些ARP错误,因为这两个网络界面连接到一个网络上,能接收到同样的ARP数据广播。

达到提高网络界面性能的基本方法是将多个网卡绑定成一个虚拟网络界面, FreeBSD的Netgraph网络系统中的one2many能支持这种作法,能用于FreeBSD到FreeBSD的网络连接。如果是FreeBSD到其他系统的连接,则需要交换机的支持,例如CISCO的交换机支持Fast Ethernet Channel,能将多个网络端口绑在一起,FreeBSD就能通过NetGraph的FEC内核模块来与交换机连接。设置这些虚拟网络界面需要系统的高级特性。

无论哪种情况下,将两个物理网络界面绑在一个物理网络上,系统内核都会报告 arp错误,因为其他计算机的arp应答,第一次会在一个网络界面获得,接下来有可能会在其他网络界面得到,这种情况系统会认为是网络配置错误,事实上这也的确是一种非常规的网络配置,大部分情况下应该是一种网络配置错误。要屏蔽这种错误,可以屏蔽某一个网络界面的arp功能,使其不再回应arp协议。

# ifconfig xl1 -arp
然而,由于 ARP协议涉及通信的具体细节,不支持ARP协议的网络界面,如果要达到通信的目的,就需要手工制定其他计算机的MAC地址。因此,屏蔽 arp的这种方式只用于特殊情况下。

2) 网络访问层设置
要了解网络界面的细节,仍然可以通过 ifconfig来完成。

# ifconfig xl0

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

ether 00:90:27:4e:f6:67

media: autoselect

supported media: autoselect 100baseTX <full-duplex> 100baseTX 10baseT/UTP <full-duplex> 10baseT/UTP
使用 ifconfig还可以报告网卡的MAC地址和介质类型,并列出所有支持的介质类型,当然,这也可以通过ifconfig进行改变。

通常情况下,网卡的 MAC地址是由网卡的制造商从国际组织申请得到,并固化到网卡内部,不需要改变。然而,一些主板上带的网卡其初始地址并不正确,就需要更改,否则只要同一个网络上的两个计算机具有同样的MAC地址,这两个计算机就不能正常通信。而ifconfig使用lladdr来表示MAC地址。

# ifconfig xl0 lladdr 00:90:27:4e:f6:67

当然,指定 MAC地址就要选择合适的MAC地址,不能与同一个网络中的其他计算机的MAC地址冲突是最基本的一点,MAC地址也具备广播地址和组播地址的类别,选择地址应避开这些地址。原则上,可以从一个已有的MAC地址,稍作更改就可以了。

不仅 FreeBSD,很多操作系统都可以随意改动网卡的MAC地址,这使得一些利用MAC地址进行安全性的设置,或者用MAC地址标识计算机的努力,其实都是无用的和无意义的。

同样,使用 ifconfig也可以来改变连接网卡的介质类型。通常,现代交换机具备100M与10M自适应的能力,也能够支持全双工和半双工的连接模式。FreeBSD系统能支持这些介质选择能力。

# ifconfig xl0 media autoselect
自动选择模式是最常用的模式,让网卡通过和交换机的协商,自己确定网络模式。

# ifconfig xl0 media 10baseT/UTP

# ifconfig xl0 media 100baseTX

还可以选择不同的双工模式。

# ifconfig xl0 media 10baseT/UTP mediaopt full-duplex

# ifconfig xl0 media 100baseTX mediaopt half-duplex

此外,一些网卡同时具备两种不同的物理连接方式,这种网卡通常是很老 10M网卡,具备细缆10base2的连接方式,和粗缆10base5的连接方式,这两种连接方式只能选择一种,有些网卡具备10base2和10baseT的连接方式等等。然而,这和介质类型不同的是,这涉及物理连接方式。FreeBSD使用link参数来进行这种设置。

# ifconfig ed0 link2
上面的命令将使一种 3C503的网卡使用其本身的粗缆接口AUI,细缆接口BNC不再生效。

# ifconfig ed0 -link2
上面指令屏蔽 AUI,恢复缺省接口BNC。显然,link参数需要网卡驱动支持的。

现代以太网中,快速以太网已经是标准配置,此外,以太网还具备一些扩展能力。 VLAN支持就是一个例子,交换机能设置端口支持的VLAN序号,以满足网络灵活性的设置。FreeBSD的VLAN支持使得FreeBSD系统能通过一个网络接口连接多个VLAN,这样FreeBSD能作为服务器同时服务多个VLAN,因此具有很大的意义。

VLAN支持需要内核的额外支持,需要重新定制内核。然后,确定VLAN的标记序号与VLAN相连的物理端口,最后就可以配置vlan网络界面了。

# ifconfig vlan0 create

# ifconfig vlan0 vlan 12 vlandev xl0

# ifconfig vlan0 10.0.0.100

注: FreeBSD 4.4之前不需要执行create语句,vlan0等设备在系统启动的时候就自动创建了,这种方法的缺点是不灵活,vlan设备的数量不能动态的改变。

而取消 VLAN需要执行:

# ifconfig vlan0 -vlandev xl0
进一步,在支持 vlan设备自动创建的版本中,也可以撤销创建的vlan设备。

# ifconfig vlan0 destroy
需要注意的是,有些网卡硬件对 VLAN的支持不好,因为VLAN要在以太网数据帧上添加额外的数据,那么VLAN数据帧要更大一些,一些网卡对大帧的支持不好,那么在使用VLAN的时候就需要注意,也许会出现丢包的现象。

3) 查看网络界面
ifconfig的另一个重要的作用是用来观察当前网络的所有界面的配置状态。使用-l参数可以列出所有的网络界面名字。

# ifconfig -l

xl0 lp0 tun0 sl0 ppp0 lo0

然而,有些网络界面是处于 UP状态,用于网络传输,而另外的网络界面则处于DOWN状态,处于备用状态。这可以使用-u和-d参数标识不同的网络界面。

# ifconfig -l -u

xl0 lo0

# ifconfig -l -d

lp0 tun0 sl0 ppp0

要获得完全信息,可以使用 -a参数将列出所有界面的配置信息。更改配置之后最好使用这个命令查看效果。

# ifconfig -a

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

ether 00:90:27:4e:f6:67

media: autoselect

supported media: autoselect 100baseTX <full-duplex> 100baseTX 10baseT/UTP <full-duplex> 10baseT/UTP

lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500

tun0: flags=8050<POINTOPOINT,MULTICAST> mtu 1500

sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552

ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

inet 127.0.0.1 netmask 0xff000000

上图显示的信息包括各个网络界面,如以太网界面 xl0,并行口界面lp0,用于ppp拨号的tun0和ppp0界面,用于slip拨号的sl0界面等各个网络界面的设置数据。

这些信息中,对于 flags标志,我们还没有提及。flags用于标识该网络界面的一些特征,这是一个二进制数据,但ifconfig已经在括号中解释了对应的具体含义。例如UP表示up状态,BROADCAST表示该网络界面属于广播类型,与此相对的是POINTTOPOINT,对应点对点类型的界面。RUNNING标志当前是否有对该网络界面的请求,与UP标志不同,有对该网络界面的请求并不意味着该网络界面已经正常提供网络服务了,例如,当ppp程序占用了tun0,准备连接网络的时候,虽然还没有开始连接,但tun0已经被请求,就会被标记上RUNNING标记。

需要注意的是 SIMPLEX标记,虽然这里使用了SIMPLEX,但并不意味着这个网络连接是单工方式,这只是表明了网络界面的一些物理特征,网络界面并不能同时处理接收和发送。真正网络连接方式的双工或半双工的是由ifconfig的media选项决定的。MULTICAST表示该网络界面支持组播。LINK2标识该物理界面使用link2的网络物理连接方式,有些情况下,可以用来表示系统的某种处理方式,例如ppp0用LINK2来表示使用压缩来传输数据。

而 mtu表示该网络界面传输的一个数据包的大小限制,原则上可传输的数据包越大,网络性能就越好,但是在传输过程中发生硬件错误的可能性也越大。因此,每种物理连接方式都规定了大小限制,以避免出现数据错误,当然随着当前硬件技术的发展,可以允许传输更大的数据包了。虽然mtu与物理连接标准有关,但与IP数据包有一定关系,因为有些IP数据包不允许被分割,如果超长,又不允许分割,就会被系统丢弃。

正是因为可传输的数据包越大,网络性能就越好,那么 TCP/IP就尽量以最大的包来传输数据,否则,TCP/IP虽然允许数据包被分割,但分割之后必然得不到最合适的包大小,因此效率也不是最高。然而,网络是复杂的,因此就需要获得所经过的每一个网络的最大限制,这个过程称为路径mtu(path mtu)发现。

对于点对点的 PPP界面,ppp0或tun0,通常要求指定另一端的IP地址,如果没有另一端的IP地址,就不能正常设置网络,事实上PPP软件会自动完成这些设置,而不需手工执行ifconfig。

# ifconfig tun0 inet 10.10.1.42 10.10.1.29

当然,即使这样设置 tun0,网络也不会正常工作,因为tun0与具体的物理设备(如串口)的连接还没有完成。

论坛徽章:
0
17 [报告]
发表于 2007-07-19 14:22 |只看该作者
好文章

收藏~~~

论坛徽章:
0
18 [报告]
发表于 2007-09-07 17:18 |只看该作者
学习ing..........................................

论坛徽章:
0
19 [报告]
发表于 2007-10-08 12:29 |只看该作者
大家共同努力,继续优化!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP