一、防火墙是什么
防火墙(FireWall):隔离功能,工作在网络或主机的边缘,数据包的匹配规则与由一组功能定义的操作组件处理的规则相匹配,根据特定规则检查网络或主机的入口和出口 当要这样做时,基本上默认情况下执行的是关闭所有通过访问类型的访问,只开放允许访问的策略,外网访问的主机希望位于网络中的 DMZ(非军事区)。
1.1 防火墙的分类
按网络协议划分:
网络层防火墙:OSI模型下四层
应用层防火墙/代理服务器
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
1.2 Linux防火墙
1.2.1 基本认识
Linux防火墙是由netfilter提供,集成在Linux内核中
1.2.2 防火墙工具
1. firewalld
从CentOS 7 版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config
管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
2. iptables
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告
诉内核如何去处理信息包
3.nftables
nftables
是新的数据包分类框架,旨在替代现存的 {ip,ip6,arp,eb}_tables
。
简而言之:
- 它在 Linux 内核版本高于 3.13 时可用。
- 它有一个新的命令行工具
ntf
,它的语法与iptables
不同。 - 它也包含了一个兼容层,让你在新的
nftables
内核框架之上运行iptables
命令。 - 它提供了通用的集合基础允许你建立映射和关联。你可以使用这个新特性把你的规则集分类到多维树中,这大大地减少了找到包最终的行为之前需要检查的规则的数量。
1.2.3 netfilter 的钩子函数
内核中的 Netfilter 会选择五个位置放置五个钩子(hook)函数(INPUT、OUTPUT、FORWARD、 PEROUTING、POSTROUTING),这五个钩子函数暴露给用户,用户可以使用命令工具(iptables) (iptables)编写规则。 iptables 由一个信息过滤器表组成,其中包含控制 IP 数据包处理的规则,规则以链的形式分组。 提示:自 Linux 内核 4.2 版起,Netfilter 在预路由前增加了入口钩子功能。可以使用 这个新的入口钩子早于预路由,基本上取代了 tc 命令(流量控制工具)。 这个新的钩子早于预路由,基本上取代了 tc 命令(流量控制工具)。
四表五链
四表:
RAW表:跟踪数据包
MAGLE表:标记优先级
NAT表:地址转换
FILTER表:流量过滤,筛选哪些数据包可以通过哪些数据包不可以
五链:
INPUT:进入本机的流量
OUTPUT:出去本机的流量
FORWARD:转发数据包
PREROUTING:路由选择前
POSTROUTING:路由选择后
链的作用是:控制流量的时机
表的作用是:如何控制流量
表中有链,链中有规则
二、iptables
2.1 iptables的组成
iptables
是 Linux 中用于配置和管理防火墙规则的工具。它由一系列表、链和规则组成,以实现网络数据包的过滤和转发。
-
表 (Tables):
filter
表:默认表,用于过滤数据包。大多数防火墙规则都是在这个表上配置的。nat
表:用于网络地址转换 (NAT)。它用于修改数据包的源或目标地址,通常用于实现网络地址转换。mangle
表:用于修改数据包的特定字段。可以用于修改 TOS (Type of Service) 字段等。
-
链 (Chains):
INPUT
:处理到达本地系统的数据包。OUTPUT
:处理从本地系统发出的数据包。FORWARD
:处理通过系统的路由功能转发的数据包。PREROUTING
:在数据包进入本地系统之前应用的规则(仅适用于nat
表和mangle
表)。POSTROUTING
:在数据包离开本地系统之前应用的规则(仅适用于nat
表和mangle
表)。
-
规则 (Rules):
iptables
规则是用户定义的规则,用于指定数据包的处理方式。- 规则通常包括匹配条件和动作。例如,匹配源 IP 地址并拒绝或允许数据包。
-
匹配条件 (Matches):
iptables
允许您在规则中使用匹配条件,以确定是否应用该规则。常见的匹配条件包括源 IP 地址、目标 IP 地址、端口号等。 -
动作 (Targets):
当规则匹配时,可以指定要执行的动作。常见的动作包括 ACCEPT(接受数据包)、DROP(丢弃数据包)、REJECT(拒绝数据包并发送拒绝通知)等。
2.2 配置操作及语法
iptables防火墙的配置方法:
1、使用iptables命令行。
2、使用firewalld
语法:
iptables [选项] 命令 [链名] 规则规范
选项:用于指定一些额外的配置参数。
命令:表示对 iptables 进行的操作,如 -A
(追加规则)、-D
(删除规则)、-I
(插入规则)等。链名:表示要操作的防火墙链的名称,如 INPUT、OUTPUT、FORWARD 等。
规则规范:定义要添加或操作的规则的规范。
iptables 规则规范:
规则规范由匹配条件和动作两部分组成。
匹配条件:
-p
:指定协议,如 tcp、udp、icmp 等。
--sport
和 --dport
:指定源端口和目标端口。
-s
和 -d
:指定源地址和目标地址。
-i
和 -o
:指定进入和离开的网络接口。
动作:
-j
:指定动作,如 ACCEPT(允许数据包通过。)、DROP(直接丢弃数据包,不给出任何回 应信息)、REJECT(拒绝数据包通过,必要时会给数据发送端一个响应信息)、LOG(在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则) 等。
常见的 iptables 命令:
指令 | 作用 |
-A | 追加 |
-I | 插入 |
-D | 删除 |
-P | 修改默认策略 |
-F | 清空策略 |
-R | 替换策略 |
iptables语法总结:
2.3 添加新的防火墙规则
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。
这条规则的含义是:禁止66主机ping通自己
2.4 查看规则表
格式:
iptables [-t表名] -n -L [链名] |[-- line-numbers]
或
iptables - [vn]L
2.5 删除、清空、替换规则
格式:
删除:iptables -D INPUT 序号 -s -j
清空:iptables -F
替换:iptables -I INPUT 序号 -s -j
主意:
1.若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
2.按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
3.按内容匹配删数时,确保规则存在,否则报错
2.6 设置默认策略
格式:
iptables [-t表名] -P <链名> <控制类型>
2.7 通用匹配
直接使用,不依赖于其他条件或扩展,如网络协议、IP 地址或网络接口。
协议匹配:-p 协议名称
地址匹配:-s 源地址,-d 目标地址
#IP、网段、域名、NULL(任意地址)。
接口匹配:-i 入站网卡,-o 出站网卡
白名单的创建
可以ping通真机和自己
不可以让其他人png自己
2.8 隐含扩展
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
端口匹配: --sport 源端口、--dport 目的端口
#可以是个别端口、端口范围
要求:主机cxk可以ping通cxk2,cxk2不可以ping通cxk
有点不符合要求,可以稍加改进一下,在后面指定ip地址即可
2.9 显示 扩展模块
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
格式:
[-m matchname [per-match-options]]
2.9.1 multiport扩展
以离散方式定义多端口匹配,最多指定15个端口
[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端
例子:
2.9.2 iprange扩展
指明连续的(但一般不是整个网络)ip地址范围
[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围
例子:
2.9.3 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...] 星期几,1 – 7 分别表示星期一到星期日
--kerneltz:内核时区(当地时间),不建议使用,CentOS 7版本以上系统默认为 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
例子:
按下确认键就失效了,解决办法就是把时间改掉,注意要关掉时间同步,不然一会又失效了
xshell恢复正常
2.9.4 connlimit扩展
根据每客户端IP做并发连接数数量匹配
可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
2.9.5 state
状态类型:
NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
格式:--state state
例子:
要求:服务器维护,需要禁止新访问,已经在访问的用户无影响
ipatables -A INPUT -m state --state NEW -j REJECT
ipatables -A INPUT -m state --state ESTABLISHED -j ACCEPT
2.10 保存规则
1. 保存规则到自定义文件中
2.重新加载规则
3.开机自动重载规则
保存/加载规则
开机自动重载规则
120 iptables -F121 iptables -vnL122 iptables -A INPUT -s 192.168.136.66 -j DROP 123 iptables -vnL124 cd /opt125 ls126 iptables-save >/opt/iptables_rule127 ls128 vim /etc/rc.d/rc.local 129 chmod +x iptables_rule 130 vim /etc/rc.d/rc.local 131 chmod +x /etc/rc.d/rc.local132 cd /etc/rc.d/133 ls134 ll135 reboot136 iptables -vnL
三、SNAT DNAT技术
3.1 SNAT
SNAT的原理及应用:SNAT应用环境:局域网主机共享单个公网IP地址访问Internet(不支持Internet连接)。 SNAT原理:源地址转换根据指定更改数据包的源IP地址conditions.It 通常称为源映射。
SNAT转换的先决条件:
1.LAN中的每台主机都已正确配置IP地址、子网掩码和默认网关地址
2.Linux网关支持IP路由和转发 Linxu系统本身没有转发功能,只有路由发送数据
实例应用:
要求:我的内网端可以访问外网
第一步:网关服务器添加网卡并修改
第二步:打开路由转发
sysctl -a |grep forward
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
第三步:修改内外服务器的网卡,装httpd
将两个服务器重启网卡
第四步:在网关服务器上设置外网访问规则
iptables -t nat -A POSTROUTING -o ens34 -s 192.168.136.0/24 -j SNAT --to 12.0.0.1
第五步:测试
3.2 DNAT
DNAT的原理及应用:
DNAT应用环境:在Internet上公开局域网中的服务器
DNAT原理:目的地址转换通常称为目的地址映射,保证内网服务器的安全,保证数据按指定条件存储。
DNAT转换的先决条件:
1.LAN服务器可以访问Internet
2.网关的外网地址有正确的DNS解析记录
3.Linux网关支持IP路由和转发 。
实际应用:外网访问内网的购物网站
和内网访问外网一样的步骤只需要在网关服务器上加一条规则就行
测试: