内核空间,集成在linux内核中扩展各种网络服务的结构化底层框架内核中选取五个位置放了五个Hook(勾子)function(INPUT、OUTPUT、FORWARD、PREROUTING、POST ROUTING),而这五个hoot function 向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上。
三种报文流向:
流入本机:PREROUTING —> INPUT —>用户空间进程流出本机:用户空间进程 —>OUTPUT —>POSTROUTING转发:PREROUTING —> FORWARD –> POSTROUTING
防火墙工具
iptables:
命令行工具,工作在用户空间用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包 .
CentOS 7引入了新的前端管理工具管理工具:firewall-cmd 命令行firewall-config 图形
iptables由四个表和五个链以及一些规则组成四个表table:filter, nat, mangle, rawfilter表:过滤规则表,根据预定义的规则过滤符合条件的数据包 ;nat表:network address translation 地址转换规则表mangle:修改数据标记位规则表Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度优先级由高到低的顺序为:raw–>mangle—>nat–>filter
INPUT OUTPUT FORWARD PREROUTI
当一个数据包进入网卡时,数据包首先进入PREROUTING链, 内核根据
数据包目的IP判断是否需要转送出去;
如果数据包就是进入本机的,数据包就会沿着图向下移动,到达 INPUT
链。数据包到达INPUT链后,任何进程都会收到它。本 机上运行的程序
可以发送数据包,这些数据包经过OUTPUT链 ,然后到达POSTROTING
链输出 ;
如果数据包是要转发出去的,且内核允许转发,数据包就会向右 移动,
经过FORWARD链,然后到达POSTROUTING链输出。
iptables规则
规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理匹配条件:默认为与条件,同时满足基本匹配:IP,端口,TCP的Flags(SYN,ACK等)扩展匹配:通过复杂高级功能匹配处理动作:称为target,跳转目标。内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG…自定义处理动作:自定义chain,利用分类管理复杂情形规则要添加在链上,才生效;添加在自定义上不会自动生效链chain:内置链:每个内置链对应于一个钩子函数自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效.iptables添加要点iptables规则添加时考量点:
要实现哪种功能:判断添加在哪张表上
报文流经的路径:判断添加在哪个链上
报文的流向:判断源和目的
匹配规则:业务需要
链上规则的次序,即为检查的次序,因此隐含一定的法则 :
同类规则(访问同一应用),匹配范围小的放上面
不同类规则(访问不同应用),匹配到报文频率较大的放上面
将那些可由一条规则描述的多个规则合并为一个
设置默认策略
实验环境准备:
Centos7: systemctl stop firewalld.service
systemctl disable firewalld. service
Centos6:service iptables stop; chkconfig iptables off
-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,
也不能被删除.
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
–line-numbers:显示规则的序号
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
(1) 指明规则序号
(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零
[!] -s, –source address[/mask][,…]:源IP地址或范围
[!] -d, –destination address[/mask][,…]:目标IP地址或范围
[!] -p, –protocol protocol:指定协议,可使用数字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or
“all“ 参看:/etc/protocols
[!] -i, –in-interface name:报文流入的接口;只能应用于数据 报文流入
环节,只应用于INPUT、FORWARD、PREROUTING链
[!] -o, –out-interface name:报文流出的接口;只能应用于数 据报文流
出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
[!] –source-port, –sport port[:port]:匹配报文源端口, 可为端口范围
[!] –destination-port,–dport port[:port]:匹配报文目标 端口,可为范围
[!] –tcp-flags mask comp mask 需检查的标志位列表,用,分隔。
例如: SYN,ACK,FIN,RST comp 在mask列表中必须为1的标志
位列表,无指定则必须 为0,用,分隔。
允许访问SSH服务:
–tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余 下的必须为0
–tcp-flags SYN,ACK,FIN,RST SYN,ACK
–tcp-flags ALL ALL
–tcp_flags ALL NONE
[!] –syn:用于匹配第一次握手
相当于:–tcp-flags SYN,ACK,FIN,RST SYN
[!] –source-port, –sport port[:port]:匹配报文的 源端口;
可以是端口范围
[!] –destination-port,–dport port[:port]:匹配报 文的目标端口;
可以是端口范围
[!] –icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp应答
8/0 echo-request icmp请求
(2)显式扩展:必须使用-m选项指明要调用的扩展模块的扩展 机制,要手动
加载扩展模块:
[-m matchname [per-match-options]]
原创文章,作者:shenjialong,如若转载,请注明出处:http://www.178linux.com/85174