IPTables防火墙介绍

目录

一、Linux防火墙基础

1、Linux包过滤防火墙

2、包过滤原理

二、iptables

1、安装与配置

2、规则链

3、规则表

4、匹配流程

三、iptables语法

1、语法构成

2、常见控制类型

3、常见选项

4、永久性保存修改的规则

5、提供状态化链接


iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个安全框架"才是真正的防火墙,这个框架的名字叫netflter。netfilter才是防火墙真正的安全框架(framework) ,netflter位于内核空间。iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables (下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables 会查找其对应的匹配规则。如果找不到,iptables将对其采取默认操作。

iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。

1、五张表: filter, nat, manglel (1) filter表:默认表,负责过滤数据包

(2) nat表:用于网络地址转换(IP、端口)

(3) mangle表:主要应用在修改数据包、流量整形、给数据包打标识

(4) raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少

(5) security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少

2、五条链:流量的方向 (1 ) input:匹配目标IP是本机的数据包,入站

(2) output:出口数据包,出站

(3) forward:匹配流经本机的数据包,转发

(4) prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口

(5) postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入Internet。

3、规则:基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不在继续向下检查、如果遇到不匹配的规则则会继续向下进行。

一、Linux防火墙基础
1、Linux包过滤防火墙
  • netfilter

    • Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能

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

  • iptables

    • 与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置

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

    • 称为Linux防火墙的“用户态”

2、包过滤原理
  • 主要是网络层,针对IP数据包

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

二、iptables
1、安装与配置
  • CentOS 7之后系统默认使用 Firealld 防火墙,这里如要使用 iptables 需要进行安装并停用 Fireawalld 防火墙

     [root@woniuyang ~]# systemctl stop firewalld
     [root@woniuyang ~]# systemctl disable firewalld
     Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
     Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
     [root@woniuyang ~]# yum -y install iptables iptables-services
     ​
     systemctl stop firewalld
     firewalld默认在没有设定规则的情况下,是拒绝所有流量
2、规则链
  • 规则的作用:对数据包进行过滤或处理

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

  • 链的分类依据:处理数据包的不同时机

  • 5种规则链

    • INPUT:处理入站数据包

    • OUTPUT:处理出站数据包

    • FORWARD:处理转发数据包

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

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

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

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

  • 4个规则表

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

    • mangle表:为数据包设置标记

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

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

image-20211223061910923

4、匹配流程
  • 规则表之间的顺序:raw→mangle→nat→filter

  • 规则链之间的顺序

    • 入站:PREROUTING→INPUT

    • 出站:OUTPUT→POSTROUTING

    • 转发:PREROUTING→FORWARD→POSTROUTING

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

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

  • 如果没有任何策略,则直接允许

