Linux 防火墙 iptables

Iptables 防火墙

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

netfiter

位于Linux内核中的包过滤功能体系
成为Linux防火墙的内核态

iptables

位于/usr/iptables
成为LInux防火墙的用户态

iptables按规则办事,规则(rule)就是网络管理员预定义的条件。
规则:如果数据包符合“这样”的条件,就“这样” 处理这个包

规则的匹配条件

通用匹配

可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件

隐含匹配

要求特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件

显示匹配

要求以 “-m 扩展模块” 的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件

规则链

链,就是规则的集合
经过链的报文,会将链上的所有规则都匹配一遍
如有复合条件的规则,就执行规则对应的动作

默认的链有五条

INPUT:将进站的数据包应用此规则链
OUTPUT:将出站的数据包应用此规则链
FORWARD:转发的数据包应用此规则链
PREROUTING:进行路由转发前应用此规则链(其实基本上数据包进站都要被这个链处理)
POSTROUTING:路由转发后应用此规则链(所有出站数据都会被处理)

规则表

表中包含各种链

默认的四个规则表

filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw

注:
raw与mangle完美搭档,mangle打标签,raw追踪状态,识别状态
filter 最常用,默认表,最核心的表
若做了地址转换,就需要用到 nat 表
nat表和failter表需要自定义规则

表链关系

在这里插入图片描述

表链顺序

若四张表中同时包含了一条规则链,那优先级如下:
raw → mangle → nat → filter

数据包入站:PREROUTING →INPUT
数据包转发:PREROUTING → FORWARD → POSTROUTING
数据包出站:OUTPUT → POSTROUTING

语法构成

CentOS7默认使用firewalld,若想使用 iptables 记得关了firewalld
iptables [-t 表命] 选项 [链名] [条件] [-j 控制类型]
iptables -t filter -l INPUT -p icmp -j REJUET

注: 不指定表命时,指默认表filter
不指定链名时,就指全部的链
除非设置链的默认策略,否则必须指定匹配条件
选项 链名 控制类型必须大写

添加新的规则

-A 在链的末尾追加一条规则
-I 在链的开头(也可以指定序号)插入一条规则

数据包常见控制类型

ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

查看规则列表

-L 列出所有的规则条目
-n 以数字形式显示地址,端口等
-v 更详细的方式显示信息
–line-number 查看规则时,显示规则的序号

iptables -D INPUT 3
iptables -nL INPUT

删除/清空规则

-D 删除链内指定序号(或者内容)的一条规则
-F 清空所有规则

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F

设置默认规则

-P 为指定的链设置默认规则

iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT
设置默认规则要么是ACCPECT,要么是DROP

管理选择整理

类别 选择 作用
添加新规则 -A 在链的末尾追加一条规则
-I 在链的开头(也可以指定序号)插入一条规则
查看规则列表 -L 列出所有的规则条目
-n 以数字形式显示地址,端口等
-v 更详细的方式显示信息
–line-number 查看规则时,显示规则的序号
删除/清空规则 -D 删除链内指定序号(或者内容)的一条规则
-F 清空所有规则
设置默认规则 -P 为指定的链设置默认规则

规则有关语法

常见通用匹配条件

协议匹配: -p 协议名
地址匹配: -s 源地址 -d 目标地址
接口匹配: -i 接入网卡 -o 出站网卡

iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT
!表示取反

ipbables -A FORWARD -s 192.168.1.11 -j REJECT
Iiptables -I INPUT 10.20.30.0/24 -j DROP
IP地址

iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ens33 -s 172.16.0.0/12 -j DROP
接口

常用隐藏的匹配条件

端口匹配: --sport 源端口 --dport 目标端口
ICMP类型匹配: --icmp-type ICMP类型

iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCE[T
iptables -A INPUT -p icmp -j DROP
8 请求 0 回显 3 不可达

常见的显示匹配条件

多端口匹配: -m multiport --sports 源端口列表
-m multiport --dports 目标端口列表

IP范围匹配: -m iprange --src-range IP范围
MAC地址匹配: -m mac --mac-source MAC地址
状态匹配: -m state --state 连接状态

iptables -A INPUT -p tcp -m multiport --dport 25,80,110 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source MAC地址(我就不写了)

管理选项整理

类别 条件类型 用法
通用匹配 协议匹配 -p 协议名
地址匹配 -s 源地址 -d 目标地址
接口匹配 -i 接入网卡 -o 出站网卡
隐藏匹配 端口匹配 –sport 源端口 --dport 目标端口
ICMP类型匹配 –icmp-type ICMP类型
显示匹配 多端口匹配 -m multiport --sports 源端口列表
-m multiport --dports 目标端口列表
IP范围匹配 -m iprange --src-range IP范围
MAC地址匹配 -m mac --mac-source MAC地址
状态匹配 -m state --state 连接状态

iptables 地址转换实验

使用三台虚拟机
做地址转换ip :20.0.0.1 13.0.0.1
客户机1 ip : 20.0.0.139
客户机2 ip : 13.0.0.13
两台 客户机 均已安装 httpd,且nat表规则已清空

实验目的:两机互相访问时做 nat
将三台主机放入同一个LAN

给中间地址转换的机器设置路由转发功能

[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

两机测试
在这里插入图片描述
做地址映射

[root@firewall ~]# iptables -t nat -I PREROUTING -d 13.0.0.1 -p tcp --dport 80 -i ens34 -j DNAT --to-destination 20.0.0.139
[root@firewall ~]# iptables -t nat -I POSTROUTING -s 192.168.10.10/24 -o ens34 -j SNAT --to-source 13.0.0.1

验证
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/107730838