iptables/netfilter入门到进阶

一、iptables/netfilter的简介:

iptables:规则管理工具;该系统工具有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信
息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

netfilter:防火墙框架,承载并生效规则;netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。

 

二、iptables命令组成:

iptables [-t table] COMMAND [chain]
[PARAMETERS] [-m matchname [per-match-options]] [-j targetname
[per-target-options]]

1table:即功能表。主要分为filternatmangleraw,其优先级由高到低:raw
–> mangle –> nat –> filter
,一般默认为filter功能。

2COMMAND:命令

a)链管理:

-N, –new-chain chain:新建一个自定义的规则链;

-X, –delete-chain [chain]:删除用户自定义的引用计数为0的空链;

-F, –flush [chain]:清空指定的规则链上的规则;

-E, –rename-chain old-chain new-chain:重命名链;

-Z, –zero [chain [rulenum]]:置零计数器;

注意:每个规则都有两个计数器

packets:被本规则所匹配到的所有报文的个数;

bytes:被本规则所匹配到的所有报文的大小之和;

            -P, –policy chain target

b)规则管理:

-A, –append chain rule-specification:追加新规则于指定链的尾部;

-I, –insert chain [rulenum]
rule-specification
:插入新规则于指定链的指定位置,默认为首部;

-R, –replace chain rulenum
rule-specification
:替换指定的规则为新的规则;

-D, –delete chain rulenum:根据规则编号删除规则;

-D, –delete chain rule-specification:根据规则本身删除规则;                                    

c)规则显示:

-L, –list [chain]:列出规则;

-v, –verbose:详细信息;

-vv

-n, –numeric:数字格式显示主机地址和端口号;

-x, –exact:显示计数器的精确值,而非圆整后的数据;

–line-numbers:列出规则时,显示其在链上的相应的编号;

-S, –list-rules [chain]:显示指定链的所有规则;       

3chain:链,主要分为prerouting,
input, forward, output, postrouting
,也就是我们平时所说的路由前,输入,转发,输出,路由后,在不同功能表上其所包含的链也是不一样的。比如:

filterinput, forward,
output

natprerouting, input,
output, postrouting

mangleprerouting, input,
forward, output, postrouting

rawprerouting, output

4PARAMETERS:匹配条件,一般分为通用匹配和扩展匹配。

通用匹配(PARAMETERS):

[!] -s, –source address[/mask][,…]:检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址;

[!] -d, –destination address[/mask][,…]:检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址;

[!] -p, –protocol protocol:匹配报文中的协议,可用值tcp,
udp,  udplite, icmp,  icmpv6,esp, 
ah, sctp, mh
或者  “all”, 亦可以数字格式指明协议;

-m, –match match:调用指定的扩展匹配模块来扩展匹配条件检查机制;

[!] -i, –in-interface name:限定报文仅能够从指定的接口流入;only
for packets entering the INPUT, FORWARD 
and  PREROUTING  chains.

[!] -o, –out-interface name:限定报文仅能够从指定的接口流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.

