📄 0560daemons.htm
字号:
<br> <table border="1" cols="1" width="700"><tbody><tr><td bgcolor="#000000"><font size="-1" color="#ffffcc" face="SimSun">#先针对对内的较为松散的限制来设定:</font><br><font size="-1" color="#ffff00" face="SimSun">service telnet</font><br><font size="-1" color="#ffff00" face="SimSun">{</font><br><font size="-1" face="SimSun"><font color="#ffff00"> disable = no   </font><font color="#ff9900"><==预设就是启动telnet 服务</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> bind = 192.168.0.254 </font><font color="#ff9900"> <==只允许经由这个适配卡的封包进来</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> only_from = 192.168.0.0/24 </font><font color="#ff9900"> <==只允许 192.168.0.0/24这个网段</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> </font><font color="#ff9900">的主机联机进来使用telnet 的服务</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> instances = UNLIMITED </font><font color="#ff9900"><==同时允许联机不限制!</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> nice = 0 </font><font color="#ff9900"> <==使用的优先级较高</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> flags = REUSE </font><font color="#ff9900"> <==额外使用的参数</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> socket_type = stream </font><font color="#ff9900"> <==使用 tcp 封包常用的联机型态</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> wait =no </font><font color="#ff9900"> <==不需等待,可以同时允许多个联机</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> user =root </font><font color="#ff9900"> <==启动程序的使用者身份</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> server = /usr/sbin/telnetd </font><font color="#ff9900"><==服务启动的程序</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> server_args = -a none </font><font color="#ff9900"> <==上面那个程序的参数</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> log_on_failure +=USERID </font><font color="#ff9900"> <==错误登入时,要记录下来的内容</font></font><br><font size="-1" color="#ffff00" face="SimSun">}</font><p><font size="-1" color="#ffffcc" face="SimSun"># 再针对外部的联机来进行限制呢!</font><br><font size="-1" color="#ffff00" face="SimSun">service telnet</font><br><font size="-1" color="#ffff00" face="SimSun">{</font><br><font size="-1" face="SimSun"><font color="#ffff00"> disable = no                 </font><font color="#ff9900"><==预设就是启动 telnet 服务</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> bind = 140.116.44.125     </font><font color="#ff9900"><==只允许经由这个适配卡的封包进来</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> only_from = 140.116.0.0/16     </font><font color="#ff9900"><==只允许 140.116.0.0 ~ 140.116.255.255</font></font><br><font size="-1" face="SimSun"><font color="#ffff00">                                               </font><font color="#ff9900">这个网段联机进来使用 telnet 的服务</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> only_from = .edu.tw            </font><font color="#ff9900"><==重复设定,只有教务界才能联机!</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> no_access = 140.116.32.{10,26}  </font><font color="#ff9900"><==不许这些PC 登入</font></font><br><font size="-1" color="#ffff00" face="SimSun"> access_times =1:00-9:00 20:00-23:59</font><br><font size="-1" face="SimSun"><font color="#ffff00">                                             </font><font color="#ff9900"><==每天只有这两个时段开放服务</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> umask = 022                </font><font color="#ff9900"><==建立档案时的预设属性设定</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> instances = 10                 </font><font color="#ff9900"><==同时只允许 10 个联机</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> nice =10                 </font><font color="#ff9900"><==使用的优先级较低</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> flags = REUSE              </font><font color="#ff9900"><==额外使用的参数</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> socket_type = stream             </font><font color="#ff9900"><==使用 tcp 封包常用的联机型态</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> wait =no               </font><font color="#ff9900">  <==不需等待,可以同时允许多个联机</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> user =root              </font><font color="#ff9900"> <==启动程序的使用者身份</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> server =/usr/sbin/telnetd  </font><font color="#ff9900"> <==服务启动的程序</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> server_args = -a none           </font><font color="#ff9900"> <==上面那个程序的参数</font></font><br><font size="-1" face="SimSun"><font color="#ffff00"> log_on_failure +=USERID          </font><font color="#ff9900">  <==错误登入时,要记录下来的内容</font></font><br><font size="-1" color="#ffff00" face="SimSun">}</font></p></td></tr></tbody></table></p><p>呵呵!如上面的设定,我们可以将 telnet 的启动项目进行更多的限制!如此一来,将有助于我们的安全防护呢!尤其如果可以针对不同的接口来设定,嘿嘿!就更加的棒啰!不过,请注意喔!如果照上面的设定,那么您的主机上面将会开了两个23 port 的接口,分别是给两个接口来使用的呢!嗯!真好玩?同样的,你也可以针对自己的喜好来设定你的其它daemon 使他挂在 xinetd 底下呢!</p></blockquote><hr width="100%"><a name="tcp_wrappers"></a><font size="+1" color="#000099">TCP_Wrappers</font><blockquote>好了,接着下来我们要来说一说,除了 xinetd 之外,还有另一个可以抵挡利用某些服务进入Linux 主机的方法,那就是常常使用的 /etc/hosts.allow 与 /etc/hosts.deny啰!这个方式是我们常常在使用的方法,这里先提几个比较简单的设定方式!注:TCP_Wrappers 也可以当成一个最内层的防火墙了,因为是最内层,所以当然要设定的比较严格啰!<br> <br>为什么叫做 TCP_Wrappers 呢?那么 wrappers 有包裹的意思,所以说,这个套件本身的功能就是在分析TCP 网络数据封包啦!那么刚刚我们稍微提到我们网络的封包数据主要是以 TCP封包为主,这个 TCP 封包的文件头至少记录了来源与目主机的 IP 与 port ,因此,若藉由分析TCP 封包,就可以比对看我要不要让这个数据进入到主机里面来啰!所以啦,我们要使用TCP_Wrappers 来控管的,就是<ol><li><font color="#000066" face="SimSun">来源 IP</font></li><li><font color="#000066" face="SimSun">port (就是服务啦)</font></li></ol>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 bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" color="#ffffff" face="SimSun"><service>: <IP, domain, hostname...> : <allow|deny></font></td></tr></tbody></table> <br>所以我们要先找出来那个 service_name 才行,例如以我们刚刚的 telnet 为例,那个service_name 是什么呢?其实指的就是上表中 server 这个设定后面接的程序名称啦!所以,telnet 在 Mandrake 底下的名称为 telnetd ( 注意,在其它的 distribution 中,这个名称可能会变,例如Red Hat 或 OpenLinux 都是以 in.telnetd 为名!所以这里请参考您的系统里面的设定而定!)。因此,如果你不想让 140.116.44.202 这个地址及 140.116.32.0/255.255.255.0这个 C class 的网域进入你的主机的话,那么可以这样在 /etc/hosts.deny 里面设定:<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testroot]#</font><font color="#ffff00"> vi /etc/hosts.deny</font></font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: 140.116.44.202 : deny</font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: 140.116.32.0/255.255.255.0 : deny</font></td></tr></tbody></table> <br>这样一来,对方就无法以 telnet 进入你的主机啦!方便吧!不过,既然如此,为什么要设定成/etc/hosts.allow 及 /etc/hosts.deny 两个档案呢?呵呵!基本上,他们两个的关系为:<ol><li><font color="#000066" face="SimSun">当档案 /etc/hosts.allow 存在时,则先以此档案内之设定为准;</font></li><li><font color="#000066" face="SimSun">而在 /etc/hosts.allow 没有规定到的事项,将在/etc/hosts.deny 当中继续设定!</font></li></ol>也就是说, /etc/hosts.allow 的设定优先于 /etc/hosts.deny 啰!了解了吗?基本上,只要hosts.allow 也就够了,因为我们可以将 allow 与 deny 都写在同一个档案内,只是这样一来似乎显得有点杂乱无章,因此,通常我们都是:<ol><li><font color="#000066" face="SimSun">允许进入的写在 /etc/hosts.allow当中;</font></li><li><font color="#000066" face="SimSun">不许进入的则写在 /etc/hosts.deny当中。</font></li></ol> 再强调一次,那个 service_name 『必需』跟你的 xinetd 或者是 /etc/rc.d/init.d/*里面的程序名称要相同。好了,我们还是以 telnet 为例子来说明好了,现在假设一个比较安全的流程来设定,就是:<ol><li><font color="#000066" face="SimSun">只允许 140.116.44.0/255.255.255.0与 140.116.79.0/255.255.255.0 这两个网域,及 140.116.141.99 这个主机可以进入我们的telnet 服务器;</font></li><li><font color="#000066" face="SimSun">此外,其它的 IP 全部都挡掉!</font></li></ol>这样则首先可以设定 /etc/hosts.allow 这个档案成为:<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testroot]# </font><font color="#ffff00">vi /etc/hosts.allo</font></font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: 140.116.44.0/255.255.255.0 : allow</font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: 140.116.79.0/255.255.255.0 : allow</font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: 140.116.141.99            : allow</font></td></tr></tbody></table> <br>再来,设定 /etc/hosts.deny 成为『全部都挡掉』的状态:<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testroot]# </font><font color="#ffff00">vi /etc/hosts.deny</font></font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: ALL     : deny</font></td></tr></tbody></table> <br>那个 ALL 代表『全部』的意思!呵呵!很棒吧!那么有没有更安全的设定,例如,当当有其它人扫瞄我的telnet port 时,我就将他的 IP 记住!以做为未来的查询与认证之用!那么你可以将/etc/hosts.deny 这个档案改成这个样子:<br> <table bgcolor="#000000" border="1" cols="1" width="600"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testroot]# </font><font color="#ffff00">vi /etc/hosts.deny</font></font><br><font size="-1" color="#ffffff" face="SimSun">telnetd: ALL: spawn (echo Security notice from host `/bin/hostname`; \</font><br><font size="-1" color="#ffffff" face="SimSun">echo; /usr/sbin/safe_finger@%h ) | \</font><br><font size="-1" face="SimSun"><font color="#ffffff">/bin/mail -s"%d-%h security" </font><font color="#ffff00">root</font><font color="#ffffff">& \</font></font><br><font size="-1" color="#ffffff" face="SimSun">: twist ( /bin/echo-e "\n\nWARNING connection not allowed. Your attempt has been logged. \n\n\n警告您尚未允许登入,您的联机将会被纪录,并且作为以后的参考\n\n". )</font></td></tr></tbody></table> <br>在上面的例子中,黄色字体字『 root 』,可以写成你的个人账号或者其它e-mail ,以免很少以 root 身份登入 Linux 主机时,容易造成不知道的情况,另外,最后几行,亦即:twist 之后的那几行为同一行。如此一来,当未经允许的计算机尝试登入你的主机时,对方的屏幕上就会显示上面的最后一行,并且将他的IP 寄到 root (或者是你自己的信箱)那里去!(注:某些没有安装 tcp_wrappers的套件之 distribution 中,由于没有 safe_finger 等程序,所以无法执行相关的功能,这点还请多加注意呢!)</blockquote><hr width="100%"><a name="open_services"></a><font size="+1" color="#000099">系统开启的服务</font><blockquote>好了,现在假设您已经知道了 daemons 的启动档案放置的目录,也知道了服务与port 的对应,那么要如何查询目前系统上面已经启动了的服务呢?不要再打混了!已经学过了ps 与 top 应该要会应用才对耶!呵呵!没错,可以使用 ps 与 top 来找寻已经启动了的服务的程序与他的PID 呢!不过,我们怎么知道该服务启动的 port 是哪一个?呵呵!好问题!可以直接使用netstat 这个网络状态观察指令来检查我们的 port 呢!甚至他也可以帮我们找到该
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -