一、iptables防火墙

1、iptables概述

  • Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables 组成
  • 主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口等信息的处理上。

2、netfilter 和 iptables

短信防火墙 iptables 脚本 防火墙iptables 详解_linux

①、netfilter

netfilter属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

②、iptables
iptables属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。
是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。

③、netfilter/iptables
netfilter/iptables后期简称为iptables。
iptables是基于内核的防火墙,其中内置了raw、mangle、nat和 filter 四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

3、四表五链

  • 规则表的作用:容纳各种规则链
  • 规则链的作用:容纳各种防火墙规则
  • 总结:表里有链,链里有规则

①、四表
raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。

mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。

nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。

filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

在 iptables 的四个规则表中,mangle 表和 raw 表的应用相对减少

②、五链
INPUT:处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT:处理出站数据包,一般不在此链上做配置。
FORWARD:处理转发数据包,匹配流经本机的数据包。
PREROUTING链:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网中的80端口映射到路由器外网端口上。
POSTROUTING链:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网

③、规则表的匹配顺序

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_02

④、规则链之间的匹配顺序
主机型防火墙

入站数据(来自外界的数据包,且目标地址是防火墙本机)
PREROUTING --> INPUT --> 本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包)
本机的应用程序 --> OUTPUT --> POSTROUTING
网络型防火墙

转发数据(需要经过防火墙转发的数据包)
PREROUTING --> FORWARD --> POSTROUTING
规则链内的匹配顺序

自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_03

4、iptables的安装

  • CentOS 7默认使用firewalld防火墙,没有安装 iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装 iptables

短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_04

5、iptables防火墙的配置方法

①、命令行配置格式

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_05

②、注意事项

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

③、常用的控制类型

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_06

④、常用的管理选项

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_07

⑤、匹配条件

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_08

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

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_09

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

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_10

  • TCP标记匹配

短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_11

  • ICMP类型匹配

短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_12

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

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_13

  • IP范围匹配

IP范围匹配: -m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
#禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包

  • 状态匹配

短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_14

6、SNAT原理与应用

①、SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)

②、SNAT原理

修改数据包的源地址。

③、SNAT转换前提条件

局域网各主机已正确设置IP地址、子网掩码、默认网关地址
Linux网关开启IP路由转发

④、路由转发开启方式

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_15

⑤、SNAT转换

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_16

SNAT转换1:固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
内网IP 出站 外网网卡 外网IP或地址池

SNAT转换2:非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE

⑥、小知识扩展

  • 一个IP地址做SNAT转换,一般可以让内网 100到200 台主机实现上网

SNAT案例

**1.5.1实验准备

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_17


短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_18

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_19


短信防火墙 iptables 脚本 防火墙iptables 详解_网络_20

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_21

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_22


短信防火墙 iptables 脚本 防火墙iptables 详解_短信防火墙 iptables 脚本_23


短信防火墙 iptables 脚本 防火墙iptables 详解_linux_24


短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_25


短信防火墙 iptables 脚本 防火墙iptables 详解_linux_26


短信防火墙 iptables 脚本 防火墙iptables 详解_服务器_27


短信防火墙 iptables 脚本 防火墙iptables 详解_linux_28


短信防火墙 iptables 脚本 防火墙iptables 详解_linux_29


短信防火墙 iptables 脚本 防火墙iptables 详解_短信防火墙 iptables 脚本_30

7、DNAT原理与应用

2.1、DNAT 应用环境

在Internet中发布位于局域网内的服务器

2.2、DNAT原理

修改数据包的目的地址。

2.3、DNAT转换前提条件

局域网的服务器能够访问Internet
网关的外网地址有正确的DNS解析记录
Linux网关开启IP路由转发

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_31

2.4、DNAT转换1:发布内网的Web服务

#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11
 或
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11


入站 外网网卡 外网IP

内网服务器IP

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20

2.5、DNAT转换2:发布时修改目标端口

#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22#在外网环境中使用SSH测试
 ssh -p 250 root@12.0.0.1yum -y install net-tools #若没有 ifconfig 命令可提前使用 yum 进行安装
 ifconfig ens33

2.6、在内网上配置

短信防火墙 iptables 脚本 防火墙iptables 详解_短信防火墙 iptables 脚本_32

2.7、在网关服务器添加iptables规则

#先清空规则
 [root@localhost yum.repos.d]#iptables -F -t nat
 #添加规则
 [root@localhost yum.repos.d]#iptables -t nat -A PREROUTING -i ens38 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.102#查看规则
 [root@localhost yum.repos.d]#iptables -nL -t nat
 Chain PREROUTING (policy ACCEPT)
 target prot opt source destination
 DNAT tcp – 0.0.0.0/0 12.0.0.1 tcp dpt:80 to:192.168.100.102Chain INPUT (policy ACCEPT)
 target prot opt source destinationChain OUTPUT (policy ACCEPT)
 target prot opt source destinationChain POSTROUTING (policy ACCEPT)
 target prot opt source destination

2.8、测试外网是否能访问内网

#在外网服务器上
 [root@localhost ~]# curl 12.0.0.1
#在内网服务器上
 [root@localhost yum.repos.d]# tail /etc/httpd/logs/access_log
 127.0.0.1 - - [02/Nov/2021:18:05:31 +0800] “GET / HTTP/1.1” 403 4897 “-” “curl/7.29.0”
 12.0.0.100 - - [02/Nov/2021:18:19:45 +0800] “GET / HTTP/1.1” 403 4897 “-” “curl/7.29.0”

短信防火墙 iptables 脚本 防火墙iptables 详解_短信防火墙 iptables 脚本_33

⑤、小知识扩展

  • 主机型防火墙:主要使用 INPUT、OUTPUT 链,设置规则时一般要详细的指定到端口
  • 网络型防火墙:主要使用 FORWARD 链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可

8、防火墙规则的备份和还原

①、导出(备份)所有表的规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BToLeGZV-1646408827182)(C:\Users\XTC\AppData\Roaming\Typora\typora-user-images\1645433022514.png)]

②、导入(还原)规则

iptables-restore < /opt/ipt.txt
将iptables规则文件保存在 /etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则
 iptables-save > /etc/sysconfig/iptables
 systemctl stop iptables #停止iptables服务会清空掉所有表的规则
 systemctl start iptables #启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则

9、tcpdump—Linux抓包 监听网络流量命令

tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

1)tcp∶ ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

(2)-i ens33 ∶只抓经过接口ens33的包

(3)-t ∶不显示时间戳

(4)-s 0 ∶ 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包

(5)-c 100 ∶只抓取100个数据包

(6)dst port ! 22 ∶不抓取目标端口是22的数据包

(7)src net 192.168.1.0/24 ∶数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机

(8)-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析

1、tcpdump简介

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。

tcpdump命令工作时先要把网卡的工作模式切换到混杂模式。所以tcpdump命令需要以root身份运行。tcpdump命令是linux下使用最广泛的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工作原理。
2、格式

短信防火墙 iptables 脚本 防火墙iptables 详解_IP_34

3、常用参数

短信防火墙 iptables 脚本 防火墙iptables 详解_网络_35


短信防火墙 iptables 脚本 防火墙iptables 详解_linux_36

4、示例

短信防火墙 iptables 脚本 防火墙iptables 详解_linux_37