iptables防火墙

iptables防火墙

一.linux防火墙基础

1.linux 包过滤防火墙概述

1.1netfilter

(1)位于Linux内核中的包过滤功能体系

(2)称为Linux防火墙的“内核态”

1.2 iptables

(1)位于/sbin/iptables,用来管理防火墙规则的工具

(2)称为Linux防火墙的“用户态”

2.包过滤的工作层次

(1)主要是网络层,针对IP数据包

(2)体现在对包内的IP地址、端口等信息的处理上

2.1 通信的五元素和四元素

五元素:源IP、目标IP、源端口、目标端口、协议

四元素:源IP、目标IP、源端口、目标端口

3.iptables 的表、链结构

3.1 规则链

(1)规则的作用:对数据包进行过滤或处理

(2)链的作用:容纳各种防火墙规则

(3)链的分类依据:处理数据包的不同时机

3.2 默认包括5种规则链

(1)INPUT:处理入站数据包

(2)OUTPUT:处理出站数据包

(3)FORWARD:处理转发数据包

(4)POSTROUTING链:在进行路由选择后处理数据包

(5)PREROUTING链:在进行路由选择前处理数据包

3.3 规则表

(1)表的作用:容纳各种规则链

(2)表的划分依据:防火墙规则的作用相似

3.4 默认包括4个规则表

(1)raw表:确定是否对该数据包进行状态跟踪

(2)mangle表:为数据包设置标记

(3)nat表:修改数据包中的源、目标IP地址或端口

(4)filter表:确定是否放行该数据包(过滤)

二.数据包过滤的匹配流程

1.规则表之间的顺序

raw——mangle——nat——filter

按照表的顺序,依次查当前表中的链,看链中是否有匹配规则,匹配到立即停止,若找不到匹配规则,则会使用链的默认策略处理。

表里面有链,链里面匹配规则

2.规则链之间的顺序

(1)入站: PREROUTING——INPUT

(2)出站: OUTPUT——POSTROUTING

(3)转发: PREROUTING——FORWARD——POSTROUTING

3.规则链内的匹配顺序

(1)按顺序依次检查,匹配即停止 (LOG策略例外)

(2)若找不到相匹配的规则,则按该链的默认策略处理

4.匹配流程示意图

按照顺序查从raw表开始到mangle——nat表——(如没有策略到)filter表(input 让不让数据进来)——路由转发——一般不会对出数据进行限制——raw——mangle——nat——filter看是否有策略——nat(对数据进行地址转换)——出去,送达(不转换也送达)

5.转换

(1)nat PREROUTING:目的地址转换。要把别人的公网ip换成你们内部的ip
(2)nat POSTROUTING:源地址转换,要把你的内网地址转换成公网地址才能上网,一般用于对外发布内网的服务(内网访问外网)

三.编写防火墙规则

1.基本语法

1.1 总结

四表五链

规则表的作用:容纳各种规则链

规则链的作用: 容纳各种防火墙规则

总:表里有链,链里有规则

1.2 管理选项

表示iptables规则的操作方式,如插入、增加、删除、查看等;匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理:控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。

注:

不指定表名时,默认指filter表不指定链名时,默认指表内的所有链,一般不这么操作除非设置链的默认策略,否则必须指定匹配条件选项、链名、控制类型使用大写字母,其余均为小写

2.数据包的常见控制类型

(1)ACCEPT:允许数据包通过。

(2)DROP:直接丢弃数据包,不给出任何回 应信息

(3)REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。

(4)SNAT:修改数据包的源地址

(5)DNAT:修改数据包的目的地址

3.管理选项

选项 注释 示例
-A 在指定链末尾追加一条 iptables -A INPUT (操作)
-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P 指定默认策略 iptables -P OUTPUT ACCEPT (操作)
-D 删除 iptables -t nat -D INPUT 2 (操作)
-R 修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L 查看 iptables -t nat -L (查看)
-n 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名)
-v 查看时显示更详细信息,常跟-L一起使用 (查看)
–line-numbers 规则带编号 iptables -t nat -L -n --line-number iptables -t nat -L --line-number
选项 注释 示例
-F 清除链中所有规则 iptables -F (操作)
-X 清空自定义链的规则,不影响其他链 iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和) iptables -Z
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号

4.匹配的条件

条件 作用
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
–sport 指定源端口号
–dport 指定目的端口号

四.添加、查看、删除规则

1.查看规则

粗略查看默认规则:

iptables   -L

数字化的形式查看规则:

iptables   -nL

指定表查看:

iptables -t filter  -vnL

查看指定表中的指定链

iptables -t filter  -vnL  INPUT ——————不指定表,默认就是filter

2.添加规则

添加规则的两个常用选项:
-A,在末尾追加规则。
-I,在指定位置前插入规则。如果不指定,则在首行插入
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。

iptables -F————————清空规则(如果不写表名和链名,默认清空filter表中所有链里的所有规则)
 iptables -t filter -A INPUT -p icmp -j REJECT  ——————————禁止所有主机ping本机
 iptables -t filter -A INPUT -p icmp -j ACCEPT————————————允许ping通,-A在前一条规则后添加

#匹配到了就不在匹配后面的规则

iptables -t filter -I INPUT 1 -p icmp -j ACCEPT ——————————指定序号插入,插入到第一条

#即时生效

 iptables -t filter -A INPUT -p tcp -j REJECT ——————————禁止任何主机tcp
