iptables防火墙

2021/6/15 7:24:14

本文主要是介绍iptables防火墙,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 一、概述
  • 二、四表五链
    • 一、规则表
      • 默认包括4个规则表
    • 二、规则链
      • 默认包括5种规则链
  • 三、数据包过滤的匹配流程
    • 一、规则表之间的顺序
    • 二、规则链之间的顺序
    • 三、规则链内的匹配顺序
  • 四、iptables安装
  • 五、基本语法
    • 格式
      • 一、选项
      • 二、控制条件
      • 三、控制类型
      • 四、查看filter表
      • 五、防火墙规则的保存
  • 五、实操

一、概述

1、防火墙分为两类:硬件防火墙+软件防火墙
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制。属于典型的包过滤防火墙。linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率,因此获得广泛的应用。
2、在很多安全技术资料中,netfilter和iptables都用来指linux防火墙,区别如下:
netfilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(真正工作的)又称内核空间的防火墙功能体系。
iptables:指的是用来管理linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态”(管理的,是一种软件、服务)又称用户空间的防火墙管理体系。

二、四表五链

一、规则表

1、表的作用:容纳各种规则链
2、表的划分依据:防火墙规则的作用相似

默认包括4个规则表

raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)

二、规则链

1、规则的作用:对数据包进行过滤或处理
2、链的作用:容纳各种防火墙规则
3、链的分类依据:处理数据包的不同时机

默认包括5种规则链

INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包(nat表)
PREROUTING链:在进行路由选择前处理数据包(nat表)

三、数据包过滤的匹配流程

一、规则表之间的顺序

raw→mangle→nat→filter

二、规则链之间的顺序

1、入站: PREROUTING→INPUT
2、出站: OUTPUT→POSTROUTING
3、转发: PREROUTING→FORWARD→POSTROUTING

三、规则链内的匹配顺序

1、按顺序依次检查,匹配即停止(LOG策略例外)
2、若找不到相匹配的规则,则按该链的默认策略(默认策略是放通)处理

四、iptables安装

1、关闭firewalld防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service

2、安装iptables防火墙

[root@localhost ~]# yum -Y install iptables iptables-services

3、设置iptables开机启动

[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service

五、基本语法

格式

iptables -t表名 选项 链名 条件 -j控制类型
例:iptables -t filter -I INPUT -p icmp -j REJECT #阻止ping测试
注意事项
1、不指定表名时,默认指filter表
2、不指定链名时,默认指表内的所有链
3、除非设置链的默认策略,否则必须指定匹配条件
4、选项、链名、控制类型使用大写字母,其余均为小写

一、选项

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

二、控制条件

-p 指定那个协议
	在centos6中:
	tcp,udp,udplite,icmp,esp,ah,sctp
	centos7中:
	tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh
	当不适用-p时,默认匹配所有的协议,相当于-p all
例:iptables -A INPUT ! -p icmp -j DROP #仅允许icmp协议访问	
-s 指定单个IP地址或多个(多个IP地址用逗号隔开),也可以是网段
网络接口匹配
-i 指定进站网络接口
-o 指定出站网络接口
隐含匹配(端口匹配,icmp匹配)
--sport 指定源端口。
--dport 指定目标端口。针对的协议为tcp或udp。多个端口的情况下连续的端口号用':'隔开,也可以用':'指定端口号的范围。不连续的端口号用','隔开。
--icmp 编写icmp类型匹配规则时使用'--icmp-type icmp类型代码'的形式,针对icmp协议。
		icmp类型:Echo-Request,代码为8
		 		 Echo-Reply,代码为0
显示匹配:这种匹配需要额外的内核模块提供支持,必须手动以‘-m 模块名称’的形式调用相应的模块。可以多端口匹配,ip范围匹配,mac地址匹配,状态匹配。
多端口匹配:‘-m multiport --dports(也可以写dport) 端口列表’‘-m multiport --sports(也可以写sport) 端口列表’
例:iptables -A INPUT -p tcp -m multiport --dports 25,80,110,143 -j ACCEPT #允许开放25,80,110,143端口,一遍访问邮件和网站服务
IP范围匹配:'-m iprange --src-range 源ip范围''-m iprange --dst-range 目标ip范围'
例:iptables -A INPUT -p icmp -m iprange --src-range 192.168.238.1-192.168.238.100 -j REJECT #拒绝192.168.238.1-192.168.238.100网段的ip访问本机
mac地址匹配:‘-m mac --mac-source MAC地址’
例:iptables -A INPUT -m mac --mac-source 00:0c:29:52:c0:ae -j DROP #拒绝MAC地址为00:0c:29:52:c0:ae主机访问
状态匹配:编写iptables规则时使用“-m state --state 连接状态(可以写多个用逗号隔开)”的形式
常用的连接状态:
NEW:想要新建立联机的封包状态。
ESTABLISHED: 已经联机成功的联机状态。
RELATED:表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包。
INVALID: 无效的封包,例如数据破损的封包状态。
例:iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT #允许响应请求的连接放行

三、控制类型

ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配

四、查看filter表

[root@localhost ~]# iptables -vnL #查看filter表中所有规则并显示详情
Chain OUTPUT (policy ACCEPT 2620 packets, 247K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

iptables各字段解读:
pkts:对应规则匹配到的报文的个数。
bytes :对应匹配到的报文包的大小总和。
target:规则对应的target,往往表示规则对应的“动作",即规则匹配成功后需要采取的措施。
prot:表示规则对应的协议,是否只针对某些协议应用此规则。
opt:表示规则对应的选项。
in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。
packages:匹配到的包数量
bytes:匹配到的总字节数

五、防火墙规则的保存

[root@localhost ~]# iptables-save #查看当前规则
/etc/sysconfig/iptables#默认存放路径
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables #保存到默认配置文件下次重启不会丢失
[root@localhost ~]# systemctl stop iptables.service #停止iptables服务会清空所有规则

五、实操

1、本机可以ping通192.168.238.150,但目标机ping不通本机

[ root@localhost ~] # iptables -A INPUT -p icmp --icmp-type echo request -S 192.168.245.211 -j DROP


这篇关于iptables防火墙的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程