防火墙iptables
目录
内容概述
1.什么是防火墙?
2.防火墙的分类
3.iptables防火墙
-3.1 应用场景
-3.2 iptables的注意事项
4.iptables 四表五链
5.iptables 防火墙的流程
6.iptables小结
7.iptables防火墙中的参数
8.iptables防火墙中的常用协议
9.常用的iptables防火墙的拓展模块
内容详细
1.什么是防火墙?
防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术.
它的作用是及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,以确保计算机网络运行的安全性。
2.防火墙的分类
我们根据软件,硬件来分类:
硬件防火墙:F5 # 成本较高,但性能更好
软件防火墙:firewalld、 iptables、 netfilter # 成本较低
3.iptables防火墙
3.1 应用场景
1.主机安全
2.内部共享上网
3.端口或IP转发
3.2 iptables的注意事项
1.匹配规则是从上往下依次执行的 # 命令行中
2.只要匹配上规则,就不会再往下往下执行
3.如果没有匹配到规则,就会执行默认规则
4.默认规则最后执行,默认是允许所有
5.经常使用的规则一般往前面放
4.iptables 四表五链
1.什么是表?
我们一般把一系列链功能的集合叫做表
2.什么叫链?
具备某种针对性功能的规则集合叫做链
3.为什么要用表和链?
用表是为了管理链;而链主要是用来设置防火墙的规则的
4.四表及其功能
filter: 负责过滤功能 包括的链: INPUT FORWARD OUTPUT
nat: 网络地址转换 包括的链: PREROUTING INPUT OUTPUT POSTROUTING
mangle: 负责修改数据包内容 包括的链: PREROUTING INPUT FORWARD OUTPUT POSTROUTING
raw: 负责数据包跟踪 包括的链: PREROUTING OUTPUT
5.五链及其功能
1)PREROUTING:主机外报文进入的位置,允许的表有"mangle,nat"(目标地址转换,把本机地址转换为真正的目标的地址,通常指响应报文)
2)INPUT:报文进入本机用户空间的位置,允许的表有"filter,mangle"
3)OUTPUT:报文从本机用户空间出去的位置,允许的表有"filter, mangle, nat"
4)FOWARD:报文经过路由并且发觉不是访问本机,而是通过本机转发出去的流量,允许的表有"filter, mangle"
5)POSTROUTING:报文经过路由被转发出去,允许的表有"mangle,nat"(源地址转换,把原始地址转换为转发主机出口的网卡地址)
5.iptables 防火墙的流程
1.流进主机的流量经过的防火墙链
A网络(START) ---> PREROUTING ---> INPUT ---> 用户名称空间进程(END)
2.流出主机的流量经过的防火墙链
A网络 (END)<--- POSTROUTING <--- OUTPUT <--- 用户名称空间的进程(START)
3.经过主机的流量所经过的防火墙链
A网络(START)---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C网络(END)
- - - - -- - - - B网络 - - - - - - - - -
6.iptables小结
我们到这里暂时小结一下
1.什么是防火墙?
一句话概括就是防止恶意的流量攻击和转发
2.什么是表?
具备改变流量规则的集合叫做表
3.什么是链?
具体执行表的功能的载体就叫做链
4.链和表的功能
# 四表
filter表--过滤数据包
Nat表--用于网络地址转换(IP、端口)
Mangle表--修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表--决定数据包是否被状态跟踪机制处理
# 五链
INPUT链--进来的数据包应用此规则链中的策略
OUTPUT链---外出的数据包应用此规则链中的策略
FORWARD链--转发数据包时应用此规则链中的策略
PREROUTING链--对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链--对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
7.iptables防火墙中的参数
1.iptables防火墙中的参数
-p -i -o -m -j -s -d
-A -D -I -R -F -L -v -n -Z
# 安装
yum install iptables -y
2.防火墙的语法格式
iptables -t 表名 选项 链名称 条件 操作
3.参数详解
-t: 指定操作的表
-A, --append 追加一条规则到链中
-D, --delete 删除链中的规则
-I, --insert 插入一条规则,插入到顶部
-R, --replace 修改
-L, --list 列出当前的规则
-S, --list-rules 列出所有的规则
-F, --flush 清空
-Z, --zero 清空计数器( 包数量 、包大小)
-N, --new-chain 创建一个自定义 链
-X, --delete-chain 删除一个自定义链
-P, --policy 指定链的默认策略
-n 不反解IP(以数字格式显示地址和端口号)
-v 显示更详细信息
--line-number 显示防火墙编号
ps:默认的表是filter
一些操作:
# 查看防火墙策略(filter)
iptables -nl
# 查看指定表
iptables -nl -t nat
# 清空防火墙规则
iptables -F # 删除规则
iptables -X # 删除自定义的链
iptables -Z # 计数器清零
# 添加防火墙规则
例:iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
8.iptables防火墙中的常用协议
-p 指定协议
UDP
TCP
ICMP
ALL
-s 源地址
-d 目标地址
--sport 源端口
--dport 目标端口
-i 指定网卡
-o 指定网卡
-m 指定模块
-j 指定动作
ACCEPT 将数据包放行,进行此处理动作后,将不再比对其他规则,直接跳往下一个规则链
REJECT 阻拦该数据包,并传送数据包通知对方
DROP 丢弃包不予处理,进行完此处理动作后,将会继续比对其他规则
再次强调:防火墙执行规则是从上到下的,一旦匹配上则不再往下匹配
练习:
1.仅允许 192.168.230.3 访问 192.168.230.5 的80端口,其他的都拒绝
# 思路:先允许192.168.174.230.3访问192.168.174.5,再拒绝所有请求
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 -d 192.168.230.5 --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
2.凡是由本机发出的TCP协议报文都允许出去,其他的协议不允许(可以访问baidu但是不能ping百度)
# 思路:允许TCP协议,再拒绝所有协议
iptables -t filetr -I OUTPUT -p tcp -j ACCEPT
iptables -t filter -A OUTPUT -j DROP
3.只允许192.168.230.3访问192.168.230.5的20到90号端口
# 思路:先允许,后拒绝
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 -d 192.168.230.5 --dport 20:90 -j ACCEPT
iptables -t filter -A INPUT -p tcp -J DROP
思考:只允许192.168.230.3访问192.168.230.5的22、80、3306、2379、8080、8090号端口(要如何实现?)
9.常用的iptables防火墙的拓展模块
接回上个思考,我们在没接触到iptables拓展模块前是无法实现的
我们来介绍iptables拓展模块
1.multiport模块
允许匹配多个不连续端口
只允许192.168.230.3访问192.168.230.5的22、80、3306、2379、8080、8090号端口
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 -m multiport --dports 22,80,3306,2379,8080,8090 -j ACCEPT
iptables -t filter -A INPUT -p tcp -J DROP
2.iprange模块
指定一段连续的ip地址范围
--src-range from[-to]: 源地址范围
--dst-range from[-to]: 目标地址范围
练习:
192.168.230.3-192.168.230.7 地址段都 不允许ping
iptables -t filter -I INPUT -p icmp -m iprange --src-range 192.168.230.3-192.168.230.7 -j DROP
3.string模块
过滤数据包中包含某个字符串
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 匹配的查询算法