资源描述
利用Linux实现冗余因特网链路(1)
随着因特网服务提供商(ISP)开始提供高速因特网链路,用户比较容易把服务放在自己的家用计算机上。但如果ISP出现故障的话,该怎么办呢?一种显而易见的解决方法就是,使用另一个ISP的冗余因特网连接。为了帮助建立采用冗余因特网连接的Linux主机,本文讨论了下列基本方面:
1、配置主机,以便合理处理多个ISP的入站网络连接;
2、出站网络连接的负载平衡;
3、配置各种服务实现冗余;
4、使用ipchains或者iptables配置防火墙。
图1 采用冗余因特网连接的Linux主机
图1描述了本文提到的家庭计算机网络配置结构。图1中的Linux充当因特网和内部局域网不同连接之间的防火墙。在本例中,以太网接口eth1使用DSL,以太网接口eht2使用线缆调制解调器。Linux主机对跨两个ISP的出站网络连接实现负载平衡。两个ISP的负载平衡功能并不局限于高速网络链路。同样这种技术也可以用于两个拨号连接之间实现负载平衡。
图1中测试配置所用的主机是采用双处理器Intel Celeron 533MHz的计算机,运行的是Linux内核为2.2.18的Red Hat 6.2。还在Linux内核为 2.4.13的Red Hat 7.2环境中进行了测试。本文中的配置不需要双处理器系统,也不需要533MHz CPU。你可以重新使用配有32MB RAM的老式Pentium 100系统,充当防火墙。本文介绍的一些例子是Red Hat所特有的,但稍微改动一下,就适用于其它版本的Linux。
本文并不提供以太网网卡配置、Linux内核编译或DNS配置等方面的逐步讲解的详细内容。完成这些工作方面的信息在网上或者许多书里随处可得。http://www.linuxdoc.org/就是个相当好的信息资源。
内核配置
Linux内核2.2以及更高版本支持高级路由技术,为了提供Linux主机上的负载平衡及多条缺省路由,需要这项技术。为了支持多个因特网连接,编译时必须加入下面几个内核网络选项:
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
如果要使用新内核的高级路由特性,就必须安装iproute工具包(如今该工具包随Red Hat 7.1一同发行)。可以从ftp://ftp.inr.ac.ru/ip-routing/ 获得iproute工具包。
Iproute工具包为使用高级路由技术提供了两个特殊命令:ip和tc。有关ip命令的文档放在http://snafu.freedom.org/linux2.2/docs/ip-cref/ip-cref.html。
IP源路由
利用Linux实现冗余因特网链路(3)
4、iptables-1.2.4#make install
5、/usr/src/linux# make oldconfig
对作为补丁添加到内核的CONFIG_IP_NF_MATCH选项回答m。
6、重新编译内核,并重新启动。
注意:这些指令是Linux内核2.4.13和iptables 1.2.4所特有的。预计在将来某个时候,这些试验性功能会成为主流内核版本的一部分。
防火墙脚本
防火墙脚本的基本流程是依次配置INPUT、FORWARD和OUTPUT链。iptables防火墙脚本还要配置PREROUTING和POSTROUTING链。每个脚本都有注释,描述哪些流量被接收或被拒绝。REJECT会忽略数据包,并且向发送者返回ICMP响应,通知发送者数据包已被丢弃。DENY(ipchains)或者DROP(iptables)索性丢弃数据包,不返回响应。这样有人探测某个端口时,系统如同不存在。本文中的防火墙脚本被编写成丢弃INPUT和FORWARD链上的数据包,以便不向远程系统返回响应。脚本将拒绝接受OUTPUT链上的数据包,这样如果是无效的出站数据包,本地系统就会收到响应。
要将防火墙脚本安装在Red Hat 7.1系统上,就要把脚本放在/etc/init.d/firewall中,然后执行下列命令:
# chkconfig firewall on
要为你的系统配置防火脚本,必须编辑下列两行,定义内部和外部接口:
INT_IFACE="eth0"
EXT_IFACES="eth1 eth2"
INPUT链为所允许的服务在防火墙上开了通道,其它服务一概拒绝。你要为特定系统编辑服务列表。利用ipchains防火墙脚本中的下列几行,就可以允许入站连接:
# ACCEPT TCP connections for various
# services found in /etc/services
for service in ftp ssh smtp domain
http auth ldap https; do
ipchains -A INPUT -i $EXT_IFACE -p tcp
-d $IP $service -j ACCEPT
done
防火墙脚本在主机允许的各种服务间进行循环。在本例中,这些服务是FTP、SSH、Sendmail、DNS(区域传送)、HTTP、ident、LDAP和HTTPS。这些基于TCP的协议的名字和端口号可以在/etc/services文件中找到。
利用ipchains防火墙脚本中的下列规则,INPUT链还接收来自任何源自本地的连接的响应(返回):
# ACCEPT non-SYN TCP packets on
# unprivileged ports (returns)
ipchains -A INPUT -i $EXT_IFACE -p tcp
! -y -d $IP 1024: -j ACCEPT
# ACCEPT all UDP packets on unprivileged ports
ipchains -A INPUT -i $EXT_IFACE -p udp -d $IP 1024:
-j ACCEPT
ipchains不支持状态防火墙,所以这是接受返回TCP流量的唯一方式。由于支持状态防火墙功能(又叫作连接跟踪),iptables大大加强了安全。这功能意味着数据包只有和源自本地的活动连接相匹配,才会被接收。在iptables防火墙脚本中可以使用下列规则来处理:
# ACCEPT return TCP/UDP traffic (stateful firewall)
iptables -t filter -A INPUT -m state
--state ESTABLISHED -i $EXT_IFACE
-p tcp -d $IP --dport 1024: -j ACCEPT
iptables -t filter -A INPUT -m state
--state ESTABLISHED -i $EXT_IFACE
-p udp -d $IP --dport 1024: -j ACCEPT
即使UDP是一种无状态协议,iptables连接跟踪也能维持状态表,并且只对源自本地的流量作出UDP端口上的响应。
iptables防火墙脚本接受入站连接,并利用下列规则将新连接加入到连接跟踪数据库中:
# ACCEPT inbound TCP connections for various
# services found in /etc/services
for service in ftp ssh smtp domain
http auth ldap https; do
iptables -t filter INPUT -m state
--state NEW,ESTABLISHED -i $EXT_IFACE
-p tcp -d $IP --dport $service -j ACCEPT
done
你可以通过查看/proc/net/ip_conntrack文件来查看连接跟踪数据库。
下列iptables规则允许在TCP端口20上有主动模式的FTP连接请求:
# ACCEPT active FTP data connections on firewall
iptables -t filter -A INPUT -m state --state RELATED
-i $EXT_IFACE -p tcp -d $IP --dport 1024:
--sport ftp-data -j ACCEPT
下列规则允许对BIND进行入站DNS查询:
#ACCEPT inbound DNS requests
iptables -t filter -A INPUT -I $EXT_IFACE
-p udp -d $IP -dport domain -j ACCEPT
FORWARD链利用网络地址转换(NAT),为内部网络上的系统对连接进行伪装。大多数协议可以使用NAT,只有几种协议需要一些帮助:使用重写IP地址的一种特殊模块。主动模式的FTP连接需要帮助程序才能通过防火墙。你可以使用modprobe命令加载ip_masq_ftp(ipchains)或ip_nat-ftp(iptables)模块――除非它们编译后已经加入到内核中,以便对主动FTP连接进行伪装。主动FTP连接上的远程机器通过防火墙要求连接本地机,以传输数据。ip_masq_ftp模块重写FTP连接中的数据包,以便内部机器看上去直接连在因特网上。被动模式的FTP连接通过TCP端口21传输所有数据,从而避开了这个问题。如果你决定支持FTP,要记住FTP会以明文格式通过网络传输密码,所以并不安全。FTP之外的一种安全方案就是sftp,它使用安全套接层作为通信方式。sftp随OpenSSH客户端工具一同发行。
各种应用系统的其它伪装模块可以在/lib/modules/'uname -r'/ipv4 (ipchains) 或者/lib/modules/'uname -r'/ kernel/net/ipv4/netfilter/ (iptables)目录中找到。
FORWARD链使用下列iptables规则来伪装通过防火墙的数据包:
# ACCEPT new outbound traffic (stateful firewall)
iptables -t filter -A FORWARD -m state -state NEW,ESTABLISHED
-i $INT_IFACE -s $INT_NET -j ACCEPT
# ACCEPT return traffic (stateful firewall)
iptables -t filter -A FORWARD -m state -state NEW,ESTABLISHED,RELATED \
-i $EXT_IFACE -s ! $INT_NET -j ACCEPT
# Pass Internet traffic to internal network unmodified
iptables -t nat -A POSTROUTING -o $INT_IFACE -j ACCEPT
# Masquerading outbound connections from internal network
iptables -t nat -A POSTROUTING -o $EXT_IFACE -j MASQUERADE
OUTPUT链只接受通过正确接口发出去的网络流量。OUTPUT链还可以通过配置服务类型(TOS)标识来确定某些流量的先后次序。譬如,TOS标识可用来确定交互(SSH)流量通过FTP的先后次序。TOS标记有多种:Minimize-Delay、Maximize-Throughput、Maximize-Reliability和Minimize-Cost。
许多IPS忽视数据包上的TOS标识。事实上,由于CONFIG_IP_ROUTE_TOS内核选项判断信息流顺序时正是基于这一标识,所以这一标识非常有用。这就意味着,当一个交互式的应用程序(比如SSH)运行时,你可以让高带宽的应用程序(比如FTP)以最大的吞吐量运行,也不会使交互延迟。也就是说,可以让FTP不影响SSH连接的性能。
TOS标识在mangle表的PREROUTING和OUTPUT链中的iptables防火墙脚本内加以设置。PREROUTING链确定了入站数据包的先后次序,OUTPUT链则确定了出站数据包的先后次序。可应用下列规则使SSH数据包的延迟最小:
iptables -t mangle -A PREROUTING -j TOS
--set-tos Minimize-Delay -p tcp --dport ssh
iptables -t mangle -A OUTPUT -j TOS
--set-tos Minimize-Delay -p tcp --sport ssh
OUTPUT链还限制了系统作以响应的ICMP信息的类型。用于ping和traceroute的ICMP消息被允许,用于操作系统识别的时间戳消息则被拒绝。使用ipchains防火墙脚本的下列几行,就可以对ICMP响应进行配置。:
# ACCEPT various ICMP messages
for message in echo-reply destination-unreachable
source-quench redirect echo-request
time-exceeded parameter-problem; do
ipchains -A OUTPUT -p icmp -s 0/0 $message -j ACCEPT
done
防火墙脚本的最后几行配置了IP转发(伪装/NAT)、启用了TCP SYN cookie(帮助减小扫描TCP SYN的拒绝服务攻击产生的影响)、忽略了各种ICMP消息、启用了逆向路径路由(防欺骗),并记录具有虚假地址的意外数据包。
防火墙维护
要检查防火墙规则的效率,必须使用下列命令执行防火墙脚本:
# ./firewall status
检查输出结果中前两列的数据,如果是零,表明没有数据包与规则匹配。这未必是件坏事:DENY和DROP规则的零可能意味着,没有人试图利用这个特定规则非法攻击你的主机。ACCEPT规则的零意味着没有流量被该规则所接受。
如果你想查找防火墙规则的错误,定要确保:把-1选项加入ipchains命令,这样每个REJECT和DENY规则可以写入/var/log/messages文件。iptables防火墙脚本会创建一个名为DROPLOG的特殊链,它会记录丢弃的数据包。别忘了经常检查日志,看有无入侵者。fwlogwatch就是一个监视防火墙日志的有用工具,可在http://cert.uni-stuttgart.de/projects/fwlogwatch/中找到。
这些防火墙脚本只允许非特权的端口上的返回,所以你可能需要编辑ssh_config文件,然后添加这一行:UsePrivilegedPort no,通过更新SSH配置来允许非特权的端口上的返回。
总结
我采用这种配置已经运行了一年左右,性能令人满意。然而,一旦网络链路出故障,出站连接存在几个问题。如果单一网络链路出故障,你仍能在应用层获得入站连接的冗余。源自本地的出站连接时有时无,直到你对有故障的ISP的接口执行ifdown,才会排除这种状况。如果连接中断持续很长一段时间,你可能希望更新DNS。这对接口执行ifup时就会出现这问题,因为然后必须重新把路由条目加入辅助表(譬如ip route add 0/0 via 63.89.102.1 table 1)。修改ifup-routes脚本后才能自动添加这些高级路由功能。如果在两个接口上都运行了ifdown命令,缺少路由就要重新加入主路由表(譬如ip route add default equalize nexthop via…)。至于处理不同故障替换情形的脚本,读者可以试着编写。
缺省情况下,TCP/IP数据包的路由方式是:检查IP目的地址,然后在路由表中寻找到达目的网络的一条路径。路由表可以利用netstat -r命令来查看。如果发现了一条路径,数据包就会被送到网络接口,否则数据包会被送到缺省网关。对直接在因特网上的大多数主机而言,缺省网关是某一ISP。在本例中,这意味着所有的出站因特网连接都经过DSL接口。在因特网冗余连接的环境下,这不是所希望发生的行为。如果你给系统添加了线缆调制解调器,并不希望你的线缆调制解器连接利用DSL连接进行响应。
为了解决这个问题,我们使用ip命令建立了多个多路由表。根据出站数据包的IP源地址来选择路由表。利用下列命令可以做到这点:
# Setup source IP routing rules for DSL
ip rule add from 63.89.102.157 lookup 1
ip route add 10.0.0.0/24 via 10.0.0.1 table 1
ip route add 0/0 via 63.89.102.1 table 1
# Setup source IP routing rules for cable modem
ip rule add from 65.3.17.133 lookup 2
ip route add 10.0.0.0/24 via 10.0.0.1 table 2
ip route add 0/0 via 65.3.17.1 table 2
如果出自数据包来自源地址63.89.102.157 (DSL),它就会查看含有两个条目的路由表1:
> ip route list table 1
10.0.0.0/24 via 10.0.0.1 dev eth0
default via 63.89.102.1 dev eth1
第一行把本地流量发送到内部网络,第二行捕获所有剩余的数据包后,通过DSL接口发送到ISP。线缆调制解器接口的路由表2工作方式同样如此。
负载平衡
为了平衡来自内部网络的出站网络连接的负载,就要用到CONFIG_IP_ROUTE_MULTIPATH内核选项,它使你可以有多个缺省网关。办法就是,从/etc/sysconfig/network文件中去除缺省网关,然后利用下列命令,设置使用高级路由特性的缺省网关:
# ip route add default equalize
nexthop via 63.89.102.1 dev eth1
nexthop via 65.3.17.1 dev eth2
要查看高级路由表,使用下列命令:
> ip route list
255.255.255.255 dev eth0 scope link
255.255.255.255 dev eth2 scope link
255.255.255.255 dev eth1 scope link
10.0.0.1 dev eth0 scope link
63.89.102.157 dev eth1 scope link
65.3.17.133 dev eth2 scope link
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1
63.89.102.0/24 dev eth1 proto kernel scope link src 63.89.102.157
65.3.17.0/24 dev eth2 proto kernel scope link src 65.3.17.133
127.0.0.0/8 dev lo scope link
default equalize
nexthop via 63.89.102.1 dev eth1 weight 1
nexthop via 65.3.17.1 dev eth2 weight 1
CONFIG_IP_ROUTE_MULTIPATH内核选项会使Linux"把所有的这些路径(缺省路由)看成具有同等的'成本',然后利用不确定的方式从中选择一条路径,"据/usr/src/linux/Documentation/Configure.help所述。Ip route命令的equalize选项使Linux内核可以基于IP地址对出站连接实现负载平衡。对某个IP地址而言,内核会选择一个用于传输出站数据包的接口。然后内核会为这个IP地址在路由缓冲区中把这个决定记为条目。这样,就可以通过同一接口实现进一步与该IP地址相连的连接,直到路由缓冲区中的该条目失效为止。你可以使用ip route list cache命令查看路由缓冲区。
利用Linux实现冗余因特网链路(2)
配置服务
如果实施循环配置的DNS,就可以实现各种服务(DNS、SMTP、HTTP、LDAP、SSH等)的冗余。而实现DNS的冗余,只要列出两条权威性的NS记录,每个外部接口各一条。可以减少每条DNS记录的生存时间(TTL),以便远程系统只能缓冲30分钟的IP信息。这样就会使出站流量以循环方式分散在两个IP地址上。对入站SMTP连接而言,两条权重相等(10)的MX记录添加到DNS当中,这样如果一个接口出了故障,入站电子邮件可以通过另一个接口传送。
你可以按照下列方式,使用dig命令(功能增强的nslookup)核实你的DNS配置:
> dig alphapager.org any
; <<>> DiG 8.2 <<>> alphapager.org any
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 5
;; QUERY SECTION:
;; alphapager.org, type = ANY, class = IN
;; ANSWER SECTION:
alphapager.org. 30M IN A 63.89.102.157
alphapager.org. 30M IN A 65.3.17.133
alphapager.org. 30M IN NS ns.alphapager.org.
alphapager.org. 30M IN NS .
alphapager.org. 30M IN SOA proxy.alphapager.org. \
root.proxy.alphapager.org. (
2001031000 ; serial
3H ; refresh
1H ; retry
1W ; expiry
30M ) ; minimum
alphapager.org. 30M IN MX 10 .
alphapager.org. 30M IN MX 10 ns.alphapager.org.
;; ADDITIONAL SECTION:
ns.alphapager.org. 30M IN A 63.89.102.157
. 30M IN A 65.3.17.133
;; Total query time: 98 msec
;; FROM: pandora to SERVER: default -- 192.168.100.1
;; WHEN: Sat Mar 10 22:15:22 2001
;; MSG SIZE sent: 32 rcvd: 326
所有的DNS记录(除了ns.alphapager.org和)现在都解析成了两个IP地址。譬如说:
> nslookup
Server: proxy-in.alphapager.org
Address: 10.0.0.1
Name:
Addresses: 65.3.17.133, 63.89.102.157
对Apache而言,用httpd.conf中的下列行可以支持多个指定虚拟主机:
NameVirtualHost 63.89.102.157:80
NameVirtualHost 65.3.17.133:80
利用循环配置的DNS就可以分配入站的LDAP和SSH流量,不需要特别配置。
启动脚本
为了支持我们的网络配置,许多启动脚本必须加以修改。这些脚本是Red Hat所特有的,但稍加修改就可以适用于其它版本的Linux。系统启动后,ip rule命令只须执行一次。把下列几行添加到/etc/rc.d/init.d/network脚本的启动部分就可以做到这一点:
# Add non interface-specific static-rules
if [ -f /etc/sysconfig/static-rules ]; then
sh /etc/sysconfig/static-rules
fi
/etc/sysconfig/static-rules文件包含:
# Setup source IP routing rules
ip rule add from 63.89.102.157 lookup 1
ip rule add from 65.3.17.133 lookup 2
# Setup load balancing
ip route add default equalize
nexthop via 63.89.102.1 dev eth1
nexthop via 65.3.17.1 dev eth2
每次对相应接口执行ifup后,都要执行ip route命令。往etc/sysconfig/network-scripts/ifup-routes中添加下列几行:
# Add any advanced routes
grep "^advanced " /etc/sysconfig/static-routes |
while read ignore dev args; do
if [ "$dev" = "$1" ]; then
/sbin/ip route add $args
fi
done
/etc/sysconfig/static-routes文件包含:
advanced eth0 10.0.0.0/24 via 10.0.0.1 table 1
advanced eth0 10.0.0.0/24 via 10.0.0.1 table 2
advanced eth1 0/0 via 63.89.102.1 table 1
advanced eth2 0/0 via 65.3.17.1 table 2
防火墙
如果你的主机连接到因特网上,就应该运行防火墙,阻止讨厌的流量进入主机。决定允许哪些服务可以通过因特网访问,拒绝所有其它服务的连接。记住:运行防火墙并不意味着你的系统就安然无恙。你允许通过防火墙的任何服务都有其自身的安全漏洞,会被黑客所利用,所以你使用安全补丁确保应用系统最新非常重要。
大多数防火墙的脚本只支持与内部网络相连的单一外部网络连接。为了支持多个外部网络接口,就要自己编写一些防火墙脚本。第一个脚本使用名为ipchains的基于数据包的防火墙,它随Linux 2.2内核一同交付。第二个脚本使用名为iptables的基于数据包的防火墙,它随Linux 2.4内核一同交付(在Linux 2.4内核环境下运行ipchains防火墙是有可能,但你无法同时使用ipchains和iptables。)。
iptables是ipchains的后续版本,功能更为强大,因为它支持连接跟踪,这为Linux赋予了状态防火墙功能。Iptables也可以扩展,这意味着无须为iptables修改基本的源代码,就能为其添加新功能(如字符串匹配)。ipchains和iptables都可以把流量分成几个不同的规则链,决定接受还是拒绝数据包。iptables 使用名为filter、nat和mangle的三个链表来过滤数据包。数据包经过一个链时,每个规则依次接受检查,直到发现匹配为止。
Ipchains中的三个标准链名为INPUT、FORWARD和OUTPUT。这些链还出现在过滤表内的iptables。INPUT链分析刚到达网络接口的数据包,FORWARD链分析伪装的数据包。OUTPUT链分析即将从网络接口发出去的数据包。图2描述了数据包通过ipchains防火墙当中的不同链时所经过的路径。
图2 ipchains数据包的传输路径
在iptables中,nat表另有两个链:PREROUTING和POSTROUTING。这些链用于进行伪装,又叫作网络地址转换。所有数据包到达网络接口后、但从网络接口发出去之前都会经过这些链。在iptables中,INPUT和OUTPUT链用于处理发往防火墙的数据包,FORWARD链只处理伪装的数据包。图3描述了数据包通过iptables防火墙当中的不同链时所经过的路径。
图3 iptables数据包的传输路径
iptables中和mangle表使用PREROUTING和OUPUT链,以便你修改数据包中的IP标识,如生存时间(TTL)或服务类型(TOS)。
若想知道数据包如何通过ipchains和iptables中的不同链方面更详细的介绍,请访问网址:http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO-4.html
http://www.linuxdoc.org/LDP/nag2/x-087-2-firewall.future.html
防火墙内核配置
要建立使用Linux 2.2内核的ipchains防火墙,你必须在内核配置文件中激活下列功能:
CONFIG_IP_FIREWALL=y
CONFIG_IP_MASQUERADE=y
CONFIG_IP_MASQUERADE_ICMP=y
CONFIG_IP_ROUTE_TOS=y
CONFIG_SYN_COOKIES=y
而要建立使用Linux 2.4内核的iptables防火墙,你必须在内核配置文件中激活下列功能:
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_CONNTRACK=y
CONFIG_IP_NF_MATCH_LIMIT=m
CONFIG_IP_NF_MATCH_PSD=m
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_IPLIMIT=m
CONFIG_IP_NF_MATCH_STRING=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_TOS=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_ROUTE_TOS=y
CONFIG_SYN_COOKIES=y
截至写稿日期,这些内核功能的一部分并未出现在主流的Linux 2.4内核中,不过可以作为补丁的方式添加进去。要把这些功能添加到内核中,应该安装Linux 内核2.4.13和iptables1.2.4,它们可在下列网址获得:
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.13.tar.gz
http://netfilter.filewatcher.org/iptables-1.2.4.tar.bz2
按下列步骤把试验性的iptables补丁添加到内核中:
1、把Linux 2.4.13安装到/usr/src/linux,并加以运行。
2、把iptables-1.2.4.tar.bz2解压到它自己的目录中。
3、iptables-1.2.4# make patch-o-matic
对下列补丁回答yes:
string
psd (port scan detection)
iplimit
不是每个补丁都兼容,所以只须选择你要用的补丁。
利用Linux实现冗余因特网链路(3)
4、iptables-1.2.4#make install
5、/usr/src/linux# make oldconfig
对作为补丁添加到内核的CONFIG_IP_NF_MATCH选项回答m。
6、重新编译内核,并重新启动。
注意:这些指令是Linux内核2.4.13和iptables 1.2.4所特有的。预计在将来某个时候,这些试验性功能会成为主流内核版本的一部分。
防火墙脚本
防火墙脚本的基本流程是依次配置INPUT、FORWARD和OUTPUT链。iptables防火墙脚本还要配置PREROUTING和POSTROUTING链。每个脚本都有注释,描述哪些流量被接收或被拒绝。REJECT会忽略数据包,并且向发送者返回ICMP响应,通知发送者数据包已被丢弃。DENY(ipchains)或者DROP(iptables)索性丢弃数据包,不返回响应。这样有人探测某个端口时,系统如同不存在。本文中的防火墙脚本被编写成丢弃INPUT和FORWARD链上的数据包,以便不向远程系统返回响应。脚本将拒绝接受OUTPUT链上的数据包,这样如果是无效的出站数据包,本地系统就会收到响应。
要将防火墙脚本安装在Red Hat 7.1系统上,就要把脚本放在/etc/init.d/firewall中,然后执行下列命令
展开阅读全文