Duangw

out-server

操作系统版本:Slackware 11.0

索引:

  1. 分区
  2. 安装一个基础系统
  3. 安装编辑器
  4. 安装zlib
  5. 安装网络工具包
  6. 配置网络
  7. 防火墙配置
  8. 设置内核参数
  9. 安装grub
  10. 安装新内核
  11. 安装服务器程序
  12. 配置域名服务

1.分区

 

2.安装一个基础系统

同开发机设置。

参见开发机[安装一个基础系统]

 

3.安装编辑器

安装vim。

同开发机,参见开发机[安装编辑器]

 

4.安装zlib

安装zlib,该压缩包会被openssl和openssh用到。

 

5.安装网络工具包

一些用到的网络工具:

  1. n/mailx-12.1-i486-1
  2. n/tcpip-0.17-i486-39
  3. n/iptables-1.3.5-i486-2
  4. n/tcpdump-3.9.4-i486-2
  5. n/openssl-0.9.8d-i486-1
  6. n/openssh-4.4p1-i486-1

 

6.配置网络

执行netconfig配置网络,安装虚拟机网卡模块。

机器名:out-server

域名:copyleft.net

IP地址:

路由:

当然,在目前的网络状况下,可以增加一条路由:

route add -net 10.10.40.0 netmask 255.255.255.0 gw 172.16.0.50

这样,在away网络访问本机时,就不必要通过route中转了,可以直接发给away-gate。

从一般性考虑,使用default就可以了。

使用ping和tcpdump命令测试网络配置的正确性。

 

7.防火墙配置

从开发机获得防火墙脚本模板,作为服务器,使用的是server模板rc.iptables-server.ref

# scp 172.16.0.100:/newpkg/rc.iptables-server.ref .
# scp 172.16.0.100:/newpkg/rc.S.ref .

把模板脚本放到/etc/rc.d/目录下,改名为rc.iptables:

# mv rc.iptables-server.ref /etc/rc.d/rc.iptables

修改/etc/rc.d/rc.S文件,在末尾添加运行rc.S.ref的内容。

模板rc.iptables-server.ref的说明如下:

#!/bin/sh
# Start/stop/restart my iptables configuration for server.
#

start() {

iptables -F

# 缺省策略设置为禁止一切数据:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# 对于本地loopback接口,不做限制:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 虽然分片包有存在的理由,但在当今的网络现状下,已经很少了。分片出现更多
# 的是源于攻击,所以禁止分片包:
iptables -A INPUT -f -j DROP

# 作为服务器,提供的服务依次在下面定义:
iptables -A INPUT -p tcp --dport ssh -m state \
--state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport ssh -m state \
--state ESTABLISHED -j ACCEPT

# 这是供测试用的,实际情况服务器不应该允许ping包
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# other

}

resume_all() {

# enable all
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

stop() {

iptables -F

}

case "$1" in
'start')
  start
  ;;
'stop')
  stop
  resume_all
  ;;
'restart')
  stop
  start
  ;;
*)
  echo "usage $0 start|stop|restart"
esac

从安全角度,服务器是不允许访问外部的(除了授权),这里为了方便测试,允许out-server连接到开发机develop,在rc.iptables中增加如下规则:

# for test, enable ssh to 172.16.0.100(develop):
iptables -A OUTPUT -p tcp -d 172.16.0.100 --dport ssh -m state \
--state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 172.16.0.100 --sport ssh -m state \
--state ESTABLISHED -j ACCEPT

要了解其他相关信息,可参见开发机[防火墙配置]

 

8.设置内核参数

同home-work设置。

参见home-work[设置内核参数]

 

9.安装grub

同home-work设置。

参见home-work[安装grub]

 

10.安装新内核

同home-work设置。

参见home-work[安装新内核]

 

11.安装服务器程序

安装服务器程序包,供测试使用,直接使用Slackware本身带的包。

用于测试最典型的服务就是http和ftp,所以安装如下软件包:

修改/etc/inetd.conf,把不需要启动的服务注释掉,只打开vsftp服务。

当前系统的防火墙是不允许访问http和ftp的,所以,接下来就修改/etc/rc.d/rc.iptables,增加访问规则:

http协议:

# 打开80端口:
iptables -A INPUT -p tcp --dport http -m state \
--state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport http -m state \
--state ESTABLISHED -j ACCEPT

# 如果使用了安全http,那还要打开443端口:
iptables -A INPUT -p tcp --dport https -m state \
--state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport https -m state \
--state ESTABLISHED -j ACCEPT

ftp协议:

ftp协议特殊在它需要两个连接,一个控制连接,一个数据连接。数据连接又有两种模式:port和passive,两种模式的数据流向刚好相反。现在已经很少用port模式了,不过服务器还是两者都得支持。

# 打开21端口:
iptables -A INPUT -p tcp --dport ftp -m state \
--state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport ftp -m state \
--state ESTABLISHED -j ACCEPT

#port模式:
iptables -A OUTPUT -p tcp --sport ftp-data -m state \
--state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -m state \
--state ESTABLISHED -j ACCEPT

#passive模式:
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 \
-m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 1024:65535 \
-m state --state ESTABLISHED -j ACCEPT

 

12.配置域名服务

(1).软件包

安装域名服务器包:

(2).主配置

当前所有的虚拟机都是copyleft.net域。out-server作为copyleft.net域的主域服务器,负责copyleft.net所有域名的解析。

编辑/etc/named.conf,在options后面增加1个正向、4个反向zone(4个IP网段),其余原有内容不用改变:

options {
    directory "/var/named";
    /*
     * If there is a firewall between you and nameservers you want
     * to talk to, you might need to uncomment the query-source
     * directive below.  Previous versions of BIND always asked
     * questions using port 53, but BIND 8.1 uses an unprivileged
     * port by default.
     */
    // query-source address * port 53;
};
 
zone "copyleft.net" IN {
        type master;
        file "copyleft.zone";
};
 
zone "20.10.10.in-addr.arpa" IN {
        type master;
        file "copyleft1.local";
};
 
zone "40.10.10.in-addr.arpa" IN {
        type master;
        file "copyleft2.local";
};
 
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "copyleft3.local";
};
 
zone "0.16.172.in-addr.arpa" IN {
        type master;
        file "copyleft4.local";
};


//
// a caching only nameserver config
//
zone "." IN {
        type hint;
        file "caching-example/named.ca";
};
 
zone "localhost" IN {
        type master;
        file "caching-example/localhost.zone";
        allow-update { none; };
};
 
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "caching-example/named.local";
        allow-update { none; };
};

(3).正向解析

正向解析文件/var/named/copyleft.zone:

$TTL    86400
$ORIGIN copyleft.net.
@               IN SOA  copyleft.net.   root.copyleft.net. (
                                2007061000      ; Serial
                                28800           ; Refresh
                                14400           ; Retry
                                3600000         ; Expire
                                86400 )         ; Minimum
 
                IN NS   out-server.copyleft.net.
 
out-server      IN      A       172.16.0.10
 
develop         IN      A       10.10.20.100
develop         IN      A       10.10.40.100
develop         IN      A       192.168.0.100
develop         IN      A       172.16.0.100
 
home-gate       IN      A       10.10.20.1
home-gate       IN      A       192.168.0.50
 
home-work       IN      A       10.10.20.50
 
away-gate       IN      A       10.10.40.1
away-gate       IN      A       172.16.0.50
 
away-work       IN      A       10.10.40.50
 
route           IN      A       192.168.0.1
route           IN      A       172.16.0.1
 
test-ids        IN      A       192.168.0.10
 
 
www             IN      CNAME   out-server
ftp             IN      CNAME   out-server

其中:

$TTL定义一个通用的TTL变量。

$ORIGIN指出该文件的记录适用的域,注意copyleft.net后面的小数点(.),不可缺少。

SOA后面是此区域的授权主机和管理者邮箱,由于@是保留字,所以用(.)代替,实际邮箱是root@copyleft.net,注意不要少了小数点(.)。

SOA的设置内容在主域服务器和从域服务器之间复制的参数。

NS资源记录指定本地网域的域名服务器,注意该名必须是A资源记录,不能是CNAME等;不要少了小数点(.);否则在home-gate/away-gate等缓存服务器配置时会运行不正常!!!

后面就是具体的A资源记录和CNAME资源记录,由于home-gate和away-gate是网关,有两个地址,所以有两条记录。develop则多达四个。www和ftp作为out-server的别名。

(4).反向解析

反向解析文件/var/named/copyleft1.local,对10.10.20.x地址进行反向解析。

注意末尾的小数点(.):

$TTL    86400
@               IN SOA  copyleft.net.   root.copyleft.net. (
                                2007061000      ; Serial
                                28800           ; Refresh
                                14400           ; Retry
                                3600000         ; Expire
                                86400 )         ; Minimum
 
                IN NS   out-server.copyleft.net.
 
1               IN      PTR     home-gate.copyleft.net.
50              IN      PTR     home-work.copyleft.net.
100             IN      PTR     develop.copyleft.net.

反向解析文件/var/named/copyleft2.local,对10.10.40.x地址进行反向解析。

注意末尾的小数点(.):

$TTL    86400
@               IN SOA  copyleft.net.   root.copyleft.net. (
                                2007061000      ; Serial
                                28800           ; Refresh
                                14400           ; Retry
                                3600000         ; Expire
                                86400 )         ; Minimum
 
                IN NS   out-server.copyleft.net.
 
1               IN      PTR     away-gate.copyleft.net.
50              IN      PTR     away-work.copyleft.net.
100             IN      PTR     develop.copyleft.net.

反向解析文件/var/named/copyleft3.local,对192.168.0.x地址进行反向解析。

注意末尾的小数点(.):

$TTL    86400
@               IN SOA  copyleft.net.   root.copyleft.net. (
                                2007061000      ; Serial
                                28800           ; Refresh
                                14400           ; Retry
                                3600000         ; Expire
                                86400 )         ; Minimum
 
                IN NS   out-server.copyleft.net.
 
1               IN      PTR     route.copyleft.net. 
10              IN      PTR     test-ids.copyleft.net. 
50              IN      PTR     home-gate.copyleft.net.
100             IN      PTR     develop.copyleft.net.

反向解析文件/var/named/copyleft4.local,对172.16.0.x地址进行反向解析。

注意末尾的小数点(.):

$TTL    86400
@               IN SOA  copyleft.net.   root.copyleft.net. (
                                2007061000      ; Serial
                                28800           ; Refresh
                                14400           ; Retry
                                3600000         ; Expire
                                86400 )         ; Minimum
 
                IN NS   out-server.copyleft.net.
 
1               IN      PTR     route.copyleft.net. 
10              IN      PTR     out-server.copyleft.net.
50              IN      PTR     away-gate.copyleft.net.
100             IN      PTR     develop.copyleft.net.

(5).其他设置

配置完毕,使rc.bind脚本可执行:

# chmod u+x /etc/rc.d/rc.bind

现在可以取消/etc/hosts中的ip地址对应关系了:

#172.16.0.10            out-server.copyleft.net out-server

启动bind服务器,执行nslookup进行解析测试,看工作是否正常。

(6).防火墙设置

修改防火墙配置/etc/rc.d/rc.iptables,提供dns解析服务:

# domain
iptables -A INPUT -p udp --dport domain -m state \
	--state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --sport domain -m state \
	--state ESTABLISHED -j ACCEPT