分类 系统运维 下的文章

Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器。 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给“人类”传递文件 :D。Jetty是一个Eclipse基金会的免费开源项目。这个Web服务器用于如Apache ActiveMQ、 Alfresco、 Apache Geronimo、 Apache Maven、 Apache Spark、Google App Engine、 Eclipse、 FUSE、 Twitter的 Streaming API 和 Zimbra中。

这篇文章会介绍‘如何在CentOS服务器中安装Jetty服务器’。

首先我们要用下面的命令安装JDK:

yum -y install java-1.7.0-openjdk wget

JDK安装之后,我们就可以下载最新版本的Jetty了:

wget http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.5.v20141112.tar.gz

解压并移动下载的包到/opt:

tar zxvf jetty-distribution-9.2.5.v20141112.tar.gz -C /opt/

重命名文件夹名为jetty:

mv /opt/jetty-distribution-9.2.5.v20141112/ /opt/jetty

创建一个jetty用户:

useradd -m jetty

改变jetty文件夹的所属用户:

chown -R jetty:jetty /opt/jetty/

为jetty.sh创建一个软链接到 /etc/init.d directory 来创建一个启动脚本文件:

ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty

添加脚本:

chkconfig --add jetty

是jetty在系统启动时启动:

chkconfig --level 345 jetty on

使用你最喜欢的文本编辑器打开 /etc/default/jetty 并修改端口和监听地址:

vi /etc/default/jetty

JETTY_HOME=/opt/jetty
JETTY_USER=jetty
JETTY_PORT=8080
JETTY_HOST=50.116.24.78
JETTY_LOGS=/opt/jetty/logs/

*我们完成了安装,现在可以启动jetty服务了 *

service jetty start

完成了!

现在你可以在 http://<你的 IP 地址>:8080 中访问了

就是这样。

干杯!!


via: http://www.unixmen.com/install-jetty-web-server-centos-7/

作者:Jijo 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰,流量增大或者内部的挑战比如硬件的损坏或紧急维修,无论如何,你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付(CD)也可能威胁到你的 Web 服务的可靠性和性能的一致性。

不可预测,不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢?大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 HAProxy 配置 HTTP 负载均衡器。

什么是 HTTP 负载均衡?

HTTP 负载均衡是一个网络解决方案,它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡,负载均衡器可以防止服务器出现单点故障,可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩,对工作负载进行调整。

什么时候,什么情况下需要使用负载均衡?

负载均衡可以提升服务器的使用性能和最大可用性,当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时,在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。

什么是 HAProxy?

HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程,事件驱动架构,可以轻松的处理 10 Gbps 速率 的流量,在生产环境中被广泛的使用。它的功能包括自动健康状态检查,自定义负载均衡算法,HTTPS/SSL 支持,会话速率限制等等。

这个教程要实现怎样的负载均衡

在这个教程中,我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。

准备条件

你至少要有一台,或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并可以运行

在 Linux 中安装 HAProxy

对于大多数的发行版,我们可以使用发行版的包管理器来安装 HAProxy。

在 Debian 中安装 HAProxy

在 Debian Wheezy 中我们需要添加源,在 /etc/apt/sources.list.d 下创建一个文件 "backports.list" ,写入下面的内容

deb http://cdn.debian.net/debian wheezy­backports main 

刷新仓库的数据,并安装 HAProxy

# apt­ get update
# apt ­get install haproxy 

在 Ubuntu 中安装 HAProxy

# apt ­get install haproxy 

在 CentOS 和 RHEL 中安装 HAProxy

# yum install haproxy 

配置 HAProxy

本教程假设有两台运行的 HTTP Web 服务器,它们的 IP 地址是 192.168.100.2 和 192.168.100.3。我们将负载均衡配置在 192.168.100.4 的这台服务器上。

为了让 HAProxy 工作正常,你需要修改 /etc/haproxy/haproxy.cfg 中的一些选项。我们会在这一节中解释这些修改。一些配置可能因 GNU/Linux 发行版的不同而变化,这些会被标注出来。

1. 配置日志功能

你要做的第一件事是为 HAProxy 配置日志功能,在排错时日志将很有用。日志配置可以在 /etc/haproxy/haproxy.cfg 的 global 段中找到他们。下面是针对不同的 Linux 发型版的 HAProxy 日志配置。

