目录
一、安全技术和防火墙
1.安全技术
2.防火墙的分类
二、防火墙
1.iptables四表五链
2.黑白名单
3.iptables基本语法
4.iptables选项
5.控制类型
6.隐藏扩展模块
7.显示扩展模块
8.iptables规则保存
9.自定义链使用
入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.
①按保护范围划分
主机防火墙:服务范围为当前一台主机。
网络防火墙:服务范围为防火墙一侧的局域网。
②按实现方式划分
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,华为、深信服等。
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront。
③按网络协议划分
包过滤防火墙:只对osi模型下四层生效,速度快拆包少。
网络层防火墙:OSI模型下四层,又称为包过滤防火墙。
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层。
1.四表 (优先级排序)
1 raw表:确定是否对数据进行状态跟踪
2 mangle表:为数据包设置标记
3 nat表:修改数据包中的源、目标IP地址或端口
4 filter表:确定是否放行该数据包,起到过滤的作用,是最常用的一个表项
2.五链
PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址。
INPUT: 匹配进入了本机的数据包
OUTPUT: 处理出本机的数据包,一般不在此链上做配置
FORWARD: 处理转发数据包,匹配流经本机的数据包
POSTROUTING链: 在进行路由选择后处理数据包
①黑名单:默认全部允许通过,添加谁才不允许谁通过。
②白名单:默认全部不允许通过,添加谁允许谁通过。
基本语法:表中有链,链中有规则
iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 匹配条件 ] [ 控制类型 ]
表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理
控制类型指的是数据包的处理方式,如ACCEPT允许、REJECT拒绝、DROP丢弃等
-A :在指定链末尾追加一条
-I :在指定行前插入一条,未指定序号默认作为第一条。-I INPUT 1表示在第一行前添加。
-P :表示修改默认规则,默认允许流量通过,使用黑名单。
iptables -P INPUT DROP或REJECT (白名单)
iptables -P INPUT ACCEPT (黑名单)
-R :修改、替换某一条规则,-R INPUT 1表示修改第一条规则
-D :表示删除单个,-D INPUT 1表示删除第一条规则
-F :清除链中所有规则,清空iptables
-vnL -t 表名:查看指定 iptables规则列表,filter表可以省略-t
-vnL -line-num :加上行号查看iptables规则列表
控制类型需要使用 -j 跳转到某类型处理数据包。
①ACCEPT:允许通过
②REJECT :拒绝通过
③DROP:丢弃,会接受但是将数据包丢弃不处理6、隐藏扩展模块
④SNAT:源地址转换
⑤DNAT:目的地址转换
-sport :匹配报文源端口
[root@localhost ~]#iptables -A INPUT -p tcp -s 192.168.21.0/24 --sport 80 -j ACCEPT
[root@localhost ~]# 允许所有源地址在192.168.21.0/24网段源端口为80的访问
--dport :匹配报文目的端口
[root@localhost ~]#iptables -A INPUT -p tcp -s 192.168.21.0/24 --dport 8 -j ACCEPT
[root@localhost ~]# 允许所有源地址在192.168.21.0/24网段且目的端口为80的访问
扩展模块使用格式: -m {模块名} [选项]
1.multiport模块
--dports端口1,端口2 ,等 使用,隔开最多指定15个不连续端口
[root@localhost ~]#iptables -A INPUT -p tcp -m multiport --sport 80,433 -j ACCEPT
[root@localhost ~]# 允许tcp协议源端口号为80、433的访问
--sports 端口1,端口2 ,等 使用,隔开最多指定15个不连续端口
[root@localhost ~]#iptables -A INPUT -p tcp -m multiport --sport 80,22 -j ACCEPT
[root@localhost ~]# 允许tcp协议目的端口号为80、22访问
2. iprange模块
iprange模块可以指定连续的(一般不是整个网络)ip地址范围
3.mac地址模块
指明源MAC地址,适用INPUT链,PREOUTING,POSTROUTING链。
--mac-source 源mac地址,只能指定源mac地址。
4.
string字符串模块
可以使用string模块指定字符串范围。
--from offset 字符串开始查询的地方。
--to offset 字符串结束查询的地方 。
例如:iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bilibili" -j REJECT
5.connlimit模块
据每客户端IP做并发连接数数量匹配,可防止Dos(Denial of Service,拒绝服务)攻击。
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
例如:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
6.stat模块
stat模块可以根据连接状态控制数据包。
NEW:新发出的请求;第一次发出的请求。
ESTABLISHED:new之后的正常连接状态。
例如:ipatables -A INPUT -m state --state NEW -j REJECT
ipatables -A INPUT -m state --state ESTABLISHED -j ACCEPT
7.控制流量模块
limit控制流量模块,可以控制通过的包数以及每分钟或每小时通过的包数。
--limit 10/minute(1分钟之内只允许10个包通过)
--limit-burs 数字 例如: --limit-burst 5(允许通过前5个包,5个包不受影响)
将写好的规则导入一个文件中 iptables-save >文件名。
永久保存保存规则的文件重新写入 iptables-restore <保存规则的文件名。
[root@localhost ~]#iptables-save >/save
[root@localhost ~]#cat /save
# Generated by iptables-save v1.4.21 on Mon Feb 19 18:48:07 2024
*nat
:PREROUTING ACCEPT [15:1708]
:INPUT ACCEPT [1:52]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [1:72]
:OUTPUT_direct - [0:0]
:POSTROUTING_ZONES - [0:0]
:POSTROUTING_ZONES_SOURCE - [0:0]
:POSTROUTING_direct - [0:0]
:POST_public - [0:0]
:POST_public_allow - [0:0]
:POST_public_deny - [0:0]
:POST_public_log - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A OUTPUT -j OUTPUT_direct
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
-A POSTROUTING -j POSTROUTING_direct
-A POSTROUTING -j POSTROUTING_ZONES_SOURCE
-A POSTROUTING -j POSTROUTING_ZONES
-A POSTROUTING_ZONES -o ens33 -g POST_public
-A POSTROUTING_ZONES -g POST_public
-A POST_public -j POST_public_log
-A POST_public -j POST_public_deny
-A POST_public -j POST_public_allow
-A PREROUTING_ZONES -i ens33 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Mon Feb 19 18:48:07 2024
# Generated by iptables-save v1.4.21 on Mon Feb 19 18:48:07 2024
*mangle
:PREROUTING ACCEPT [1421:90360]
:INPUT ACCEPT [1421:90360]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [813:66803]
:POSTROUTING ACCEPT [820:68809]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
:POSTROUTING_direct - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A INPUT -j INPUT_direct
-A FORWARD -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
-A POSTROUTING -j POSTROUTING_direct
-A PREROUTING_ZONES -i ens33 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Mon Feb 19 18:48:07 2024
# Generated by iptables-save v1.4.21 on Mon Feb 19 18:48:07 2024
*security
:INPUT ACCEPT [1424:90752]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [876:76517]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -j INPUT_direct
-A FORWARD -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
COMMIT
# Completed on Mon Feb 19 18:48:07 2024
# Generated by iptables-save v1.4.21 on Mon Feb 19 18:48:07 2024
*raw
:PREROUTING ACCEPT [1421:90360]
:OUTPUT ACCEPT [813:66803]
:OUTPUT_direct - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A OUTPUT -j OUTPUT_direct
-A PREROUTING_ZONES -i ens33 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Mon Feb 19 18:48:07 2024
# Generated by iptables-save v1.4.21 on Mon Feb 19 18:48:07 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [152:11732]
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direct - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:INPUT_ZONES - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 192.168.21.0/24 -p tcp -m tcp --sport 80 -j ACCEPT
-A INPUT -s 192.168.21.0/24 -p tcp -m tcp --dport 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m multiport --sports 80,433 -j ACCEPT
-A INPUT -p tcp -m multiport --sports 80,22 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i ens33 -g FWDI_public
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -o ens33 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A INPUT_ZONES -i ens33 -g IN_public
-A INPUT_ZONES -g IN_public
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
COMMIT
# Completed on Mon Feb 19 18:48:07 2024
[root@localhost ~]#iptables -F
[root@localhost ~]#iptables-restore
①自定义链添加:iptables -N web(链名) 创建链
②自定义链改名:iptabels -E web(原来名称) (新名称) 自定义链改名
③创建自定义链规则:iptables -t filter -I web -p icmp -j REJECT 创建自定义规则,iptables的链中添加一条对应到自定义链中才能生效
④iptabales创建对应链规则然后跳转自定义链web:iptables -t filter -I INPUT -p icmp -j web
⑤删除自定义规则链:先删除iptables INPUT链中的对应关系,然后删除自定义链中的规则。