linux防火墙介绍

一、前言
firewall(防火墙):工作在网络进入或者流包,进出的网络数据包进行一定的规则进行检查过滤系统。包括iptables和netfilter组件。
iptables 是与 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统系统中更好地控制 IP 信息包过滤和防火墙配置。
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表放置在在整个linux内部网络通信流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些表来对数据包进行处理。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
简单理解,iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
二、工作原理

如果主机开启路由功能及未设置防火墙。当网络数据包需要通过主机,首先经过(PREROUTING)进行判断,是流入主机用户空间还是进行路由,如果进入用户空间则经过(INPUT),进行处理加工后,然后通过(OUTPUT)到达(POSTROUTONG),如果进行路由,则经过(FORWARD)到达(POSTROUTONG),到达后然后传输出去。

linux防火墙介绍

上面讲解(PREROUTING),(INPUT),(OUTPUT),(FORWARD),(POSTROUTONG)为iptables上的五链,还存在四表分别是:
filter:过滤规则表,根据管理预定义的一组规则过滤符合条件的数据包
nat:地址转换规则表,对IP地址进行伪装修改,隐藏自己的真实地址。
mangle:修改数据标记位规则表,主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用。详细讲解:http://blog.jobbole.com/90008/

raw:跟踪数据表路由规则表一个数据包到达时,是怎么依次穿过各个链和表的(图)。

linux防火墙介绍

基本步骤如下: 
1. 数据包到达网络接口,比如 eth0。 
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。 
3. 如果进行了连接跟踪,在此处理。 
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。 
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。 
6. 决定路由,看是交给本地主机还是转发给其它主机。 
到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过: 
7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。 
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。 
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。 
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。 
11. 进入出去的网络接口。完毕。 
另一种情况是,数据包就是发给本地主机的,那么它会依次穿过: 
7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。 
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。 
9. 交给本地主机的应用程序进行处理。 
10. 处理完毕后进行路由决定,看该往那里发出。 
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。 
12. 连接跟踪对本地的数据包进行处理。 
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。 
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。 
15. 再次进行路由决定。 
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。 
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。 
19. 进入出去的网络接口。完毕。
三、iptables简单使用
iptables命令的使用格式:
        iptables [-t table] {-A|-C|-D} chain rule-specification
        ip6tables [-t table] {-A|-C|-D} chain rule-specification
        iptables [-t table] -I chain [rulenum] rule-specification
        iptables [-t table] -R chain rulenum rule-specification
        iptables [-t table] -D chain rulenum
        iptables [-t table] -S [chain [rulenum]]
        iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]
        iptables [-t table] -N chain
        iptables [-t table] -X [chain]
        iptables [-t table] -P chain target
        iptables [-t table] -E old-chain-name new-chain-name
            rule-specification = [matches…] [target]
            match = -m matchname [per-match-options]
            target = -j targetname [per-target-options]
        规则的编写格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
            -t table:
                默认为filter;其它可用的有raw, mangle, nat;
            COMMAND:
                链:
                    -P:policy,策略,定义默认策略; 一般有两种选择,ACCEPT和DROP;
                    -N:new,新建一条自定义的规则链;被内建链上的规则调用才能生效;[-j  chain_name];
                    -X:drop,删除自定义的引用计数为0的空链;
                    -F:flush,清空指定的链;
                    -E:重命名自定义的引用计数和为0的链;
                规则:
                    -A:append,追加,在指定链的尾部追加一条规则;
                    -I:insert,插入,在指定的位置(省略位置时表示链首)插入一条规则;
                    -D:delelte,删除,删除指定的规则;
                    -R:replace,替换,将指定的规则替换为新规则;不能仅修改规则中的部分,而是整条规则完全替换;
                查看:
                    -L:list,列出表中的链上的规则;
                        -n:numeric,以数值格式显示;
                        -v:verbose,显示详细格式信息;
                            -vv, -vvv
                        -x:exactly,计数器的精确结果;
                        –line-numbers:显示链中的规则编号;    
                重置规则计数器:
                    -Z:zero,置0;
            chain:
                (1) 内建链;
                (2) 自定义链;
            处理动作(目标)
                -j targetname [per-target-options]
                targetname:
                    ACCEPT:接受;
                    DROP:丢弃;
                    REJECT:拒绝;
            写好规则后进行保存及还原规则
            centos 7:保存     # iptables-save > /PATH/TO/FILE 或 iptables -S > /PATH/TO/FILE
                      还原    # iptables-restore < /PATH/TO/FILE

            举几个简单例子:

iptables -P INPUT ACCEPT

iptables -F

iptables -A INPUT -i lo -j ACCEPT

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

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -L -v

现在屏幕输出是这样的:
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  —  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  —  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  —  any    any     anywhere             anywhere            tcp dpt:ssh
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
理解上面几条命令实际做了什么:
1、iptables -P INPUT ACCEPT 假如利用远程连接,我们必须临时将 INPUT 链的缺省政策改为 ACCEPT,否则当我们清除现有的规则集时,便会将自己封锁在服务器之外。
2、iptables -F 我们利用 -F 选项来清除一切现存的规则,好让我们能够在崭新的状态下加入的规则。
3、iptables -A INPUT -i lo -j ACCEPT 现在是时候加入一些规则了。我们利用 -A 选项来附加(新增)规则到某条链,而这里所指的是 INPUT 链。接著我们利用 -i 选项(interface「界面」之意)来指定那些符合或来自 lo(localhost、127.0.0.1)界面的封包。最后我们 -j(jump「跳至」)符合这条规则的目标动作:在这里是 ACCEPT。所以这条规则会导致所有转至 localhost 界面的对内封包获得接纳。一般来说这是必须的,因为很多软件预期能够与 localhost 适配器沟通。
4、iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT 这是担负起大部份工作的规则,而我们再一次将它加进(-A)INPUT 链内。这里我们利用 -m 选项来装入一个模块(state)。state 模块能够查看一个封包并判断它的状态是 NEW、ESTABLISHED 抑或 RELATED。NEW 指进入的封包属于不是由主机初始化的新增连接。ESTABLISHED 及 RELATED 指进入的封包隶属于一条现存的连接,或者与现存的连接有关系。
5、iptables -A INPUT -p tcp –dport 22 -j ACCEPT 现在我们加入一条规则来容许 SSH 通过 tcp 端口 22 来连接。这样做是要防止我们连接到远程系统的 SSH 连接意外地被封销。我们稍后会更详细解释这条规则。
6、iptables -P INPUT DROP 这个 -P 选项设置某条规则链上的缺省政策。我们现在可以将 INPUT 链的缺省政策改为 DROP。意思就是,不符合任何一条规则的对内封包将会被丢弃。要是我们通过 SSH 远程连接而没有加入上一条规则,此刻我们便会被封锁于系统之外。
7、iptables -P FORWARD DROP 同样地,在这里我们将 FORWARD 链的缺省政策设为 DROP,因为我们并不是用计算机作为路由器,所以理应没有任何封包路经它。
8、iptables -P OUTPUT ACCEPT 而最后,我们将 OUTPUT 链的缺省政策设为 ACCEPT,因为我们想容许所有对外的流量(由于我们信任我们的用户)。
9、iptables -L -v 最后,我们可以列出(-L)刚加入的规则,并检查它们是否被正确地装入。

原创文章,作者:chenbin,如若转载,请注明出处:http://www.178linux.com/74482

(0)
chenbinchenbin
上一篇 2017-04-30
下一篇 2017-04-30

相关推荐

  • Redis数据库安全手册

    Redis是一个高性能的key-value数据库,这两年可谓火的不行。而Redis的流行也带来一系列安全问题,不少攻击者都通过Redis发起攻击。本文将讲解这方面的内容,包括Redis提供的访问控制和代码安全问题,以及可以由恶意输入和其他类似的手段触发的攻击。 Redis通用安全模块 Redis被设计成只能由可信环境的可信机器访问。这意味着将它直接暴露在互联…

    2015-03-12
  • 压缩和解压缩总结

                      压缩和解压缩的命令很多,今天总结如下: gzip  压缩比1–9  默认是6  压缩比越高  耗费CPU资源也多,文件比较小的话,不建议使用gzip压缩,因为使用gzip越压缩越大。…

    Linux干货 2017-04-17
  • 第十八周博客作业

    1、为LNMP架构添加memcached支持,并完成对缓存效果的测试报告; 操作系统: CentOS 7.210.0.0.51 nginx+php+mysql10.0.0.52 memcached 一. 环境准备: 搭建LNMP编译安装环境 1. 配置163的yum源和阿里云的epel源 [root@localhost ~]# mv /etc/yum.rep…

    2017-07-12
  • 正则表达式和文本处理工具grep,egrep

    正则表达式(Regular Expression)是通过一些特殊字符的排列,来表示控制或者通配的功能,用于查找,替换,删除一行或者多行文字字符串,是用在字符处理上的一项表达式,有时候我们可通过表达式来筛选出我们所需要的信息。 正则表达式分为两类:基本正则表达式(BRE)和扩展的正则表达式(ERE) 正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法…

    Linux干货 2016-12-20
  • 系统启动流程相关概念

    前言: 了解系统内核基本知识 内核功能:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能等  用户空间:应用程序其中有进程或者线程 运行中的系统可分为两层:内核空间、用户空间  内核设计流派:  单内核设计:把每种功能集成于一个程序中;例如:linux 微内核设计:每种功能使用一个单独的子系统实现;例如:Window…

    Linux干货 2016-09-19
  • LVM2详解

    1、什么是lvm LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样…

    Linux干货 2017-01-03