扩展匹配(MATCH EXTENSIONS

                   -m
tcp

                   –sport,
–dport

5-j targetname
[per-target-options]
:处理动作(跳转目标)

简单targetACCEPT DROP

扩展targetREJECT

LOG

                                     –log-level

                                     –log-prefix

三、iptables的简单使用

1、开放本机22 端口给多有主机访问

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1 -p tcp –dport 22 -j ACCEPT

[root@localhost ~]#iptables -A OUTPUT -s
172.18.24.1 -p tcp –sport 22 -j ACCEPT

[root@localhost ~]#iptables -R INPUT 2  -d 172.18.24.1  -j REJECT 
#
禁止其他任何地址访问

[root@localhost ~]#iptables -R OUTPUT
2  -s 172.18.24.1  -j REJECT

2、开放本机的Samba服务,以上述1标准为防火墙

[root@localhost ~]#systemctl start nmb smb

[root@chenxu html]#smbclient -L 172.18.24.1
-U centos #
此时在客户端登录,访问超时,登录不上

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p udp –dport 137:138 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p udp –sport 137:138 -j ACCEPT

开放137,138,端口,此时客户端也是连接不上的

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport  139 -j ACCEPT

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport  445 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p tcp –sport 139 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p tcp –sport 445 -j ACCEPT

开放 139445 端口,此时客户能连接上Samba服务

3、把Samba服务单独创建一个链

[root@localhost ~]#iptables -N
samba_input_rules
创建自定义链

然后添加规则

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p udp –dport 137:138 -j ACCEPT

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p tcp –dport 139 -j ACCEPT

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p tcp –dport 445 -j ACCEPT

布置默认规则

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1 -p tcp –dport 22 -j ACCEPT

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1  -j REJECT

调用Samba规则

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -j samba_input_rules #
这样客户端就能够连接Samba服务了

4、如何删除自定义链?

a)首先取消引用

[root@localhost ~]#iptables -D INPUT 2

b)再把自定义链内的规则删除

[root@localhost ~]#iptables -F
samba_input_rules

c)最后删除自定义链

[root@localhost ~]#iptables -X
samba_input_rules

5、设置iptables使本机可以ping出去,其它机器不能ping进来

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp –icmp-type 0 -j ACCEPT

别的机器可以ping进来

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp –icmp-type 8 -j ACCEPT

或者直接定义icmp的规则

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp -j ACCEPT

这样既可以ping出去,又能让别的机器ping进来

6、一次性开放多个端口

[root@localhost ~]#iptables -R INPUT 1 -d
172.18.24.1 -p tcp -m multiport –dports 22,80,139,445 -j ACCEPT

7、开放多个IP端口

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport 23 -m iprange –src-range 172.18.0.100-172.18.0.120
-j ACCEPT 
这个区间的IP都能够访问目标地址的23 端口

8、在某个时间段开放端口

[root@localhost ~]#iptables -I INPUT -d
172.18.24.1 -p tcp –dport 80 -m time –timestart 20:00:00 –timestop 23:00:00
–kerneltz -j REJECT

9、对指定报文字符串匹配禁止端口或者开放端口

[root@localhost ~]#iptables -I INPUT  1 -d 172.18.24.1 -p tcp -m multiport –dports
80,443  -m string –algo bm –string
“boy” -j REJECT   #
– – algo是指定算法

[root@localhost ~]#iptables -I OUTPUT  -s 172.18.24.1 -p tcp -m multiport –sports
80,443  -m string –algo bm –string
“boy” -j REJECT

10、在规定单客户端并发连接数下开放端口,超过则限行

[root@localhost ~]#iptables -I INPUT 2 -d 172.18.24.1
-p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT

11、平均时间内放行多少连接,超过则限行

~]# iptables –I INPUT -d 172.16.0.7 -p icmp
–icmp-type 8 – -limit 20/minute – -limit-burst 4 -j ACCEPT

12、设置连接跟踪state

State连接跟踪,首先要清除防火墙规则,然后如下

[root@localhost ~]#iptables -A INPUT -d 172.18.24.1
-m state –state ESTABLISHED -j ACCEPT

[root@localhost ~]#iptables -A OUTPUT -s
172.18.24.1 -m state –state ESTABLISHED -j ACCEPT

所有建立连接状态的进栈出栈都保持放行(已经建立连接的)

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp -m multiport –dports 21
22,80,443,3306,139,445
-m state –state NEW -j ACCEPT
放行这些端口的new请求(即第一次连接)

[root@localhost ~]#iptables -R INPUT  1 -d 172.18.24.1 -m state –state
ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]#modprobe
nf_conntrack_ftp

追踪到的连接放置在文件/proc/net/nf_conntrack                                                     

调整可记录的连接数量最大值的文件/proc/sys/net/nf_conntrack_max                                       

