这几天折腾iptables,我使用了一个路由器,一台linux作为网关,一个windows主机。三台机器用交换机相连。我要实现的目标是,windows的网关指向linux主机,用iptables来限制上网。
原本按照iptables的理论,转发的数据应该只通过FORWARD链。于是我只要INPUT和FORWARD做了限制,默认为DROP,允许了一些自己认可的端口通过,OUTPUT默认为ACCEPT。这原本就是一个很标准的过滤。但是真正应用的时候,问题出现了,FORWARD链的过滤根本没有起作用。只有把OUTPUT改为DROP才能起作用。百思不得其解之时,我查看了一下windows的路由表。居然神奇地发现,路由表中居然把我请求过的目的地址的下一跳直接改成了我的路由器。即,只要我访问了一次,那么第二次他们根本就不会从我的linux通过。
抓包,发现linux给网关我的windows发了一个ICMP包。
在iptables中DROP掉此类型的ICMP数据,果然,一切正常。
查资料,原来就是一个简单的ICMP重定向~
恨当初自己没仔细看ICMP协议啊。
找出CCNA教程恶补。

当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。这在概念上是很简单的,正如图9-3所示的那样。只有当主机可以选择路由器发送分组的情况下,我们才可能看到ICMP重定向报文(回忆我们在图7-6中看过的例子)。
1)我们假定主机发送一份IP数据报给R1。这种选路决策经常发生,因为R1是该主机的默认路由。
2)R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器所在的LAN)。这样就给路由器发送重定向报文给原始发送端提供了线索。
3)R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。

图9-3 ICMP重定向的例子
  重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项(在图9-3所示的例子中,为R1或R2)。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。ICMP重定向允许TCP/IP主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。显然,在我们的例子中,R1和R2必须知道有关相连网络的更多拓扑结构的信息,但是连在LAN上的所有主机在启动时只需一个默认路由,通过接收重定向报文来逐步学习。

7
1

假象

有时候我在想
到底是假象欺骗了我们还是根本就是我们联手制造了假象

不管如何
如果宁要去反省
每个人的人生都可以总结为两个字
活该

……

5
1

过往

有些过往,总是需要努力去回忆。
而有些,却总是不经意就想起。
或者,我应该感谢这个blog给我留下一些支离破碎的记忆。

每月花费自己三分之一的收入,搬到了一个新住处,总算可以安静地休息了。
但是孤独的时候思维却活跃了,于是突然想到,去年的今天我在干什么呢?苦思冥想都没有结果。大概去年的今天确实没发生什么能让我记得的事吧,也许那一天长春正下着雪,而我正躲在那个温暖的文二525坐在电脑前在牡丹园灌水呢。

翻了翻以往的日志,去年自己说今年下半年要换个工作,找个有厨房的住处。如果可能还要找个伴。大概这些差不多都实现了吧,只不过有厨房没有炊具,有伴但不在身边而已。原来自己的愿望就这么轻而易举地实现了,一个多么容易满足的人啊。

前年,通过日志我可以确定,前年的今天,我收拾好了行李准备第二天踏上回家的路,迎来了大学时代的最后一个假期。那个假期,发生了很多事情,首先是回家病了,然后是……或许这个假期是一个分水岭吧,好运结束,种种困难接踵而来。

再住前,真得记不起来了……

只是有些事情,记不清它发生的具体时间,那情那景却异常清晰。

不曾记得,又何必想起,罢了,休息吧!

31
12

再见2007

又一年过去了

在2007年最后半小时里

我告诉你

2007

我过得真得很辛苦

放心,我不是要告诉你iptables有什么bug给系统安全带来什么致命的问题.

iptables 是linux下一款强大的防火墙,在不考虑效率的情况下,功能强大到足可以替代大多数硬件防火墙,但是强大的防火墙如果应用不当,可能挡住的可不光是那些潜在的攻击,还有可能是你自己哦.这个带来的危害对于普通的个人PC来说可能无关紧要,但是想象一下,如果这是一台服务器,一旦发生这样的情况,不光是影院正常的服务,还需要到现场去恢复,这会给你带来多少损失呢?

所以我想说的是,当你敲入每一个iptables 相关命令的时候都要万分小心.

1.应用每一个规则到 DROP target时,都要仔细检查规则,应用之前要考虑他给你带来的影响.

2.在redhat中我们可以使用service iptables stop来关闭防火墙,但是在有些版本如ubuntu中这个命令却不起作用,大家可能在网上搜索到不少文章告诉你用iptables -F这个命令来关闭防火墙,但是使用这个命令前,千万记得用iptables -L查看一下你的系统中所有链的默认target,iptables -F这个命令只是清除所有规则,只不会真正关闭iptables.想象一下,如果你的链默认target是DROP,本来你有规则来允许一些特定的端口,但一旦应用iptables -L ,清除了所有规则以后,默认的target就会阻止任何访问,当然包括远程ssh管理服务器的你.

所以我建议的关闭防火墙命令是

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

iptables -F

总之,当你要在你的服务器上做任何变更时,最好有一个测试环境做过充分的测试再应用到你的服务器.除此之外,要用好iptables,那就要理解iptables的运行原理,知道对于每一个数据包iptables是怎么样来处理的.这样才能准确地书写规则,避免带来不必要的麻烦.

22
12

出差月

我不想再以“很久都没有日志”来开头,但事实是自从来了广州之后,写日志的兴致与心情便越来越少。

