随笔-32  评论-23  文章-4  trackbacks-0
  2012年1月28日

来自Linuxsir.org上的一篇文章,挺好的iptable带实例讲解的入门篇,感谢原作者liweioop

http://www.linuxsir.org/bbs/thread184634.html

--------正文------------

1、iptables介绍

iptables是复杂的,它集成到linux内核中。用户通过iptables,可以对进出你的计算机的数据包进行过滤。通过iptables命令设置 你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。接下来,我将告诉你如何设置自己的规则,从现在 就开始吧。



2、初始化工作

在shell提示符 # 下打入

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

以上每一个命令都有它确切的含义。一般设置你的iptables之前,首先要清除所有以前设置的规则,我们就把它叫做初始化好了。虽然很多情况下它什么也不做,但是保险起见,不妨小心一点吧! 如果你用的是redhat 或fedora,那么你有更简单的办法

service iptables stop



3、开始设置规则:

接下下开始设置你的规则了

iptables -P INPUT DROP

这一条命令将会为你构建一个非常“安全”的防火墙,我很难想象有哪个hacker能攻破这样的机器,因为它将所有从网络进入你机器的数据丢弃(drop) 了。这当然是安全过头了,此时你的机器将相当于没有网络。如果你ping localhost,你就会发现屏幕一直停在那里,因为ping收不到任何回应。


4 、添加规则

接着上文继续输入命令:

iptables -A INPUT -i ! ppp0 -j ACCEPT

这条规则的意思是:接受所有的,来源不是网络接口ppp0的数据。

我们假设你有两个网络接口,eth0连接局域网,loop是回环网(localhost)。ppp0是一般的adsl上网的internet网络接口,如果你不是这种上网方式,那则有可能是eth1。在此我假设你是adsl上网,你的internet接口是ppp0

此时你即允许了局域网的访问,你也可以访问localhost

此时再输入命令 ping localhost,结果还会和刚才一样吗?

到此我们还不能访问www,也不能mail,接着看吧。



5、我想访问www

iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT

允许来自网络接口ppp0(internet接口),并且来源端口是80的数据进入你的计算机。
80端口正是www服务所使用的端口。

好了,现在可以看网页了。但是,你能看到吗?


如果你在浏览器的地址中输入www.baidu.com,能看到网页吗?

你得到的结果一定是:找不到主机www.baidu.com

但是,如果你再输入220.181.27.5,你仍然能够访问baidu的网页。

为什么?如果你了解dns的话就一定知道原因了。

因为如果你打入www.baidu.com,你的电脑无法取得www.baidu.com这个名称所能应的ip地址220.181.27.5。如果你确实 记得这个ip,那么你仍然能够访问www,你当然可以只用ip来访问www,如果你想挑战你的记忆的话^ _ ^,当然,我们要打开DNS。


6、打开dns端口

打开你的dns端口,输入如下命令:

iptables -A INPUT -i ppp0 -p udp -sport 53 -j ACCEPT

这条命令的含义是,接受所有来自网络接口ppp0,upd协议的53端口的数据。53也就是著名的dns端口。

此时测试一下,你能通过主机名称访问www吗?你能通过ip访问www吗?

当然,都可以!



7、查看防火墙

 此时可以查看你的防火墙了

iptables -L

 如果你只想访问www,那么就可以到此为止,你将只能访问www了。 不过先别急,将上面讲的内容总结一下,写成一个脚本。



#!/bin/bash

# This is a script

# Edit by liwei

# establish static firewall

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --sport 53 -j ACCEPT



8、复杂吗?到此iptables可以按你的要求进行包过滤了。你可以再设定一些端口,允许你的机器访问这些端口。这样有可能,你不能访问QQ,也可能不 能打网络游戏,是好是坏,还是要看你自己而定了。顺便说一下,QQ这个东西还真是不好控制,用户与服务器连接使用的好像是8888端口,而QQ上好友互发 消息使用的又是udp的4444端口(具体是不是4444还不太清楚)。而且QQ还可以使用www的80端口进行登录并发消息,看来学无止境,你真的想把 这个家伙控制住还不容易呢?还是进入我们的正题吧。

如果你的机器是服务器,怎么办?


