icerocket.com
http://blogs.icerocket.com/search?q=tag%3A%E4%B8%8A%E6%B5%B7
去这个网址,搜“上海”,发现都是我们的帖子,是不是有些太多了?!
blogs.icerocket.com
回环转换 (Loopback )
当NAT的私网内部机器想通过公共地址来访问同一台局域网内的机器的时,NAT设备等价于做了两次NAT的事情,在包到达目标机器之前,先将私有地址转换为公网地址,然后再将公网地址转换回私有地址。我们把具有上叙转换功能的NAT设备叫做“回环转换”设备。
iptables基础
iptables基础(不错的文章,转来收藏着)
前言
防火墙在 校园内一直被认为陌晦高深,很少有系管师有勇气进行计划性的实验,基本上这份讲义也可以当成测试报告来阅读,是笔者秉持我不入地狱、谁入地狱的精神,冒着 生命危险,蛮干出来的成果,也藉此抛砖引玉,希望能带动国内能力高于笔者许多的众家高手,一起来进行有利于校园网络的公益研究!
壹、什么是防火墙
防火墙是一套能够在两个或两个以上的网络之间,明显区隔出实体线路联机的软硬件设备组合。被区隔开来的网络,可以透过封包转送技术来相互通讯,透过防火墙的安全管理机制,可以决定哪些数据可以流通,哪些资料无法流通,藉此达到网络安全保护的目的。
防火墙产品可以概略归类为硬件式防火墙和软件式防火墙,但实际上无论是硬件式或软件式防火墙,它们都需要使用硬件来作为联机介接,也需要使用软件来设定安全政策,严格说两者间的差别并不太大。我们只能从使用的硬件与操作系统来加以区分,硬件式防火墙是使用专有的硬件,而软件式防火墙则使用一般的计算机硬件,硬件式防火墙使用专有的操作系统,而软件式防火墙则使用一般的操作系统。
防火墙依照其运作方式来分类,可以区分为封包过滤式防火墙 (Packet Filter) 、应用层网关式防火墙 (Application-Level Gateway,也有人把它称为 Proxy 防火墙)、电路层网关式防火墙 (Circuit-Level Gateway)。其中被广为采用的是封包过滤式防火墙,本文要介绍的 iptables 防火墙就是属于这一种。
封包过滤是最早被实作出来的防火墙技 术,它是在 TCP/IP 四层架构下的 IP 层中运作。封包过滤器的功能主要是检查通过的每一个 IP 数据封包,如果其标头中所含的数据内容符合过 滤条件的设定就进行进一步的处理,主要的处理方式包含:放行(accept)、丢弃(drop)或拒绝(reject)。要进行封包过滤,防火墙必须要能分析通过封包的来源 IP 与目的地 IP,还必须能检查封包类型、来源埠号与目的埠号、封包流向、封包进入防火墙的网卡接口、TCP的联机状态等数据。
防火墙由于种种理由价格一直居高不下,对于贫穷的中小学来讲要采购一台防火墙,简直是不可能的任务,而由于 Linux 的风行,使用 Linux 来充作软件式防火墙,似乎是不错的解决之道,本文拟介绍以 Linux 上最新最强大的 iptables 防火墙软件,建置出适合学校使用的过滤规则,让缺钱的学校能有一套好用的防火墙来看守校园网络的大门。
贰、Linux 防火墙演变简史
Linux 最早出现的防火墙软件称为 ipfw,ipfw 能透过 IP 封包标头的分析,分辨出封包的来源 IP 与目的地 IP、封包类型、来源埠号与目的埠号、封包流向、封包进入防火墙的 网卡界面……等,并藉此分析结果来比对规则进行封包过滤,同时也支持 IP 伪装的功能,利用这个功能可以解决 IP 不足的问题,可惜这支程序 缺乏弹性设计,无法自行建立规则组合(ruleset)作更精简的设定,同时也缺乏网址转译功能,无法应付越来越复杂的网络环境,而逐渐被淘汰。
取 而代之的 ipchains,不但指令语法更容易理解,功能也较 ipfw 优越;ipchains 允许自订规则组合(ruleset),称之为 user-define chains,透过这种设计,我们可以将彼此相关的规则组合在一起,在需要的时候跳到该组规则进行过滤,有效将规则的数量大幅 缩减,以往 ipfw 仅能进行循序过滤,导致规则又臭又长的毛病,就不药而愈了。除了这个明显的好处以外,ipchains 并能结合本身的端口对应功 能和 redir 程序的封包转送机制,模拟出网址转译的能力,而满足 NAT 的完整需求,堪称为一套成熟的防火墙作品。
防火墙软件的出现,确实曾经让骇客们晚上睡不着觉,因为防火墙的阻隔能够有效让内部网络不设防的单机不致于暴露在外,也能有效降低服务器的能见度,减少被攻击的机会,骇客过去所用的网络探测技术因此受到严格的挑战,越来越多的攻击对象躲藏在防火墙后方,让骇客难以接近,因此必须针对新的情势,研究出新的探测技术,藉以规避防火墙的检查,达到发现目标并进而攻击入侵的目的,新的技术非常多,本文并不拟进一步讨论,请自行参考 CERT 组织的技术文件,网址是 www.cert.org ,想看中文请连到 www.cert.org.tw。
iptables 作为 ipchains 的新一代继承人,当然也针对骇客不断推陈出新的探测技术拟出一些因应之道,那就是对封包的联机状态,作出更详细的分析,例如:是 否为新联机或响应封包、是否为转向联机、联机是否失去响应,联机时间是否过长……等等,透过这样的分析能对一些可能被骇客利用的弱点加以阻隔(请 详见后文的说明),另外也开发出真正的封包改写能力,不需要透过其它程序的协助来仿真网址转译,除此之外,iptables 也获得系统核心的直接支持, 不需要像 ipchains 那样需要自行重新编译核心。
iptables 优越的性能使它取代了 ipchains,成为网络防火墙的主流,而 ipchains 并未被淘汰,目前 ipchains 已经转型成单机防火墙,在安装新版 Linux 时,会自动被安装启用,以保护单机上未被使用的通讯端口。
参、iptables 防火墙概论
iptables 防火墙的指令非常类似于 ipchains,使用过 ipchains 的人应该很容易上手,但是 iptables 的机制与 ipchains 有很大的不同,使用 ipchains 的概念来设定规则,将会使防火墙无 法正常运作。ipchains 跟 iptables 最大的不同在于对 INPUT、FORWARD 、OUTPUT 三个网络函式的定义不同,这三个 网络函式是 TCP/IP 驱动程序的一部分,结构如下图所示,是介于网卡驱动程序和应用程序的中间,Linux 核心预设会启用 INPUT、 OUTPUT 和 LOOPBACK,而 FORWARD 函式则必须自行启用,可以使用下面指令,或直接修改 /etc/sysconfig/network 组态档:
echo “1″ > /proc/sys/net/ipv4/ip_forward
左图为 ipchains 概念下的运作图
从上图可以知道 ipchains 如何处理封包的流动,分述如下:
• IP INPUT:所有封包都由 IP INPUT 函式负责处理,所以设定过滤规则时,几乎都是设定在 INPUT 规则炼上。
• IP FORWARD:目的 IP 非本机的 IP,这些封包需要进一步作转送处理,此函式用来处理 IP 伪装和 Port 转送。
• IP OUTPUT:所有流出的封包都由这个函式处理,通常不需设定任何规则。
iptables 除了上述三支函式以外,还使用两个新的函式:Prerouting、Postrouting。现在来比较一下 iptables 的运作模式(loopback 接口与上图相同,所以省略不画):
从上图可以知道 iptables 如何处理封包的流动,分述如下:
• IP INPUT:只有要到达本机的封包才会 由 INPUT 函式处理,所以会让来自内部网络的封包无条件放行,来自外部网络的封包则过滤是否为 响应封包,若是则放行。
• PREROUTING:需要转送处理的封包由此函式负责处理,此函式用来做目的地 IP 的转译动作(DNAT)。
• IP FORWARD:所有转送封包都在这里处理,这部分的过滤规则最复杂。
• POSTROUTING:转送封包送出之前,先透过这个函式进行来源 IP 的转译动作(SNAT)。
• IP OUTPUT:从本机送出去的封包由这个函式处理,通常会放行所有封包。
iptables 和 ipchains 都可以自行定义规则群组(rule-set),规则群组被称为规则炼(chains),前面所描述的函式,也都有相对应的规则炼 (INPUT、 FORWARD、OUTPUT、Prerouting、Postrouting),为了有别于自行定义的规则炼,这些规则炼我们就称为内 建规则炼,其运作流程仿真如下图:
从上面两张假想图,学员们不难了解 ipchains 为什么要叫做 chains,因为它是 将所有规则串接成一个序列逐一检查过滤,就像一条铁链一样一个环接一个环,在过滤过程中只要符合其中一条规则就会立即进行处理,如果处理动作是跳到某个规 则群组,则继续检查群组内之规则设定,但如果处理动作是 ACCEPT、REJECT、Drop、REDIRECT 或 MASQUERADE,则会中断 过滤程序,而不再继续检查后面的规则设定,在这样的结构之下,有时候规则顺序的对调会产生完全相反的结果,这一点在设定防火墙时不能不谨慎。
而 iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、Drop、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说, iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。
虽然 iptables 为了扩充防火墙功能,而必须采用比较复杂的过滤流程,但在实际应用时,同一规则炼下的规则设定还是有先后顺序的关系,因此在设定规则时还是必须注意其中的逻辑。
肆、订定校园网络安全政策
在实际设定防火墙之前,我们必须根据校园网络的安全需求,先拟定一份安全政策,拟定安全政策前必须搜集以下资料:
1. 找出需要过滤保护的服务器
2. 条列出被保护的服务器将提供何种网络服务
3. 一般工作站,需要何种等级的保护
4. 了解网络架构与服务器摆放位置
根据这些数据,我们可以决定安全政策,以石牌国小为例:
1. 校内使用 NAT 虚拟网络,IP 数量需要两组 C,所有 IP 均需作 IP 伪装
2. 校园内安全需求不高,服务器与工作站摆在同一网段,不需采用 DMZ 设计
3. 由于服务器功能经常扩充,所有服务器均采用一对一对应,不使用 port 转送功能
4. 所有工作站均能自由使用网络资源,不限制只能看网页
5. 服务器提供之服务包含:dns、web、mail、ftp、wam、webmin、ssh、rdp、pcaw,不提供 proxy 及其它网络服务
6. 为增进校园网络之安全性,采用正面表列方式进行封包过滤(定义想放行之封包,其余封包一律阻挡)
还有一些网络安全须注意的事项,则是每所学校都应防范的,没有等差之别,例如:联机被绑架、阻断式攻击、连接端口扫描……等。
伍、iptables 指令
语法:
iptables [-t table] command [match] [-j target/jump]
-t 参数用来指定规则表,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一律视为是 filter。各个规则表的功能如下:
nat 此规则表拥有 Prerouting 和 postrouting 两个规则炼,主要功能为进行一对一、一对多、多对多等网址转译工作(SNAT、 DNAT),由于转译工作的特性,需进行目的地网址转译的封包,就不需要进行来源网址转译,反之亦然,因此为了提升改写封包的效率,在防火墙运作时,每个封包只会经过这个规则表一次。如果我们把封包过滤的规则定义在这个数据表里,将会造成无法对同一封包进行多次比对,因此这个规则表除了作网址转译外,请不要做其它用途。
mangle 此规则表拥有 Prerouting、FORWARD 和 postrouting 三个规则炼。
除了进行网址转译工作会改写封包外,在某些特殊应用可能也必须去改写封包(TTL、TOS)或者是设定 MARK(将封包作记号,以便进行后续的过滤),这时就必须将这些工作定义在 mangle 规则表中,由于使用率不高,我们不打算在这里讨论 mangle 的用法。
filter 这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则炼,这个规则表顾名思义是用来进行封包过滤的处理动作(例如:Drop、 LOG、 ACCEPT 或 REJECT),我们会将基本规则都建立在此规则表中。
常用命令列表:
命令 -A, –append
范例 iptables -A INPUT …
说明 新增规则到某个规则炼中,该规则将会成为规则炼中的最后一条规则。
命令 -D, –delete
范例 iptables -D INPUT –dport 80 -j Drop
iptables -D INPUT 1
说明 从某个规则炼中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
命令 -R, –replace
范例 iptables -R INPUT 1 -s 192.168.0.1 -j Drop
说明 取代现行规则,规则被取代后并不会改变顺序。
命令 -I, –insert
范例 iptables -I INPUT 1 –dport 80 -j ACCEPT
说明 插入一条规则,原本该位置上的规则将会往后移动一个顺位。
命令 -L, –list
范例 iptables -L INPUT
说明 列出某规则炼中的所有规则。
命令 -F, –flush
范例 iptables -F INPUT
说明 删除某规则炼中的所有规则。
命令 -Z, –zero
范例 iptables -Z INPUT
说明 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
命令 -N, –new-chain
范例 iptables -N allowed
说明 定义新的规则炼。
命令 -X, –delete-chain
范例 iptables -X allowed
说明 删除某个规则炼。
命令 -P, –policy
范例 iptables -P INPUT Drop
说明 定义过滤政策。 也就是未符合过滤条件之封包,预设的处理方式。
命令 -E, –rename-chain
范例 iptables -E allowed disallowed
说明 修改某自订规则炼的名称。
常用封包比对参数:
参数 -p, –protocol
范例 iptables -A INPUT -p tcp
说明 比对通讯协议类型是否相符,可以使用 ! 运算子进行反向比对,例如:-p ! tcp ,意思是指除 tcp 以外的其它类型,包含 udp、icmp …等。如果要比对所有类型,则可以使用 all 关键词,例如:-p all。
参数 -s, –src, –source
范例 iptables -A INPUT -s 192.168.1.1
说明 用来比对封包的来源 IP,可以比对单机或网络,比对网络时请用数字来表示屏蔽,例如:-s 192.168.0.0/24,比对 IP 时也可以使用 ! 运算子进行反向比对,例如:-s ! 192.168.0.0/24。
参数 -d, –dst, –destination
范例 iptables -A INPUT -d 192.168.1.1
说明 用来比对封包的目的地 IP,设定方式同上。
参数 -i, –in-interface
范例 iptables -A INPUT -i eth0
说明 用来比对封包是从哪片网卡进入,可以使用通配字符 + 来做大范围比对,例如:-i eth+ 表示所有的 ethernet 网卡,也可以使用 ! 运算子进行反向比对,例如:-i ! eth0。
参数 -o, –out-interface
范例 iptables -A FORWARD -o eth0
说明 用来比对封包要从哪片网卡送出,设定方式同上。
参数 –sport, –source-port
范例 iptables -A INPUT -p tcp –sport 22
说 明 用来比对封包的来源埠号,可以比对单一埠,或是一个范围,例如:–sport 22:80,表示从 22 到 80 埠之间都算是符合条件,如果要 比对不连续的多个埠,则必须使用 –multiport 参数,详见后文。比对埠号时,可以使用 ! 运算子进行反向比对。
参数 –dport, –destination-port
范例 iptables -A INPUT -p tcp –dport 22
说明 用来比对封包的目的地埠号,设定方式同上。
参数 –tcp-flags
范例 iptables -p tcp –tcp-flags SYN,FIN,ACK SYN
说 明 比对 TCP 封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号,第二部分则列举前述旗号中哪些有被设定,未被列举的旗号必须是空 的。TCP 状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等均可使用于参数中, 除此之外还可以使用关键词 ALL 和 NONE 进行比对。比对旗号时,可以使用 ! 运算子进行反向比对。
参数 –syn
范例 iptables -p tcp –syn
说明 用来比对是否为要求联机之 TCP 封包,与 iptables -p tcp –tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 ! 运算子,可用来比对非要求联机封包。
参数 -m multiport –source-port
范例 iptables -A INPUT -p tcp -m multiport –source-port 22,53,80,110
说明 用来比对不连续的多个来源埠号,一次最多可以比对 15 个埠,可以使用 ! 运算子进行反向比对。
参数 -m multiport –destination-port
范例 iptables -A INPUT -p tcp -m multiport –destination-port 22,53,80,110
说明 用来比对不连续的多个目的地埠号,设定方式同上。
参数 -m multiport –port
范例 iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
说明 这个参数比较特殊,用来比对来源埠号和目的埠号相同的封包,设定方式同上。注意:在本范例中,如果来源端口号为 80 但目的地埠号为 110,这种封包并不算符合条件。
参数 –icmp-type
范例 iptables -A INPUT -p icmp –icmp-type 8
说明 用来比对 ICMP 的类型编号,可以使用代码或数字编号来进行比对。请打 iptables -p icmp –help 来查看有哪些代码可以用。
参数 -m limit –limit
范例 iptables -A INPUT -m limit –limit 3/hour
说 明 用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是否超过一次 3 个封包。除了每小时平均一次外,也可以每秒钟、每分钟或 每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。除了进行封包数量的比对外,设定这个参数也会在条件达 成时,暂停封包的比对动作,以避免因骇客使用洪水攻击法,导致服务被阻断。
参数 –limit-burst
范例 iptables -A INPUT -m limit –limit-burst 5
说明 用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封包将被直接丢弃。使用效果同上。
参数 -m mac –mac-source
范例 iptables -A INPUT -m mac –mac-source 00:00:00:00:00:01
说 明 用来比对封包来源网络接口的硬件地址,这个参数不能用在 OUTPUT 和 Postrouting 规则炼上,这是因为封包要送出到网卡后,才能由 网卡驱动程序透过 ARP 通讯协议查出目的地的 MAC 地址,所以 iptables 在进行封包比对时,并不知道封包会送到哪个网络接口去。
参数 –mark
范例 iptables -t mangle -A INPUT -m mark –mark 1
说明 用来比对封包是否被表示某个号码,当封包被比对成功时,我们可以透过 MARK 处理动作,将该封包标示一个号码,号码最大不可以超过 4294967296。
参数 -m owner –uid-owner
范例 iptables -A OUTPUT -m owner –uid-owner 500
说明 用来比对来自本机的封包,是否为某特定使用者所产生的,这样可以避免服务器使用 root 或其它身分将敏感数据传送出去,可以降低系统被骇的损失。可惜这个功能无法比对出来自其它主机的封包。
参数 -m owner –gid-owner
范例 iptables -A OUTPUT -m owner –gid-owner 0
说明 用来比对来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。
参数 -m owner –pid-owner
范例 iptables -A OUTPUT -m owner –pid-owner 78
说明 用来比对来自本机的封包,是否为某特定行程所产生的,使用时机同上。
参数 -m owner –sid-owner
范例 iptables -A OUTPUT -m owner –sid-owner 100
说明 用来比对来自本机的封包,是否为某特定联机(Session ID)的响应封包,使用时机同上。
参数 -m state –state
范例 iptables -A INPUT -m state –state RELATED,ESTABLISHED
说明 用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示该封包的联机编号(Session ID)无法辨识或编号不正确。
ESTABLISHED 表示该封包属于某个已经建立的联机。
NEW 表示该封包想要起始一个联机(重设联机或将联机重导向)。
RELATED 表示该封包是属于某个已经建立的联机,所建立的新联机。例如:FTP-DATA 联机必定是源自某个 FTP 联机。
常用的处理动作:
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、Drop、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,分别说明如下:
ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则炼(nat:postrouting)。
REJECT 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。 范例如下:
iptables -A FORWARD -p TCP –dport 22 -j REJECT –reject-with tcp-reset
Drop 丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将 会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
MASQUERADE 改写封包来源 IP 为防火墙 NIC IP, 可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不 同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE –to-ports 1024-31000
LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其它规则。例如:
iptables -A INPUT -p tcp -j LOG –log-prefix “INPUT packets”
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT –to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 –dport 80 -j DNAT –to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用…….等。
RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。
MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:
iptables -t mangle -A PREROUTING -p tcp –dport 22 -j MARK –set-mark 2
陆、应用实例
#!/bin/sh
#
# 石牌国小防火墙设定指令稿
# 2002/8/27
# 设定者:李忠宪(修改自 iptables tutorial 1.1.11 by Oskar Andreasson )
# 原文件是依 DMZ 需求设计,已根据校园 NAT 网络之需求修改,其余改动部份包括:
# 新增通讯协议定义区块
# 新增执行时,自动清除已设定之规则
# 支援 FTP
# 修改所有规则,改采 multiport 方式以简化规则
# 原文件仅支持 IP 伪装(多对一对应),已扩充为支持一对一对应及多对多对应
# 原文件仅支援 DNS 及 WEB,新增 ftp、mail、wam、PCAnywhere、ssh……等多种服务器
# 修改若干规则设定上的小错误
#
# Copyright (C) 2001 Oskar Andreasson <bluefluxATkoffeinDOTnet>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
###########################################################################
#
# 1. Configuration options.
#
# 1.0 Protocols Configuration.
# 定义会用到的通讯协议
HTTP=”80″
HTTPS=”443″
FTP=”21″
FTP_DATA=”20″
SMTP=”25″
POP3=”110″
IMAP=”143″
SSH=”22″
TELNET=”23″
PCAW_TCP=”5631″
PCAW_UDP=”5632″
WEBMIN=”10000″
WAM=”12000″
DNS=”53″
#
# 1.1 Internet Configuration.
#
# 定义 NIC IP 及 WAN 接口
INET_IP=”163.21.xxx.253″
HTTP1_IP=”163.21.xxx.2″
HTTP2_IP=”163.21.xxx.4″
HTTP3_IP=”163.21.xxx.9″
HTTP4_IP=”163.21.xxx.6″
HTTP5_IP=”163.21.xxx.7″
HTTP6_IP=”163.21.xxx.10″
FTP1_IP=”163.21.xxx.2″
FTP2_IP=”163.21.xxx.6″
FTP3_IP=”163.21.xxx.7″
MAIL1_IP=”163.21.xxx.6″
MAIL2_IP=”163.21.xxx.7″
PCAW1_IP=”163.21.xxx.2″
PCAW2_IP=”163.21.xxx.4″
WAM1_IP=”163.21.xxx.6″
WAM2_IP=”163.21.xxx.7″
DNS_IP=”163.21.xxx.2″
IP_POOL=”163.21.xxx.240-163.21.xxx.250″
INET_IFACE=”eth1″
#
# 1.2 Local Area Network configuration.
#
# 定义 NAT IP 及 LAN 接口
LAN_IP=”192.168.1.253″
LAN [HTTP1_IP=”192.168.1.2″ />LAN [HTTP2_IP=”192.168.1.4″ />LAN [HTTP3_IP=”192.168.1.9″ />LAN [HTTP4_IP=”192.168.1.6″ />LAN [HTTP5_IP=”192.168.1.7″ />LAN [HTTP6_IP=”192.168.1.53″ />LAN_FTP1_IP=”192.168.1.2″
LAN_FTP2_IP=”192.168.1.6″
LAN_FTP3_IP=”192.168.1.7″
LAN_MAIL1_IP=”192.168.1.6″
LAN_MAIL2_IP=”192.168.1.7″
LAN_PCAW1_IP=”192.168.1.2″
LAN_PCAW2_IP=”192.168.1.4″
LAN_WAM1_IP=”192.168.1.6″
LAN_WAM2_IP=”192.168.1.7″
LAN_DNS_IP=”192.168.1.2″
LAN_IP_RANGE=”192.168.0.0/16″
LAN_BROADCAST_ADDRESS=”192.168.1.255″
LAN_IFACE=”eth0″
#
# 1.4 Localhost Configuration.
#
# 定义 Loopback IP 及接口
LO_IFACE=”lo”
LO_IP=”127.0.0.1″
#
# 1.5 IPTables Configuration.
#
# 设定 iptables 指令路径
IPTABLES=”/sbin/iptables”
#
# 1.6 Other Configuration.
#
###########################################################################
#
# 2. Module loading.
#
#
# Needed to initially load modules
# 整理核心支持模块之清单
/sbin/depmod -a
#
# 2.1 Required modules
# 加载会用到的模块
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
#
# 2.2 Non-Required modules
# 其余未使用之模块
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_conntrack_irc
#/sbin/modprobe ip_nat_irc
###########################################################################
#
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
# 启动 Forward 接口
echo “1″ > /proc/sys/net/ipv4/ip_forward
#
# 3.2 Non-Required proc configuration
# 其余未使用之接口
#echo “1″ > /proc/sys/net/ipv4/conf/all/rp_filter
#echo “1″ > /proc/sys/net/ipv4/conf/all/proxy_arp
#echo “1″ > /proc/sys/net/ipv4/ip_dynaddr
###########################################################################
#
# 4. rules set up.
#
######
# 4.1 Filter table
#
# 4.1.0 Reset the default policies in the nat table.
# 清除所有已设定之规则,回复到不设防状态
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
#
# 4.1.1 Set policies
# 定义安全政策为正面表列
$IPTABLES -P INPUT Drop
$IPTABLES -P OUTPUT Drop
$IPTABLES -P FORWARD Drop
#
# 4.1.2 Create userspecified chains
#
#
# 新增使用者自订规则炼 bad_tcp_packets、 allowed 和 icmp_packets
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N icmp_packets
#
# 4.1.3 Create content in userspecified chains
#
#
# bad_tcp_packets chain
# bad_tcp_packets 规则炼的功能是:将要求重导向的联机记录起来,然后将封包丢弃(防止联机被绑架,但会档掉需要三方交谈的服务,例如:M$ Media Server)
$IPTABLES -A bad_tcp_packets -p tcp ! –syn -m state –state NEW -j LOG –log-level INFO –log-prefix “New not syn:”
$IPTABLES -A bad_tcp_packets -p TCP ! –syn -m state –state NEW -j Drop
# allowed chain
# allowed 规则炼的功能是:允许要求联机封包或响应封包进入,将其余封包丢弃
$IPTABLES -A allowed -p TCP –syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j Drop
#
# ICMP rules
# icmp_packets 规则炼的功能是:允许 ping 封包进入,将其余封包丢弃
$IPTABLES -A icmp_packets -p ICMP -s 0/0 –icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 –icmp-type 11 -j ACCEPT
#
# 4.1.4 INPUT chain(过滤要到达防火墙的封包)
#
#
# 进入防火墙主机的 TCP 封包必须先进行 bad_tcp_packets 过滤
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# 从 WAN 进入防火墙主机的 ICMP 封包必须先进行 icmp_packets 过滤,这是为了避免骇客传送不完整的 IP 封包,系统会响应 ICMP 封包通知对方,导致主机位置被侦测出来
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
# 从 LAN 进入防火墙主机的全部 unicast 和 broadcast 封包,通通放行;额外检查目的地 IP 可以将 multicast 封包滤除
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BROADCAST_ADDRESS -j ACCEPT
# 从 Loopback 接口进入防火墙主机的所有封包,检查是否来自本机,若是则放行;此规则去检查来源 IP ,似乎有些画蛇添足,因为只有来自本机的封包才有机会进入 Loopback 接口
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
# 从 LAN 进入防火墙主机的 DHCP 封包,予以放行,只有当防火墙担任 DHCP 时才使用
#$IPTABLES -A INPUT -p UDP -i $LAN_IFACE –dport 67 –sport 68 -j ACCEPT
# 从 WAN 进入防火墙主机的所有封包,检查是否为响应封包,若是则予以放行
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state –state ESTABLISHED,RELATED -j ACCEPT
# 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击
$IPTABLES -A INPUT -m limit –limit 3/minute –limit-burst 3 -j LOG –log-level INFO –log-prefix “IPT INPUT packet died: ”
#
# 4.1.5 FORWARD chain(过滤要通过防火墙的封包)
#
#
# 通过防火墙的 TCP 封包必须先进行 bad_tcp_packets 过滤
$IPTABLES -A FORWARD -p TCP -j bad_tcp_packets
# 从 LAN 要到 WAN 的封包通通放行
$IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -j ACCEPT
# 从 WAN 要到 LAN 的封包仅放行回应封包
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state –state ESTABLISHED,RELATED -j ACCEPT
# 允许来自 WAN 的 Ping 封包,递送到校内所有的服务器
$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP1_IP -j icmp_packets />$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP2_IP -j icmp_packets />$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP3_IP -j icmp_packets />$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP4_IP -j icmp_packets />$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP5_IP -j icmp_packets />$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP6_IP -j icmp_packets />
# 允许来自 WAN 的 [HTTP、HTTPS 封包,递送到校内所有的 WEB href=”http://www.baidu.com/s?tn=yangyuanhua_pg&ct=&lm=&z=&rn=&word=%B7%FE%CE%F1%C6%F7&_sv=1“>服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP1_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP2_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP3_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP4_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP5_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN [HTTP6_IP -m multiport –dport ] HTTP, [HTTPS -j allowed />
# 允许来自 WAN 的 FTP 封包,递送到校内所有的 FTP 服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP1_IP -m multiport –dport $FTP,$FTP_DATA -j allowed
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP2_IP -m multiport –dport $FTP,$FTP_DATA -j allowed
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP3_IP -m multiport –dport $FTP,$FTP_DATA -j allowed
# 允许来自 WAN 的 SMTP、POP3、IMAP 封包,递送到校内所有的 MAIL 服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_MAIL1_IP -m multiport –dport $SMTP,$POP3,$IMAP -j allowed
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_MAIL2_IP -m multiport –dport $SMTP,$POP3,$IMAP -j allowed
# 允许来自 WAN 的 SSH、TELNET、WEBMIN、WAM 封包,递送到校内所有的 LINUX 服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_WAM1_IP -m multiport –dport $SSH,$TELNET,$WEBMIN,$WAM -j allowed
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_WAM2_IP -m multiport –dport $SSH,$TELNET,$WEBMIN,$WAM -j allowed
# 允许来自 WAN 的 PCanywhere 封包,递送到校内所有的 PCanywhere 服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW1_IP –dport $PCAW_TCP -j allowed
$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW1_IP –dport $PCAW_UDP -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW2_IP –dport $PCAW_TCP -j allowed
$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW2_IP –dport $PCAW_UDP -j ACCEPT
# 允许来自 WAN 的 DNS 封包,递送到校内的 DNS 服务器
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_DNS_IP –dport $DNS -j allowed
$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_DNS_IP –dport $DNS -j ACCEPT
# 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击
$IPTABLES -A FORWARD -m limit –limit 3/minute –limit-burst 3 -j LOG –log-level DEBUG –log-prefix “IPT FORWARD packet died: ”
#
# 4.1.6 OUTPUT chain(过滤从防火墙送出的封包)
#
#
# 从防火墙送出的 TCP 封包必须先进行 bad_tcp_packets 过滤
$IPTABLES -A OUTPUT -p TCP -j bad_tcp_packets
# 从防火墙网卡送出的所有封包,通通放行
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
# 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击
$IPTABLES -A OUTPUT -m limit –limit 3/minute –limit-burst 3 -j LOG –log-level DEBUG –log-prefix “IPT OUTPUT packet died: ”
######
# 4.2 nat table
#
#
# 4.2.1 Set policies
#
#
# 4.2.2 Create user specified chains
#
#
# 4.2.3 Create content in user specified chains
#
#
# 4.2.4 PREROUTING chain(定义目的地地址转译)
#
# 从 WAN 要到校内服务器的封包,在封包过滤前先转译目的地 IP 为 NAT IP
$IPTABLES -t nat -A PREROUTING -d [HTTP1_IP -j DNAT –to-destination ] LAN [HTTP1_IP />$IPTABLES -t nat -A PREROUTING -d [HTTP2_IP -j DNAT –to-destination ] LAN [HTTP2_IP />$IPTABLES -t nat -A PREROUTING -d [HTTP3_IP -j DNAT –to-destination ] LAN [HTTP3_IP />$IPTABLES -t nat -A PREROUTING -d [HTTP4_IP -j DNAT –to-destination ] LAN [HTTP4_IP />$IPTABLES -t nat -A PREROUTING -d [HTTP5_IP -j DNAT –to-destination ] LAN [HTTP5_IP />$IPTABLES -t nat -A PREROUTING -d [HTTP6_IP -j DNAT –to-destination ] LAN [HTTP6_IP />
#
# 4.2.5 POSTROUTING chain(定义来源地址转译)
#
# 从校内服务器要到 WAN 的封包,在送出之前先转译来源 IP 为 NIC IP,配合上面区块的设定,就可以做到一对一对应
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP1_IP -j SNAT –to-source ] HTTP1_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP2_IP -j SNAT –to-source ] HTTP2_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP3_IP -j SNAT –to-source ] HTTP3_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP4_IP -j SNAT –to-source ] HTTP4_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP5_IP -j SNAT –to-source ] HTTP5_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN [HTTP6_IP -j SNAT –to-source ] HTTP6_IP
# 从校内一般单机要到 WAN 的封包,在送出之前先转译来源 IP 为预设的 NIC IP,这就是多对�
安装好coolcode
- package com.davidflanagan.examples.basics;
- /**
- * This program prints out all its command-line arguments.
- **/
- public class Echo {
- public static void main(String[] args) {
- int i = 0;
- // Initialize the loop variable
- while(i < args.length) {
- // Loop until the end of array
- System.out.print(args[i] + " ");
- // Print each argument out
- i++;
- // Increment the loop variable
- }
- System.out.println();
- // Terminate the line
- }
- }
Wordpress 显示摘要信息
在抓虾里订阅的独立博客中,很多人采用了wordpress,郁闷的是,有些RSS只能看到摘要,无法看到原文,如“点石博客”。原因我知道,点石是一个SEO的社区,这样做是为了避免“内容复制”。这其实是显示摘要信息的原因之一。
为什么要显示摘要信息?
增加用户体验,使用户快速了解文章信息,决定是否阅读,在单位屏幕空间内显示更多的文章,减少用户不断的下拉屏幕的动作;
节省带宽,加快网站访问速度,当然,也节省了搜索引擎spider的带宽付出;
避免搜索引擎认为的“网页复制”问题。
关于第三点,很多博客默认设置为显示全文,并未受到搜索引擎“复制网页”的惩罚。显示摘要为了解决搜索引擎的“复制网页”问题,是一种“精益求精”的行为。我倒认为显示摘要信息重点是基于前面两个吧!
关于“文章列表”页面
内容网站的结构一般是“文章列表—->文章内容”,对于搜索引擎来说,一个“无序”的“文章列表”对其索引是没有意义的,只有“文章内容”才是有意义的。为什么要说“无序”呢?因为对于一个专题性比较强的“链接集合”,对于用户来说是有“用处”的,这体现了制作网页者的思考和整理过程。诚然,搜索引擎对于某个关键字的SERP也提供了这样的一个“链接集合”,但是它完美吗?它只是“关键字”的集合,一个关键字可以引申很多的关键字,这要人类的“发散性思维”或者“相关联想”加上其本身的知识结构才能做到,机器算法的搜索引擎是帮不到的。这就能搜索引擎为啥要收录那些很多链接的页面,如果它自身有人类的智慧,早就把文章列表全部noindex。
我看到有的文章为了解决“复制网页”问题,他们建议在网页的meta里面加上robots,对这些“列表网页”加上“follow,noindex”,意思是搜索引擎的机器人可以爬行,但不要索引这个网页,可惜百度是不支持这个的,对于中文网页来说,只能弃用这种方式。直接在robots文件里面设置,发现很难。方法就只有一个了,对“文章列表”页采取显示摘要的方式。
Wordpress文章列表页显示摘要信息
网上有很多wordpress显示摘要信息的插件,都不是太好,如“点石博客”就采取了,他的功能主要是截取第一段作为摘要信息,这个有两大缺陷:
第一段并不能完全说明文章的内容概要,当然可以通过写手有意识地写作可以达到,但有些时候会发现特别别扭;
在摘要里面无法显示html格式的东西,如链接和图片;
rss无法全文输出。
其实wordpress本身已经提供了这个功能,可以在选项Optional Excerpt里面填入相关html代码,然后在模板里面修改一下即可。这样就做到了摘要自由撰写,rss全文输出。(不推荐使用more标签,因为它不自由,只能截前面,不能截中间或者最后的文字。)
模板修改代码示例:
要修改的三个文件:
index.php 首页文件以及首页开始的上一页下一页等页面;
archive.php 存档页,如按月份、分类存档等;
search.php 搜索结果页。
上述页面里面遇到
<?php the_content(__(’(more…)’)); ?>
改成
<?php if(!is_single()) {
the_excerpt();
} else {
the_content(__(’(more…)’));
} ?>
说明,the_excerpt()表示显示摘要信息,the_content()表示显示全文,the_content(__(’(more…)’))表示启用more标签。
首页摘要而RSS全文输出解决方案文章发布者
from: JasonIT 将文
说实话,我对于页面的整齐以及博客排版要求很高,常常要为了一篇文章的排版而多过写文章的时间,而且 现在Bloging还有个麻烦,就是Flickr被封我就不能用Flickr图片,但是我却很喜欢…非常喜欢Flickr的服务,以至于现在每次Blog都是博客中出现图片为我站点服务器图片,而连接地址引到Flickr上去。
最近 搬到WordPress平台,渐渐开始适应了,不过发现,因为我很喜欢引用图片来Blog,如果我文章图片较多的时候,会把博客首页页面拉得太长,影响打开速度和页面效果,所以我开始考虑在首页文章显示摘要,通常以2张图片为限:也就是博客内容除了文字以外,只显示2张截图,全文显示放置在文章页面里。要解决这个方案,我找到了编辑器中“More”的功能.
但是WordPress有个问题,一旦使用More,在RSS中 将会输出文章摘要而不是全文内容了。我曾经也承诺过,除了我操作失误,否则Blog内不会出现摘要输出 以及 付费评论这2大博客的毒瘤。为了这个,询问了朋友和查阅Google,最后找到解决办法 一劳永逸的方法,具体办法如下:
1. 首先在文章中 使用More的代码,插入到你需要的位置;
2. 然后,修改WordPress 里面wp-includes文件夹中的post-template.php文件,使用任何代码编辑器打开,在里面找到以下If 代码:
if( preg_match(’/<!–more(.*?)?–>/’, $content, $matches) ){
$content = explode($matches[0], $content, 2);
if ( !empty($matches[1]) && !empty($more_link_text) )
$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
}
我们需要修改的就第一句话:
if ( preg_match(’/<!–more(.*?)?–>/’, $content, $matches ) ){
修改为(粗体字部分):
if ( preg_match(’/<!–more(.*?)?–>/’, $content, $matches) && !is_feed() ){
如此一来,WordPress的More功能就不会影响到我们RSS的输出了。
loopback具体作用
loopback具体作用
在一些实验拓扑图上常会看到loopback,似乎ccna的视频教程上没有,所以特地在网上找了一下。
loopback具体作用是什么?怎么用?
此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常
见于如下用途。
1 、作为一台路由器的管理地址
系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个
loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址,管理员会
使用该地址对路由器远程登录(telnet ),该地址实际上起到了类似设备名称
一类的功能。
但是通常每台路由器上存在众多接口和地址,为何不从当中随便挑选一个呢?
原因如下:由于telnet 命令使用TCP 报文,会存在如下情况:路由器的某一个
接口由于故障down 掉了,但是其他的接口却仍旧可以telnet ,也就是说,到
达这台路由器的TCP 连接依旧存在。所以选择的telnet 地址必须是永远也不会
down 掉的,而虚接口恰好满足此类要求。由于此类接口没有与对端互联互通
的需求,所以为了节约地址资源,loopback 接口的地址通常指定为32 位掩码。
2 、使用该接口地址作为动态路由协议OSPF 、BGP 的router id
动态路由协议OSPF 、BGP 在运行过程中需要为该协议指定一个Router id ,作
为此路由器的唯一标识,并要求在整个自治系统内唯一。由于router id 是一个
32 位的无符号整数,这一点与IP 地址十分相像。而且IP 地址是不会出现重复
现象的,所以通常将路由器的router id 指定为与该设备上的某个接口的地址相
同。由于loopback 接口的IP 地址通常被视为路由器的标识,所以也就成了
router id 的最佳选择。
3、使用该接口地址作为BGP 建立TCP 连接的源地址
在BGP 协议中,两个运行BGP 的路由器之间建立邻居关系是通过TCP 建立连
接完成的。
在配置邻居时通常指定loopback 接口为建立TCP 连接的源地址(通常只用于
IBGP ,原因同2.1 ,都是为了增强TCP 连接的健壮性)
配置命令如下:
router id 61.235.66.1
interface loopback 0
ip address 61.235.66.1 255.255.255.255
router bgp 100
neighbor 61.235.66.7 remote-as 200
neighbor 61.235.66.7 update-source LoopBack0
Loop口在实际中有非常广泛的应用,这个文章是是关于Loopback口使用的大全
BGP Update-Source
因为Loopback口只要Router还健在,则它就会一直保持Active,这样,只要BGP的Peer的Loopback口之间满足路由可达,就可以建立BGP 回话,总之BGP中使用loopback口可以提高网络的健壮性。
neighbor 215.17.1.35 update-source loopback 0
Router ID
使 用该接口地址作为OSPF 、BGP 的Router-ID,作为此路由器的唯一标识,并要求在整个自治系统内唯一,在Ipv6中的BGP/OSPF的Router-ID仍然是32位的IP地 址。在OSPF中的路由器优先级是在接口下手动设置的,接着才是比较OSPF的Router-ID(Router-ID的选举在这里就不多说了,PS:一 台路由器启动OSPF路由协议后,将选取物理接口的最大IP地址作为其RouterID,但是如果配置Loopback接口,则从Loopback中选取 IP地址最大者为RouterID。另外一旦选取RouterID,OSPF为了保证稳定性,不会轻易更改,除非作为RouterID的IP地址被删除或 者OSPF被重新启动),在OSPF和BGP中的Router-ID都是可以手动在路由配置模式下设置的。
OSPF: Router-ID *.*.*.*
BGP:BGP Router-ID *.*.*.*
IP Unnumbered Interfaces
无编号地址可以借用强壮的loopback口地址,来节约网络IP地址的分配。
例子:
interface loopback 0
ip address 215.17.3.1 255.255.255.255
!
interface Serial 5/0
bandwidth 128
ip unnumbered loopback 0
Exception Dumps by FTP
当Router 宕机,系统内存中的文件还保留着一份软件内核的备份,CISCO路由器可以被配置为向一台FTP服务器进行内核导出,作为路由器诊断和调试处理过程的一部 分,可是,这种内核导出功能必须导向一台没有运行公共FTP服务器软件的系统,而是一台通过ACLS过滤(TCP地址欺骗)被重点保护的只允许路由器访问 的FTP服务器。如果Loopback口地址作为Router的源地址,并且是相应地址块的一部分,ACLS的过滤功能很容易配置。
Sample IOS configuration:
ip ftp source-interface Loopback0
ip ftp username cisco
ip ftp password 7 045802150C2E
exception protocol ftp
exception dump 169.223.32.1
TFTP-SERVER Access
对于TFTP的安全意味着应该经常对IP源地址进行安全方面的配置,CISCO IOS软件允许TFTP服务器被配置为使用特殊的IP接口地址,基于Router的固定IP地址,将运行TFTP服务器配置固定的ACLS.
ip tftp source-interface Loopback0
SNMP-SERVER Access
路由器的Loopback口一样可以被用来对访问安全进行控制,如果从一个路由器送出的SNMP网管数据起源于Loopback口,则很容易在网络管理中心对SNMP服务器进行保护
Sample IOS configuration:
access-list 98 permit 215.17.34.1
access-list 98 permit 215.17.1.1
access-list 98 deny any
!
snmp-server community 5nmc02m RO 98
snmp-server trap-source Loopback0
snmp-server trap-authentication
snmp-server host 215.17.34.1 5nmc02m
snmp-server host 215.17.1.1 5nmc02m.Wednesday, June 06, 2001
TACACS/RADIUS-Server Source Interface
当采用TACACS/RADIUS协议,无论是用户管理性的接入Router还是对拨号用户进行认证,Router都是被配置为将Loopback口作为Router发送TACACS/RADIUS数据包的源地址,提高安全性。
TACACS
aaa new-model
aaa authentication login default tacacs+ enable
aaa authentication enable default tacacs+ enable
aaa accounting exec start-stop tacacs+
!
ip tacacs source-interface Loopback0
tacacs-server host 215.17.1.2
tacacs-server host 215.17.34.10
tacacs-server key CKr3t#
!
RADIUS
radius-server host 215.17.1.2 auth-port 1645 acct-port 1646
radius-server host 215.17.34.10 auth-port 1645 acct-port 1646
ip radius source-interface Loopback0
!
NetFlow Flow-Export
从一个路由器向NetFlow采集器传送流量数据,以实现流量分析和计费目的,将路由器的Router的Loopback地址作为路由器所有输出流量统计数据包的源地址,可以在服务器或者是服务器外围提供更精确,成本更低的过滤配置。
ip flow-export destination 215.17.13.1 9996
ip flow-export source Loopback0
ip flow-export version 5 origin-as
!
interface Fddi0/0/0
description FDDI link to IXP
ip address 215.18.1.10 255.255.255.0
ip route-cache flow
ip route-cache distributed
no keepalive
!
FDDDI 0/0/0 接口被配置成为进行流量采集。路由器被配置为输出第五版本类型的流量信息到IP地址为215.17.13.1的主机上,采用UDP协议,端口号9996,统计数据包的源地址采用Router的Loopback地址。
NTP Source Interface
NTP 用来保证一个网络内所有Rdouter的时钟同步,确保误差在几毫秒之内,如果在NTP的Speaker之间采用Loopback地址作为路由器的源地 址,会使得地址过滤和认证在某种程度上容易维护和实现,许多ISP希望他们的客户只与他们的客户只与ISP自己的而不是世界上其他地方的时间服务器同步。
clock timezone SST 8
!
access-list 5 permit 192.36.143.150
access-list 5 permit 169.223.50.14
!.Cisco ISP Essentials
39
ntp authentication-key 1234 md5 104D000A0618 7
ntp authenticate
ntp trusted-key 1234
ntp source Loopback0
ntp access-group peer 5
ntp update-calendar
ntp peer 192.36.143.150
ntp peer 169.223.50.14
!
SYSLOG Source Interface
系 统日志服务器同样也需要在ISP骨干网络中被妥善保护。许多ISP只希望采集他们自己的而不是外面网络发送来的昔日日志信息。对系统日志服务器的DDOS 攻击并不是不知道,如果系统信息数据包的源地址来自于被很好规划了的地址空间,例如,采用路由器的Loopback口地址,对系统日志服务器的安全配置同 样会更容易。
A configuration example:
logging buffered 16384
logging trap debugging
logging source-interface Loopback0
logging facility local7
logging 169.223.32.1
!
Telnet to the Router
远程路由器才用Loopback口做远程接入的目标接口,这个一方面提高网络的健壮性,另一方面,如果在DNS服务器做了Router的DNS映射条目,则可以在世界上任何路由可达的地方Telnet到这台Router,ISP会不断扩展,增加新的设备
由 于telnet 命令使用TCP 报文,会存在如下情况:路由器的某一个接口由于故障down 掉了,但是其他的接口却仍旧可以telnet ,也就是说,到达这台路由器的TCP 连接依旧存在。所以选择的telnet 地址必须是永远也不会down 掉的,而虚接口恰好满足此类要求。由于此类接口没有与对端互联互通的需求,所以为了节约地址资源,loopback 接口的地址通常指定为32 位掩码。
DNS前向和反向转发区域文件的例子:
; net.galaxy zone file
net.galaxy. IN SOA ns.net.galaxy. hostmaster.net.galaxy. (
1998072901 ; version == date(YYYYMMDD)+serial
10800 ; Refresh (3 hours)
900 ; Retry (15 minutes)
172800 ; Expire (48 hours)
43200 ) ; Mimimum (12 hours)
IN NS ns0.net.galaxy.
IN NS ns1.net.galaxy.
IN MX 10 mail0.net.galaxy.
IN MX 20 mail1.net.galaxy.
;
localhost IN A 127.0.0.1
gateway1 IN A 215.17.1.1
gateway2 IN A 215.17.1.2
gateway3 IN A 215.17.1.3
;
;etc etc
; 1.17.215.in-addr.arpa zone file
;
1.17.215.in-addr.arpa. IN SOA ns.net.galaxy. hostmaster.net.galaxy. (
1998072901 ; version == date(YYYYMMDD)+serial
10800 ; Refresh (3 hours)
900 ; Retry (15 minutes)
172800 ; Expire (48 hours)
43200 ) ; Mimimum (12 hours)
IN NS ns0.net.galaxy.
IN NS ns1.net.galaxy.
1 IN PTR gateway1.net.galaxy.
2 IN PTR gateway2.net.galaxy..Wednesday, June 06, 2001
3 IN PTR gateway3.net.galaxy.
;
;etc etc
On the router, set the telnet source to the loopback interface:
ip telnet source-interface Loopback0
RCMD to the router
RCMD 要求网络管理员拥有UNIX的rlogin/rsh客户端来访问路由器。某些ISP采用RCMD来捕获接口统计信息,上载或下载路由器配置文件,或者获取 Router路由选择表的简易信息,Router可以被配置采用Loopback地址作为源地址,使得路由器发送的所有数据包的源地址都采用 Loopback地址来建立RCMD连接:
ip rcmd source-interface Loopback0
一些站长知识
1、什么是域名解析?
域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程。IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址。域名的解析工作由DNS服务器完成。
2、什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名。
3、什么是MX记录?
邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。您只需在线填写您服务器的IP地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。
4、什么是CNAME记录?
即:别名记录。这种记录允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.veryad.com”(A记录)。它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。这两个别名的全称就http://www.veryad.com/和“mail.veryad.com”。实际上他们都指向“host.veryad.com”。
5、什么是TTL值?
TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。要理解TTL值,请先看下面的一个例子:
假设,有这样一个域名myhost.veryad.com(其实,这就是一条DNS记录,通常表示在veryad.com域中有一台名为myhost的主机)对应IP地址为1.1.1.1,它的TTL为10分钟。这个域名或称这条记录存储在一台名为dns.veryad.com的DNS服务器上。
二、现在有一个用户在浏览器中键入一下地址(又称URL):http://myhost.veryad.com/ 这时会发生什么呢?
该访问者指定的DNS服务器(或是他的ISP,互联网服务商,动态分配给他的)8.8.8.8就会试图为他解释myhost.veryad.com,当然8.8.8.8这台DNS服务器由于没有包含myhost.veryad.com这条信息,因此无法立即解析,但是通过全球DNS的递归查询后,最终定位到dns.veryad.com这台DNS服务器,dns.veryad.com这台DNS服务器将myhost.veryad.com对应的IP地址。
1.1.1.1告诉8.8.8.8这台DNS服务器,然有再由8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.veryad.com这条记录的解析,就将刚才的1.1.1.1结果保留一段时间,这就是TTL时间,在这段时间内如果用户又有对myhost.veryad.com这条记录的解析请求,它就直接告诉用户1.1.1.1,当TTL到期则又会重复上面的过程。
三、为什么我做的解析没有生效?
以下的每种原因都有可能导致您的解析无法生效。
1、域名的DNS没有按要求设置成正确的DNS.要是使您的解析设置,域名的DNS必须是ns1.dns-diy.com&ns2.dns-diy.com,或者是其他已经指向到这两个DNS的DNS.
2、域名还没设置相应的解析记录.
四、怎样检查域名的DNS是否已经设置为有效的DNS服务器?
您可以在域名管理区的操作平台页面的右边区域,来检查DNS是否设置正确。
如果您要修改域名的DNS需要到注册商的域名管理界面操作。
五、已经在注册商修改了DNS,为什么DNS检查的还是旧的DNS?
我们的DNS检查是根据DNS的根服务器的当前数据为依据的,在注册商修改DNS可能需要12-72小时才能反映在根服务器上。域名解析是否能生效,以我们的DNS检查为准。
六、解析可以生效,为什么收不到邮件?
请检查您的MX记录是否设置正确;
请检查您的邮局服务器是否设置正确。
如果您没有自己的邮件服务器,可以使用我们的邮件转发。
七、设置了MX记录,为什么无效?
大多数SMTP要求MX记录指向一个主机名。因此请将MX记录指定到一个主机名,而不是IP地址。
举例,要让218.5.1.249做为veryad.com的邮件服务器可以这样设置。
1、将mail.veryad.com解析到218.5.1.249(“主机名”栏填“mail”,“类型”选择“A”,“IP地址/主机名”栏填“218.5.1.249”,然后按“增加”)
2、veryad.com的MX记录设置为mail(“主机名”栏保留为空,“类型”选择“MX”,“IP地址/主机名”栏填“mail”,然后按“增加”)
3、在218.5.1.249上进行设置,允许接收@veryad.com的邮件如果您在上述第二步中的“主机名”栏中填写了“mail”,则表示发到@mail.veryad.com的邮件由218.5.1.249接收,这可能不符合你的本意思
八、为什么有的主机名用“.”结尾,而有的没有?这有什么不同吗?
以“.”结尾的主机名表示主机名的全称(FQDN);而不是用“.”结尾的主机名表示在该域名下的主机名。
举例:
1、在veryad.com域下加了个CNAME类型的记录“abc”指到“123”,那么abc.veryad.com表示123.veryad.com的解析。
2、在veryad.com域下加了个CNAME类型的记录“abc”指到“onlinenic.com.”,那么abc.veryad.com表示用onlinenic.com的解析。
九、为什么“优先级”设置总是为“0”?
“优先级”仅对MX记录有效,其他类型的记录将忽略优先级。
十、可以做泛解析吗?
可以。请在“主机名”栏中填“*”。
十一、DNS修改和域名解析有什么不同吗?
DNS修改和域名解析的含义完全不同:
1、DNS修改是指域名解析服务器(Domain Name System)的修改。
如果您自己有独立DNS服务器,想通过此DNS解析己注册成功的域名,您可选择DNS修改业务(注:要改DNS的域名必须是在我公司注册或己成功转入至我公司的域名)。请您登陆域名管理区-点击相应域名-DNS修改处修改您的域名DNS信息
2、域名解析:域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器(DNS)来完成。
如您的主机及域名均成功,则需做解析,如果您的域名DNS是第一主机默认的DNS,请您登陆域名管理区-点击相应域名-域名解析处修改您的域名解析即可。如果您的域名DNS不是第一主机的解析服务器,请您与DNS所在服务商联系解析事宜。
十二、英文域名修改DNS是否收费?
国际英文域名、国内英文域名可以修改DNS,这项服务是免费的。
十三、URL转发隐藏路径和不隐藏路径有何区别?
不隐藏路径URL转发:例如:http://b.com/指向http://a.com/xxx/(任意目录);在浏览器地址栏中打入http://b.com/连接后地址栏会显示真正的地址http://a.com/xxx/
隐藏路径的URL转发:例如:http://b.com/指向http://a.com/xxx/(任意目录);在浏览器地址栏中打入http://b.com/连接后地址栏显示的还是http://b.com/,但实际指向的是http://a.com/xxx/的内容 。
域名A记录,MX记录,CNAME记录解释
域名A记录,MX记录,CNAME记录解释
大家在注册和使用域名的时候都有下面对域名所有的记录存在过疑问罢?
什么是A记录?什么是MX记录?CNAME记录又是什么?它们都有些什么用途?
好,下面就用我浅陋经验给大家介绍一下:
1,A记录:WEB服务器的IP指向
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。
说明:用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置自己域名的二级域名。
就是说:通过A记录,大家可以设置自己的不同域名转到不同的IP上去!如:
将
www.yourname.com 转到IP 321.32.321.321
ftp.yourname.com 转到IP 123.12.123.123
mail.yourname.com 转到IP 213.21.213.213
2,MX记录(Mail Exchange):邮件路由记录
说明:用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操作控制所有的邮箱设置。您只需在线填写您服务器的主机名或主机IP地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。
这个大家都明白了吗?就是将你的域名中邮件服务器分开,将它设置到其它的IP去!
比如同样是 myweb.com ,如果你设置A记录是指向123.12.123.123,而MX记录你设置是指向222.22.222.222,那么你的DNS服务器接收到别人的邮件路由请求时就将会将它的请求解释到222.22.222.222上去!而别人访问你的网页的时候仍然是访问123.12.123.123。
3,CNAME (Canonical Name)记录,(alias from one domain name to another)通常称别名指向
这是个挺好用记录,它可以将你注册的不同域名统统转到一个主域名上去!与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址!有什么好处?大家想想就知道!
4,URL (Uniform Resource Locator )转发:网址转发
功能:如果您没有一台独立的服务器(也就是没有一个独立的IP地址)或者您还有一个域名B,您想访问A域名时访问到B域名的内容,这时您就可以通过URL转发来实现。url转发可以转发到某一个目录下,甚至某一个文件上。而cname是不可以,这就是url转发和cname的主要区别所在