CentOS 或 RHEL:

在 CentOS/RHEL中启用日志,将下面的:

log         127.0.0.1 local2 

替换为:

log         127.0.0.1 local0 

然后配置 HAProxy 在 /var/log 中的日志分割,我们需要修改当前的 rsyslog 配置。为了简洁和明了,我们在 /etc/rsyslog.d 下创建一个叫 haproxy.conf 的文件,添加下面的内容:

$ModLoad imudp 
$UDPServerRun 514  
$template Haproxy,"%msg%\n" 
local0.=info ­/var/log/haproxy.log;Haproxy 
local0.notice ­/var/log/haproxy­status.log;Haproxy 
local0.* ~ 

这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

# service rsyslog restart 

Debian 或 Ubuntu:

在 Debian 或 Ubuntu 中启用日志,将下面的内容

log /dev/log        local0 
log /dev/log        local1 notice 

替换为:

log         127.0.0.1 local0 

然后为 HAProxy 配置日志分割,编辑 /etc/rsyslog.d/ 下的 haproxy.conf (在 Debian 中可能叫 49-haproxy.conf),写入下面你的内容

$ModLoad imudp 
$UDPServerRun 514  
$template Haproxy,"%msg%\n" 
local0.=info ­/var/log/haproxy.log;Haproxy 
local0.notice ­/var/log/haproxy­status.log;Haproxy 
local0.* ~ 

这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

 # service rsyslog restart 

2. 设置默认选项

下一步是设置 HAProxy 的默认选项。在 /etc/haproxy/haproxy.cfg 的 default 段中,替换为下面的配置:

    defaults 
    log     global 
    mode    http 
    option  httplog 
    option  dontlognull 
    retries 3 
    option redispatch 
    maxconn 20000 
    contimeout      5000 
    clitimeout      50000 
    srvtimeout      50000

上面的配置是当 HAProxy 为 HTTP 负载均衡时建议使用的,但是并不一定是你的环境的最优方案。你可以自己研究 HAProxy 的手册并配置它。

3. Web 集群配置

Web 集群配置定义了一组可用的 HTTP 服务器。我们的负载均衡中的大多数设置都在这里。现在我们会创建一些基本配置,定义我们的节点。将配置文件中从 frontend 段开始的内容全部替换为下面的:

listen webfarm *:80 
       mode http 
       stats enable 
       stats uri /haproxy?stats 
       stats realm Haproxy\ Statistics 
       stats auth haproxy:stats 
       balance roundrobin 
       cookie LBN insert indirect nocache 
       option httpclose 
       option forwardfor 
       server web01 192.168.100.2:80 cookie node1 check 
       server web02 192.168.100.3:80 cookie node2 check 

"listen webfarm *:80" 定义了负载均衡器监听的地址和端口。为了教程的需要,我设置为 "*" 表示监听在所有接口上。在真实的场景汇总,这样设置可能不太合适,应该替换为可以从 internet 访问的那个网卡接口。

stats enable 
stats uri /haproxy?stats 
stats realm Haproxy\ Statistics 
stats auth haproxy:stats 

上面的设置定义了,负载均衡器的状态统计信息可以通过 http:///haproxy?stats 访问。访问需要简单的 HTTP 认证,用户名为 "haproxy" 密码为 "stats"。这些设置可以替换为你自己的认证方式。如果你不需要状态统计信息,可以完全禁用掉。

下面是一个 HAProxy 统计信息的例子

"balance roundrobin" 这一行表明我们使用的负载均衡类型。这个教程中,我们使用简单的轮询算法,可以完全满足 HTTP 负载均衡的需要。HAProxy 还提供其他的负载均衡类型:

  • leastconn:将请求调度至连接数最少的服务器­
  • source:对请求的客户端 IP 地址进行哈希计算,根据哈希值和服务器的权重将请求调度至后端服务器。
  • uri:对 URI 的左半部分(问号之前的部分)进行哈希,根据哈希结果和服务器的权重对请求进行调度
  • url\_param:根据每个 HTTP GET 请求的 URL 查询参数进行调度,使用固定的请求参数将会被调度至指定的服务器上
  • hdr(name):根据 HTTP 首部中的 字段来进行调度

