iptables防火墙

Posted 世界美好與你環環相扣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables防火墙相关的知识,希望对你有一定的参考价值。

一.Linuux包过滤防火墙概述

1.1防火墙的分类

硬件防火墙和软件防火墙

1.2Linux防火墙

netfilter:位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”

iptables:位于/sbin/iptables,用来管理防火墙规则工具,称为Linux防火墙的“用户态”,firewalld也是用户态的防火墙

1.3Linux包过滤的工作层次

主要是网络层针对P数据包,体现在对包内的IP地址、端口等信息的处理上

在这里插入图片描述

1.3iptables的表、链结构

1.3.1规则表

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

1.3.2四个规则表

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

1.3.3规则链

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

1.3.4默认包括5种规则链

①INPUT:处理入站数据包
②OUTPUT:处理出站数据包
③FORWARD:处理转发数据包
④POSTROUTING链:在进行路由选择后处理数据包
⑤PREROUTING链:在讲行路由选择前处理数据包

1.3.5表和链的关系

在这里插入图片描述

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

2.1规则表之间的顺序

raw→mangle→nat→>filter

2.2规则链之间的顺序

①入站:PREROUTING→INPUT
②出站: OUTPUT→POSTROUTING
③转发:PREROUTING→FORWARD→ POSTROUTING

2.3规则链内的匹配顺序

①按顺序依次检查,匹配即停止(LOG策略例外)
②若找不到相匹配的规则,则按该链的默认策略处理,默认规则不参与排序
匹配流程示意图
在这里插入图片描述

三.iptables安装

(1)关闭firewalld防火墙

systemctl stop firewalld.service 
systemctl disable firewalld.service

(2)安装iptables防火墙

yum -y install iptables iptables-services

(3)设置iptables开机启动

systemctl start  iptables.service 
systemctl  enable  iptables.service 

iptables的语法构成
iptables [-t表名] 选项 [链名] [条件] [-j控制类型]

iptables -t filer -I INPUT -p icmp -j REJECT    阻止ping测试  //-I表示新增,-p指定协议

(4)注意事项
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件选项、链名、控制类型使用大写字母,
其余均为小写

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

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

五.管理选项

①-A在指定链末尾追加一条

iptables -A INPUT

②-I在指定链中插入一条新的,未指定序号默认作为第一条

iptables -I INPUT

③-P指定默认规则

iptables -P   OUTPUT ACCEPT

④-D期除

 iptables -t nat -D INPUT

⑤-R修改、替换某一条规则

iptables -t nat -R INPUT

⑥-L查看

iptables -t nat -L

