防火墙简介
来源:互联网 发布:淘宝卖家上传宝贝软件 编辑:程序博客网 时间:2024/06/07 12:52
- 防火墙简介
- 前言
- 防火墙的概念
- 网络层防火墙
- 代理服务型防火墙
- Iptables的基本认识
- Iptables的组成
- Iptables的使用
- CHAIN
- RULE
- 匹配条件
- 基本匹配
- 扩展匹配
- 规则处理
- 保存规则的方式
- Firewalld
- Firewalld zone分类
- 预定义服务
- Firewalld配置
- firewall-cmd 命令选项
- firewall-cmd 命令示例
- 前言
防火墙简介
前言
防火墙的概念
防火墙(Firewall)是工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则时由规则定义进行处理功能的组件。
防火墙类型根据工作的层次的不同来划分,常见的防火墙工作在OSI第三层,即网络成防火墙,工作OSI第七层称为应用层防火墙,或者代理服务器(代理网关)。
网络层防火墙
网络层防火墙又称包过滤防火墙,在网络层对数据包进行过滤,过滤的依据是系统内设置的过滤规则,被称为访问控制列表(ACL),通过检车数据流中的每一个数据的源地址,目的地址,所用端口号和协议状态等条件,或他们的组合来确定是否允许该数据包通过。优点:对用户来说透明,处理速度快且易于维护。缺点:一旦黑客吐蕃防火墙,就可以轻易地伪造数据包的源地址,目的地址和IP的端口号,即“IP地址伪造”。
代理服务型防火墙
代理服务型防火墙将所有跨越防火墙的网络通信链路分为两段。当代理服务器接收到用户对某个站点的访问请求后会检查该请求是否符合控制跪着。如果规则允许,则代理服务器会替代用户去那个站点取回所需的信息,转发给用户。内外网用户的访问都是通过代理服务器来实现对的。从而起到了格力防火墙内外计算机系统的作用。特点:在应用对数据进行检查,比较安全。但是会增加防火墙的负载。
现实生产环境中所使用的防火墙一般都是两者相结合。即先检查网络数据,通过之后再送到应用层检查。
按照分类可以分为:
- 主机防火墙:服务范围为当前主机
- 网络防火墙:服务范围为防火墙一侧的局域网
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一部分能基于软件实现。
- 软件防火墙:运用于通用硬件平台之上的防火墙的应用软件
Iptables的基本认识
Netfilter组件称为内核空间,它被集成在Linux内核中。netfilter是一种内核中用于扩展各种网络服务的结构化底层框架。它是在内核中选取五个位置放了五个 hook function,而这五个 hook function 向用户开放,用户可以通过一个工具(iptables)向其写规则。
Netfilter 主要由信息过滤表组成,包含了控制IP包处理的规则集。根据规则所处理的IP包的类型,规则被分组放在链中,从而使内核对来自某些元源和前往某些目的地或具有某些协议类型的信息包进行处理,如完成数据包的处理、控制和过滤等。
Iptables也称为用户空间,是一个工作在用户层用来写规则的工具,写好的规则被送往netfilter。这些规则告诉内核中的netfilter组件如何去处理信息包。
Iptables的组成
iptables有四个表和五个链以及一些规则组成:
四个表:
五个链:
数据包过滤匹配流程图
Iptables的使用
语法:
iptables [-t 表名] <-A|-I|-D|-R> 链名[规则编号][-i|-o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [-sport 源端口号] [-d 目标IP地址|目标子网] [-dport 目标端口号]<-j 动作>
CHAIN
--new
,新建一条链 -X --delete
,删除一条用户自定义链(空链) -F --flush
,清空一条链,默认清空表中所有链 -P --policy
,定义链的默认处理策略(ACCEPT、DROP、REJECT) -E --rename
,重命名自定义的未被引用的链(计数器为0)
RULE
-n:--numeric
以数字格式显示地址和端口 -v:--verbose
详细信息,-vv,-vvv -x:--exact
显示计数器的精确值 --line-numbers
显示链上的规则的编号 -A --append
追加,在链的最后加一条规则 -I --insert
插入一条规则,默认第一个,一般使用-I CHAIN NUM 给规则加一个编号。 -R --replace
替换某条规则,规则被替换并不会改变顺序,必须要指定替换的跪着编号:-R CHAIN NUM -Z --zero
清空计数器,iptables中那个每条规则默认有两个计数器,用于记录本条规则所匹配到的数据包的个数和本条规则所匹配到的数据包的总大小 -S --selected
以iptables-save 命令的格式显示链上的规则
匹配条件:
基本匹配
基本匹配:netfilter 自带的匹配规则
扩展匹配
扩展匹配:对某一种功能的扩展,经由扩展模块引入的匹配机制
- 隐式扩展:对某一种协议扩展
iptables -p(--protocol) (tcp|udp|icmp|icmpv6|ah|esp|sctp|mh|all)
做协议匹配
TCP
TCP隐含指明了 -m tcp
有专有选项
--source-port,--sport port[:port]
匹配保温中TCP首部源端口,可以是端口范围 --dport
指定目的端口 --tcp-flages
(SYN,ACK,FIN,PSH,URG,RST,ALL,NONE)指定TCP的标志位,需要两个标志位列表,如:SYN,ACK,FIN,RST,SYN第一个列表表示要检查的位,第二个列表表示第一个列表中出现的位必须为1,未出现的必须为0 --syn
只允许新连接,相当于--tcp-flags syn,fin,sck,rst,syn
UDP
UDP隐含指明了 -m udp
有专有选项
--sport
指定源端口,匹配报文中UDP首部的源端口,可以是范围 --dport
指定目标端口,匹配报文中UDP首部目标端口,可以是范围
ICMP
ICMP隐含指明了 -m icmp
有专有选项
--icmp-type
echo-request,8(ping 出去,请求回应)echo-reply,0(给予回应)
- 显式扩展:额外附加的更多的匹配跪着,功能性的扩展
使用帮助:
CentOS 6:man iptables
CentOS 7:man iptables-extensions
1.multiport扩展
以离散方式定义多端口匹配,最多指定15个端口 --source-ports,--sports port[,port|,port:port]
指定多个源端口
--destination-ports,--dports port[,port|,port:port]
指定多个目标端口
--ports port[,port|,port:port]
多个源或目标端口
示例:
从源地址172.16.0.0/16到目标地址172.16.100.10通过的tcp协议的数据包,只开放20,22,80端口允许
[root@CentOS7 ~]$iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
2.iprange扩展
指明连续的(但一般不是整个网络) ip地址范围 --src-range from[-to]
源IP地址范围 --dst-range from[-to]
目标IP地址范围
示例:
从源地址172.18.100.5-172.18.100.10这个范围内的IP,到目的地址172.16.100.10通过80端口的数据包都丢弃
[root@CentOS7 ~]$iptables -A INPUT -d 172.18.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.18.100.10 -j DROP
3. mac扩展
指明源MAC地址
适用于: PREROUTING, FORWARD, INPUT chains
--mac-source XX:XX:XX:XX:XX:XX
示例:
只允许源地址为172.16.0.9,MAC地址为00:0c:29:0e:4d:7c的数据包访问
[root@CentOS7 ~]$iptables -A INPUT -s 172.18.0.9 -m mac --macsource 00:0c:29:0e:4d:7c -j ACCEPT[root@CentOS7 ~]$iptables -A INPUT -s 172.18.0.9 -j REJECT
4.string扩展
对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp}
:字符串匹配检测算法
bm: Boyer-Moore
kmp: Knuth-Pratt-Morris --from offset
开始偏移 --to offset
结束偏移 --string pattern
:要检测的字符串模式 --hex-string pattern
:要检测字符串模式, 16进制格式
示例:
源地址172.18.25.15通过源端口20发出的数据包中,含有“google”字符就拒绝
[root@CentOS7 ~]$iptables -A OUTPUT -s 172.18.25.15 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT
5.time扩展
根据将报文到达的时间与指定的时间范围进行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
日期开始
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
日期结束
--timestart hh:mm[:ss]
时间开始
--timestop hh:mm[:ss]
时间结束
--monthdays day[,day...]
每个月的几号
--weekdays day[,day...]
星期几
--kerneltz
:内核时区,不建议使用, CentOS7系统默认为UTC
注意: centos6 不支持kerneltz , –localtz指定本地时区(默认)
示例:
源地址172.18.0.0/16到目标地址172.18.25.15通过80端口的数据包,在每周六和周日的14:30到18:30进行丢弃操作
[root@CentOS7 ~]$iptables -A INPUT -s 172.18.0.0/16 -d 172.18.25.15 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
6.connlimit扩展
根据每客户端IP做并发连接数数量匹配,可防止CC(Challenge Collapsar挑战黑洞)攻击
--connlimit-upto n
:连接的数量小于等于n时匹配 --connlimit-above n
:连接的数量大于n时匹配
通常分别与默认的拒绝或允许策略配合使用
示例:
目的地址172.18.25.15端口22,每个IP的连接数超过2,对数据包拒绝
[root@CentOS7 ~]$iptables -A INPUT -d 172.18.25.15 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7.limit扩展
基于收发报文的速率做匹配
令牌桶过滤器 --limit rate[/second|/minute|/hour|/day]
根据速率定义规则 --limit-burst number
最多匹配多少数据包
示例:
发送到目的地址172.18.25.15的ping请求回应的数据包,每分钟3个封包,最多5个,超过就拒绝
[root@CentOS7 ~]$iptables -I INPUT -d 172.18.25.15 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT [root@CentOS7 ~]$iptables -I INPUT 2 -p icmp -j REJECT
8.state扩展
conntrack机制:追踪本机上的请求和响应之间的关系。根据“连接追踪机制”去检查连接的状态,较耗资源。
-m state --state <NEW|ESTABLISHED|RELATED|INVALID|UNTRACKED>
状态有如下几种:
示例:
允许172.18.25.15通过20和80端口建立新的连接,并保持已有连接的通信
[root@CentOS7 ~]$iptables -A INPUT -d 172.18.25.15 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT[root@CentOS7 ~]$iptables -A OUTPUT -s 172.18.25.15 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
已经追踪到的并记录下来的连接信息库
/proc/net/nf_conntrack
调整连接追踪功能所能够容纳的最大连接数量
/proc/sys/net/nf_conntrack_max
不同的协议的连接追踪时长
/proc/sys/net/netfilter/
注意: CentOS7 需要加载模块: modprobe nf_conntrack
iptables 的链接跟踪表最大容量为 /proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
解决方法两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout时间
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n
规则处理
注意:
规则的检查次序:规则在链接上的持续即为其检查时候的生效次序,因为,优化的法则如下:
1.同类规则(同一应用),匹配范围小的放前面,用于特殊处理;
2.不同类的规则(访问不同应用),匹配范围大的放在前面;
3.应该将那些可由一条规则描述的多个规则合并为一;
4.设置默认策略。
保存规则的方式
CentOS 6:
service iptables saveiptables-save > /etc/sysconfig/iptablesiptables-save >/PATH/TO/FILE
CentOS 7:
iptables-save >/PATH/TO/FILEiptables -S >/PATH/TO/FILE
自动生效规则文件中的规则:
1.iptables 命令保存在脚本文件中,让脚本文件开机自动运行/etc/rc.d/rc.local;
2.用规则文件保存规则,开机自动重载命令 /etc/rc.d/rc.local 定义
恢复iptables规则命令
iptables-restore < /PATH/TO/FILE
Firewalld
firewalld是CentOS 7.0新推出的管理netfilter的工具,firewalld是配置和监控防火墙规则的系统守护进程。可以实现iptables,ip6tables,ebtables的功能。firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
归入zone顺序:
- 先根据数据包中源地址,将其纳为某个zone
- 纳为网络接口所属zone
- 纳入默认zone,默认为public zone,管理员可以改为其它zone
网卡默认属于public zone,lo网络接口属于trusted zone
Firewalld zone分类
预定义服务
Firewalld配置
查看预定义服务列表
firewall-cmd --get-services
/usr/lib/firewalld/services/*.xml预定义服务的配置
三种配置方法
- firewall-config (firewall-config包)图形工具
- firewall-cmd (firewalld包)命令行工具
- /etc/firewalld 配置文件,一般不建议
firewall-cmd 命令选项
firewall-cmd 命令示例
查看默认zone
firewall-cmd --get-default-zone
默认zone设为dmz
firewall-cmd --set-default-zone=dmz
在internal zone中增加源地址192.168.0.0/24的永久规则
firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
在internal zone中增加协议mysql的永久规则
firewall-cmd --permanent –zone=internal --addservice=mysql
加载新规则以生效
firewall-cmd --reload
- 防火墙简介
- 软硬防火墙区别简介
- 软硬防火墙区别简介
- 防火墙原理简介
- Internet防火墙技术简介
- 防火墙工作模式简介
- 防火墙工作模式简介
- 防火墙工作模式简介
- iptables防火墙简介
- 防火墙的简介
- 穿越防火墙技术要求简介
- 防火墙技术指标---并发连接数/吞吐量 简介
- SQLmap简介以及防火墙绕过方法
- SQLmap简介以及防火墙绕过方法
- SQLmap简介以及防火墙绕过方法
- 防火墙
- 防火墙
- 防火墙
- 如何在HTTPS 网页中引入HTTP资源: Mixed Content?
- 进程间的通信---(二)信号量
- 2. Linux文件、目录管理
- 「游戏引擎Mojoc」(1)简介
- linux nginx php mysql 安装
- 防火墙简介
- Clouder专项技能认证课程:网站建设——部署与发布
- 高并发下的抽奖优化
- Windows下安装python版的XGBoost(Anaconda)
- JavaScript中的原型与原型链
- 数据结构回顾——时间复杂度分析
- SylixOS高精度时钟分析
- 关于登录记住密码技术的小实现
- 使用SpringBoot的优势