"cookie LBN insert indirect nocache" 这一行表示我们的负载均衡器会存储 cookie 信息,可以将后端服务器池中的节点与某个特定会话绑定。节点的 cookie 存储为一个自定义的名字。这里,我们使用的是 "LBN",你可以指定其他的名称。后端节点会保存这个 cookie 的会话。

server web01 192.168.100.2:80 cookie node1 check 
server web02 192.168.100.3:80 cookie node2 check 

上面是我们的 Web 服务器节点的定义。服务器有由内部名称(如web01,web02),IP 地址和唯一的 cookie 字符串表示。cookie 字符串可以自定义,我这里使用的是简单的 node1,node2 ... node(n)

启动 HAProxy

如果你完成了配置,现在启动 HAProxy 并验证是否运行正常。

在 Centos/RHEL 中启动 HAProxy

让 HAProxy 开机自启,使用下面的命令

# chkconfig haproxy on
# service haproxy start 

当然,防火墙需要开放 80 端口,像下面这样

CentOS/RHEL 7 的防火墙

# firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp
# firewall­cmd ­­reload 

CentOS/RHEL 6 的防火墙

把下面内容加至 /etc/sysconfig/iptables 中的 ":OUTPUT ACCEPT" 段中

­A INPUT ­m state ­­state NEW ­m tcp ­p tcp ­­dport 80 ­j ACCEPT 

重启iptables

# service iptables restart 

在 Debian 中启动 HAProxy

启动 HAProxy

# service haproxy start 

不要忘了防火墙开放 80 端口,在 /etc/iptables.up.rules 中加入:

­A INPUT ­p tcp ­­dport 80 ­j ACCEPT 

在 Ubuntu 中启动HAProxy

让 HAProxy 开机自动启动在 /etc/default/haproxy 中配置

ENABLED=1 

启动 HAProxy:

# service haproxy start 

防火墙开放 80 端口:

# ufw allow 80 

测试 HAProxy

检查 HAProxy 是否工作正常,我们可以这样做

首先准备一个 test.php 文件,文件内容如下

<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>

这个 PHP 文件会告诉我们哪台服务器(如负载均衡)转发了请求,哪台后端 Web 服务器实际处理了请求。

将这个 PHP 文件放到两个后端 Web 服务器的 Web 根目录中。然后用 curl 命令通过负载均衡器(192.168.100.4)访问这个文件

$ curl http://192.168.100.4/test.php 

我们多次运行这个命令此时,会发现交替的输出下面的内容(因为使用了轮询算法):

Server IP: 192.168.100.2
X-Forwarded-for: 192.168.100.4

Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4

如果我们停掉一台后端 Web 服务,curl 命令仍然正常工作,请求被分发至另一台可用的 Web 服务器。

总结

现在你有了一个完全可用的负载均衡器,以轮询的模式对你的 Web 节点进行负载均衡。还可以去实验其他的配置选项以适应你的环境。希望这个教程可以帮助你们的 Web 项目有更好的可用性。

你可能已经发现了,这个教程只包含单台负载均衡的设置。这意味着我们仍然有单点故障的问题。在真实场景中,你应该至少部署 2 台或者 3 台负载均衡以防止意外发生,但这不是本教程的范围。

如果你有任何问题或建议,请在评论中提出,我会尽我的努力回答。


via: http://xmodulo.com/haproxy-http-load-balancer-linux.html

作者:Jaroslav Štěpánek 译者:Liao 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Chrony是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器(NTP)同步,因此让你的时间保持精确。它由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

在像CentOS 7之类基于RHEL的操作系统上,已经默认安装有Chrony。

Chrony配置

当Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置。CentOS 7操作系统上最重要的设置有:

server - 该参数可以多次用于添加时钟服务器,必须以"server "格式使用。一般而言,你想添加多少服务器,就可以添加多少服务器。

server 0.centos.pool.ntp.org
server 3.europe.pool.ntp.org

stratumweight - stratumweight指令设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。默认情况下,CentOS中设置为0,让chronyd在选择源时忽略源的层级。

driftfile - chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。

rtcsync - rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。

allow / deny - 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。

allow 192.168.4.5
deny 192.168/16

cmdallow / cmddeny - 跟上面相类似,只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令

bindcmdaddress - 该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。

bindcmdaddress 127.0.0.1
bindcmdaddress ::1

makestep - 通常,chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效。

使用chronyc