⑦-n所有字段以数字形式显示(比如任意ip地址是8.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

六.iptables常用命令集

①增加,删除和修改

iptables -t filter -L  iptables -L      查看filter表里面的规则    
iptables -t net  -L                     查看net表里面的规则 
iptables -t  filter -S                  查看filter表所有规则
iptables -t  filter -S INPUT            查看INPUT链的规则
iptables -t  filter -S INPUT 4          查看INPUT链的第四个规则
iptables -t filter -L --line-number     查看filter表的规则编号
iptables -t filter -L -N                以数字显示
iptables -vnL                           以数字显示并显示详情
iptables  -t filter -F                  清空
iptables -t filter  -X                  清除自定义的链
iptables -t filter -Z                   -Z清空链的计数器
iptables -t filter -A INPUT -j REJECT   拒绝入站的所有数据包
iptables -I INPUT -j ACCEPT             在表的最前面增加一条允许规则
iptables -D INPUT  -j  REJECT           删除INPUT链中拒绝的规则
iptables -D INPUT 1                     指定标号删除
iptables -A OUTPUT -j REJECT            拒绝出站
 iptables -P INPUT  DROP                默认规则拒绝
iptables -P  INPUT  ACCEPT              默认拒绝接受
iptables -R INPUT 1  -j DROP            修改第一条 //修改的时候必须把编号加上

②指定类型匹配

iptables -t filter -A INPUT -p icmp -s 192.168.80.1 -j DROP   禁止192.168.80.1主机ping本机
iptables -t filter -A INPUT -p tcp -s 192.168.80.1 -j DROP    禁止192.168.80.1TCP访问b本机
iptables -A OUTPUT -p tcp -d 192.168.80.1 -j DROP             禁止本机通过TCP访问192.168.80.1主机           
iptables -A FORWARD -p tcp -s 192.168.80.0/24 -d 192.168.80.1 -j DROP  禁止本机转发访问
iptables -A INPUT -i ens33 -j DROP                      从ens33进口进来的流量全部拒绝
iptables -A OUTPUT -o ens33 -j DROP                     从ens33出口的流量全部拒绝  
iptables -A INPUT -i ens33 -s 192.168.80.1 -j DROP      指定源地址
ptables -A INPUT ! -p icmp -j DROP                      只能进行ping连接,其他都不行,!表示取反

③端口匹配

iptables -A INPUT -s 192.168.80.1 -p tcp --dport 80 -j DROP  禁止访问80端口 //定义端口的时候必须指定协议

④icmp类型匹配:编写icmp类型匹配规则时使用–icmp-type ICMP类型”的形式,
针对的协议是icmp
icmp类型:
Echo-Request:代码为8
Echo-Reply:代码为6

例:允许本机ping别的主机但是不允许别的主机ping本机

iptables -A INPUT -p icmp --icmp-type 8 -j DROP      //也可以直接写echo-request,应用在内网可以ping外网,但外网ping不了内网

⑤显示匹配:这种匹配方式要求有额外的内核模块提供支持,必须手动以"-m 模块名称”的形式调用相应的模块
如:多端口匹配、ip范围匹配、mac地址匹配、状态匹配

iptables -A INPUT -p tcp -m multiport --dport 80,22,23 -s 192.168.80.1 -j DROP  多端口
iptables -A INPUT -p tcp -m multiport --dport 20:80 -s 192.168.80.1 -j DROP     指定端口范围

⑥ip范围匹配:编写ip地址范围匹配时使用"-m iprange --Src-range IP范围”“-n iprange --dst-range IP范围”的形式

iptables -A OUTPUT -p icmp -m iprange --dst-range 192.168.80.1-192.168.80.200 -j DROP     禁止ping一段ip地址

⑦mac地址匹配:编写mac地址匹配规则时使用“-m mac --mac-source MAC地址”

iptables -A INPUT -p icmp -m mac --mac-source  00:0c:29:b3:61:84  -j DROP  指定MAC地址

⑦状态匹配:编写iptables规则时使用-m state --state连接状态”的形式常用的连接状态:
NEW:想要新建立联机的封包状态
ESTABLISHED:已经联机成功的联机状态
RELATED:表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包,这个状态很常被设定
INVALID:无效的封包,例如数据破损的封包状态

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT  已建立连接和以前建立过连接

⑧防火墙规则的保存
iptables-save 1/查看当前规则
默认存放路径: /etc/sysconfig/iptables

iptables-save > /etc/sysconfig/iptables   保存到配置文件

七.iptables防火墙的net转换

7.1防火墙开启路由转发功能

①vim /etc/sysctl.conf//配置内核参数开启路由转发,echo 1 > /proc/sys/net/ipv4/ip_forward为临时配置
net.ipv4.ip_forward=1
②sysctl -p从文件加载系统参数

2、配置防火墙策略(先清空net表规则>

[root@localhost ~]# iptables -t nat -A PREROUTNG -d 12.0.0.128 -i ens38 -j DNAT --to-destination 192.168.192.210
[root@localhost ~]# iptables -t nat -I POSTROUTING -s 192.168.192.0/24 -o ens38 -j SNAT --to-source 12.0.0.128

以上是关于iptables防火墙的主要内容,如果未能解决你的问题,请参考以下文章

CentOS中iptables防火墙 开放80端口方法

iptables防火墙

iptables防火墙

iptables防火墙网路安全实践配置

Linux中iptables防火墙指定端口范围

Iptables 网络安全