
安全防御
常见的攻击手段
拒绝服务(DOS):
通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接,常见解决手段使用云服务商的流量清洗功能
口令破解:
常用的攻击手法俗称“跑字典”,常用解决方案设置登录错误次数限制
已知漏洞
通过一直漏洞进行数据获取或提权,常见解决手段定时更新防御性补丁
欺骗权限用户
社会工程学,通过欺骗权限客户得到授权资格的方式
常见的防御手段
基础类型防火墙:
主要实现包过滤防火墙
IDS类防火墙:
入侵检测系统,提供报告和事后监督为主
IPS类防火墙:
入侵防御系统,分析数据包内容,根据模式匹配去阻断非法访问
主动安全类防火墙:
对特定服务类型进行专项防御,常见设备有waf、daf
基础类防火墙
概念篇:
防火墙定义:
工作在主机边缘或者网络边缘处对数据报文进行检测,并能够实现定义好的规则,对数据报文进行相应处理的模块
防火墙分类:
类型分类
软件:iptables
硬件:深信服,网御,华为
逻辑上分类
主机防火墙
网络防火墙
工作机制:
包过滤防火墙:源地址 目标地址 源端口 目标的端口 连接状态
应用层防火墙:URL
模块
内核态:netfilter
用户态:iptables

iptables 经历的构造变化

centos7安装iptables
卸载firewalld
yum -y remove firewalld
yum -y install iptables-services.x86_64
systemctl start iptables.service
systemctl enable iptables.service
iptables 相关原理
而Linux防火墙的工作区域为下图中的绿色阴影部分(防火墙的概念这里不赘述):

Linux系统中防火墙功能的两大角色:iptables和netfilter。iptables是Linux系统下应用层内置控制防火墙的工具,netfilter则是防火墙功能的具体实现,是内核空间的功能模块。所谓的iptables“控制”防火墙,就是用户利用iptables将防火墙规则设置给内核的netfilter功能模块,这中间涉及“四表五链”:

“四表五链”其实是对用户设置规则的管理,是看待用户设置的规则的两个维度。举个例子,看图中深蓝色箭头的数据流向,数据包要到达用户层,需要经过PREROUTING链(路由前链),INPUT链(输入链),在这个链路中存放着用户设置的规则,这些规则根据功能不同又会被分组存放在RAW表、Mangle表和NAT表中。当数据包抵达PREROUTING链时,netfilter程序会依次从RAW表、Mangle表和NAT表中取出针对PREROUTING链的用户规则并执行相应操作;同理,INPUT链上的规则也会被分组存放在Mangle表和Filter表中,netfilter程序会依次从这两个表中取出针对INPUT链设置的用户规则并执行相应操作。(特别强调,转发的数据包不经过 OUTPUT 链)
这里需要强调的一点是FORWARD链,它是转发链,也就是说只有在网卡个数>=2的系统中才具有的功能:开启系统转发功能后,当网络层发现数据包并非发给本机时会从另一网卡转发出去。中间经过FORWARD链,FORWARD链上的规则由Filter表、Mangle表读取操作。所以对于单网卡的系统中,上图应更改为:

四表五链功能性介绍
规则链:承载防火墙规则
入站:INPUT
出战:OUTPUT
转发:FORWARD
路由前应用规则:修改目标地址 PREROUTING
路由后应用规则:修改源地址 POSTROUTING
链详解:
链(Chains):
INPUT链:
处理所有目标地址是本地系统的数据包。
在filter、nat 和 mangle 表中都有。
OUTPUT链:
处理所有源地址是本地系统的数据包。
在filter、nat、mangle 和 raw 表中都有。
FORWARD链:
处理所有通过系统进行的转发的数据包。
仅在filter 表中。
PREROUTING链:
在数据包进入路由之前处理,主要用于目标地址修改。
在nat、mangle 和 raw 表中。
POSTROUTING链:
在数据包离开路由之后处理,主要用于源地址修改。
在nat、mangle 和 raw 表中。
=======================================
INPUT和OUTPUT均包括经过内核和不经过内核的信息
FORWARD是经过内核的路由转发信息
PREROUTING是不经过内核路由之前的信息
POSTROUTING是不经过内核路由之后的信息
规则表:承载防火墙链
filter表:
主要用于过滤数据包,决定是否允许数据包通过防火墙。
包含默认的三个链:INPUT、OUTPUT 和 FORWARD。
nat表:
用于进行网络地址转换(Network Address Translation,NAT),改变数据包的源或目标地址。
包含三个主要链:PREROUTING、POSTROUTING 和 OUTPUT。
mangle表:
主要用于修改数据包的头部信息,如修改TTL(Time To Live)等。
包含五个链:PREROUTING、OUTPUT、INPUT、FORWARD 和 POSTROUTING。
raw表:
用于配置连接跟踪表的规则,决定数据包是否需要被跟踪。
包含两个链:PREROUTING 和 OUTPUT。

