精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● Linux>>有待整理文章>>使用 Linux 实现 Internet 冗余连接(下)

主题:使用 Linux 实现 Internet 冗余连接(下)
发信人: r_hayes(Hayes)
整理人: qiaoqian(2002-05-13 06:53:32), 站内信件
防火墙内核配置 
要想建立起一个基于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、在/usr/src/linux目录下安装Linux 2.4.13,并运行它。 
2、把iptables-1.2.4.tar.bz2解压到它自己的目录中。 
3、iptables-1.2.4# make patch-o-matic 
选择“yes”到以下补丁: 
string 
psd (port scan detection) 
iplimit 
因为并不是每个补丁都兼容,因此只选择需要的补丁即可。 
4、iptables-1.2.4#开始安装 
5、/usr/src/linux# make oldconfig 
在CONFIG_IP_NF_MATCH选项时回答“m”。 
6、重新编译内核并重启。 
防火墙脚本 
配置防火墙脚本的基本流程是依次设置INPUT、FORWARD和OUTPUT规则。Iptables防火墙脚本还要设置PREROUTING和POSTROUTING规则。各脚本都有注释,描述什么信息被接收或者拒绝。REJECT会忽略数据包并且给发送者返回一个ICMP信息,告诉他信息已经丢失。而DENY(ipchains)或者DROP(iptables)则在丢弃数据包后,不做任何回复。在有人探测主机的特定端口时,该功能可以让系统仿佛不存在,从而有效地保护系统。在本文的防火墙脚本中,设计成不给远程系统作响应。 
要在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不支持连接跟踪,而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连接跟踪维护一个状态表,并且只对源自内部网的信息作出响应。 
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 
在网络内部的连接,FORWARD规则会通过NAT把连接进行伪装。使用NAT,大部分协议都可以正常工作,只有很少一部分需要一个重写IP地址的模块。对于主动模式的FTP连接,需要一个辅助程序来通过防火墙。你可以使用modprobe命令加载ip_masq_ftp(ipchains)或者ip_nat-ftp(iptables)模块,以实现对主动FTP连接的伪装。这样,处于主动的FTP连接的远程机器,为了传输数据,会要求连接本地机。这时,ip_masq_ftp模块会重新修改FTP连接中的数据包,使得内部机器看起来就像是直接连接在Internet上一样。对于被动模式的FTP连接,可以使用TCP端口21来传输数据,以避开这个问题。值得注意的是,因为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 
OUTPU规则中还可以通过配置TOS(服务类型)标识来实现信息传输的先后次序。很多IPS都容易忽略TOS标识。事实上,由于CONFIG_IP_ROUTE_TOS内核选项判断信息流顺序时正是基于这一标识,所以这一标识非常有用。这就意味着,当一个交互式的应用程序(比如SSH)运行时,你可以让高带宽的应用程序(比如FTP)以最大的吞吐量运行,也不会使交互延迟。也就是说,可以让FTP不影响SSH连接的性能。 
TOS标识在iptables防火墙mangle表中的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信息的响应。使用以下的配置,我们可以允许ICMP响应ping和traceroute,而不响应时间戳: 
# 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 