iptables -I INPUT 1 -p udp -j ACCEPT——————允许任何主机udp
 iptables  -nL  --line-number  #查看行规则的位置

拒绝某一台主机,其他的可以:

iptables -t filter -A INPUT -s 192.168.198.12 -p icmp -j REJECT

拒绝多台主机:

iptables -t filter -A INPUT -s 192.168.198.12,192.168.198.13 -p icmp -j REJECT

不允许11的数据包出去,其他的就都ping不通了

 iptables -t filter -A OUTPUT -s 192.168.198.11 -p icmp -j REJECT

指定端口:

iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT
注:协议在前,指定端口号在后,否则识别不了端口,无法匹配就会报错!
iptables -t filter -A INPUT -s 192.168.198.12 -p tcp --dport 80 -j REJECT
指定IP地址的服务端口拒绝

3.删除规则

D删除 :

根据序号删除内容

iptables -D INPUT 1——————————删除指定的INPUT链中的第一条规则

内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的

 iptables -D INPUT -p icmp  -j REJECT——————删除序号小的

4.通用匹配

网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡
感叹号”!”表示取反

网络协议

iptables -P INPUT DROP ————其他的服务不受影响,这个时候,把策略清空,所有的协议都将被DROP
iptables -F ————这时只能进虚拟机重启

IP地址

iptables -A INPUT -s 192.168.198.12 -j DROP——————————禁止22的数据进入

网络接口:

iptables -I INPUT 1 -i ens33 -s 192.168.198.0/24 -j DROP————————禁止指定的网络设备名称ens33的所

怎么使整个网段不能用指定的端口

 iptables -t filter -A INPUT -s 192.168.198.0/24 -p tcp --dport 80 -j REJECT——————————禁止整个网段访问80端口

5.隐藏扩展模块

iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。
例如若已经指明是 -p tcp协议则使用–dport及–sport等tcp模块内容时即可省略-m tcp。

多端口隐藏扩展匹配

 iptables -A INPUT -p tcp --dport 22:80 -j REJECT ——————————禁止整个网段访问22和80端口
 注:小的数字写在前面,大的写在后面

6.显示匹配

多端口显示扩展匹配

 iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则

7.IP范围匹配

-m iprange --src-range 源IP范围
-m iprange --dst-range 目的IP范围

iptables -A INPUT -p icmp -m iprange --src-range 192.168.198.20-192.168.198.30 -j REJECT——————禁止网段内的ip地址ping主机

8.MAC匹配

 iptables -A INPUT -m mac --mac-source 00:0c:29:23:65:98 -j DROP

五.iptables的备份和还原

1.备份

(1)安装服务

yum -y install iptables-services          #安装服务
systemctl start iptables.service          #开启服务
systemctl enable iptables.service         #开启开机自启

(2)示例临时生效

iptables -F                              #实验环境清空
iptables -t filter -A INPUT -s 192.168.198.12 -p icmp -j ACCEPT   #创建规则
iptables -vnL --line-number              #用序号查看现有的规则

iptables防火墙_第1张图片

(3)备份

[root@test1 ~]# cd /opt
[root@test1 opt]# iptables-save > /opt/iptables.bak       #备份
[root@test1 opt]# ls                                      #查看备份
[root@test1 opt]# cat iptables.bak                        #查看备份的文件是否生成

在这里插入图片描述

iptables防火墙_第2张图片

2.恢复

2.1 临时生效

(4)演示清空策略,实验环境可清空

[root@test1 opt]# iptables -F                          #清空
[root@test1 opt]# iptables -vnL --line-number          #用序号查看现有的规则

iptables防火墙_第3张图片

(5)恢复规则

[root@test1 opt]# iptables-restore 
[root@test1 opt]# iptables -vnL

iptables防火墙_第4张图片

2.2 永久生效
在配置文件里导入,需要重新启动配置文件
注:实验环境无影响,在实际中需要先将旧的做备份,确认后再将新的导入,在修改配置文件时也需要备份配置文件防止修改错误情况

cat /etc/sysconfig/iptables               #查看配置文件
cat /opt/iptables.bak > /etc/sysconfig/iptables    #查看导入配置文件
iptables -vnL                              #查看策略

iptables防火墙_第5张图片

六.自定义链

1.创建链

1.1 格式

自定义链添加:iptables -N (链名)

1.2 示例

iptables -N cjw
iptables -vnL

iptables防火墙_第6张图片

2.修改链名

2.1 格式

iptables -E 修改的名 修改后的名

2.2 示例

iptables防火墙_第7张图片

3.自定义规则用iptables调用

[root@test1 ~]# iptables -N zzz               创建链
[root@test1 ~]# iptables -F
[root@test1 ~]# iptables -vnL --line-number

iptables防火墙_第8张图片

iptables -t filter -I zzz -p icmP -j ACCEPT       #创建规则

iptables防火墙_第9张图片

iptables -t filter -I INPUT -p icmP -j zzz    #调用

iptables防火墙_第10张图片

4.删除自定义链

删除自定义链是需要查看调用如已经调用了需先删除调用规则——再删除自定义链——最后删除链

iptables -D INPUT 1                          #删除调用规则
iptables -D zzz 1                            #删除自定义链的规则
iptables -X zzz                              #删除链

iptables防火墙_第11张图片

iptables防火墙_第12张图片
iptables防火墙_第13张图片

你可能感兴趣的:(网络,linux,服务器)