你也可以通过运行chronyc命令来修改设置,命令如下:

accheck - 检查NTP访问是否对特定主机可用

activity - 该命令会显示有多少NTP源在线/离线

add server - 手动添加一台新的NTP服务器。

clients - 在客户端报告已访问到服务器

delete - 手动移除NTP服务器或对等服务器

settime - 手动设置守护进程时间

tracking - 显示系统时间信息

你可以通过使用帮助命令查看完整的命令列表:


via: http://linoxide.com/linux-command/chrony-time-sync/

作者:Adrian Dinu 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你是一个测试入侵侦测系统或一些网络访问控制策略的网络管理员,那么你经常需要抓取数据包并在离线状态下分析这些文件。当需要保存捕获的数据包时,我们一般会存储为 libpcap 的数据包格式 pcap,这是一种被许多开源的嗅探工具以及捕包程序广泛使用的格式。如果 pcap 文件被用于入侵测试或离线分析的话,那么在将他们注入网络之前通常要先对 pcap 文件进行一些操作。

在这篇文章中,我将介绍一些操作 pcap 文件的工具,以及如何使用它们 。

Editcap 与 Mergecap

Wireshark,是最受欢迎的 GUI 嗅探工具,实际上它带了一套非常有用的命令行工具集。其中包括 editcap 与 mergecap。editcap 是一个万能的 pcap 编辑器,它可以过滤并且能以多种方式来分割 pcap 文件。mergecap 可以将多个 pcap 文件合并为一个。 这篇文章就是基于这些 Wireshark 命令行工具的。

如果你已经安装过 Wireshark 了,那么这些工具已经在你的系统中了。如果还没装的话,那么我们接下来就安装 Wireshark 命令行工具。 需要注意的是,在基于 Debian 的发行版上我们可以不用安装 Wireshark GUI 而仅安装命令行工具,但是在 Red Hat 及 基于它的发行版中则需要安装整个 Wireshark 包。

Debian, Ubuntu 或 Linux Mint

$ sudo apt-get install wireshark-common

Fedora, CentOS 或 RHEL

$ sudo yum install wireshark

当安装好工具后, 就可以开始使用 editca 与 mergecap 了。

pcap 文件过滤

通过 editcap, 我们能以很多不同的规则来过滤 pcap 文件中的内容,并且将过滤结果保存到新文件中。

首先,以“起止时间”来过滤 pcap 文件。 " - A < start-time > 和 " - B < end-time > 选项可以过滤出在这个时间段到达的数据包(如,从 2:30 ~ 2:35)。时间的格式为 “ YYYY-MM-DD HH:MM:SS"。

$ editcap -A '2014-12-10 10:11:01' -B '2014-12-10 10:21:01' input.pcap output.pcap 

也可以从某个文件中提取指定的 N 个包。下面的命令行从 input.pcap 文件中提取100个包(从 401 到 500)并将它们保存到 output.pcap 中:

$ editcap input.pcap output.pcap 401-500

使用 "-D < dup-window >" (dup-window可以看成是对比的窗口大小,仅与此范围内的包进行对比)选项可以提取出重复包。每个包都依次与它之前的 < dup-window > -1 个包对比长度与MD5值,如果有匹配的则丢弃。

$ editcap -D 10 input.pcap output.pcap
遍历了 37568 个包, 在 10 窗口内重复的包仅有一个,并丢弃。

也可以将 < dup-window > 定义成时间间隔。使用"-w < dup-time-window >"选项,对比< dup-time-window > 时间内到达的包。

$ editcap -w 0.5 input.pcap output.pcap 
检索了 50000 个包, 以0.5s作为重复窗口,未找到重复包。

分割 pcap 文件

当需要将一个大的 pcap 文件分割成多个小文件时,editcap 也能起很大的作用。

将一个 pcap 文件分割成数据包数目相同的多个文件

$ editcap -c <packets-per-file> <input-pcap-file> <output-prefix> 

输出的每个文件有相同的包数量,以 < output-prefix >-NNNN的形式命名。

以时间间隔分割 pcap 文件

$ editcap -i <seconds-per-file> <input-pcap-file> <output-prefix> 

合并 pcap 文件

如果想要将多个文件合并成一个,用 mergecap 就很方便。

当合并多个文件时,mergecap 默认将内部的数据包以时间先后来排序。

