常见的网络攻击方式
拒绝服务:DOS 设想,一盘花生米吃一天,占位 攻防比:10:1
肉食法则:找人硬抗
云盾:嘎嘎抗揍
放大攻击:有人问1+1为什么=2,只要几个字节,但是回答需要回好多解释,是问题的好几十倍甚至几百倍
已知漏洞
http v1 1.1 请求要10个数据,但是就说第一个要啥,之后剩下的9个一直在保持连接,后来有了keeplive
golang 1.16.1 有漏洞 1.16.2 就修复了
社会工程学
叛徒,家贼难防,不通过技术手段的都是社会工程学
暴力破解
又叫跑字典:有个文档十几个g,里面有很多字符串,挨个读取,试你的密码,可以设置最大连接多少次防御
撞库攻击:比如QQ密码漏了,可能会拿这个登录你的支付宝,淘宝,京东等等
防火墙概念
防火墙概念:工作在主机边缘处或者网络边缘处对进出的数据报文通过定义规则进行操作的模块
主机网络的边缘:内核那里,到不了服务器,到服务器就不用防了,等死吧
定义规则:理解为纱窗,要非常合理,可以放进空气,但是苍蝇蚊子不行。
数据报文特征:源端口,目标端口,源地址,目标地址,协议类型,这些都属于数据包的特征,也就是防火墙默认的概念,都是基础类防护墙。
防火墙类型
基础类防火墙 通过数据报文的特征实现数据报文过滤的模块
IDS 类防火墙 入侵检测系统:
反追踪是很困难的,IDS是一个透明设备,放在路由器后面,他会静静地看着所有经过的数据包,哪怕是攻击性的也不吱声,但是他会记录日志信息,路径,可以提供给管理员,方便修复或者追踪(别人删除痕迹,但是IDS会记录,作为证据)
IPS 类防火墙 入侵防御系统:
判断别人发送的数据包是不是有攻击迹象,站在明面上跟你对抗的,有攻击迹象就决绝访问。
主动安全类防火墙
WAF :web 应用 防护墙
针对于web服务器做的防御类防火墙,专门做web的防御,IPS会包括很多,没什么专精性。
waf是很有必要的,还能防御一点点DOS。
DAF :数据库 应用 防火墙
针对于数据库的防御类防火墙,里面只有针对于防护数据库的代码。
防火墙这种东西,如果没有,就是管理员的锅,如果有了,那就是防火墙的原因了,懂得都懂,其实这东西真的不太行,基础类防火墙就能满足90%的生产环境了。
因特尔已经有已知的后门了,全世界十三台ipv4的服务器,美国就有7台,所以他很不希望ipv6普及!
防火墙与路由器的区别:
-
哪个位置都可以装防火墙,一般是路由器前后有硬件防火墙,内网之间用软件防火墙,前后可以看吞吐量
-
路由器最核心的功能是 广播域隔离,会转换源地址,目标地址,如果访问的不是我们的公网,会过滤掉。
-
防火墙是通过数据包的目标行为作为过滤基础,比如访问3306端口,访问数据库之类的操作一看就是不干好事,拒绝。
-
所以防护墙和路由器的一些功能是重叠的,至于谁先,就要看吞吐量了,就是谁的性能高谁放前面。
吞吐量就是过滤量:
假如路由器10G,防火墙1G,那么就是路由后防火墙,因为路由器的吞吐量远大于防火墙
假如路由器1G,防火墙10G,那么就是路由前防火墙,因为防火墙的吞吐量远大于路由器
- 有些病毒可以在内网中进行传播,但是防火墙也贵,一两万一个,一百台服务器的话不可能装几百万的防护墙,有这钱如果过升级服务器的性能会有很大的提升。所以内网中一般都是软件防火墙:iptables和firewalld等等。
基础防火墙分类
-
硬件:核心代码封装在核心的芯片里,他这个芯片只有一个作用,就是做数据报文的过滤,硬件一般都有图形化管理界面,GUI。但是硬件贵。
联想网御; 华为; 绿盟; 安瑞科技; h3; IBM; HP
绿盟还是不错的,他会在7X24小时在全国的一百多个节点对你的服务器进行访问,以此探测有没有问题,如果有四个节点以上访问不到,他们会有人给你打电话告诉你 -
软件:通用性的CPU,他会有很多不一样的功能,还有很多别的软件一起用一个CPU,所以专业性不强。但是他免费。
iptables
内核态:6版本:netfilter 7版本: netfilter 内核中防火墙的核心代码
用户态:6版本:iptables 7版本: firewalld 用户命令行管理工具
但是功能没啥区别,底层原理都还是netfilter,只是工具变了。所以大部分用的还是iptables
-
工作在内核态的原因:网卡一定是工作在内核态的,协议处理也在内核态,如果进入了用户态,那还栏啥啊,都进去了。
用户态存在的原因:如果用户直接修改内核,那敲错了的话内核就崩了,所以需要用户态工具;iptables,符合内核规则的就可以通过,不符合的报错,举例:/etc/sysctl.conf
防火墙原理
四表五链
- 规则挂在链上,链挂在表上!
表是iptables中的高级结构,用于组织和分类规则。而链是表中的一部分,用于定义规则的匹配和操作。每个表可以包含多个链,而每个链又可以包含多个规则。
例如,filter表可以包含INPUT、OUTPUT和FORWARD等链,用于处理不同方向的数据包。而nat表可以包含PREROUTING和POSTROUTING链,用于处理数据包的网络地址转换。
当数据包到达iptables时,它会按照预定义的顺序在表中的相应链中匹配规则。如果数据包匹配了链中的规则,iptables会执行相应的操作,例如允许或拒绝数据包。
规则
-
自定义规则:根据数据报文特征做特定匹配动作的
默认规则:对大量的操作进行默认匹配的选择
链:承载规则,必须大写,大小写敏感
INPUT 处理入站请求
OUPUT 处理出站请求
FORWARD 处理转发请求
PREROUTING 路由前 DNAT 用于将内网服务器暴露至公网
POSTROUTING 路由后 SNAT 内网中多个client使用同一类公网地址访问互联网
表:承载链
raw: 数据报文跟踪
mangle: 数据报文修改 TTL 3
持久化防火墙标记连接
nat: 路由转发
filter: 数据报文过滤
小总结
-
访问路由器网卡本身的请求,走的是INPUT,OUTPUT
访问外网的时候,走的是PREROUTING和POSTROUTING
只要不是同一个网段的,就需要开启路由转发FORWARD -
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
-
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
-
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
五链
INPUT
- 承载入站规则:
数据包进入我用户空间的过程就是入站,所以把报文放在input接口上,input看他符不符合规则(放行22,80,443,其他比如3306等拒绝)
OUTPUT
- 承载出站规则,默认出站规则一般都是放行的,因为从外面进来的已经验证身份,符合规则了。
FORWARD
- 承载转发规则
也就是路由转发功能,当有人通过eth0访问,目标地址并不是我自己,如果符合规则,并且在我的路由表中可以找到的话,就通过路由转发,把请求交给eth1,最终到达目标地址。
PREROTING
- 在路由前,作用是对应的nat转换,DNAT,SNAT。
(记住!所有的数据包进来的时侯都先由这个链处理)
DNAT的转换过程
- 接受请求时:10.14请求访问网页webserver——请求发送至10.13,10.13将DNAT修改为66.11——66.13将请求转发给webserver66.11
- 回应时:66.11回应给10.14,由于不在同一网段,所以去找网关66.13——66.13转发给10.13——因为在DNAT转换的同时也会进行SNAT转换,所以SNAT转换为10.13再回应给10.14
POSTROUTING
- 路由表后,转换SNAT
(所有的数据包出来的时侯都先由这个链处理)
SNAT转换的过程
- 请求时:66.11请求访问20.20:80——通过交换机连接网关66.1——66.1转发给10.1——因为需要地址转换,所以走PREROUTING链,把66.11的源地址转换为公网IP10.1,并且记录了这次请求的特征码——10.1访问20.2
- 回应时:20.2返回结果给10.1——10.1路由器通过当时记录的特征码,把请求的结果目标地址转换为66.11,交给66.1——66.1转发给66.11
四表
- 运维一定要掌握nat表和filter表!
raw
数据报文跟踪,看一下数据报文经过了那些路径
mangle
数据报文修改:TTL:数据包的生命周期,不能一直在公网带宽中游荡。
TTL 3:表示经过三个不同的网络设备就会被销毁。
可以用traceroute www.baidu.com来探测我们和百度之间隔了几跳。
跳数越多,延迟越大,所以大家都希望在联通移动买到主带宽,但是通信商不告诉你在哪,但是百度一定是主带宽,跳数越少,带宽越好。
持久化防火墙标记连接:数据报文到达防火墙,防火墙打标记,ipvs通过标记实现对应的负载均衡,mangle会修改数据报文中的标号。
nat
做路由转发的
filter
数据报文过滤
顺序
表顺序
- raw > mangle > nat > filter
链顺序
-
入站:PREROUTING > INPUT
出站: OUTPUT > POSTROUTING
转发:PREROUTING > FORWARD > POSTROUTING -
例:按照执行顺序,数据包首先通过 OUTPUT 链进行处理,然后通过 POSTROUTING 链进行 NAT 转换(如果适用)。
当数据包离开本地主机时,它将首先通过 OUTPUT 链,然后通过 POSTROUTING 链。因此,如果您在 OUTPUT 链中有一条规则修改了数据包的源 IP 地址,那么在后续的 POSTROUTING 链中,您将看到修改后的源 IP 地址。
规则顺序
- 自上而下 依次匹配 匹配即停止(除了 LOG 动作除外)
访问量大的报文匹配规则需要靠前书写,可以有效提升性能
表链结合
- /etc/sysconfig/iptables 持久化保存文件
iptables命令
语法构成
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
例:iptables -t nat -A INPUT -p tcp --dport 80 -j ACCEPT
几个注意事项:
不指定表名时,默认指 filter 表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
-
控制类型:
ACCEPT: 允许通过 DROP: 直接丢弃,不给出任何回应 REJECT: 拒绝通过,必要时会给出提示 LOG: 记录日志信息,然后传给下一条规则继续匹配 SNAT: 修改数据包源地址 DNAT: 修改数据包目的地址 REDIRECT: 重定向 #将发送的80端口重定向到3123端口等等。
-
命令选项
添加新的规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
#我们目前所有的别名对应的端口都保存在/etc/services中,可以查看
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号
删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
iptbales --delete-chain [链名]
该命令用于删除指定的链,该链上的所有规则都将被删除。请注意,这将删除链及其相关规则,而不仅仅是清空规则。
iptables --flush [链名]
该命令用于清空指定链中的所有规则,但保留该链本身。这将从链中移除所有规则,但链本身仍然存在。
清空当前表的所有链的所有规则
[root@www ~]# iptables -t mangle -F
[root@www ~]# echo "" > /etc/sysconfig/iptables
[root@www ~]# service iptables restart
#按行数删除
iptables -D INPUT 3
- 设置默认策略
-P:为指定的链设置默认规则
默认规则只能放行或者丢弃,ACCEPT/DROP
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT
- 设置最大连接数
注意,不是最多允许十个人链接,而是最多允许一个ip中的十个人连接,参考一个网吧中只有十个人能玩LOL。-m connlimit --conmlimit-above 数量 -j DROP
这是防DOS的一种方式
规则分类
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD -p ! icmp -j ACCEPT
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
常用的隐含匹配条件
端口匹配:--sport 源端口、--dport 目的端口
ICMP类型匹配:--icmp-type ICMP类型
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
#20:21,表示端口可以写多个
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
#icmp-destination-unreachable,目标不可达,对方级别不可知
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
#0级别代表回显,我可以ping通别人,但是别人ping不通我。(默认是drop)
ICMP-echo-reply
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
显示匹配
要求以“-m 扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT
常用的显式匹配条件
多端口匹配:-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac –mac-source MAC地址
状态匹配:-m state --state 连接状态
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
#可以写,但是不建议,因为消耗的资源更多,要跟整个列表所有的数据比,偷懒的时候可以用
iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
#这样批量添加很好用
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
#因为可以改ip,所以可以通过Mac地址来限制,只要连接一次(ping一下就有),就可以通过arp -n,来查看IP地址和MAC地址的关联,就可以进行限制
#堡垒机一般都是这个原理,只有堡垒机的MAC地址可以连接真实服务器,其他员工只能链接堡垒机来进行远程连接管理,跳板机同理
#而且可以:arp -s ,将MAC地址和IP地址绑定在一起,就不怕Mac地址被抢了
iptables -t filter -A INPUT-m mac --mac-source MAC地址 -p tcp --dport 22 -s 192.168.66.100 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
状态匹配
iptables -P INPUT DROP
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-
1.假如公司定于明天下午1点开始更新,但是到了时间还有用户在连接下电影,所以应该让当前连接的保持连接,但是新连接的直接拒绝!
拒绝新建立的连接
iptables -t filter -I INPUT -p tcp --dport 21 -m state --state NEW -j REJECT
更新完了删除就好
iptables -t filter -D INPUT 1 -
2.如果一个用户来下载的数据一次下不完,要一万次才能下完,第一次需要连接,匹配各种规则,但是之后就可以相关联,有数据传输,并且相关联,那就证明你曾经来过,就不需要再重新验证了
ACCEPT -m state --state ESTABLISHED,RELATED -j ACCEPT
大量的端口访问都比较一致时写在开头,如果大部分都是来访问443,那就把443写在第一位
MASQUERADE —— 地址伪装
- masq会自动帮你识别你的出口网卡,出口地址
因为目前来说动态ip很多,那样的话每次都需要指定当前的公网ip地址,但是masq会自动修改为公网IP。
适用于外网 IP地址 非固定的情况
对于ADSL 拨号连接,接口通常为 ppp0、ppp1
将SNAT规则改为 MASQUERADE 即可iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
- 修改DNAT的时候,只要加上端口,就可以改变默认访问的端口,服务器端改成很不常见的端口,比如把22变成42217,或者把80变成36479,可以很好的避免被攻击。
iptables -t nat -A PREROUTING -i ens34 -p tcp --dport 80 -d 192.168.10.120 -j DNAT --to-destination 192.168.85.130:3333
- 千万记得真实服务器端要加网关!!!!
备份
导出(备份)规则:iptables-save 工具
可结合重定向输出保存到指定文件
导入(还原)规则:iptables-restore 工具
可结合重定向输入指定规则来源
Iptables 服务
脚本位置:/etc/init.d/iptables
规则文件位置:/etc/sysconfig/iptables
扩展
TCP/UDP
-
DNS解析的时候,用的是UDP,传输数据的时候用的是tcp,所以设置iptables的时候可以不用指定-p,或者两个全加。
TCP UDP HTTPD TCP、UDP 决定了数据的传输方式 TCP 写信,面向连接 UDP 说话,面向非连接 HTTPD 决定了数据的格式(写信的格式) 张三亲启: 张三你真是个狗东西,太狗了,自己出去玩,我在这里上班。 来自于李四。 应用层只是决定格式,最后还是看底层的传输方式。5g和4g其实只是坐飞机送信还是骑马送信的区别,底层都还是tcp和udp
-
UDP 直接可以利用最大带宽 像是电动车,直接起步
TCP 需要长时间加持后才能利用当前的最大带宽 像是燃油车,慢慢哄油,因为有TCP慢启动 -
TCP 慢启动:默认认为对方网络不可靠,有一个沟壑概念,或者叫缓冲池,比如我先建立一个缓冲池,大小可能是1b,先填满1b的空间以后发出去,有效到达了以后,就可以删除,同时这个缓冲池可以扩大,按照连接需求扩容缓冲池,他会一点点的来,不会直接用到最大带宽,如果文件比较大,要下载十小时,那么慢启动五分钟就没啥影响,如果只需要六分钟,那就很慢,而UDP直接可能一分钟就完事了。
-
HTTP3.0
UDP 嵌入至 TCP 协议进行数据下载,可以解决慢启动问题,但是还没有实现,只是出现了规范,因为udp的丢包率太高了。