主机防火墙:服务范围为当前主机
网络防火墙:服务范围为防火墙一侧的局域网
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,Checkpoint,NetScreen
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
网络层防火墙:OSI下面第三层
应用层防火墙/代理服务器:代理网关,OSI七层
应用层防火墙/代理服务型防火墙(Proxy Service)
Netfilter组件
iptables
命令行工具,工作在用户空间
用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
firewalld
CentOS 7引入了新的前端管理工具
管理工具:
firewall-cmd命令行
firewall-config图形
iptables由四个表和五个链以及一些规则组成
四个表table:
优先级由高到低: raw–>mangle–>nat–>filter
五个内置链chain
**规则rule:**根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
匹配条件:默认为与条件,同时满足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
处理动作:称为target,跳转目标
内建处理动作:ACCEPT(接收),DROP(婉转的拒绝),REJECT(强硬的拒绝),SNAT,DNAT,MASQUERADE,MARK,LOG...
自定义处理动作:自定义chain,利用分类管理复杂情形
规则要添加在链上,才生效;添加在自定义上不会自动生效
链chain:
: **内置链:**每个内置链对应于一个钩子函数
**自定义链:**用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
iptables规则添加时考量点
链上规则的次序,即为检查的次序,因此隐含一定的法则
实验环境准备:
systemctl stop firewalld.service
systemctl disable firewalld.service
service iptables stop
chkconfig iptables off
man 8 iptables
iptables [-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]
示例1:
从172.18.99.1来的所有全部拒绝访问
[root@centos7 ~]#iptables -A INPUT -s 172.18.99.1 -j DROP
-A 添加 -I 插入 -s 后指定源地址 -j 策略
iptables [-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname[per-target-options]
--------------------------------
-t table(表):raw, mangle, nat, [filter]默认
--------------------------------
SUBCOMMAND(子命令):
1、链管理:
-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
2、查看:
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值(字节数更精确)
--line-numbers:显示规则的序号
常用组合:
--vnL
--vvnxL --line-numbers
-S selected,以iptables-save 命令格式显示链上规则
3、规则管理:
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除(1) 指明规则序号(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零(包数指从头开始)
iptables的每条规则都有两个计数器
(1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和
--------------------------------
chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
匹配条件
基本:通用的,PARAMETERS
扩展:需加载模块,MATCH EXTENTIONS
1、基本匹配条件:无需加载模块,由iptables/netfilter自行提供
[!] -s, --source address[/mask][,...]:源IP地址或范围
[!] -d, --destination address[/mask][,...]:目标IP地址或范围
[!] -p, --protocol protocol:指定协议,可使用数字如0(all)
protocol: tcp, udp, icmp, icmpv6,udplite,esp, ah, sctp, mhor "all" 参看:/etc/protocols
[!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
[!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
2 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
查看帮助man iptables-extensions
(1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
tcp协议的扩展选项
[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
[!] --destination-port,--dportport[:port]:匹配报文目标端口,可为范围
[!] --tcp-flags mask comp
mask 需检查的标志位列表,用,分隔 例如SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
示例:
--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_flagsALL NONE
[!] --syn:用于匹配第一次握手
相当于:--tcp-flags SYN,ACK,FIN,RST SYN
udp协议的扩展选项
[!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围
[!] --destination-port,--dportport[:port]:匹配报文的目标端口;可以是端口范围
icmp协议的扩展选项
[!] --icmp-type {type[/code]|typename}
type/code
0/0 echo-replyicmp应答
8/0 echo-request icmp请求
(2)显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块
[-m matchname[per-match-options]]
处理动作:
-j targetname [per-target-options]
简单:ACCEPT,DROP
扩展:REJECT:--reject-with:icmp-port-unreachable默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
...
自定义链:
Chain INPUT (policy ACCEPT 21144 packets, 3008K bytes)
pkts bytes target prot opt in out source destination
21 1954 DROP all -- * * 172.18.99.1 0.0.0.0/0
16 1320 REJECT all -- * * 172.18.99.1 0.0.0.0/0 reject-with icmp-port-unreachable
pkts:包数
bytes:字节数
target:处理动作
prot:协议
opt:
in:传入
out:传出
source:原地址
destination:目标地址
······持续更新中······