分享

Linux系统iptables防火墙

 laq6 2021-02-28

iptables防火墙概述

不同于Firewalld防火墙,iptables针对IP数据包,体现在对包内的IP地址、端口等信息的处理上。

iptables表链结构

在这里插入图片描述

四表

规则表的作用:容纳各种规则链
默认包括四个规则表:

  • raw表:确定是否对该数据包进行状态跟踪–bug测试时用

  • mangle表:为数据包设置标记
    大部分情况用的两张表:(需要人为定义的表)

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

  • filter表:确定是否放行该数据包(过滤)–防火墙的默认表(核心)

五链

规则链的作用:容纳各种防火墙规则
规则的作用:对数据包进行过滤
默认包括五条规则链(类似于ACL访问控制列表):

  • INPUT:处理入站数据包(进入防火墙时)

  • OUTPUT:处理出战数据包(出防火墙时)

  • FORWARD:处理转发数据包

  • PREROUTING:在进行路由选择前处理数据包(先把目标IP转换为私有IP再查询路由表进行数据转发)

  • POSTROUTING:在进行路由选择后处理数据包(从内向外会查路由表;将源地址转换为外网地址出去)

数据包过滤匹配流程

规则表顺序:
raw——mangle——nat——filter

规则链顺序:
PREROUTING——INPUT——FORWARD——OUTPUT——POSTROUTING

入站:PREROUTING——INPUT
出站:OUTPUT——POSTROUTING
转发:PREROUTING——FORWARD——POSTROUTING

规则链内:
按顺序依次匹配,匹配到即停止,LOG除外;
若找不到匹配的规则,按该链的默认策略处理。

iptables工具

CentOS7默认使用Firewalld防火墙工具,需要先关闭Firewalld才能使用iptables防火墙。

安装iptables

systemctl stop firewalld
yum -y install iptables iptables-services//安装iptables防火墙
systemctl start iptables
systemctl enable iptables//设置iptables开机启动

iptables基本语法

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

-t:指定规则表,不加默认为filter表
链名:指定规则链,不加默认为表内所有链
条件:指定协议、端口
-j:指定控制类型

除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写

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

  • 常用选项
    添加新的规则:
    -A:在链的末尾追加一条长规则
    -I:在链的开头或指定序号插入一条规则
    查看规则列表:
    -L:列出所有的规则
    -n:以数字形式显示地址、端口信息(可与-L合用为-nL)
    -v:显示更详细的信息
    –line-numbers:查看规则时,显示规则的序号
    删除、清空规则:
    -D:删除链内指定序号或内容的一条规则
    -F:清空所有规则
    设置默认策略:
    -P:为指定的链设置默认规则

示例

iptables -t filter -A INPUT -p tcp -j ACCEPT  ##在INPUT链的末尾追加tcp协议允许通过的规则
iptables -I INPUT -p udp -j ACCEPT  ##在INPUT链的开头插入允许udp协议通过的规则
iptables -I INPUT 2 -p icmp -j ACCEPT  ##在INPUT链的第二个规则中插入允许icmp协议通过的规则

iptables -L INPUT --line-numbers   ##查看INPUT链所有的规则条目,并显示规则的序号
iptables -nL INPUT  ##以数字形式显示INPUT链所有的规则条目

iptables -D INPUT 2  ##删除INPUT链中的第二条规则
iptables -F  ##清空filter表中的规则(加-F是只清空filter表中的规则)
iptables -t nat -F  ##清空nat表中的规则  
iptables -t mangle -F  ##清空mangle表中的规则  
iptables -t raw -F   ##清空raw表中的规则

iptables -t filter -P FORWARD DROP   ##为FORWARD链设置默认规则为直接丢弃
iptables -P OUTPUT ACCEPT   ##为OUTPUT链设置默认规则为允许通过

规则的匹配条件

匹配类型

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

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

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

常见的通用匹配

协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o出站网卡
感叹号!表示条件取反

iptables -A FORWARD ! -p icmp -j ACCEPT  ##FORWARD链中追加一条规则:除了icmp协议,其他协议都accept
iptables -A INPUT -s 192.168.20.100 -j REJECT  ##在INPUT链中添加一条规则:来自192.168.20.100的数据包都拒绝通过
iptables -A INPUT -s 192.168.20.0/24 -j DROP  ##在INPUT链中添加一条规则:来自192.168.20.0/24网段的数据包全都丢弃
iptables -A INPUT -i ens33 -s 192.168.20.100 -j DROP##在INPUT链中追加一条规则:从192.168.20.100来的,从外网接口ens33进入的数据包都丢弃
[root@service ~]# iptables -A INPUT -i ens33 -s 192.168.20.0/24 -j DROP##在INPUT链中追加一条规则:从192.168.20.0/24网段来的,从外网接口ens33进入的数据包都丢弃

常见的隐含匹配

端口匹配:–sport 源端口、–dport 目的端口
ICMP类型匹配:–icmp-type ICMP类型

iptables -A FORWARD -s 192.168.1.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 DROP 
(echo-request 8请求,echo-rely 0回显,destination-unreachable 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 --dports 25,80,110 -j ACCEPT##在INPUT链中追加一条规则:目的端口列表中tcp25,80,110端口允许通过
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.50-192.168.1.100 -j ACCEPT##在FORWARD链中追加一条规则:IP地址范围为192.168.1.50-192.168.1.100的数据包允许通过
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:53:23 -j DROP##在INPUT链中追加一条规则:MAC地址为00:0c:29:c0:53:23的数据包丢弃
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多