netfilter 是真正的防火墙,位于Linux内核中的包过滤功能体系
称为Linux防火墙的"内核态"
firewalld 和iptables 是默认的管理防火墙规则的工具
称为Linux防火墙的“用户态”
按保护范围划分:
按实现方式划分:
按网络协议划分:
属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。
netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
脸的分类依据:处理数据包不同的时机
INPUT :处理发送到本站入站数据包
OUTPUT:处理出本站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
按照顺序一次检查,匹配即停止
若找不到相匹配的规则,则按链的默认策略处理
作用:容纳各种规则链
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表: 修改数据包的源、目标IP地址或端口
filter表: 确定是否放行该数据包
raw→mangle→nat→filter
INPUT:进入到本机的流量
OUTPUT:从本机出去的流量
FORWARD:转发
PREROUTING:路由选择前
POSTROUTING:路由选择后
#查看有没有安装
iptables --version
操作前关闭防火墙,安装iptables
systemctl stop firewalld.service
yum -y install iptables iptables-services
格式
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
iptables table command chain parameter target
iptables -t #默认指定filter表
-t nat
command -A 追加
-D 删除
-vnL 显示详细规则链
-R 替换
-F 清空所有
-I 插入
-P 设置规则链的默认策略
iptables -vnL --line-numbers #查看规则的编号
chain 链名
INPUT #处理发送到本站入站数据包
OUTPUT #处理出本站数据包
FORWARD #处理转发数据包
POSTROUTING #在进行路由选择后处理数据包
PREROUTING #在进行路由选择前处理数据包
parameter匹配条件
-p 协议
-s 源ip
-d 目的ip
-i 入站网卡
-o 出站网卡
--sport 源端口
--dport 目的端口
target控制类
-j ACCEPT 允许
-j DROP 拒绝
-j REJECT 拒绝并回复
-j LOG 生成日志
iptables -t filter -A INPUT -p icmp -j DROP #不允许任何主机ping本主机
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT #允许主机ssh端口 通过我的
iptables [-t表名] -n -L [链名] |[-- line-numbers]
或
iptables - [vn]L #不可以合写为-Ln
[root@localhost ~]iptables -vnL --line-numbers
删除:
iptables -D INPUT 5
替换:
iptables -A INPUT -s 192.168.91.101 -j DROP
iptables -R INPUT 1 -s 192.168.91.101 -j ACCEPT
清空:
iptables -F INPUT
iptables -P INPUT <策略>
iptables -P OUTPUT <策略>
iptables -P FORWARD <策略>
INPUT 是针对进入系统的数据包,
OUTPUT 是针对离开系统的数据包,
FORWARD 是针对通过系统的数据包
策略可以是 ACCEPT、DROP 或 REJECT
以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP#拒绝从en33进入的192.168.91网段
iptables -I INPUT -p icmp -j DROP #拒绝icmp协议访问
iptables -A FORWARD ! -p icmp -j ACCEPT #感叹号”!”表示取反
--source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
--destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
--tcp-flags mask comp
mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
注意: --sport和--dport 必须配合-p <协议类型>使用
[root@localhost ~]iptables -A INPUT -p tcp --sport 10000:30000 -j REJECT
#10000到30000 全部被拒
root@localhost ~]iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
multiport扩展
以离散方式定义多端口匹配,最多指定15个端口
[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端
[root@localhost ~]iptables -t filter -A INPUT -s 192.168.91.101 -p tcp --dport 22,80 -j REJECT #不支持离散的端口号
iprange扩展
指明连续的(但一般不是整个网络)ip地址范围
[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围
[root@localhost ~]iptables -A INPUT -m iprange --src-range 192.168.91.101-192.168.91.103 -j REJECT
# 指定 源地址为192.168.91.101-192.168.91.103 3个地址无法访问 当前主机
mac 模块可以指明源MAC地址
[!] --mac-source XX:XX:XX:XX:XX:XX
[root@localhost ~]iptables -A INPUT -m mac --mac-source 00:0c:29:2a:d6:05 -j REJECT
状态类型*:
NEW :与任何连接无关的,还没开始连接
ESTABLISHED :响应请求或者已建立连接的,连接态
RELATED :与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与
ESTABLISHED 配合使用
INVALID:不能被识别属于哪个连接或没有任何状态
--state state
iptables -A INPUT -m state --state NEW -j REJECT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT #新用户不可以访问 就用胡可以访问
iptables -A FORWARD -m state --state NEW -P tcp ! --syn -j DROP
#禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包)