三、iptables语法
1、语法构成
 iptables  [-t 表名]  选项  [链名]  [条件]  [-j 控制类型]
 举例:[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
  • 注意事项

    • 不指定表名时,默认指filter表

    • 不指定链名时,默认指表内的所有链

    • 除非设置链的默认策略,否则必须指定匹配条件

    • 选项、链名、控制类型使用大写字母,其余均为小写

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

类别选项用途
添加新的规则-A在链的末尾追加一条规则
-I在链的开头(或指定序号)插入一条规则
查看规则列表-L列出所有的规则条目
-n以数字形式显示地址、端口等信息
-v以更详细的方式显示规则信息
--line-numbers查看规则时,显示规则的序号
删除、清空规则-D删除链内指定序号(或内容)的一条规则
-F清空所有的规则
设置默认策略-P为指定的链设置默认规则
 #添加新规则
 [root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
 [root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
 [root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
 #查看规则
 [root@localhost ~]# iptables -nL --line-numbers
 Chain INPUT (policy ACCEPT)
 num  target     prot opt source               destination         
 1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           
 2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
 4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain FORWARD (policy ACCEPT)
 num  target     prot opt source               destination         
 1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           
 2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
 3    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain OUTPUT (policy ACCEPT)
 num  target     prot opt source               destination
 [root@localhost ~]# iptables -D INPUT 3        #指定序号删除规则
 ​
 #删除所有规则
 [root@localhost ~]# iptables -F
 [root@localhost ~]# iptables -t nat -F
 [root@localhost ~]# iptables -t mangle -F
 [root@localhost ~]# iptables -t raw -F
 #为指定的链设置默认规则(要么是允许,要么是丢弃)
 [root@localhost ~]# iptables -t filter -P FORWARD DROP
 [root@localhost ~]# iptables -P OUTPUT ACCEPT
  • 匹配条件

类别条件类型用法
通用匹配协议匹配-p 协议名
地址匹配-s 源地址、-d 目的地址
接口匹配-i 入站网卡、-o 出站网卡
隐含匹配端口匹配—sport 源端口、—dport 目的端口
TCP标记匹配—tcp-flags 检查范围 被设置的标记
ICMP类型匹配—icmp-type ICMP类型
显式匹配多端口匹配-m multiport —sports \—dports 端口列表
IP范围匹配-m iprange —src-range IP范围
MAC地址匹配-m mac —mac-source MAC地址
状态匹配-m state —state 连接状态 (NEW新连接、ESTABLISHED双向传输、RELATED新连接但前提是有链接、INVAILD未知链接,一般DROP)
 # “ ! ” 表示取反
 [root@localhost ~]# iptables -I INPUT -p icmp -j DROP
 [root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
 # -s 指定源地址
 [root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
 [root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP 
 # -i ens37    指定入站网卡
 [root@localhost ~]# iptables -A INPUT -i ens37 -s 192.168.0.0/16 -j DROP 
 [root@localhost ~]# iptables -A INPUT -i ens37 -s 10.0.0.0/8 -j DROP
 [root@localhost ~]# iptables -A INPUT -i ens37 -s 172.16.0.0/12 -j DROP
 # --dport 20:21 指定目标端口20和21
 [root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
 [root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
 # 指定ICMP类型
 [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
 [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
 [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
 [root@localhost ~]# iptables -A INPUT -p icmp -j DROP
 #指定目的范围端口
 [root@localhost ~]# iptables -P INPUT DROP
 [root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j  ACCEPT
 [root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
 #指定范围多端口,指定IP范围,指定源MAC
 [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
 [root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
 [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
4、永久性保存修改的规则
 [root@localhost ~]#iptables-save > /etc/sysconfig/iptables
5、提供状态化链接
 [root@localhost ~]# iptables -I FORWARD -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT

三、基本的命令原理

iptables -nL:将端口号以数字的形式显示默认表filter中的规则
 ​
 iptables -I INPUT -j DROP:所有入站流量全部丢弃,包括SSH请求(insect插入)
 iptables -I OUTPUT -j DROP:所有出站流量全部丢弃,包括SSH响应
 上述两条命令一旦执行:所有流量无法进来,所有流量无法出去,断网状态
 ​
 iptables -A INPUT -j DROP(add添加)
 iptables -A OUTPUT -j DROP
 iptables -I INPUT -p tcp --dport 22 -j ACCEPT:打开目标端口22,接受流经该端口的流量
 iptables -I INPUT -p tcp --dport 80 -j ACCEPT
 ​
 iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT:打开目标端口22,接受流经该端口的流量
 iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
 ​
 iptables -I INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT:打开多个端口
 ​
 防止DDOS攻击,设定一些数据的限制条件
 iptables -A INPUT -p tcp --dport 80 -m limit --1imit 25/minute --limit-burst 100 -j ACCEPT
 ​
 iptables -I INPUT -p icmp -j DROP
 iptables -I INPUT -p icmp -j REJECT
 iptables -I OUTPUT -p icmp -j DROP
 ​
 DRPO:直接丢失数据包,不会向源端做任何回复
 RESECT:拒绝接收数据包,并向源端发送拒绝响应
 ​
 iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
 iptables -I INPUT -p icmp --icmp-type echo-request -j REECT
 iptables -I OUTPUT 1 -p icmp --icmp-type echo-reply -j DROP
 ​
 iptables -LINPUT --line-numbers
 iptables -D INPUT 1
 ​
 #允许本地访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
 #通过这种场景的设置,可以最大可能避免反弹she11和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意指令。
 iptables -I OUTPUT -o ens33 -p tcp -d 192.168.179.1 --dport 8088 -j ACCEPT
 iptables -I INPUT -i ens33 -p tcp -s 192.168.179.1 --sport 8088 -j ACCEPT
 ​
 #本机端口转发:
 iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 80
 ​
 #远程端口转发:
 #需要确保端口转发功能是启用的
 vi /etc/sysct1.conf
 net.ipv4.ip_forward = 1
 sysctl -p /etc/sysct1.conf
 ​
 #PREROUTING上访问8888时,转发给目标服务器和目标端口
 #PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT
 iptables -t nat -A PREROUTING -d 192.168.179.1 -p tcp --dport 8888 -j DNAT --to-destination 192.168.179.2:8088
 iptables -t nat -A POSTROUTING -d 192.168.112.153 -p tcp --dport 8088 -j SNAT --to 192.168.179.1

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值