$ mergecap -w output.pcap input.pcap input2.pcap [input3.pcap . . .]

如果要忽略时间戳,仅仅想以命令行中的顺序来合并文件,那么使用 -a 选项即可。

例如,下列命令会将 input.pcap 文件的内容写入到 output.pcap, 并且将 input2.pcap 的内容追加在后面。

$ mergecap -a -w output.pcap input.pcap input2.pcap 

总结

在这篇指导中,我演示了多个 editcap、 mergecap 操作 pcap 文件的例子。除此之外,还有其它的相关工具,如 reordercap用于将数据包重新排序,text2pcap 用于将 pcap 文件转换为文本格式, pcap-diff用于比较 pcap 文件的异同,等等。当进行网络入侵测试及解决网络问题时,这些工具与包注入工具非常实用,所以最好了解他们。

你是否使用过 pcap 工具? 如果用过的话,你用它来做过什么呢?


via: http://xmodulo.com/filter-split-merge-pcap-linux.html

作者:Dan Nanni 译者:SPccman 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Jetty提供了一个Web服务器和javax.servlet容器,为SPDY、WebSocket、OSGi、JMX、JNDI、JAAS以及许多其它集成套件添加了支持。这些组件都是开源的,也可用于商业用途和分发。

Jetty被广泛用于多种项目和产品,都可以在开发环境和生产环境中使用。Jetty可以很容易地嵌入到设备、工具、框架、应用服务器以及集群中。更多用途可参见Jetty网页。

Jetty特性

  • 全功能并基于标准
  • 开源与商用两可
  • 灵活和可扩展
  • 小足迹
  • 可嵌入
  • 异步支持
  • 企业弹性扩展
  • Apache和Eclipse双重许可证

ubuntu 14.10 server上安装Jetty 9

先决条件

在安装Jetty服务器前,您需要通过以下命令安装Java

sudo apt-get install openjdk-8-jdk

Java将会安装到/usr/lib/jvm/java-8-openjdk-i386,同时在该目录下会创建一个名为java-8-openjdk-i386的符号链接,在/usr/bin/java下也会相应创建符号链接。

现在你需要从这里下载Jetty9,在下载完成后,你需要使用以下命令来解压缩

$tar -xvf jetty-distribution-9.2.5.v20141112.tar.gz

该操作会将它解压到jetty-distribution-9.2.5.v20141112,而你需要使用以下命令将归档文件移动到/opt/jetty

$mv jetty-distribution-9.2.5.v20141112 /opt/jetty

你需要创建jetty用户,并将其设置成/opt/jetty目录的属主

sudo useradd jetty -U -s /bin/false
sudo chown -R jetty:jetty /opt/jetty

使用以下命令拷贝Jetty脚本到启动目录,以便让它作为一个服务来运行

$ cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty

现在,你需要使用以下内容来创建Jetty设置文件

sudo vi /etc/default/jetty

添加以下行

JAVA_HOME=/usr/bin/java
JETTY_HOME=/opt/jetty
NO_START=0
JETTY_ARGS=jetty.port=8085
JETTY_HOST=0.0.0.0
JETTY_USER=jetty 

保存并退出该文件

你需要使用以下命令来启动Jetty服务

sudo service jetty start

你应该看到和下面类似的输出

Starting Jetty: OK Mon Nov 24 11:55:48 GMT 2014

如果你看到了下面的错误

** ERROR: JETTY\_HOME not set, you need to set it or install in a standard location

你需要确保在/etc/default/jetty文件中设置了正确的Jetty家目录路径,你可以使用以下URL来测试jetty。

Jetty现在应该运行在8085端口,打开浏览器并访问http://服务器IP:8085,你应该可以看到Jetty屏幕。

Jetty服务检查

使用以下命令来验证并检查配置

sudo service jetty check

使用以下命令来让Jetty开重启后自动启动

sudo update-rc.d jetty defaults

重启服务器并测试Jetty是否自动启动。

要检查Jetty运行在哪个端口上,或者该端口是否与其它程序冲突,可以运行netstat -tln


via: http://www.ubuntugeek.com/install-jetty-9-java-servlet-engine-and-webserver-on-ubuntu-14-10-server.html

作者:ruchi 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

