⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0560daemons.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    only_from       = 140.116.0.0/16      <span class=term_note>&lt;==只允许 140.116.0.0 ~ 140.116.255.255
                                             这个网段连线进来使用 telnet 的服务</span>
    only_from      += .edu.tw             <span class=term_note>&lt;==累加设定,只有教务界才能连线!</span>
    access_times    = 1:00-9:00 20:00-23:59
                                          <span class=term_note>&lt;==每天只有这两个时段开放服务</span>
    umask           = 022                 <span class=term_note>&lt;==建立档案时的预设属性设定</span>
    instances       = 10                  <span class=term_note>&lt;==同时只允许 10 个连线</span>
    nice            = 10                  <span class=term_note>&lt;==使用的优先顺序较低</span>
    flags           = REUSE               <span class=term_note>&lt;==额外使用的参数</span>
    socket_type     = stream              <span class=term_note>&lt;==使用 tcp 封包常用的连线型态</span>
    wait            = no                  <span class=term_note>&lt;==不需等待,可以同时允许多个连线</span>
    user            = root                <span class=term_note>&lt;==启动程序的使用者身份</span>
    server          = /usr/sbin/in.telnetd<span class=term_note>&lt;==服务启动的程式</span>
    server_args     = -a none             <span class=term_note>&lt;==上面那个程式的参数</span>
    log_on_failure  += USERID             <span class=term_note>&lt;==错误登入时,要记录下来的内容</span>
}</span>
</pre></td></tr></table>

		在上面这个范例当中,我们用了很多的网路 IP 显示方式,包括 192.168.1.0/24 ,
		以及 140.116.0.0/16 ,这代表『 192.168.1.0~192.168.1.255 的所有 IP 』以及
		『 140.116.0.0 ~140.116.255.255 所有的 IP 』更详细的说明,我们会在伺服器篇内详谈的。
		用了这个设定值之后,你会发现你的 telnet 针对两个网段来设计了!
		设计完成之后,由于这是 xinetd 的设定档,所以启动的方式与观察的方式为∶<br>

<table class="term"><tr><td class="term"><pre>
<span class=term_say># 如果您的 telnet 本来就有启动的话,那么会发现有一个连线存在你的系统中</span>
[root@linux ~]# <span class=term_command>netstat -tulnp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 0.0.0.0:23      0.0.0.0:*        LISTEN  19255/xinetd
<span class=term_say># 看到喔!是 xinetd 的 program name 呢!</span>

<span class=term_say># 重新修改 /etc/xinetd.d/telnet 之后,重新启动的方式与观察为∶</span>
[root@linux ~]# <span class=term_command>/etc/init.d/xinetd restart</span>
[root@linux ~]# <span class=term_command>netstat -tulnp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address  State   PID/Program name
tcp        0      0 140.116.44.125:23  0.0.0.0:*        LISTEN  19281/xinetd
tcp        0      0 192.168.1.100:23   0.0.0.0:*        LISTEN  19281/xinetd
<span class=term_say># 有没有看到两个介面啊~而且, PID 会是同一个呢!</span>
</pre></td></tr></table>

		呵呵!如上面的设定,我们可以将 telnet 的启动项目进行更多的限制!
		如此一来,将有助于我们的安全防护呢!尤其如果可以针对不同的介面来设定,嘿嘿!
		就更加的棒棉!不过,请注意喔!如果照上面的设定,那么您的主机上面将会开了两个
		23 port 的介面,分别是给两个介面来使用的呢!嗯!真好玩?同样的,
		你也可以针对自己的喜好来设定你的其他 daemon 使他挂在 xinetd 底下呢!
	</div>
</div>