注:centos7中NAT表默认包含的是4个链,还包括INPUT链

防火墙的相关顺序:
规则顺序匹配:
由上而下,匹配即停止
表应用顺序:
raw>mangle>nat>filter
链应用顺序
入站:PREROOUTING -->INPUT
出站:OUTPUT -->POSTROUTING
转发:PREROUTING-->FROWARD-->POSTEROUTING


iptables语法规则

书写规则
语法构成:iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]注意:
不指定表时,默认filter表
不指定链名时,默认指表内所有链
除非设置链默认策略,否则,必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
常见动作类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过。必要时会给出提示
SNAT:修改数据包源地址
DNAT:修改数据包目的地址
REDIRECT:重定向
LOG:记录日志信息,然后传给下一条规则继续匹配
匹配选项
查看规则列表
-L 列出所有规则条目,可以指定链
-n 以数字形式显示地址、端口等信息
-v 以更详细的方式像是规则信息
--line-numbers 查看规则时,显示规则的序号
添加性的规则
-A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入一条规则
删除、清空规则
-D 删除链内指定序号(或内容)的一条规则
-F 清空所有规则
设置默认策略
-P 指定的链设置默认规则
配型类型分类
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TPC标记、ICMP类型等条件
显示匹配
要求以“-m扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
就匹配选项来说可以分为查看、添加、替代、删除
查看显示规则-L -n 和 -v的不同显示
iptables是有默认规则的,使用-L查看

默认允许所有TPC协议进行访问
如果只看单个链,-L后可以指定链
iptables -t 表名 -L 链名

-n 以数字(IP)形式展示

-v
-v 显示哪条规则过滤的数据报文最多,过滤越多数据报文的端口规则顺序应该越靠前,因为匹配规则方式是由上而下逐个规则过滤

添加规则选项
-A(append)追加
如果我们再增加一条允许UDP协议通过的规则


-I(insert)插入
如果想要吧ICMP接受规则插入到第二个位置

--line-numbers(也可以直接--line) 显示行号,方便插入

删除规则选项

默认filter表,此时也可以不指定表
删除第二条规则

-F:清空所有规则

修改规则 -R

和插入很相似,只是将-A修改成-R
-P 指定默认规则
实例:假设只放行apache服务
准备:
yum -y install httpd
systemctl start httpd
echo "123" >/var/www/html/index.html
curl localhost

操作:
清空所有规则
iptables -F
允许80端口连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允许22端口连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
其他端口拒绝
iptables -P INPUT DROP
查看

浏览器查看

使用ICMP协议进行ping操作

就匹配类型而说,可以分为通用匹配(协议、IP)、隐含匹配(端口,icmp类型)、显示匹配(-m扩展模块)
通用匹配(协议、IP)
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡 -o 出站网卡
示例:
1:filter表中追加规则:当源地址是192.168.1.11时,请求转发时拒绝
iptables -A FORWARD -s 192.168.1.11 -j REHECT
2:filter表中开头添加规则:当源地址是10.20.30.0/24网段的IP,丢弃
iptables -I INPUT -s 10.20.30.0/24 -j DROP
3:iptables -I INPUT -p icmp -j DROP
在filter表开头增加一条规则:当入站请求为ICMP请求时丢弃数据包
4:iptables -A FORWARD ! -p icmp -j ACCEPT
转发请求非ICMP协议都接受,ICMP协议拒绝
5:iptables -A INPUT -i ens33 -s 172.16.0.0/12 -j DROP
filter表添加规则:INPUT链上通过ens33的数据包且来自于172.16.0.0/12 的IP的数据包丢弃
6:iptables -A INPUT -p icmp -i lo -j REJECT
拒绝本地回环地址进行icmp协议
拒绝和丢弃的区别:
拒绝会返回无法连接的消息回复,会消耗资源
如果是drop,不返回拒绝信息,直接丢弃,客户端等到连接超时后自动显示连接超时
隐含匹配(端口,icmp类型)
常用的隐含匹配条件
端口匹配:--sport 源端口 --dport 目的端口
ICMP类型 --icmp-type ICMP类型
实现可以ping别人,别人不能ping自己
实现方法一:
ICMP类别代号
0(echo-reply) 代表一个响应信息(回复报文)
3(destination unreachable)表示目的地不可达
8(echo request)来自客户端的请求消息
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