BIND(Berkeley internet Name Daemon)也叫做NAMED,是现今互联网上使用最为广泛的DNS 服务器程序。这篇文章将要讲述如何在 chroot 监牢中运行 BIND,这样它就无法访问文件系统中除“监牢”以外的其它部分。

例如,在这篇文章中,我会将BIND的运行根目录改为 /var/named/chroot/。当然,对于BIND来说,这个目录就是 /(根目录)。 “jail”(监牢,下同)是一个软件机制,其功能是使得某个程序无法访问规定区域之外的资源,同样也为了增强安全性(LCTT 译注:chroot “监牢”,所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件进行操作,从而保证整个服务器的安全)。Bind Chroot DNS 服务器的默认“监牢”为 /var/named/chroot。

你可以按照下列步骤,在CentOS 7.0 上部署 Bind Chroot DNS 服务器。

1、安装Bind Chroot DNS 服务器

[root@centos7 ~]# yum install bind-chroot bind -y

2、拷贝bind相关文件,准备bind chroot 环境

[root@centos7 ~]# cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/

3、在bind chroot 的目录中创建相关文件

[root@centos7 ~]# touch /var/named/chroot/var/named/data/cache_dump.db
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named_stats.txt
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named_mem_stats.txt
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named.run
[root@centos7 ~]# mkdir /var/named/chroot/var/named/dynamic
[root@centos7 ~]# touch /var/named/chroot/var/named/dynamic/managed-keys.bind

4、 将 Bind 锁定文件设置为可写

[root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/data
[root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/dynamic

5、 将 /etc/named.conf 拷贝到 bind chroot目录

[root@centos7 ~]# cp -p /etc/named.conf /var/named/chroot/etc/named.conf

6、 在/etc/named.conf中对 bind 进行配置。

在 named.conf 文件尾添加 example.local 域信息, 创建转发域(Forward Zone)与反向域(Reverse Zone)(LCTT 译注:这里example.local 并非一个真实有效的互联网域名,而是通常用于本地测试的一个域名;如果你需要做权威 DNS 解析,你可以将你拥有的域名如这里所示配置解析。):

[root@centos7 ~]# vi /var/named/chroot/etc/named.conf

-

..
..
zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
};
..
..

named.conf 完全配置如下:

//
// named.conf
//
// 由Red Hat提供,将 ISC BIND named(8) DNS服务器 
// 配置为暂存域名服务器 (用来做本地DNS解析).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };

        /*
         - 如果你要建立一个 授权域名服务器 服务器, 那么不要开启 recursion(递归) 功能。
         - 如果你要建立一个 递归 DNS 服务器, 那么需要开启recursion 功能。
         - 如果你的递归DNS服务器有公网IP地址, 你必须开启访问控制功能,
           只有那些合法用户才可以发询问. 如果不这么做的话,那么你的服
           服务就会受到DNS 放大攻击。实现BCP38将有效抵御这类攻击。
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

7、 为 example.local 域名创建转发域与反向域文件

a)创建转发域

[root@centos7 ~]# vi /var/named/chroot/var/named/example.local.zone

添加如下内容并保存:

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum

;       Define the nameservers and the mail servers

               IN      NS      ns1.example.local.
               IN      NS      ns2.example.local.
               IN      A       192.168.0.70
               IN      MX      10 mx.example.local.

centos7          IN      A       192.168.0.70
mx               IN      A       192.168.0.50
ns1              IN      A       192.168.0.70
ns2              IN      A       192.168.0.80

b)创建反向域

[root@centos7 ~]# vi /var/named/chroot/var/named/192.168.0.zone

-

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum

0.168.192.in-addr.arpa. IN      NS      centos7.example.local.

70.0.168.192.in-addr.arpa. IN PTR mx.example.local.
70.0.168.192.in-addr.arpa. IN PTR ns1.example.local.
80.0.168.192.in-addr.arpa. IN PTR ns2.example.local.。

8、开机自启动 bind-chroot 服务

[root@centos7 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
[root@centos7 ~]# systemctl stop named
[root@centos7 ~]# systemctl disable named
[root@centos7 ~]# systemctl start named-chroot
[root@centos7 ~]# systemctl enable named-chroot
ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'

via: http://www.ehowstuff.com/how-to-setup-bind-chroot-dns-server-on-centos-7-0-vps/

作者:skytech 译者:SPccman 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出