iptables 防火墙基础了解

1.什么是iptables

iptables 是 Linux 防火墙工作在用户空间的管理工具,是 netfilter/iptablesIP 信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则。

iptables的四表五链结构

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

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

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

1、四张表介绍:

raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING

  • filter

负责过滤数据包,包括的规则链有:inputoutputforward

  • nat

用于网络地址转换(IP、端口),包括的规则链有:preroutingpostroutingoutput

  • mangle

主要应用在修改数据包、流量整形、给数据包打标识,默认的规则链有:INPUTOUTPUTforwardPOSTROUTINGPREROUTING

优先级:raw>mangle > nat > filter

2、五条链:
  • input

处理入站数据包,匹配目标IP为本机的数据包。

  • output

出口数据包 , 一般不在此链上做配置

  • forward

处理转发数据包,匹配流经本机的数据包。

  • prerouting

在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。

  • postrouting

在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由

iptables规则引流 iptables规则链_IP

iptables 处理数据包流程:

iptables规则引流 iptables规则链_IP_02

  1. 当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达 INPUT 链。数据包到了 INPUT 链后,任何进程都会收到它。
  3. 本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达POSTROUTING 链输出。
  4. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD 链,然后到达 POSTROUTING 链输出。

iptables 安装

1、关闭 firewall
systemctl stop firewalld //关闭firewalld服务
systemctl disable firewalld //禁止firewalld开机自启动
2、安装 iptables
yum -y install iptables iptables-services
3、启动服务
systemctl start iptables.service
systemctl enable iptables.service
2 iptables 基本语法、数据包控制类型
语法构成
iptables  [-t 表名]  管理选项  [链名]  [匹配条件]  [-j 控制类型]
2.1 常用的控制类型

控制类型

作用

ACCEPT

允许数据包通过

DROP

直接丢弃数据包,不给出任何回应消息

REJECT

拒绝数据包通过,会给数据发送端一个响应信息

LOG

在/varlog/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包

SNAT

修改数据包的源地址

DNAT

修改数据包的目的地址

MASQUERADE

伪装成—个非固定公网IP地址

2.2 管理选项

管理选 项

用法示例

-A

在指定链末尾追加一条iptables -A INPUT(操作)

-l

在指定链中插入一条新的,未指定序号默认作为第一条iptables -l INPUT(操作)

-p

指定默认规则iptables -P OUTPUT ACCEPT(操作)

-D

删除iptables -t nat -D INPUT(操作)

-p

服务名称

-R

修改、替换某一条规则iptables -t nat -R INPUT(操作)

-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 filter -A INPUT -p icmp -j REJECT  ##拒绝所有主机ping本主机
iptables -t filter -D INPUT -p icmp -j REJECT   ##删除上面这条命令

iptables规则引流 iptables规则链_网络_03

iptables规则引流 iptables规则链_linux_04

添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。

若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。

iptables -t filter -A INPUT -p tcp -j ACCEPT    //允许任何主机tcp
iptables -I INPUT -p udp -j ACCEPT  //允许任何主机udp   //可以不用加-t filter 因为默认就filter

查看已有的防火墙规则时

iptables [-t表名] -n -L [链名] |[-- line-numbers]
或者
iptables - [vn]L
 iptables -L INPUT  --line-numbers

iptables规则引流 iptables规则链_iptables规则引流_05

清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT

iptables -F INPUT
设置默认策略

iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许

iptables [-t表名] -P <链名> <控制类型>
iptables -P INPUT DROP      输入后没显示  清除所有规则之后生效,因为下面只剩下DROP  添加远程端口22
 
iptables -P FORWARD DROP
#一般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单
 
 
[root@localhost ~]# iptables -t filter -P FORWARD DROP
[root@localhost ~]# iptables -P OUTPUT ACCEPT
-F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要手动进行修改。

-P设置了DROP后,使用-F一定要小心!防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决。

如果不写表名和链名,默认清空filter表中所有链里的所有规则。
规则的匹配
通用匹配
可直接使用,不依赖于其他条件或扩展,包括网络协议 ,IP地址,网络接口等条件
协议匹配: -p协议名 .
地址匹配: -s源地址、-d目的地址					可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.80.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP
 
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT           //感叹号”!”表示取反
隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。 端口匹配: --sport 源端口、–dport 目的端口,可以是个别端口、端口范围

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">--sport</span> <span style="color:#116644">1000</span>          匹配源端口是1000的数据包
<span style="color:#0000cc">--sport</span> <span style="color:#116644">1000</span>:3000     匹配源端口是1000-3000的数据包
<span style="color:#0000cc">--sport</span> :3000         匹配源端口是3000及以下的数据包
<span style="color:#0000cc">--sport</span> <span style="color:#116644">1000</span>:         匹配源端口是1000及以上的数据包</span></span>
注意:
--sport和--dport 必须配合-p <协议类型>使用

端口可以使用的范围 0-65535
iptables -A INPUT -P tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp  --sport 10000:30000 -j REJECT 
#10000到30000 全部被拒
  • TCP标记匹配: --tcp- flags TCP标记
"Echo-Request”(代码为8)表示请求
"Echo- -Reply”(代码为0)表示回显
"Dest ination-Unreachable" (代码为3)表示目标不可达
关于其它可用的ICMP 协议类型,可以执行“iptables -P icmp -h”命令,查看帮助信息
iptables -A INPUT -P icmp -- icmp-type 8 -j DROP	禁止其它主机ping本机
iptables -A INPUT -P icmp --icmp-type 0 -j ACCEPT	允许本机ping其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT  	当本机ping不通其它主机时提示目标不可达
iptables -A INPUT -P icmp -j REJECT				此时其它主机需要配置关于icmp协议的控制类型为REJECT
  • icmp-type 8 -j DROP 禁止其它主机ping本机
    iptables -A INPUT -P icmp --icmp-type 0 -j ACCEPT 允许本机ping其它主机
    iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT 当本机ping不通其它主机时提示目标不可达
    iptables -A INPUT -P icmp -j REJECT 此时其它主机需要配置关于icmp协议的控制类型为REJECT