实现方法二:
iptables -A INPUT -p icmp --icmp-type 8 -s 192.168.1.11 -j DROP
设置当来源IP为192.168.1.11,直接丢包
其他示例:
1、转发链追加当1.0网段IP进行连接且端口为53号UDP协议端口接收
iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT
2、放行FTP服务端口
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
显示匹配
多端口匹配
-m mutiport --sport 源端口列表
-m mutiport --dport 目的端口列表
例:
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80-82,85 -j REJECT
注:和分开写的区别:这样多个端口可以成为一条规则,可以优化匹配次数
IP范围匹配
-m iprange --src-range IP范围
例:
对IP范围进行过滤:禁止1.10-1.20之间的IP进行访问
iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.10-192.168.1.20 -j REJECT
MAC地址匹配
-m mac --mac-source MAC地址
例:
对mac地址进行处理
iptables -A INPUT -m mac --mac-source 00:0c:29:fe:d1:df -j DROP
状态匹配
-m state --state 连接状态
例:
当新增访问连接21号端口的时候,拒绝连接,(已经连接的不拒绝)
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISH,RELATED -j ACCEPT
iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j DROP
时间匹配
例:
-m time --timestart 开始时间 --timestop 结束时间
iptables -A OUTPUT -p tcp -m tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j DROP
SNAT实验:
实验配置双网卡路由器:
环境准备:
192.168.2.10:作为网关(2块网卡,ens33;net模式,ens34:仅主机模式)
192.168.2.11:模拟内网服务器(一块网卡,仅主机模式)
10修改为iptables
yum -y remove firewalld
yum -y install iptables-services.x86_64
systemctl start iptables.service
systemctl enable iptables.service
10配置:
把vmnet8网卡设置成vmnet8自动分配IP地址
cd /etc/sysconfig/network-scripts
cp -a ifcfg-ens33 ifcfg-ens34
vim ifcfg-ens34
把ens33网卡修改成dhcp模式
vim ifcfg-ens33

增加一块网卡ens34,模式为仅主机模式.IP为192.168.2.10

service network restart
ping一下百度查看是否可以连接公网

10开启路由转发
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
sysctl -p
目录:
cat /proc/sys/net/ipv4/ip_forward
出口网卡为ens33的IP全部修改为上公网的IP(dhcp模式给ens33分配的IP)
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j SNAT --to-source 192.168.1.128
意为从2.0网段传来的IP,源地址全部修改为192.168.1.128
iptables -t nat -L

11配置:
修改网关,指向网关服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33

service network restart
测试:11端ping一下百度,成功即可
动态识别公网地址并分配,无需手动指定
iptables -t nat -F
ADSL原理(动态分配IP地址)
在经过路由表之后,再去修改为外网地址(匹配规则之后再去修改IP,这样不用去找dhcp给匹配的上网IP了)
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE

DNAT
DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标地址
图示:

DNAT进入路由表之前先把IP改了,然后进入路由表匹配
实验:
三台服务器
都使用NAT模式即可
公网路由器:192.168.2.10(nat) 192.168.1.10(仅主机)
内网web服务器:192.168.1.11(nat)
公网用户:192.168.2.12(仅主机)
实现:公网用户通过网关服务器访问web服务器
11配置httpd
yum -y install httpd
systemctl start httpd
echo "123" >/var/www/html/index.html
配置网卡网关,指向10网关服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33

10配置网关服务器
开启网关服务器(10)的路由转发
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
sysctl -p
当外网用户(2.0网段IP)从ens34进入且目标IP为192.168.2.10(网关服务器(即自己)的外网网卡IP),目标端口为80之前将访问的目标IP地址修改为192.168.1.11(指向内网服务器)
iptables -t nat -A PREROUTING -i ens34 -d 192.168.2.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.11
iptables -t nat -L

12根据ifconfig配置网卡

测试
2.12 curl 2.10网关服务器

防火墙的备份
清空后建立一条规则
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
永久保存
service iptables save(centos 7:iptables-save >/etc/sysconfig/iptables)
保存在了/etc/sysconfig/iptables中

导出和导入
导出:
iptables-save > save.iptables

导入:
iptables-restore <save.iptables

发布者:LJH,转发请注明出处:https://www.ljh.cool/6694.html