9、如果不巧你的机器是服务器,并且要提供www服务。显然,以上的脚本就不能符合我们的要求了。但只要你撑握了规则,稍作修改同样也能很好的工作。在最后面加上一句

iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT

这一句也就是将自己机器上的80端口对外开放了,这样internet上的其他人就能访问你的www了。当然,你的www服务器得工作才行。如果你的机器 同时是smtp和pop3服务器,同样的再加上两条语句,将--dport后面的80改成25和110就行了。如果你还有一个ftp服务器,呵呵,如果你 要打开100个端口呢……

我们的工作好像是重复性的打入类似的语句,你可能自己也想到了,我可以用一个循环语句来完成,对,此处可以有效的利用shell脚本的功能,也让你体验到了shell脚本语言的威力。看下文:


10、用脚本简化你的工作,阅读下面的脚本

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall



# define const here

Open_ports="80 25 110 10" # 自己机器对外开放的端口

Allow_ports="53 80 20 21" # internet的数据可以进入自己机器的端口



#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP #we can use another method to instead it

iptables -A INPUT -i ! ppp0 -j ACCEPT



# define ruler so that some data can come in.

for Port in "$Allow_ports" ; do

iptables -A INPUT -i ppp0 -p tcp --sport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --sport $Port -j ACCEPT

done

for Port in "$Open_ports" ; do

iptables -A INPUT -i ppp0 -p tcp --dport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --dport $Port -j ACCEPT

done



这个脚本有三个部分(最前面的一段是注释,不算在这三部分中)

第一部分是定义一些端口:访问你的机器"Open_ports"端口的数据,允许进入;来源是"Allow_ports"端口的数据,也能够进入。

第二部分是iptables的初始化,第三部分是对定义的端口具体的操作。

如果以后我们的要求发生了一些变化,比如,你给自己的机器加上了一个ftp服务器,那么只要在第一部分"Open_ports"的定义中,将ftp对应的20与21端口加上去就行了。呵呵,到此你也一定体会到了脚本功能的强大的伸缩性,但脚本的能力还远不止这些呢!



11、使你的防火墙更加完善

看上面的脚本init部分的倒数第二句

iptables -P INPUT DROP

这是给防火墙设置默认规则。当进入我们计算机的数据,不匹配我们的任何一个条件时,那么就由默认规则来处理这个数据----drop掉,不给发送方任何应答。

也就是说,如果你从internet另外的一台计算机上ping你的主机的话,ping会一直停在那里,没有回应。

如果黑客用namp工具对你的电脑进行端口扫描,那么它会提示黑客,你的计算机处于防火墙的保护之中。我可不想让黑客对我的计算机了解太多,怎么办,如果我们把drop改成其他的动作,或许能够骗过这位刚出道的黑客呢。

怎么改呢?将刚才的那一句( iptables -P INPUT DROP )去掉,在脚本的最后面加上

iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset

iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

这样就好多了,黑客虽然能扫描出我们所开放的端口,但是他却很难知道,我们的机器处在防火墙的保护之中。如果你只运行了ftp并且仅仅对局域网内部访问, 他很难知道你是否运行了ftp。在此我们给不应该进入我们机器的数据,一个欺骗性的回答,而不是丢弃(drop)后就不再理会。这一个功能,在我们设计有 状态的防火墙中(我这里讲的是静态的防火墙)特别有用。

你可以亲自操作一下,看一看修改前后用namp扫描得到的结果会有什么不同?



12、这个教程我想到此就结束了,其中有很多东西在这里没有提到,如ip伪装,端口转发,对数据包的记录功能。还有一个很重要的东西就 是:iptables处理数据包的流程.在这里我想告诉你,你设置的过滤规则的顺序很重要,在此不宜详细介绍,因为这样一来,这个教程就会拘泥于细节。

iptables是复杂的,我在linuxsir上看过很多教程,它们往往多而全,反而让人望而生畏,希望我的这个教程,能够指导你入门。加油!

最后,我把完整的脚本写出来如下,你只要修改常量定义部分,就能表现出较大的伸缩性^_^

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall



# define const here

Open_ports="80 25 110 10" # 自己机器对外开放的端口

Allow_ports="53 80 20 21" # internet的数据可以进入自己机器的端口



#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

# The follow is comment , for make it better
# iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT



# define ruler so that some data can come in.

for Port in "$Allow_ports" ; do
ptables -A INPUT -i ppp0 -p tcp --sport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --sport $Port -j ACCEPT
done

for Port in "$Open_ports" ; do
iptables -A INPUT -i ppp0 -p tcp --dport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --dport $Port -j ACCEPT
done

# This is the last ruler , it can make you firewall better
iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

 

----------

原文链接:

http://www.linuxsir.org/bbs/thread184634.html
 

 

posted @ 2012-01-28 23:35 66℃的绿茶 阅读(15) 评论(0) 编辑
  2012年1月19日
一片来自IBM文档库的文章,讲解简单工厂模式(Simple Factory)比较细致,http://www.ibm.com/developerworks/cn/linux/l-pypt/part2/index.html
另一篇来自CSDN的文章,讲解抽象工厂(Abstract Factory)模式,http://blog.csdn.net/ponder008/article/details/6886039
posted @ 2012-01-19 03:33 66℃的绿茶 阅读(15) 评论(0) 编辑
  2011年3月29日

最近因为工作的绘图需要,一直在使用Flex的chart控件,这玩意儿确实是很好用的工具,样式和对数据的处理都比较强大。

 

关于它的使用,网上有一个大名鼎鼎的Demo, Flex Chart  Sampler,http://demo.quietlyscheming.com/ChartSampler/app.html

源码可以从source里看到,博主也下了一份备份在了博客里。

 

另外还有一篇来自

Rhythm
hythm文章,介绍了Flex开发的十种示例工具(文中将其比作“十种武器”,也确实够形象),给出地址和大家分享~

 

http://flex4jiaocheng.com/blog/285#

 

 

 

chart sampler下载

posted @ 2011-03-29 15:24 66℃的绿茶 阅读(82) 评论(0) 编辑
  2011年3月2日

NewClass源码摘要:本文记录了Flex中给控件和类加入自定义事件的步骤。

正文:虽然网上已经有很多类似的资料了, 不过还是想自己写一篇,作为存档。

 

(一)给类A加入自定义事件FavPathDelEvt,Appliaction调用A,并响应A的事件

(1)写一个自定义事件as类,类中附带参数Index。

package NewClass
{
    
import flash.events.Event;
    
    
public class FavPathDelEvt extends flash.events.Event
    {
        
private var _index:int;
        
        
public function set Index(index:int):void
        {
            _index 
= index;
        }
        
        
public function get Index():int
        {
            
return _index;
        }
        
public function FavPathDelEvt(type:String, index:int)
        {
            Index 
= index;
            
super(type);
        }
    }

} 

 

(2)在需要触发这个事件的类(也就是A类)中加上[Event...]的申明,并且写上触发函数。

 

package NewClass
{
    
import NewClass.FavPathDelEvt;
    
import mx.core.Container;
    
import flash.utils.setTimeout;
    
    [Event(name
="onDelPath", type="NewClass.FavPathDelEvt")]
    
    
public class A extends Container
    {    
        
public function A()
        {
            flash.utils.setTimeout(function():
void{               //这里设置了一个延时函数,类初始化2000ms后触发事件
                DispatchEventofA();
            },
2000,null);
        }
        
        
private function DispatchEventofA():void
        {
            
this.dispatchEvent(new NewClass.FavPathDelEvt("onDelPath",1));
        }
    }
}

 

 

(3) 最后,在Application所在的mxml中,加上事件处理函数,并将该函数和A的事件绑定。

 <?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="500" minHeight="350" creationComplete="Init()">

    
<mx:Script>
        
<![CDATA[
            import NewClass.A;
            
            import mx.controls.Alert;
            
            private function Init():void
            {
                var a:A = new A();
                a.addEventListener("onDelPath",FavPathDelEvt_Handler); //将A的事件和Application中的函数绑定
            }
            private function FavPathDelEvt_Handler(evt:FavPathDelEvt):void
            {
                Alert.show("FavPathDelEvt of A is called, Index is " + evt.Index);
            }
            
        
]]>
    
</mx:Script>
</mx:Application>

 

运行程序后,2秒后会出现调用事件的提示对话框。

 

 (二)给自定义组件mxml加入自定义事件

给组件加入自定义事件基本和(一)一致。区别在于,mxml中可以通过加入

<mx:Metadata> 
        [Event(name="onDelPath", type="NewClass.FavPathDelEvt")]
</mx:Metadata>   

来完成和A中 [Event((name="onDelPath", type="NewClass.FavPathDelEvt")] 相同的功能

--------------------------------

 源码下载链接:NewClass.rar

--------------------------------- 

转载请注明出处,au revoir! 

 

posted @ 2011-03-02 18:19 66℃的绿茶 阅读(117) 评论(0) 编辑
  2010年11月23日

 爱死这种效果了~虽然俺不喜欢老转帖,但是实在忍不住啊~

 效果:

http://blog.xsive.co.nz/flex_source/mac_popup_2/index.html

 源码:

http://blog.xsive.co.nz/flex_source/mac_popup_2/srcview/ 

 

来源:  http://blog.xsive.co.nz

posted @ 2010-11-23 17:46 66℃的绿茶 阅读(440) 评论(1) 编辑
  2010年11月11日
摘要: Javaeye 上看到了一个帖子,列出了Flex的主要通信方式,并将blazeDS和LCDS两种技术做了很详细的比较,转来和大家分享 :)原帖地址:http://xiejiangbo.javaeye.com/blog/455731感谢原作者。Flex三种通信方式:通信方式通信协议交互数据格式HttpService常用的http协议XMLWebServiceSOAP协议XMLRemoteObject...阅读全文
posted @ 2010-11-11 15:47 66℃的绿茶 阅读(250) 评论(0) 编辑
  2010年8月16日
摘要: 之所以接触这个solution是因为manager要做一个基于excel的二次开发,网上查了查发现这个东西确实很强大,有了.NET Framework的支持,相对于以前的VBA,程序无论在robustness还是security上都有很大的进步。只是这方面的资料真的很少,特别是中文的,msdn上也往往是寥寥数语,所以希望自己摸索和在网上扒拉的东西能对来这里的人有帮助吧,如有指教,欢迎留言。 先感...阅读全文
posted @ 2010-08-16 15:58 66℃的绿茶 阅读(2462) 评论(5) 编辑
  2010年4月23日
摘要: 这段时间和同学们一块参加了微软所办的ImagineCup大赛的软件设计部分比赛。回头想想,从我们队开第一次会商讨作品主题到现在,已经过去两个多月了,感谢ImagineCup的创办人员们,让我们这些日子中过的很充实,同时让我们可以一展我们三年之所学。在这里简要地介绍一下我们的作品吧,和大家一起分享我们的收获,也好为以后参加的同学提供资料。 我们做的是一款以保护视力为主要功能的桌面应用软件,主要用户对...阅读全文
posted @ 2010-04-23 13:54 66℃的绿茶 阅读(117) 评论(0) 编辑
  2010年4月10日
摘要: 第二篇 从WPF入手,实现简单的多线程此贴接昨天发的笔记,这次我了解了WPF的多线程大致实现原理,并简单编写了一个多线程程序。先将几个常用的概念列一下:线程关联度:WPF属于创建它的线程,并且不能被其他的线程直接访问。当一个对象被关联到一个单线程时,就认为它是一个单线程对象,并且认为该对象具有线程关联度。同步:同步可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的...阅读全文
posted @ 2010-04-10 22:48 66℃的绿茶 阅读(408) 评论(0) 编辑
  2010年4月9日
摘要: 大学上了三年了,越来越觉得自己原来学的是皮毛。静下心来看看线程的时候才发现发现操作系统方面的知识对一个学编程的人来说时多么的重要,幸好当时教OS的时候没翘课……废话不多说了,还是写我的笔记吧。第一篇 从Win32的消息循环说起 消息循环是Win32处理消息的机制。然而随着面向对象的不断发展,这些消息的激发,处理逐渐被封装到Framework中,从而减少了我们了解它们的机会。...阅读全文
posted @ 2010-04-09 22:24 66℃的绿茶 阅读(220) 评论(1) 编辑
昵称:66℃的绿茶
园龄:3年
粉丝:3
关注:7
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

搜索

 
 

常用链接

随笔分类

随笔档案

文章分类

最新评论

阅读排行榜

评论排行榜

推荐排行榜