十二月,前半个月的出差,以及后半月做出差后的收尾工作,把他命名为出差月一点都不为过。

去了广东省内的江门、中山、东莞,最喜欢中山的古朴与宁静,据说这是联合国人居奖的获得者,果然名不虚传。

原本自己就是一个喜欢安静的人,只不过偏偏有人要认为我喜欢纸醉金迷罢了。最了解自己的还是内心最原始的渴望。尽管自己会因为各种原因做一些不愿意做的事情。

工作还算顺心,除了钱不多外,至少这份工作还让我觉得能学到点东西,这就够了,我从不渴望一步登天,踏踏实实会让我放心很多。当然,还应该有梦。

希望还在,生活,总是越来越美好的!

夜.广州

    我们常常使用/etc/sysconfig/vncservers文件来控制vncserver的自动启动,但是这种方法使得vncviewer一旦登录,就以某个身份登录到了linux桌面,取得了linux的控制权,显然,这存在着潜在在安全风险.下面使用vncgdm的配合来实现rhel4(rhel5配置文件略有不同)规避这种风险.

    使用gmd,vncviewer连接后,除了要通过vncserver本身的密码验证,还将出现linux本身的login窗口,只有通过linux本身账号和密码验证,方能取得linux控制权.当然这从另一个角度给我们带来了方便,那就是我们可以自由地选择所需要的账户登录.

    配置方法如下:

    1.开启XDMCP功能

      编辑 /etc/X11/gdm/gdm.conf

      找到[xdmcp]一节

      Enable=false改成

      Enable=true

   

    2.配置VNC

      在本例中只启用一个vncserver进程,即端口号为5901:1,如果需要开启更多的进程,按规则相应增加即可.

      1) 创建vnc访问密码

         vncpasswd /root/.vncpasswd #把密码文件存放在/root下的.vncpasswd文件中

        

      2) 创建一个xinetd 服务

         新建文件etc/xinetd.d/vnc1

         内容如下

         service vnc1

          {

          disable = no

          socket_type = stream

          protocol = tcp

          wait = no

          user = root

          server = /usr/bin/Xvnc

          server_args = -inetd -query localhost -geometry 1024×768 -depth 16 -once -fp unix/:7100 -DisconnectClients=0 -NeverShared passwordFile=/root/.vncpasswd -extension XFIXES

}

         上面内容中 1024×768表示启动的桌面分辨率大小,passwordFile表示vncserver密码文件存放的位置.

 

       3) vnc自动启动

         编辑  /etc/services

         加入vnc1 5901/tcp # VNC & GDM

         注意vnc1表示你在xinetd中创建的服务,5901/tcp表示vncserver所用的端口,vncserver使用端口从5900开始递增,在使用vncviewer连接时,5900表示:0,5901表示:2.以此类推.

      

       OK,一切完毕,重启验证一下吧,goodluck!

  补充方法二

etc/xinetd.d/vnc1改为如下内容:

service vnc1

{

      type = UNLISTED

      disable = no

      socket_type = stream

      protocol = tcp

      wait = yes

      user = root

    server = /usr/bin/Xvnc

    server_args = -inetd :1 -query localhost -geometry 1024×768 -depth 16 -once -fp unix/:7100  -DisconnectClients=1 -AlwaysShared passwordFile=/root/.vncpasswd -extension XFIXES

    port = 5901

}

       取消3) vnc自动启动 这一步骤.

 两种方法的不同之处在于:

第一种方法,每次连接都显示linux login窗口,每登录一个用户都是不同的桌面.关闭vncviewer,用户自动注销,而不会保留该用户桌面.

第二种方法,当此前没有使用vncviewer登录过任何用户时,显示linux login窗口,当之前有用户登录过,而且没有注销时,显示该用户桌面而不显示linux login窗口.该用户注销后,重新显示linux login窗口.

28
10

2007.10

快一个月没写blog了,日志变成了月志.
生活总会继续,十一期间想着十一以后能不能找到工作,十月八号就有通知让我去上班.
待遇不满意,但好歹算个大公司,各方面正规一点,在招聘淡季正经招聘企业越来越少的情形下,我还是决定先上班再说.虽然一上班就有好多比这好的公司的面试电话,但是诱惑时时都有,努力提高自己的能力,机会总是会有的.
上了两周的班,感觉还算轻松,5×8的工作制,除了出差时加班外,基本上还算是清闲.
离职两个月,看了好几本七八百页的书,超过了在长春工作一年所看.
疯狂地学习linux,这恐怕是我进这家公司在知识上对我带来的唯一要求与压力.当然要学的还很多,cisco方面不能放弃,毕竟已经有一个比较好的开始了.英语还要大大地加强.
时时要记住,自己还有更远大的目标.
人变得越来越现实,很多东西都用金钱来量化了,这恐怕就是一个人成长的代价,这也成就了那些过住的回忆在自己心目中的美好.
Anyway,我们没有任何回头的机会,只能向前走,在不同阶段用不同的标准来衡量自己所得到的幸福.

30
9

?

牢骚满腹的我总是对心里已经认可的世事喋喋不休
以至于我总是不知道自己应该做什么样的决定
但是奇怪的是这么多年我居然完完全全自己决定了自己的道路
而且总是在关键时刻用自己最初的想法决定所有事情
于是连我自己都搞不清楚自己到底算是一个优柔寡断还是决断如流的人了