<hr><a NAME="tcp_wrappers"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class=text_h1>TCP_Wrappers</span>
<div class=block1>
	事实上,除了使用 xinetd 的设定档来设定安全机制之外,
	我们还可以利用额外的机制来抵挡某些不受欢迎的资料来源喔!
	那就是 /etc/hosts.allow 以及 /etc/hosts.deny 这两个档案的功能啦!
	这两个档案可以藉由分析∶<ul>
	<li>启动的服务名称 (daemon 执行档档名);
	<li>用户端的 IP 来源或网段来源。
	</ul>
	来进行用户端使用者是否能够登入的判断呢!不过,虽然这两个档案已经被整合到 xinetd 里面去了,
	不过,要获得更多的功能,还是得要安装 tcp_wrappers 这个套件才行!
	因为,这两个档案本身就是 tcp_wrappers ( 其实是 /usr/sbin/tcpd 那个档案而已啦! ) 的设定档啊!
	而他也可以整合到整个系统的服务里头去,可以算是最最基础的一个防火墙架构啦! ^_^<br><br>

	其实, /etc/hosts.allow 与 /etc/hosts.deny 是 /usr/sbin/tcpd 的设定档,
	而这个 /usr/bin/tcpd 则是用来分析进入系统的 TCP 封包的一个软体,他是由 TCP Wrappers 所提供的。
	那为什么叫做 TCP_Wrappers 呢?那么 wrappers 有包裹的意思,所以说,这个套件本身的功能就是在分析
	TCP 网路资料封包啦!那么刚刚我们稍微提到我们网路的封包资料主要是以 TCP
	封包为主,这个 TCP 封包的档头至少记录了来源与目主机的 IP 与 port ,因此,若藉由分析
	TCP 封包,就可以比对看我要不要让这个资料进入到主机里面来棉!所以啦,我们要使用
	TCP_Wrappers 来控管的,就是∶<ol><span class=text_import2>
	<li>来源 IP
	<li>port (就是服务啦)</ol></span>

	TCP_Wrappers 设定 TCP 封包是否可以进入的设定档在 /etc/hosts.allow 与 /etc/hosts.deny
	当中。因此,基本上,如果一个服务是受到 xinetd 或 TCP_Wrappers 的控制时,那么该服务就会受限于
	hosts.allow 与 hosts.deny 的管理了!而如果你自己安装的套件当中( 亦即使用
	Tarball 安装的方式之套件 ),除非有自行定义支援 TCP_Wrappers 的功能 ,否则就无法使用这个玩意棉!嘿嘿!
	<br><br>

	那么这两个档案是干嘛用的?刚刚不是提过哪!他主要是用来规范 TCP 封包的规则的,所以呢,
	里面记录的当然就是∶『某些 IP 在特定服务中是否能够进入主机』!那么要怎么写?
	这两个档案的内容基本的语法是∶<br>

<table class="term"><tr><td class="term"><pre>
&lt;service(program_name)> : &lt;IP, domain, hostname> : &lt;action>
</pre></td></tr></table>

	所以我们要先找出来那个 service_name 才行,例如以我们刚刚的 telnet 为例,那个
	service_name 是什么呢?其实指的就是在 xinetd.conf 设定档中的 server 这个设定后面接的程式名称啦!所以,
	telnet 在 FC4 底下的名称为 in.telnetd
	因此,如果你不想让 140.116.44.202 这个位址及 140.116.32.0/255.255.255.0
	这个 C class 的网域进入你的主机的话,那么可以这样在 /etc/hosts.deny 里面设定∶ (
	<span class=text_vbird>关于 IP, 网域, 网段, 还有相关的网路知识,在这个基础篇当中我们不会谈到,
	详细的资料请先自行参考伺服器架设篇的内容! </span>)<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
in.telnetd : 140.116.44.202 140.116.32.0/255.255.255.0 : deny
</pre></td></tr></table>

	当然也可以写成两行,亦即是∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
in.telnetd : 140.116.44.202             : deny
in.telnetd : 140.116.32.0/255.255.255.0 : deny
</pre></td></tr></table>

	这样一来,对方就无法以 telnet 进入你的主机啦!方便吧!不过,既然如此,为什么要设定成
	/etc/hosts.allow 及 /etc/hosts.deny 两个档案呢?其实只要有一个档案存在就够了,
	不过,为了设定方便起见,我们存在两个档案,其中需要注意的是∶
	<ul><span class=text_import2><font face="细明体">
	<li>写在 hosts.allow 当中的 IP 与网段,为预设『可通行』的意思,亦即最后一个栏位 allow 可以不用写;
	<li>而写在 hosts.deny 当中的 IP 与网段则预设为 deny ,第三栏的 deny 亦可省略;
	<li>这两个档案的判断依据是∶ (1) 以 /etc/hosts.allow 为优先,而
		(2) 若分析到的 IP 或网段并没有纪录在 /etc/hosts.allow ,则以 /etc/hosts.deny 来判断。
	</ul></span></font>

	也就是说, /etc/hosts.allow 的设定优先于 /etc/hosts.deny 棉!了解了吗?基本上,只要
	hosts.allow 也就够了,因为我们可以将 allow 与 deny 都写在同一个档案内,
	只是这样一来似乎显得有点杂乱无章,因此,通常我们都是∶
	<ol><span class=text_import2><font face="细明体">
	<li>允许进入的写在 /etc/hosts.allow 当中;
	<li>不许进入的则写在 /etc/hosts.deny 当中。</ol></span></font>

	此外,我们还可以使用一些特殊参数在第一及第二个栏位喔!内容有∶
	<ul><span class=text_import2><font face="细明体">
	<li>ALL∶代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny
	<li>LOCAL∶代表来自本机的意思,例如∶ ALL: LOCAL: allow
	<li>UNKNOWN∶代表不知道的 IP 或者是 domain 或者是服务时;
	<li>KNOWN∶代表为可解析的 IP, domain 等等资讯时;
	</ul></span></font>

	再强调一次,那个 service_name 其实是启动该服务的程式,举例来说, /etc/init.d/ssh 这个 script 里面,
	实际上启动 ssh 服务的是 sshd 这个程式,所以,你的 service_name 自然就是 sshd 棉!
	而 /etc/xinetd.d/telnet 内有个 server 的设定项目,
	那个项目指到 in.telnetd 这个程式来启动的喔!要注意的很!(请分别使用 vi 进这两支 scripts 查阅)
	好了,我们还是以 telnet 为例子来说明好了,现在假设一个比较安全的流程来设定,就是∶

	<ol><span class=text_import2><font face="细明体">
	<li>只允许 140.116.44.0/255.255.255.0
	与 140.116.79.0/255.255.255.0 这两个网域,及 140.116.141.99 这个主机可以进入我们的 telnet 伺服器;
	<li>此外,其他的 IP 全部都挡掉!
	</ol></span></font>

	这样的话,我可以这样设定∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.allow</span>
<span class=term_write>in.telnetd:  140.116.44.0/255.255.255.0
in.telnetd:  140.116.79.0/255.255.255.0
in.telnetd:  140.116.141.99
in.telnetd:  LOCAL</span>

[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
<span class=term_write>in.telnetd: ALL </span>
</pre></td></tr></table>

	那么有没有更安全的设定,例如,当当有其他人扫瞄我的
	telnet port 时,我就将他的 IP 记住!以做为未来的查询与认证之用!
	是有的!只是,那就得要有额外的动作参数加在第三栏了。主要的动作有∶

	<ul><span class=text_import2><font face="细明体">
	<li><span class=text_import1>spawn (action)</span><br>
		可以利用后续接的 shell 来进行额外的工作,且具有变数功能,主要的变数内容为∶
		%h (hostname), %a (address), %d (daemon)等等;</li><br>
	<li><span class=text_import1>twist (action)</span><br>
		立刻以后续的指令进行,且执行完后终止该次连线的要求 (DENY)
	</ul></span></font>

	我们知道 finger 可以反向追踪网路封包的来源,所以,我希望这样∶<ol>
	<li>利用 safe_finger 去追踪出对方主机的资讯;
	<li>将该追踪到的结果以 email 的方式寄给 root ;
	<li>在对方萤幕上面显示不可登入的讯息</ol>

	此时可以利用 spwan (action1) | (action2) : twist (action3) 来进行,
	也就是说,其实在 /etc/hosts.deny 的第三个栏位可以继续延伸下去的!整个资讯有如这样∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
<span class=term_write>in.telnetd: ALL: spawn (echo "security notice from host `/bin/hostname`" ;\
	echo; /usr/sbin/safe_finger @%h ) | \
	/bin/mail -s "%d-%h security" root &amp; \
	: twist ( /bin/echo -e "\n\nWARNING connection not allowed.\n\n" )</span>
</pre></td></tr></table>

	在上面的例子中,第三行的 root 那个帐号,可以写成你的个人帐号或者其他
	e-mail ,以免很少以 root 身份登入 Linux 主机时,容易造成不知道的情况,另外,最后几行,亦即
	:twist 之后的那几行为同一行。如此一来,当未经允许的电脑尝试登入你的主机时,
	对方的萤幕上就会显示

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -