Articles

  • iOS之同步请求、异步请求、GET请求、POST请求

    1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

    2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

    3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

    4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

  • 创建字符设备的三种方法

    将创建字符设备的三种方法记录一下,以便以后参考.

  • C++ operator overloading

    条款5:小心用户自定义的转换函数

    c++允许编译器在两种数据类型之间进行隐式类型转换。(implicit conversion).首先,c++继承了c语言的类型转换的策略。

    除了这个,c++还有两种隐式转换: 单个参数的构造函数,以及隐式的类型转换运算符。单个参数的构造函数是指只传递给它

    一个参数就可以调用的构造函数,这种构造函数可能只定义一个参数,也可以定义多个参数,定义多个参数的时候要求第一个

  • Iptables

    iptables是一款防火墙软件。它在Ubuntu系统中是默认安装的。通常情况下,iptables随系统一起被安装,但没有对通信作任何限制,因此防火墙并没有真正建立起来。

    尽管关于iptables的资料非常丰富,但大都比较复杂。如果您只想作些简单的设置,那么本文比较适合您的要求。

    原文出处:https://wiki.ubuntu.com/IptablesHowTo

    Basic Commands 基本命令

    Typing

    # sudo iptables -L

    lists your current rules in iptables. If you have just set up your server, you will have no rules, and you should see

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    使用命令

    # sudo iptables -L

    查看现有的iptables防火墙规则。如果您刚架设好服务器,那么规则表应该是空的,您将看到如下内容

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    Allowing Established Sessions 允许已建立的连接接收数据

    We can allow established sessions to receive traffic:

    可以使用下面的命令,允许已建立的连接接收数据:

    # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    Allowing Incoming Traffic on Specific Ports 开放指定的端口

    You could start by blocking traffic, but you might be working over SSH, where you would need to allow SSH before blocking everything else.

    To allow incoming traffic on port 22 (traditionally used by SSH), you could tell iptables to allow all TCP traffic on port 22 of your network adapter.

    刚开始时您不妨阻断所有通信,但考虑到您将来可能要使用SSH,那么您要让iptables在使用默认规则丢弃报文之前,允许SSH报文通过。

    要开放端口22(SSH的默认端口),您要告诉iptables允许接受到的所有目标端口为22的TCP报文通过。

    # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT

    Specifically, this appends (-A) to the table INPUT the rule that any traffic to the interface (-i) eth0 on the destination port for ssh that iptables should jump (-j), or perform the action, ACCEPT.

    执行上面的命令,一条规则会被追加到INPUT规则表的末尾(-A表示追加)。根据这条规则,对所有从接口eth0(-i指出对通过哪个接口的报文 运用此规则)接收到的目标端口为22的报文,iptables要执行ACCEPT行动(-j指明当报文与规则相匹配时应采取的行动)。

    Lets check the rules: (only the first few lines shown, you will see more)

    我们来看看规则表中的情况:(这里只列出了开始的几行,您应该会看到更多内容)

    # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh

    Now, let’s allow all web traffic

    现在我们开放端口80:

    # iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT

    Checking our rules, we have

    此时的规则表中的内容如下:

    # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www

    We have specifically allowed tcp traffic to the ssh and web ports, but as we have not blocked anything, all traffic can still come in.

    通过上述命令,我们已经代开了SSH和web服务的相应的端口,但由于没有阻断任何通信,因此所有的报文都能通过。

    Blocking Traffic 阻断通信

    Once a decision is made about a packet, no more rules affect it. As our rules allowing ssh and web traffic come first, as long as our rule to block all traffic comes after them, we can still accept the traffic we want. All we need to do is put the rule to block all traffic at the end. The -A command tells iptables to append the rule at the end, so we’ll use that again.

    对每一个报文,iptables依次测试每一条规则,看报文于规则是否相匹配。一旦找到一条匹配的规则,就根据此规则中指定的行动,对报文进行处 置,而对后面的规则不再进行测试。因此,如果我们在规则表的末尾添加一条规则,让iptables丢弃所有报文,但由于有了前面几条规则,ssh和web 的正常通信不会受到影响。

    # iptables -A INPUT -j DROP
    # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
    DROP       all  --  anywhere             anywhere

    Because we didn’t specify an interface or a protocol, any traffic for any port on any interface is blocked, except for web and ssh.

    在上面的规则中,没有明确指出针对哪个接口或哪种协议使用此规则,所以从每个接口接收到的除ssh和web之外的所有报文都会被丢弃。

    Editing iptables 编辑iptables

    The only problem with our setup so far is that even the loopback port is blocked. We could have written the drop rule for just eth0 by specifying -i eth0, but we could also add a rule for the loopback. If we append this rule, it will come too late – after all the traffic has been dropped. We need to insert this rule onto the fourth line.

    进行至此,仍有一个问题,就是环回接口也被阻断了。刚才添加DROP规则的时候其实就可以使用-i eth0来解决这一问题。然而我们也可以为环回接口添加一条新规则来解决这个问题。但是不能将新规则追加到末尾,因为前一条规则已经把所有报文都丢弃了, 而应该把它插到DROP规则前面,即规则表中第四行的位置。

    # iptables -I INPUT 4 -i lo -j ACCEPT
    # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
    ACCEPT     all  --  anywhere             anywhere
    DROP       all  --  anywhere             anywhere

    The last two lines look nearly the same, so we will list iptables in greater detail.

    规则表中的最后两行几乎一样,为了看看它们到底有什么不同,我们可以使用

    # iptables -L -v

    Logging 记录

    In the above examples none of the traffic will be logged. If you would like to log dropped packets to syslog, this would be the quickest way:

    在前面的例子中,没有任何报文会被记录到日志中。如果您希望将被丢弃的报文记录到syslog中,最简单的方法是:

    # iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

    See Tips section for more ideas on logging.

    更多关于日志记录的信息,请参照Tips(技巧)这一节。

    Saving iptables 保存设置

    If you were to reboot your machine right now, your iptables configuration would disapear. Rather than type this each time you reboot, however, you can save the configuration, and have it start up automatically. To save the configuration, you can use iptables-save and iptables-restore.

    机器重启后,iptables中的配置信息会被清空。您可以将这些配置保存下来,让iptables在启动时自动加载,省得每次都得重新输入。iptables-saveiptables-restore 是用来保存和恢复设置的。

    Configuration on startup 开机自动加载配置

    Save your firewall rules to a file

    先将防火墙规则保存到/etc/iptables.up.rules文件中

    # iptables-save > /etc/iptables.up.rules

    Then modify the /etc/network/interfaces script to apply the rules automatically (the bottom line is added)

    然后修改脚本/etc/network/interfaces,使系统能自动应用这些规则(最后一行是我们手工添加的)。

    auto eth0
    iface eth0 inet dhcp
    pre-up iptables-restore < /etc/iptables.up.rules

    You can also prepare a set of down rules and apply it automatically

    当网络接口关闭后,您可以让iptables使用一套不同的规则集。

    auto eth0
    iface eth0 inet dhcp
    pre-up iptables-restore < /etc/iptables.up.rules
    post-down iptables-restore < /etc/iptables.down.rules

    Tips 技巧

    If you manually edit iptables on a regular basis 如果你经常手动编辑iptables

    The above steps go over how to setup your firewall rules and presume they will be relatively static (and for most people they should be). But if you do a lot of development work, you may want to have your iptables saved everytime you reboot. You could add a line like this one in /etc/network/interfaces:

    大多数人并不需要经常改变他们的防火墙规则,因此只要根据前面的介绍,建立起防火墙规则就可以了。但是如果您要经常修改防火墙规则,以使其更加完 善,那么您可能希望系统在每次重启前将防火墙的设置保存下来。为此您可以在/etc/network/interfaces文件中添加一行:

    pre-up iptables-restore < /etc/iptables.up.rules
    post-down iptables-save > /etc/iptables.up.rules

    The line “post-down iptables-save > /etc/iptables.up.rules” will save the rules to be used on the next boot.

    “post-down iptables-save > /etc/iptables.up.rules”会将设置保存下来,以便下次启动时使用。

    Using iptables-save/restore to test rules 使用iptables-save/restore测试规则

    If you edit your iptables beyond this tutorial, you may want to use the iptables-save and iptables-restore feature to edit and test your rules. To do this open the rules file in your favorite text editor (in this example gedit).

    使用iptables-save和iptables-restore可以很方便地修改和测试防火墙规则。首先运行iptables-save将规则保存到一个文件,然后用编辑器编辑该文件。

    # iptables-save > /etc/iptables.test.rules
    # gedit /etc/iptables.test.rules

    You will have a file that appears similiar to (following the example above):

    如果您根据前面的例子建立了防火墙规则,iptables-save将产生一个类似于如下内容的文件:

    # Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006
    *filter
    :INPUT ACCEPT [368:102354]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [92952:20764374]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
    -A INPUT -j DROP
    COMMIT
    # Completed on Sun Apr 23 06:19:53 2006

    Notice that these are iptables commands minus the iptable command. Feel free to edit this to file and save when complete. Then to test simply:

    文件内容其实就是各种iptables命令,只不过把命令名iptables省略了。您可以随意对这个文件进行编辑,然后保存。接着使用以下命令测试修改后的规则:

    # iptables-restore < /etc/iptables.test.rules

    After testing, if you have not added the iptables-save command above to your /etc/network/interfaces remember not to lose your changes:

    之前您如果没有在/etc/network/interfaces文件中添加iptables-save命令,那么测试之后,别忘了把您所作的修改保存起来。

    # iptables-save > /etc/iptables.up.rules

    More detailed Logging 关于日志记录的更多细节

    For further detail in your syslog you may want create an additional Chain. This will be a very brief example of my /etc/iptables.up.rules showing how I setup my iptables to log to syslog:

    您可以创建额外的规则链,以便在syslog中作更加详细的记录。以下是我/etc/iptables.up.rules文件中的一个简单例子:

    # Generated by iptables-save v1.3.1 on Sun Apr 23 05:32:09 2006
    *filter
    :INPUT ACCEPT [273:55355]
    :FORWARD ACCEPT [0:0]
    :LOGNDROP - [0:0]
    :OUTPUT ACCEPT [92376:20668252]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -j LOGNDROP
    -A LOGNDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7
    -A LOGNDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7
    -A LOGNDROP -p icmp -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7
    -A LOGNDROP -j DROP
    COMMIT
    # Completed on Sun Apr 23 05:32:09 2006

    Note a new CHAIN called LOGNDROP at the top of the file. Also, the standard DROP at the bottom of the INPUT chain is replaceed with LOGNDROP and add protocol descriptions so it makes sense looking at the log. Lastly we drop the traffic at the end of the LOGNDROP chain. The following gives some idea of what is happening:

    • --limit sets the number of times to log the same rule to syslog
    • --log-prefix "Denied..." adds a prefix to make finding in the syslog easier
    • --log-level 7 sets the syslog level to informational (see man syslog for more detail, but you can probably leave this)

    可以看到,文件前面多了一条名为LOGNDROP的规则链。此外,INPUT链最后一条规则中的DROPLONGDROP替代。并且在后面我添加了一些内容来描述报文所使用的协议,这可以让记录更容易理解。最后,在LOGNDROP链的末尾,报文被丢弃。

    • --limit 对由此规则引发的记录事件的频率进行限制。
    • --log-prefix "Denied..." 在每条记录前加上一个前缀,以便查找。
    • --log-level 7 将记录的详细程度设为“informational”等级(详情请见man syslog,您也可以直接使用此处的设置)。

    Disabling the firewall 禁用防火墙

    If you need to disable the firewall temporarily, you can flush all the rules using

    可以通过清除所有规则来暂时停止防火墙:

    # sudo iptables -F

    Easy configuration via GUI 通过GUI快速配置

    A newbie can use Firestarter (a gui), available in repositories (Synaptic or apt-get) to configure her/his iptable rules, without needing the command line knowledge. Please see the tutorial though… Configuration is easy, but may not be enough for the advanced user. However, it should be enough for the most home users… The (read:my) suggested outbound configuration is “restrictive”, with whitelisting each connection type whenever you need it (port 80 for http, 443 for secure http -https-, 1863 for msn chat etc) from the “policy” tab within firestarter. You can also use it to see active connections from and to your computer… The firewall stays up once it is configured using the wizard. Dialup users will have to specify it to start automatically on dial up in the wizard.

    Firestarter是一款图形界面的防火墙工具,您可以从软件库中得到它。(用“新立得”或者apt-get安装)使用Firestarter 并不需要掌握命令行方式下的配置方法。想了解它的用法,请阅读相应的教程…… Firestarter使用简单,虽然可能无法实现某些较为复杂的功能,但仍可满足大多数家庭使用的要求。对于从您的主机发送到网络的报文, firestarter推荐使用“restrictive”配置方案。这种方案要求您在清单中指明哪些报文是可以通过的,除此之外的所有报文都将被丢弃。 您可以在firestarter的“policy”选项卡中改变配置方案。您也可以使用firestarer查看当前有哪些活动连接…… 当配置向导运行结束后,防火墙就建立起来了。拨号用户必须在配置向导中进行设定,以使防火墙在拨号后自动建立起来。

    Homepage for firestarter: http://www.fs-security.com/ (again, available in repositories, no compiling required)

    Tutorial: http://www.fs-security.com/docs/tutorial.php

    Personal note: Unfortunately, it does not have the option to block (or ask the user about) connections of specific applications/programs… Thus, my understanding is that once you enable port 80 (i.e. for web access), any program that uses port 80 can connect to any server and do anything it pleases…

    Firestarter主页:http://www.fs-security.com/ (再次声明,firestarter已经收入软件库,不需要您自己编译)

    firestarer教程: http://www.fs-security.com/docs/tutorial.php

    注意事项:这款软件不会阻止(或者询问用户是否阻止)特定的程序访问网络。因此,根据我的使用经验,一旦您开启端口80(web服务),任何程序都可以使用此端口进行通信。

    Further Information 更多技术细节

    linux下IPTABLES配置详解

    如果你的IPTABLES基础知识还不了解,建议先去看看.
    开始配置
    我们来配置一个filter表的防火墙.
    (1)查看本机关于IPTABLES的设置情况
    [root@tp ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target       prot opt source                 destination
    Chain FORWARD (policy ACCEPT)
    target       prot opt source                 destination
    Chain OUTPUT (policy ACCEPT)
    target       prot opt source                 destination
    Chain RH-Firewall-1-INPUT (0 references)
    target       prot opt source                 destination
    ACCEPT       all    --    0.0.0.0/0              0.0.0.0/0
    ACCEPT       icmp --    0.0.0.0/0              0.0.0.0/0             icmp type 255
    ACCEPT       esp    --    0.0.0.0/0              0.0.0.0/0
    ACCEPT       ah     --    0.0.0.0/0              0.0.0.0/0
    ACCEPT       udp    --    0.0.0.0/0              224.0.0.251           udp dpt:5353
    ACCEPT       udp    --    0.0.0.0/0              0.0.0.0/0             udp dpt:631
    ACCEPT       all    --    0.0.0.0/0              0.0.0.0/0             state RELATED,ESTABLISHED
    ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:22
    ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:80
    ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:25
    REJECT       all    --    0.0.0.0/0              0.0.0.0/0             reject-with icmp-host-prohibited
    可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
    如果你在安装linux时没有选择启动防火墙,是这样的
    [root@tp ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target       prot opt source                 destination
    Chain FORWARD (policy ACCEPT)
    target       prot opt source                 destination
    Chain OUTPUT (policy ACCEPT)
    target       prot opt source                 destination
    什么规则都没有.
    (2)清除原有规则.
    不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
    [root@tp ~]# iptables -F        清除预设表filter中的所有规则链的规则
    [root@tp ~]# iptables -X        清除预设表filter中使用者自定链中的规则
    我们在来看一下
    [root@tp ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target       prot opt source                 destination
    Chain FORWARD (policy ACCEPT)
    target       prot opt source                 destination
    Chain OUTPUT (policy ACCEPT)
    target       prot opt source                 destination
    什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
    [root@tp ~]# /etc/rc.d/init.d/iptables save
    这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
    [root@tp ~]# service iptables restart
    现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧
    (3)设定预设规则
    [root@tp ~]# iptables -p INPUT DROP
    [root@tp ~]# iptables -p OUTPUT ACCEPT
    [root@tp ~]# iptables -p FORWARD DROP
    上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
    而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
    可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.
    这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
    注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
    怎么办,去本机操作呗!
    (4)添加规则.
    首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
    为了能采用远程SSH登陆,我们要开启22端口.
    [root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    [root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.
    其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:
    [root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
    如果做了WEB服务器,开启80端口.
    [root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    如果做了邮件服务器,开启25,110端口.
    [root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
    [root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

    如果做了FTP服务器,开启21端口
    [root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    [root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
    如果做了DNS服务器,开启53端口
    [root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
    如果你还做了其他的服务器,需要开启哪个端口,照写就行了.
    上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP
    允许icmp包通过,也就是允许ping,
    [root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
    [root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT    (INPUT设置成DROP的话)
    允许loopback!(不然会导致DNS无法正常关闭等问题)
    IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
    IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
    下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.
    减少不安全的端口连接
    [root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
    [root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
    有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
    还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
    当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加
    允许SSH登陆一样.照着写就行了.
    下面写一下更加细致的规则,就是限制到某台机器
    如:我们只允许192.168.0.3的机器进行SSH连接
    [root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
    如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
    24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
    或采用命令方式:
    [root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
    然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.
    [root@tp ~]# /etc/rc.d/init.d/iptables save
    这样写 !192.168.0.3 表示除了192.168.0.3的ip地址
    其他的规则连接也一样这么设置.
    在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.
    开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
    [root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    [root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
    丢弃坏的TCP包
    [root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
    处理IP碎片数量,防止攻击,允许每秒100个
    [root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
    设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
    [root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
    我在前面只所以允许ICMP包通过,就是因为我在这里有限制.
    二,配置一个NAT表放火墙
    1,查看本机关于NAT的设置情况
    [root@tp rc.d]# iptables -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target       prot opt source                 destination
    Chain POSTROUTING (policy ACCEPT)
    target       prot opt source                 destination
    SNAT         all    --    192.168.0.0/24         anywhere              to:211.101.46.235
    Chain OUTPUT (policy ACCEPT)
    target       prot opt source                 destination
    我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章
    当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的
    如果你想清除,命令是
    [root@tp ~]# iptables -F -t nat
    [root@tp ~]# iptables -X -t nat
    [root@tp ~]# iptables -Z -t nat
    2,添加规则
    添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),
    添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
    防止外网用内网IP欺骗
    [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
    [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
    [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

    如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
    例:
    禁止与211.101.46.253的所有连接

    [root@tp ~]# iptables -t nat -A PREROUTING    -d 211.101.46.253 -j DROP

    禁用FTP(21)端口
    [root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
    这样写范围太大了,我们可以更精确的定义.
    [root@tp ~]# iptables -t nat -A PREROUTING    -p tcp --dport 21 -d 211.101.46.253 -j DROP
    这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
    按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
    最后:
    drop非法连接
    [root@tp ~]# iptables -A INPUT     -m state --state INVALID -j DROP
    [root@tp ~]# iptables -A OUTPUT    -m state --state INVALID -j DROP
    [root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP

    允许所有已经建立的和相关的连接
    [root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    [root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    [root@tp ~]# /etc/rc.d/init.d/iptables save

    这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.

    [root@tp ~]# service iptables restart
    别忘了保存,不行就写一部保存一次.你可以一边保存,一边做实验,看看是否达到你的要求,

  • ubuntu 最常用和终端快捷键

    Line Editing

    Shortcut Explain
    ALT d 删除从光标到当前单词结尾的部分
    ALT a 将光标移到当前单词头部
    ALT e 将光标移到当前单词尾部
    CTRL y 插入最近删除的单词
    CTRL a 将光标移到行首
    CTRL e 将光标移到行尾
    CTRL k 从光标处删除到行尾
    CTRL u Delete backward from cursor
    CTRL d 从光标处向右删除
    CTRL w 删除从光标到当前单词开头的部分
    CTRL y 粘贴由CTRL+u,CTRL+d,CTRL+w删除的单词
    CTRL b 左移一个字符
    CTRL f 右移一个字符
    CTRL p 向上显示缓存命令
    CTRL n 向下显示缓存命令
    CTRL c 终端进程
    CTRL l 清屏,类似 clear 命令
    CTRL r 查找历史命令
    CTRL R Search the history backwards with multi occurrence
    CTRL xx Move between EOL and current cursor position
    CTRL x @ Show possible hostname completions
    CTRL z Suspend/ Stop the command
    CTRL h 删除当前字符
    !$ 重复前一个命令最后的参数。
  • NSString 的相关转换

    NSString conversions

  • chmod 命令使用方法详解

    chmod

    Linux/Ubuntu 系统中文件调用的权限分为三级:文件拥有者(u)、群组(g)、其他(o)。用chmod就可以更改文件的权限。chmod是一个相当灵活的命令,对同一个文件的权限的修改可以用多种风格的命令格式来实现。

  • Ubuntu系统上搭建L2MP服务器

    L2MP (Linux+Lighttpd+MySQL+PHP) 使用轻量级的 lighttpd 作为 Web 服务器,虽然名字没有 Apache 那么响亮,但用它搭建的网站却不少,如: Sourceforge、Meebo、豆瓣、猫眼宽频 这些。lighttpd 以安全、快速和内存消耗低著称,还专门为大型分布式连接环境做了优化,流行使用在基于 AJAX 或 Ruby on Rails 应用的网站。

  • zypper 详解

    zypper 是 opensuse 命令行下管理软件的程序

    添加软件源

    zyppr ar URL alias
    

    URL 就是软件源的地址
    alias 就是你起的一个名字

  • UFW - Ubuntu FireWall

    安装

    sudo apt-get install ufw
    

    配置

    sudo ufw enable
    sudo ufw default deny
    

    上边的配置已经可以了,对一般用户而言 :)

    高级配置

    3.开启/禁用

    • sudo ufw allow|deny [service]
    • 打开或关闭某个端口,例如:
    • sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口
    • sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口
    • sudo ufw allow 53 允许外部访问53端口(tcp/udp)
    • sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口
    • sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
    • sudo ufw deny smtp 禁止外部访问smtp服务
    • sudo ufw delete allow smtp 删除上面建立的某条规则

    4.查看防火墙状态

    sudo ufw status