防火墙的维护 
要检查防火墙规则的效率,可以使用以下命令来执行防火墙脚本: 
# ./firewall status 
该命令输出的结果中,如果前两列是零,那么就意味着没有与规则相符的数据包。DENY和DROP规则的零意味着没有人试图得用特定的规则对你进行攻击。ACCEPT规则的零意味着没有接受符合该规则的信息。 
如果想查找防火墙规则的错误,那么务必要要在ipchains命令后加上-l选项,这样就可把REJECT和DENY规则的信息写入/var/log/messages文件。Iptables防火墙脚本会创建一个特别的规则链DROPLOG,它将会记录被拒绝的数据包。做为管理员,应该经常查看这些信息,以发现潜在的攻击者。 
防火墙内核配置 
要想建立起一个基于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、在/usr/src/linux目录下安装Linux 2.4.13,并运行它。 
2、把iptables-1.2.4.tar.bz2解压到它自己的目录中。 
3、iptables-1.2.4# make patch-o-matic 
选择“yes”到以下补丁: 
string 
psd (port scan detection) 
iplimit 
因为并不是每个补丁都兼容,因此只选择需要的补丁即可。 
4、iptables-1.2.4#开始安装 
5、/usr/src/linux# make oldconfig 
在CONFIG_IP_NF_MATCH选项时回答“m”。 
6、重新编译内核并重启。 
防火墙脚本 
配置防火墙脚本的基本流程是依次设置INPUT、FORWARD和OUTPUT规则。Iptables防火墙脚本还要设置PREROUTING和POSTROUTING规则。各脚本都有注释,描述什么信息被接收或者拒绝。REJECT会忽略数据包并且给发送者返回一个ICMP信息,告诉他信息已经丢失。而DENY(ipchains)或者DROP(iptables)则在丢弃数据包后,不做任何回复。在有人探测主机的特定端口时,该功能可以让系统仿佛不存在,从而有效地保护系统。在本文的防火墙脚本中,设计成不给远程系统作响应。 
要在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不支持连接跟踪,而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连接跟踪维护一个状态表,并且只对源自内部网的信息作出响应。 
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 
在网络内部的连接,FORWARD规则会通过NAT把连接进行伪装。使用NAT,大部分协议都可以正常工作,只有很少一部分需要一个重写IP地址的模块。对于主动模式的FTP连接,需要一个辅助程序来通过防火墙。你可以使用modprobe命令加载ip_masq_ftp(ipchains)或者ip_nat-ftp(iptables)模块,以实现对主动FTP连接的伪装。这样,处于主动的FTP连接的远程机器,为了传输数据,会要求连接本地机。这时,ip_masq_ftp模块会重新修改FTP连接中的数据包,使得内部机器看起来就像是直接连接在Internet上一样。对于被动模式的FTP连接,可以使用TCP端口21来传输数据,以避开这个问题。值得注意的是,因为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 
OUTPU规则中还可以通过配置TOS(服务类型)标识来实现信息传输的先后次序。很多IPS都容易忽略TOS标识。事实上,由于CONFIG_IP_ROUTE_TOS内核选项判断信息流顺序时正是基于这一标识,所以这一标识非常有用。这就意味着,当一个交互式的应用程序(比如SSH)运行时,你可以让高带宽的应用程序(比如FTP)以最大的吞吐量运行,也不会使交互延迟。也就是说,可以让FTP不影响SSH连接的性能。 
TOS标识在iptables防火墙mangle表中的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信息的响应。使用以下的配置,我们可以允许ICMP响应ping和traceroute,而不响应时间戳: 
# 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 

防火墙的维护 
要检查防火墙规则的效率,可以使用以下命令来执行防火墙脚本: 
# ./firewall status 
该命令输出的结果中,如果前两列是零,那么就意味着没有与规则相符的数据包。DENY和DROP规则的零意味着没有人试图得用特定的规则对你进行攻击。ACCEPT规则的零意味着没有接受符合该规则的信息。 
如果想查找防火墙规则的错误,那么务必要要在ipchains命令后加上-l选项,这样就可把REJECT和DENY规则的信息写入/var/log/messages文件。Iptables防火墙脚本会创建一个特别的规则链DROPLOG,它将会记录被拒绝的数据包。做为管理员,应该经常查看这些信息,以发现潜在的攻击者。 



----

                    灌灌 
                    灌灌 
                    灌灌 
                    灌灌          灌灌 
                    灌灌      灌灌灌 
    灌灌灌灌灌灌灌  灌灌  灌灌灌 
      灌灌灌灌灌灌灌灌灌灌灌灌 
                灌灌灌灌灌灌 
               灌灌灌灌灌灌灌  
              灌灌  灌灌  灌灌 
             灌灌   灌灌    灌灌 
            灌灌    灌灌      灌灌 
          灌灌      灌灌      灌灌灌 
          灌灌      灌灌        灌灌灌灌 
        灌灌        灌灌        灌灌灌灌灌 
      灌灌          灌灌          灌灌灌灌灌  
    灌灌            灌灌            灌灌 
                灌灌灌灌 
                  灌灌灌 
                    灌    

[关闭][返回]