out-server
操作系统版本:Slackware 11.0
索引:
1.分区
- /dev/hda1, /boot, 100M
- /dev/hda2, swap, 256M
- /dev/hda3, /, 其他
2.安装一个基础系统
同开发机设置。
3.安装编辑器
安装vim。
同开发机,参见开发机[安装编辑器]
4.安装zlib
安装zlib,该压缩包会被openssl和openssh用到。
- l/zlib-1.2.3-i486-1
5.安装网络工具包
一些用到的网络工具:
- n/mailx-12.1-i486-1
- n/tcpip-0.17-i486-39
- n/iptables-1.3.5-i486-2
- n/tcpdump-3.9.4-i486-2
- n/openssl-0.9.8d-i486-1
- n/openssh-4.4p1-i486-1
6.配置网络
执行netconfig配置网络,安装虚拟机网卡模块。
机器名:out-server
域名:copyleft.net
IP地址:
- eth0:172.16.0.10/24
路由:
- GETWAY:172.16.0.1
当然,在目前的网络状况下,可以增加一条路由:
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设置。
9.安装grub
同home-work设置。
10.安装新内核
同home-work设置。
11.安装服务器程序
安装服务器程序包,供测试使用,直接使用Slackware本身带的包。
用于测试最典型的服务就是http和ftp,所以安装如下软件包:
- apache-1.3.37-i486-2
- vsftpd-2.0.5-i486-1
- inetd-1.79s-i486-7
修改/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).软件包
安装域名服务器包:
- bind-9.3.2_P1-i486-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