设置超时时长的文件/proc/sys/net/netfilter/*timeout*

13、把连接到特定端口的记录记录到日志中

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport 22 -j LOG –log-prefix “ssh daemon”

[root@localhost ~]#tail /var/log/messages查看日志

四、iptables规则的保存

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE

                            -n,
–noflush
:不清除原有规则

                            -t,
–test
:仅分析生成规则集,但不提交

CentOS 6中:

         保存规则:

         service
iptables save>/etc/sysconfig/iptables

         保存规则于/etc/sysconfig/iptables文件,覆盖保存;

         重载规则:

         service
iptables restore</etc/sysconfig/iptables

         默认重载/etc/sysconfig/iptables文件中的规则

         配置文件:/etc/sysconfig/iptables-config                      

CentOS 7中:

          (1) 自定义Unit File,进行iptables-restore

          (2) firewalld服务;

          (3) 自定义脚本;

五、注意事项

1、添加规则时需要考量的因素:

 (1) 实现的功能:用于判定将规则添加至哪个表;

 (2) 报文的流经位置:用于判断将规则添加至哪个链;

 (3) 报文的流向:判定规则中何为”源“,何为”目标“;

 (4) 匹配条件:用于编写正确的匹配规则;

          (a) 专用于某种应用的同类规则,匹配范围小的放前面;

          (b) 专用于某些应用的不同类规则,匹配到的可能性较多的放前面;同一类别的规则可使用自定义链单独存放;

          (c) 用于通用目的的规则放前面;                                

2、规则优化的思路:

使用自定义链管理特定应用的相关规则,模块化管理规则;

 (1) 优先放行双方向状态为ESTABLISHED的报文;

 (2) 服务于不同类别的功能的规则,匹配到报文可能性更大的放前面;

 (3) 服务于同一类别的功能的规则,匹配条件较严格的放在前面;

 (4) 设置默认策略:白名单机制

          (a) iptables -P,不建议;

          (b) 建议在规则的最后定义规则做为默认策略;

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

(0)
chenxu@magedu.comchenxu@magedu.com
上一篇 2017-05-03
下一篇 2017-05-03

相关推荐

  • 第二周 博客作业

    1、linux上的文件管理类命令有哪些,其常用的使用方法及其相关示例。 文件管理命令:rm  mv cp       cp 复制命令       cp   源文件   目标文件           工作机制:如…

    Linux干货 2016-11-03
  • 磁盘管理及文件系统

    磁盘及文件系统管理初步与进阶(重点内容) 磁盘分区及文件系统 linux系统管理 磁盘分区及文件系统管理:分区工具 linux磁盘及文件系统管理 整个操作系统的硬件组成部分,最底层是硬件设备,计算能力得以运行的最根本的基础。 计算机的五大基本部件:cpu,运算器,控制器被整合到一起,由一个硬件部件来提供。 存储器(主存rom可编址的存储单元)。主板上有cpu…

    Linux干货 2016-08-30
  • 细述LVM

     前言:     LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统大小。此外,LVM的快照功能可以帮助我们快速备份数据。LVM为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。 看图识LVM &nbs…

    Linux干货 2015-06-15
  • FHS文件系统下个各目录功能

    FHS文件系统下个各目录功能 FHS文件系统的建立是为了让开发者和用户可以预测软件安装文件和文件夹的位置。对整个linux的文件系统系统做了以下的规范:     /bin:命令二进制文件的存放目录;     /boot:系统启动时一些文件存放的目录,包含引导linux的重要文件,…

    Linux干货 2016-10-18
  • 文本三剑客之sed用法总结

    描述:    sed是Stream EDitor(行编辑器)的简写,是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你…

    Linux干货 2016-08-10
  • 加密解密基础、PKI以及自建私有CA

    加密解密基础、PKI以及自建私有CA 加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。 解密就是加密的逆向操作,将加密过的不可读的数据经过处理,能够是之前不可读的信息还原成可读信息。 PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施;…

    Linux干货 2016-12-07