长沙网站关键词seo,展览设计网站推荐,微网站 一键拨号,物业建设网站目录
一、安全技术与防火墙
1、安全技术概念
2、防火墙
2.1 防火墙概念
2.2 防火墙分类
2.3 linux的防火墙Netfilter
2.4 防火墙工具介绍
2.5 netfilter 和 iptables 的关系
二、iptables
1、概念
2、五表五链
2.1 五个table表
2.2 五个chain链
2.3 内核中数据包…目录
一、安全技术与防火墙
1、安全技术概念
2、防火墙
2.1 防火墙概念
2.2 防火墙分类
2.3 linux的防火墙Netfilter
2.4 防火墙工具介绍
2.5 netfilter 和 iptables 的关系
二、iptables
1、概念
2、五表五链
2.1 五个table表
2.2 五个chain链
2.3 内核中数据包的传输过程 三、iptables 相关操作
1、iptables 工具安装及开启
2、iptables 基本语法
2.1 iptables 基本语法格式
2.2 iptables语法总结图
2.3 iptables 管理选项
2.4 iptables 通用匹配
2.5 iptables 控制类型
3、iptables 基本用法
3.1 查看iptables规则表
3.2 新增iptables规则
3.3 修改、替换规则
3.4 删除规则
3.5 设置默认策略黑白名单
3.6 设置回环网卡允许访问规则
3.7 自定义链
3.7.1 自定义链的语法格式
3.7.2 新建自定义链添加规则并使用
3.7.3 重命名自定义链
3.7.4 删除自定义链
3.8 通用匹配
3.9 隐含扩展模块
3.9.1 TCP模块
3.9.2 ICMP模块
3.10 显示扩展模块
3.10.1 multiport扩展混合端口
3.10.2 iprange扩展
3.10.3 mac地址
3.10.4 string字符串
3.10.5 time模块
3.10.6 connlimit扩展
3.10.7 state扩展
3.11 保存规则
3.12 规则优化 一、安全技术与防火墙
1、安全技术概念
入侵检测系统Intrusion Detection Systems
特点是不阻断任何网络访问量化、定位来自内外网络的威胁情况主要以提供报警和事后监督为主提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署默默的看着你方式
入侵防御系统Intrusion Prevention System
以透明模式工作分析数据包的内容如溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断在判定为攻击行为后立即予以 阻断主动而有效的保护网络的安全一般采用在线部署方式必经之路 防火墙 FireWall
隔离功能工作在网络或主机边缘对进出网络或主机的数据包基于一定的规则检查并在匹配某规则时由规则定义的行为进行处理的一组功能的组件基本上的实现都是默 认情况下关闭所有的通过型访问只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中
防水墙Waterwall
与防火墙相对是一种防止内部信息泄漏的安全产品。 网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系
2、防火墙
2.1 防火墙概念
防火墙是一种网络安全设备或软件用于监控和控制网络流量根据事先设定的规则来决定允许或者阻止数据包的传输。其主要目的是保护计算机网络免受未经授权的访问或损害并确保网络的安全性、完整性和可用性。防火墙可以在网络层、传输层或应用层进行操作并可用于保护个人计算机、企业网络或数据中心等各种规模的网络环境。通过配置防火墙规则管理员可以限制哪些网络流量被允许进入或离开网络以及允许的流量类型和目的地
2.2 防火墙分类
按照部署位置分类
网络层防火墙通常部署在网络边界检查和过滤进出网络的流量主机防火墙安装在主机上用于保护单个主机或设备云防火墙专门设计用于云环境的防火墙解决方案保护云端应用和数据的安全
按照工作原理分类
有状态防火墙根据数据包的状态信息来做决策无状态防火墙只根据单个数据包的信息来做决策
按照过滤方式分类
基于包过滤的防火墙网络层对数据包进行选择选择的依据是系统内设置的过滤逻辑被称为访问控制列表ACL通过检查数据流中每个数据的源地址目的地址所用端口号和协议状态等因素或他们的组合来确定是否 允许该数据包通过
优点对用户来说透明处理速度快且易于维护
缺点无法检查应用层数据如病毒等
基于应用层的防火墙应用层防火墙/代理服务型防火墙也称为代理服务器Proxy Server)。将所有跨越防火墙的网络通信链路分为两段内外网用户的访问都是通过代理服务器上的“链接”来实现
优点在应用层对数据进行检查比较安全
缺点增加防火墙的负载
注意现实生产环境中所使用的防火墙一般都是二者结合体即先检查网络数据通过之后再送到应用层去检查
按照功能分类
传统防火墙基于网络层的防火墙应用层防火墙能够检查应用层数据的防火墙代理防火墙通过代理服务器来转发流量提供更高级的安全功能
按照技术分类
静态包过滤防火墙基于预定义的规则进行数据包过滤动态包过滤防火墙根据实时流量和行为进行动态调整和过滤
2.3 linux的防火墙Netfilter
Linux 防火墙是由 Netfilter 组件提供的Netfilter 工作在内核空间集成在 linux 内核中
Netfilter 是 Linux 2.4.x 之后新一代的 Linux 防火墙机制是 linux 内核的一个子系统。Netfilter 采用模块化设计具有良好的可扩充性提供扩展各种网络服务的结构化底层框架。Netfilter 与 IP 协议栈是无缝契合并允许对数据报进行过滤、地址转换、处理等操作
2.4 防火墙工具介绍
iptablesiptables是Linux中最常用的防火墙工具之一。它基于内核的Netfilter框架可以配置规则集来过滤、转发和修改网络数据包。iptables提供了广泛的功能和灵活性可以根据源IP地址、目标IP地址、端口号等多个参数进行过滤firewalldfirewalld是Red Hat系列Linux发行版中默认的防火墙管理工具。它使用了D-Bus接口和动态防火墙规则支持更高级的网络配置。firewalld通过定义“区域”和“服务”来管理网络连接并且可以实时更新规则而无需重启防火墙nftablesnftables是Netfilter框架的下一代替代品。它提供了更简洁和高效的语法支持类似于iptables的过滤、NAT和连接跟踪功能。nftables的目标是取代iptables并提供更好的性能和可扩展性
2.5 netfilter 和 iptables 的关系
netfilter
①属于的“内核态”Kernel Space 又称为内核空间的防火墙功能体系 ②是内核的一部分由一些数据包过滤表组成这些表包含内核用来控制数据包过滤处理的规则集
iptables
①属于“用户态”User Space又称为用户空间的防火墙管理体系 ②是一种用来管理Linux防火墙的命令程序它使插入、修改和删除数据包过滤表中的规则变得容易通常位于/sbin/iptables目录下
两者之间关系
iptable 和 netfilter 共同组成了一个防火墙系统iptables 只是 Linux 防火墙的管理工具——命令行工具或者也可以说是一个客户端的代理netfilter 是安全框架并且真正实现防火墙功能的是 netfilter它是Linux内核中的一部分。这两部分共同组成了包过滤防火墙并且是免费使用可以实现完成封包过滤、封包重定向和网络地址转换NAT等功能
二、iptables
1、概念
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置
防火墙在做数据包过滤时决定时有一套遵循和组成的规则这些规则存储在专用的数据包过滤表中而这些表集成在 Linux 内核中。在数据包过滤表中规则被分组放在我们所谓的链chain中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具可用于添加、编辑和移除规则。由软件包 iptables 提供的命令行工具工作在用户空间用来编写规则写好的规则被送往netfilter告诉内核如何去处理信息包
2、五表五链
iptables由五个表table和五个链chain以及一些规则组成。表中有链链中有规则。iptables使用表来组织规则链是规则的容器用于按顺序处理数据包
2.1 五个table表
五个表tablefilter、nat、mangle、raw、security用的很少了解即可
table表说明raw跟踪数据包确定是否对该数据包进行状态跟踪。包含两个规则链OUTPUT、PREROUTINGmangle标记数据包修改数据包内容用来做流量整形给数据包设置标记。包含五个规则链INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTINGnat负责网络地址转换用来修改数据包中的源、目标IP地址或端口通信五元素。包含三个规则链OUTPUT、 PREROUTING、 POSTROUTINGfilter负责过滤数据包确定是否放行该数据包(过滤)。包含三个规则链INPUT、 FORWARD、 OUTPUTsecurity用于强制访问控制MAC网络规则由Linux安全模块如SELinux)实现 (了解)
优先级由高到低的顺序为security --raw--mangle--nat--filter
2.2 五个chain链
五个链chaininput、output、forward、postrouting、prerouting
chain链说明input处理入站数据包匹配目标IP为本机的数据包output处理出站数据包一般不在此链上做配置forward处理转发数据包匹配流经本机的数据包prerouting在进行路由选择前处理数据包用来修改目的地址用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上postrouting在进行路由选择后处理数据包用来修改源地址用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网
2.3 内核中数据包的传输过程 ① 当一个数据包进入网卡时数据包首先进入PREROUTING链内核根据数据包目的IP判断是否需要转送出去
② 如果数据包是进入本机的数据包就会沿着图向下移动到达INPUT链。数据包到达INPUT链后 任何进程都会收到它。本机上运行的程序可以发送数据包这些数据包经过OUTPUT链然后到达
③ 如果数据包是要转发出去的且内核允许转发数据包就会向右移动经过FORWARD链然后到达POSTROUTING链输出
三种报文流向
流入本机PREROUTING -- INPUT--用户空间进程流出本机用户空间进程 --OUTPUT-- POSTROUTING转发PREROUTING -- FORWARD -- POSTROUTING 三、iptables 相关操作
1、iptables 工具安装及开启
默认Linux系统已安装iptables若无请安装
[rootlocalhost ~]#yum install iptables iptables-services.x86_64 -y 关闭firewalld防火墙和核心防护开启iptables服务
[rootlocalhost ~]#systemctl stop firewalld
[rootlocalhost ~]#setenforce 0
[rootlocalhost ~]#systemctl start iptables.service
[rootlocalhost ~]#systemctl status iptables.service 2、iptables 基本语法
2.1 iptables 基本语法格式
#iptables 指定表 怎么在链中插入规则 指定链 规则
iptables [-t 表名] -管理选项 [链表] [通用规则匹配] [-j 控制类型]#如-t指定filter表 -A指定INPUT链 -s指定要匹配的数据包的源IP地址为172.16.12.12 -j指定控制类型为DROP即直接丢弃数据包不给出任何回应信息
iptables -t filter -A INPUT -s 172.16.12.12 -j DROP注 不指定表名时默认指filter表不指定链名时默认指表内的所有链除非设置链的默认策略否则必须指定匹配条件控制类型使用大写字母其余均为小写 2.2 iptables语法总结图 2.3 iptables 管理选项
在使用iptables进行防火墙管理时可以使用各种选项来配置规则、查看规则、添加/删除规则以及保存/加载规则等。以下是一些常用的iptables防火墙管理选项的介绍
管理选项说明-A在指定链末尾追加一条 iptables -A INPUT 操作-I在指定链中插入一条新的未指定序号默认作为第一条 iptables -I INPUT 操作-P指定默认规则 iptables -P OUTPUT ACCEPT 操作-D删除 iptables -t nat -D INPUT 2 操作-p服务名称 icmp tcp-R修改、替换某一条规则 iptables -t nat -R INPUT 操作-L查看 iptables -t nat -L 查看-n所有字段以数字形式显示比如任意ip地址是0.0.0.0而不是anywhere比如显示协议端口号而不是服务名 iptables -L -n,iptables -nL,iptables -vnL 查看-v查看时显示更详细信息常跟-L一起使用 查看--line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number-F清除链中所有规则 iptables -F 操作-N新加自定义链-X清空自定义链的规则不影响其他链 iptables -X-Z清空链的计数器匹配到的数据包的大小和总和iptables -Z-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号
2.4 iptables 通用匹配
直接使用不依赖于其他条件或扩展包括网络协议、IP地址、网络接口等条件。
匹配的条件作用-p指定要匹配的数据包的协议类型-s指定要匹配的数据包的源IP地址-d指定要匹配的数据包的目的IP地址-i指定数据包进入本机的网络接口(入站网卡)-o指定数据包离开本机做使用的网络接口出站网卡--sport指定源端口号--dport指定目的端口号
2.5 iptables 控制类型
对于防火墙数据包的控制类型非常关键直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中最常用的几种控制类型如下
控制类型说明ACCEPT 允许数据包通过(默认)DROP直接丢弃数据包不给出任何回应信息REJECT拒绝数据包通过会给数据发送端一个响应信息SNAT修改数据包的源地址DNAT修改数据包的目的地址MASQUERADE伪装成一个非固定公网IP地址LOG 在/var/log/messages文件中记录日志信息然后将数据包传递给下一条规则。LOG只是一种辅助动作并没有真正处理数据包
3、iptables 基本用法
3.1 查看iptables规则表
查看已有的防火墙规则时使用管理选项“-L”结合“--line-numbers”选项还可显示各条规则在链内的顺序号
iptables [-t表名] -v -n -L [链名] [-- line-numbers]
#-v详细信息 -n规则 -L 规则列表 L必须写在最后
[rootlocalhost ~]# iptables -vnL #查看全部规则
[rootlocalhost ~]# iptables -t filter -vnL INPUT 2 #指定查看filter表INPUT链第二条规则
[rootlocalhost ~]# iptables -vnL --line-numbers #查看全部规则的编号 3.2 新增iptables规则
添加新的防火墙规则时使用管理选项“-A”、“-I”前者用来追加规则后者用来插入规则。注意-A代表最底部插入-I默认首行插入-I 数字则代表插入第数字条
#在INPUT链中插入一条新的规则未指定序号默认加在第一条
[rootlocalhost ~]#iptables -I INPUT -s 172.16.12.12 -j ACCEPT
#指定序号2即新的规则加在第2条的位置
[rootlocalhost ~]#iptables -I INPUT 2 -s 172.16.12.13 -j DROP
#在INPUT链的末尾加上新的规则
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.14 -j REJECT 3.3 修改、替换规则
iptables -t 表名 -R 链名 编号 规则
[rootlocalhost ~]#iptables -R INPUT 3 -s 172.16.12.0/24 -j ACCEPT 3.4 删除规则
#删除指定链的序号的规则
[rootlocalhost ~]#iptables -D INPUT 1
#指定链并且指定源地址删除
[rootlocalhost ~]#iptables -D INPUT -s 172.16.12.13 -j DROP
#清除链中所有的规则
[rootlocalhost ~]#iptables -F 3.5 设置默认策略黑白名单
iptables 的各条链中默认策略是规则匹配的最后一个环节当找不到任何一条能够匹配数据包的规则时则执行默认策略。默认策略的控制类型为 ACCEPT允许、DROP丢弃两种没有REJECT拒绝
即可通过设置默认策略来实现iptables防火墙的黑白名单操作在iptables防火墙中可以使用黑名单和白名单来控制网络流量的访问权限。黑名单和白名单是两种不同的策略用于指定哪些IP地址或IP地址段被允许或禁止通过防火墙
黑名单默认全部允许通过添加谁才不允许谁通过。白名单默认全部不允许通过添加谁允许谁通过。
方法一 通过设置DROP规则默认拒绝所有然后设置允许访问的主机到iptables规则中即为白名单
#指定规则DROP默认拒绝所有
[rootlocalhost ~]#iptables -P INPUT DROP
#添加允许172.16.12.12远程主机访问的规则
[rootlocalhost ~]# iptables -A INPUT -s 172.16.12.12 -j ACCEPT
[rootlocalhost ~]# iptables -vnL 方法二先在INPUT链尾添加DROP然后在DROP规则前任意插入允许的规则除在DROP规则前的规则允许外拒绝所有即为白名单
#先在INPUT链末尾 拒绝所有
[rootlocalhost ~]#iptables -A INPUT -j DROP
#然后在DROP规则上插入新的允许规则想要允许什么就插入什么相当于白名单
[rootlocalhost ~]#iptables -I INPUT -s 172.16.12.12 -j ACCEPT
[rootlocalhost ~]#iptables -I INPUT -s 172.16.12.12 -j ACCEPT
[rootlocalhost ~]# iptables -vnL 注 iptables规则表当中的规则是从上至下依次执行的执行过允许的规则后最后执行拒绝所有 3.6 设置回环网卡允许访问规则
当设置了172.16.12.0网段的客户端无法访问那么其本身172.16.12.10也无法ping通自己如何解决这个问题 #-i 指定入站网卡 lo回环网卡允许自己ping通
[rootlocalhost ~]#iptables -I INPUT -i lo -j ACCEPT 3.7 自定义链
自定义链是iptables中的一种功能它允许用户创建自己的链来组织和管理规则。自定义链可以帮助简化规则集使其更易于管理。通过将相关规则放入一个自定义链中可以提高可读性并降低错误发生的可能性。此外自定义链还可以在多个规则之间共享相同的操作从而减少冗余
3.7.1 自定义链的语法格式
iptables 选项 CUSTOM_CHAIN_NAME
选项说明-N自定义一条新的规则链-E重命名自定义链 引用计数不为0的自定义链也就是被使用的自定义链不能够被重命名也不能被删除-X删除自定义的空的规则链
3.7.2 新建自定义链添加规则并使用
#新建自定义链
[rootlocalhost ~]#iptables -N dh #给自定义链dh添加规则
[rootlocalhost ~]#iptables -A dh -p tcp --dport 8080 -j ACCEPT #使用自定义链绑定INPUT链即运行INPUT链的同时运行自定义链
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -j dh3.7.3 重命名自定义链
#重命名自定义链
[rootlocalhost ~]#iptables -E dh web 3.7.4 删除自定义链
#当引用计数为0才可以删除也就是还没有使用自定义链才可以使用这一条命令删除
[rootlocalhost ~]#iptables -X web #需要先删除自定义web链中的规则再删除INPUT链中的关于web的规则最后删除自定义链web
[rootlocalhost ~]#iptables -D web 1
[rootlocalhost ~]#iptables -D INPUT 1
[rootlocalhost ~]#iptables -X web 3.8 通用匹配
基本匹配条件不需要加载模块由 iptables/netfilter 提供
#直接使用不依赖于其他条件或扩展包括网络协议、IP地址、网络接口等条件
协议匹配: -p 协议名
地址匹配: -s 源地址-d 目的地址 #可以是IP、网段、域名、空(任何地址)
接口匹配: -i 入站网卡-o 出站网卡
#拒绝172.16.12.12主机使用imcp协议到本机
[rootlocalhost ~]#iptables -A INPUT -p icmp -s 172.16.12.12 -j DROP 3.9 隐含扩展模块
iptables防火墙中的隐含扩展是指一些特殊的扩展模块它们不需要显式加载而是隐含在iptables中。这些隐含扩展包括一些常见的功能如状态跟踪state tracking、网络地址转换Network Address TranslationNAT和数据包过滤等。
iptables 在使用-p选项指明了特定的协议时无需再用-m选项指明扩展模块的扩展机制不需要手动加载扩展模块。要求以特定的协议匹配作为前提包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口可以是个别端口、端口范围
#查看扩展帮助
man iptables-extensions
#查看有哪些扩展模块
rpm -ql iptables 3.9.1 TCP模块
TCP模块允许iptables根据TCP连接的状态进行过滤和处理
--sport port匹配报文源端口,可为端口连续范围--dport port匹配报文目标端口,可为连续范围--tcp-flags mask comp mask 需检查的标志位列表用 , 分隔 例如 SYN,ACK,FIN,RST comp 在mask列表中必须为1的标志位列表无指定则必须为0用 , 分隔 tcp协议的扩展选项
--sport 1000 #匹配源端口是1000的数据包
--sport 1000:3000 #匹配源端口是1000-3000的数据包
--sport :3000 #匹配源端口是3000及以下的数据包
--sport 1000: #匹配源端口是1000及以上的数据包
#注: --sport和--dport 必须配合-p 协议类型使用
#端口可以使用的范围 0-65535#tcp端口22到80全部被拒绝172.16.12.12主机访问
[rootlocalhost ~]#iptables -A INPUT -p tcp --dport 22:80 -s 172.16.12.12 -j REJECT #拒绝172.16.12.0网段访问80端口
[rootlocalhost ~]#iptables -A INPUT -p -s 172.16.12.0/24 --dport 80 -j REJECT #丢弃SYN请求包放行其他包
[rootlocalhost ~]#iptables -I INPUT -i ens33 -p tcp ! --syn -j REJECT 3.9.2 ICMP模块
ICMP模块允许iptables根据ICMP协议的类型和代码进行过滤和处理
类型匹配--icmp-type ICMP类型
可以是字符串、数字代码
Echo- Request (代码为8)表示请求
Echo- Reply (代码为0)表示回复
Dest ination-Unreachable (代码为3)表示目标不可达
关于其它可用的ICMP协议类型可以执行“iptables -p icmp -h”命令查看帮助信息
要求如何禁止其它客户端ping主机而允许主机ping其他客户端
其他客户端172.16.12.12等 主机172.16.12.10
方法一 #拒绝源地址172.16.12.12的icmp协议类型为8的包到达主机172.16.12.10的INPUT口
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -p icmp --icmp-type 8 -j REJECT方法二 #172.16.12.10主机给其他客户端发送0个数据包
[rootlocalhost ~]# iptables -A OUTPUT -d 172.16.12.12 -p icmp --icmp-type 0 -j REJECT 3.10 显示扩展模块
显示扩展即必须使用-m选项指明要调用的扩展模块名称需要手动加载扩展模块
3.10.1 multiport扩展混合端口
以离散方式定义多端口匹配,最多指定15个端口
#指定多个源端口 逗号隔开
[!] --source-ports,--sports port[,port|,port:port]...
#指定多个目标端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
#多个源或目标端
[!] --ports port[,port|,port:port]...
#阻止ip地址来自172.16.12.12访问当前机器的tcp 22和80端口
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -p tcp -m multiport --dport 22,80 -j REJECT 3.10.2 iprange扩展
指明连续的但一般不是整个网络ip地址范围
--src-range from[-to] 源IP地址范围
--dst-range from[-to] 目标IP地址范围
#拒绝172.16.12.12-172.16.12.14的所有流量
[rootlocalhost ~]#iptables -A INPUT -m iprange --src-range 172.16.12.12-172.16.12.14 -j REJECT 3.10.3 mac地址
mac 模块可以指明源MAC地址,适用于PREROUTING, FORWARDINPUT chains
-m mac [!] --mac-source XX:XX:XX:XX:XX:XX [rootlocalhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:1e:c9:3f -j REJECT 3.10.4 string字符串
对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp} 字符串匹配检测算法bmBoyer-Moore 算法kmpKnuth-Pratt-Morris 算法--from offset 开始查询的地方
--to offset 结束查询的地方[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式16进制格式
准备工作
[rootlocalhost html]#systemctl start httpd
[rootlocalhost ~]#cd /var/www/html
[rootlocalhost html]#echo hello he.html
[rootlocalhost html]#echo world wo.html 当出现特定字符时就不显示网页内容
#http协议即tcp协议源端口为80使用字符模块利用bm算法从第62个字节开始检查字符串为hello
#注意请求的包不带字符回复的包带字符所以要output
[rootlocalhost html]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string hello -j REJECT 3.10.5 time模块
iptables防火墙中的time模块允许您根据当前时间来匹配数据包。这个模块通常用于实现基于时间的访问控制比如只允许在特定时间段内访问某些服务或资源。注意这里时间需要使用格林威治时间date -u可以查看
--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...] 星期几1 – 7 分别表示星期一到星期日
--kerneltz内核时区当地时间不建议使用CentOS 7版本以上系统默认为 UTC
注意 centos6 不支持kerneltz --localtz指定本地时区(默认)
[rootlocalhost ~]# date -u
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -m time --timestart 11:00 --timestop 12:00 -j REJECT [rootlocalhost ~]# date -u
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -m time --timestart 11:00 --timestop 11:30 -j REJECT 3.10.6 connlimit扩展
iptables防火墙中的connlimit扩展模块允许您限制连接数以防止某个服务被过多的连接请求所淹没。这个扩展模块通常用于防止DDoS分布式拒绝服务攻击或其他类型的连接泛滥
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
Dos攻击当同一个IP地址同一时间老是访问服务器就会占用服务器的硬件资源导致其他客户无法访问到服务器那么该如何解决呢 #如果同一个地址同时访问大于2次以上就拒绝它也就是同一地址同一时间只能访问两次
[rootlocalhost ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT 3.10.7 state扩展
state模块是iptables防火墙中的一个重要模块它用于根据连接的状态进行过滤和处理规则。它根据数据包的状态如新建、已建立、相关、无效来确定是否接受、拒绝或进一步处理数据包
状态类型说明NEW新发出请求连接追踪信息库中不存在此连接的相关信息条目因此将其识别为第一次发出的请求ESTABLISHEDNEW状态之后连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态RELATED新发起的但与已有连接相关联的连接如ftp协议中的数据连接与命令连接之间的关系INVALID无效的连接如flag标记不正确UNTRACKED未进行追踪的连接如raw表中关闭追踪
-m state --state state1,state2,...
在上面的格式中state1,state2,... 是一个逗号分隔的连接状态列表用于指定要匹配的连接状态。实现功能老用户可以访问新用户不可以访问
iptables -AINPUT -m state --state ESTABLISHED -j ACCEPT #已在ping的可以继续ping停了也不可以通了xshell也不可以再连
iptables -AINPUT -m state --state NEW -j REJET #新用户拒绝
#拒绝新用户访问老用户只要不退出就可以一直访问
[rootlocalhost ~]#iptables -A INPUT -m state --state NEW -j REJECT #172.16.12.10主机可访问172.16.12.12主机所有服务但172.16.12.12主机无法访问172.16.12.10主机的所有服务
[rootlocalhost ~]#iptables -A INPUT -s 172.16.12.12 -m state --state NEW -j REJECT 拓展
故障发现ping不通查看服务器的日志发现是table fulldropping packet错误如何解决 原因启用了的 iptables state 模块用户访问有问题需要查看日志 table full drop pket
根本是有一个内核选项的默认值过低 即netfilter/nf_conntrack_max默认值为65536需要把这个值调大一点即可避免table fulldropping packet错误
[rootlocalhost ~]#echo 1000000 /proc/sys/net/netfilter/nf_conntrack_max
[rootlocalhost ~]#cat /proc/sys/net/netfilter/nf_conntrack_max 3.11 保存规则
使用 iptables 命令定义的规则手动删除之前其生效期限为 kernel 存活期限
持久保存规则
CentOS 7,8
#文件路径自定义
iptables-save /PATH/TO/SOME_RULES_FILE
CentOS 6
#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
加载规则:
CentOS 7,8 重新载入预存规则文件中规则
iptables-restore /PATH/FROM/SOME_RULES_FILE
#再重新导回来
iptables-restore选项
-n, --noflush不清除原有规则
-t, --test仅分析生成规则集但不提交
CentOS 6
#会自动从/etc/sysconfig/iptables 重新载入规则
service iptables restart
开机自动重载规则
方法一使用iptables-save
开机自启后原本的iptables规则无法自动保存需要在开机自启前用脚本保存各个iptables命令让此脚本开机后自动运行
[rootlocalhost ~]#iptables-save /opt/iptables
[rootlocalhost ~]#vim ~/.basrc #仅当前用户有效
iptables-restore /opt/iptables或者
[rootlocalhost ~]#vim /etc/profile #对当前系统所有用户有效
iptables-restore /opt/iptables或者
[rootlocalhost ~]#vim /etc/rc.d/rc.local #对当前系统所有用户有效
iptables-restore /opt/iptables
[rootlocalhost ~]#chmod x /etc/rc.d/rc.local 方法二使用iptables-services软件
#安装iptables-services工具
[rootcentos7 ~]#yum -y install iptables-services
#iptables{,.bak} iptables 备份成 iptables.bak
[rootcentos7 ~]#cp /etc/sysconfig/iptables{,.bak}
#保存现在的规则到文件中方法一
[rootcentos7 ~]#/usr/libexec/iptables/iptables.init save
#保存现在的规则到文件中方法二
[rootcentos7 ~]#iptables-save /etc/sysconfig/iptables
#开机启动
[rootcentos7 ~]#systemctl enable iptables.service
3.12 规则优化
安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条效率更高谨慎放行入站的新请求有特殊目的限制访问功能要在放行规则之前加以拒绝同类规则访问同一应用比如http 匹配范围小的放在前面用于特殊处理不同类的规则访问不同应用一个是http另一个是mysql 匹配范围大的放在前面效率更高应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率设置默认策略建议白名单只放行特定连接
①iptables -P不建议容易出现“自杀现象”
②规则的最后定义规则做为默认策略推荐使用放在最后一条