1 安全防御概述

1.1 常见的攻击手段

  1. 拒绝服务(DOS): 通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接。常见解决手段将提供服务的机器配置的足够多,性能足够好 或者 使用云服务商的流量清洗服务功能(在访问企业页面时会导入到云服务商的清洗池中,云服务商的清洗池会对请求进行TCP握手,云服务商会分析握手进行判断哪些请求是正常,哪些请求是恶意的;经过云服务商的清洗后分析出的正常流量会导入到企业的服务中)。
  2. 分布式拒绝服务(DDOS)类攻击:与简单的DoS攻击相比,DDoS攻击发生的频率更高。因为僵尸机器和僵尸网络在暗网上很容易获得;与DoS相比,DDoS类攻击得逞的概率更高。常见解决手段使用执行深度数据包检查;应用流量清理过滤器;抑制ICMP数据包的系统响应率;执行定期流量分析;及时关注IP 的安全声誉;严格执行JavaScript解析;验证IP来源;禁用monlist;实施访问控制;加强员工网络安全意识教育,不点击可疑链接和邮件;正确使用Web应用程序防火墙。
  • UDP洪水

这种DDoS与SYN洪水攻击非常相似,利用用户数据报协议(UDP)和UDP数据包。攻击者向用户已打开端口发送大量的垃圾 UDP数据包。主机以为这些是合法的UDP通信尝试,试图在该端口上侦听,如果没找到数据包,主机将别无选择的回复ICMP无法抵达。这种情况会一直持续下去,直至主机的网络资源被耗尽。

  • NTP放大

在网络时间协议(NTP)攻击中,威胁分子会向NTP服务器发送大量的UDP数据包,以达到DoS的目的。当NTP服务器的资源无法支撑解析所收到的查询请求时,它就会崩溃。

  • HTTP洪水

这是一种非常有效的DDoS攻击方式,利用了GET或POST响应机制。攻击者向服务器发送尽可能多的合法GET或POST查询,迫使服务器回答每一个查询。这种资源密集型回复过程会耗尽服务器资源,从而导致服务中断。

  • Fast Flux

Fast Flux攻击目的主要用于掩盖僵尸网络,严格上来讲它不是一种攻击,而是僵尸网络运营商用来逃避检测的一种规避方法。借助Fast Flux,威胁分子可以在受感染的主机之间快速切换,从而使他们无法被检测工具发觉。

  1. 口令破解: 常用攻击手法俗称“跑字典”,暴力破解,常用解决方案设置登录错误次数限制,并且将密码规则设置的足够复杂和足够长度。(SSH协议)
  2. 已知漏洞: 通过已知漏洞进行数据获取或提权,是存在紧急漏洞或者是高危漏洞,就很容易被利用,通过漏洞能够实现多种攻击,比如盗取数据库信息,植入木马、篡改页面等,常见解决手段定时更新防御性补丁,升级更新相关系统可以修复一部分的已知漏洞和BUG。
  3. 欺骗权限用户: 又称社会工程学,通过欺骗权限用户得到授权资格的方式。以人的因素攻击信息安全链中,最薄弱的环节,通过欺骗的手段,入侵被骗者的计算机系统的一种攻击方式。
  4. 网站篡改:常见的攻击,很多时候我们浏览网站的时候发现网站变成了违法网站,但是域名还是之前的,其实这时候网站已经被篡改了,常见的就是企业网站、政府网站等,被篡改以后不仅影响形象,同时也会造成业务停滞
  5. 钓鱼邮件:比较常见的攻击方式,或许我们每个人的邮箱中都躺着几个钓鱼邮件,钓鱼邮件中存在恶意链接,常见的就是模仿正规网站,比如qq盗号,就是模仿qq登录的网站,一旦输入了账号密码,就会被盗取信息,如果是银行卡支付的界面就更危险了,一旦输入了取款密码,资金就会被盗用,所以在陌生的网站千万不要输入账号密码
  6. 木马后门:黑客通过在网站系统中植入木马后门能够轻易地再次对木马实现利用,就相当于在你家门上弄了一个备用钥匙,想要进出就非常轻松了

1.2 常见的安全防御设备

1.2.1 基础类防火墙: 主要实现包过滤防火墙

这类是有硬件处理、软件处理等,其主要功能实现是限制对 IP:Port 的访问。基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。FW可以拦截低层攻击行为,但对应用层的深层攻击行为无能为力。 FW部署位置一般为外联出口或者区域性出口位置,对内外流量进行安全隔离。部署方式常见如下 :

基础类防火墙是介于在外网和内网之间的安全设备,用于过滤外网的数据包信息。例如可以访问80,443的端口,但是不能访问 3306 的端口。基础类防火墙会书写对应的规则,通过规则匹配的方式去放行或者拒绝对应的连接,到达安全赋予的目的。

互联网中发起的数据报文无外乎是TCP或者是UDP,那么数据报文就是有一定是特征,例如端口,IP地址,数据包状态。基础类防火墙就是通过这些特征来进行相应的放行和过滤操作。以人的因素攻击信息安全链中,最薄弱的环节,通过欺骗的手段,入侵被骗者的计算机系统的一种攻击方式。

1.2.2 IDS 类防火墙: 入侵检测系统,提供报告和事后监督为主

此类产品基本上以旁路为主,特点是不阻断任何网络访问,主要以提供报告和事后监督为主,少量的类似产品还提供TCP阻断等功能,但少有使用。

IDS 类防火墙会放在网络的网关处,所有数据包的经过,所有数据包的流向,都会被IDS 类防火墙监控到。并不会在事发的时候进行拒绝或者其他的操作。

1.2.3 IPS 类防火墙: 入侵防御系统,分析数据包内容,根据模式匹配去阻断非法访问

解决了IDS无法阻断的问题,基本上以在线模式为主,系统提供多个端口,以透明模式工作。在一些传统防火墙的新产品中也提供了类似功能,其特点是可以分析到数据包的内容,解决传统防火墙只能工作在4层以下的问题。和IDS一样,IPS也要像防病毒系统定义N种已知的攻击模式,并主要通过模式匹配去阻断非法访问,致命缺点在于不能主动的学习攻击方式,对于模式库中不能识别出来的攻击,默认策略是允许 访问的! IPS类设备,常被串接在主干路上,对内外网异常流量进行监控处理,部署位置常见如下 :

IPS 功能就是分析数据包的内容,根据模式匹配,阻断非法访问。几乎所有的服务功能都能做,但是不过精确,简而言之就是全而不精,所以就是出现后面的主动安全类防火墙。

1.2.4 UTM类安全设备

是以上三者的结合体,按照IDC提出“统一威胁管理”的概念来看,UTM是将防病毒、入侵检测和防火墙安全设备划归到一起“统一管理”的新类别。 IDC将防病毒、防火墙和入侵检测等概念融合到被称为统一威胁管理的新类别中,该概念引起了业界的广泛重视,并推动了以整合式安全设备为代表的市场细分的诞生。由IDC提出的UTM是指由硬件、软件和网络技术组成的具有专门用途的设备,它主要提供一项或多项安全功能,将多种安全特性集成于一个硬设备里,构成一个标准的统一管理平台。 由于性能要求出众,导致造价一般比较高,目前一般只有大型企业会有使用。 UTM的优点主要有以下几条 1.整合所带来的成本降低(一身兼多职嘛!) 2.降低信息安全工作强度 (减轻管理员负担) 3.降低技术复杂度 UTM也不能一劳永逸的解决所有安全问题,总结下来,有如下缺点 1.网关防御的弊端 网关防御在防范外部威胁的时候非常有效,但是在面对内部威胁的时候就无法发挥作用了。有很多资料表明造成组织信息资产损失的威胁大部分来自于组织内部,所以以网关型防御为主的UTM设备目前尚不是解决安全问题的万灵药。 2.过度集成带来的风险 3.性能和稳定性

1.2.5 主动安全类防火墙: 对特定服务类型进行专项防御,常见设备有 WAF、DAF

和前面的产品均不同,主动安全产品的特点是协议针对性非常强,比如WAF就是专门负责HTTP协议的安全处理,DAF就是专门负责数据库Sql 查询类的安全处理。在主动安全产品中通常会处理到应用级的访问流程。对于不认识的业务访问全部隔离(以下以WAF为重点说明这一类安全设备)。

WAF:Web应用防护系统(Web Application Firewall, 简称:WAF)代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题。与传统防火墙不同,WAF工作在应用层,因此对Web应用防护具有先天的技术优势。基于对Web应用业务和逻辑的深刻理解,WAF对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护。

主动安全类可以理解为 IPS 类下的子类,都是这个子类又十分的庞大。IPS 设备可以理解为各种流量都能进行监控和规则匹配,但是不精。而主动安全类设备就是专门处理某一类服务访问的规则匹配和监控报警。WAF 就是Web应用防火墙,DAF 就是数据库应用防火墙。

因为是专精的防火墙,所以会对一些已知的漏洞,或者是刚爆发的漏洞更新的速度会比较快,防御的手段也是会比较完善。

小总结:

在IDS类、IPS类 和主动安全类防火墙都是需要企业付费进行购买服务后,由对应的防火墙厂家提供对应的技术支持,并不需要太多的管理的。而基础类防火墙是最底层的限制也是最有效的防御手段,Linux系统就是iptables 和 firewalld 服务。

2 防火墙(基础类)

2.1 何为防火墙

防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。

工作在主机边缘或者网络边缘处对数据报文进行检测,并且能够根据事先定义好的规则,对数据报文 进行相应处理(放行,删除,拒绝)的模块。防火墙一般都是防进不防出,进来的所有数据报文都任务是不安全的,都需要防火墙过滤一遍,出去的数据报文,基本上认为是安全的。

软件防火墙是工作在内核的最外围 ( 或者是安装在内核以及应用空间的中间层 ) ,即通过机器的所有流量都需要经过防火墙。作用:信息安全防护。

2.2 防火墙的分类

构造:

  • 硬件:深信服,网御(联想),华为,华三,启明星辰,安恒
  • 软件:Windows 自带的防火墙,Linux 自带的 iptables

工作机制:

  • 包过滤防火墙:源地址SIP,目的地址DIP,源端口SPORT,目的端口DPORT,IP层所承载的上层协议的协议号

  • 应用层防火墙:URL,Hostname

模块:

  • Linux 本身的 iptables。

    • 应用态:iptables(配置防火墙的工具,是netfilter的配置工具),内核态:netfilter(真正防火墙生效)。
    • 扩展:和 ipvs 类似,应用态:ipvsadm,内核态:ipvs。
    • CentOS 6使用的是 iptables 应用态,而CentOS 7使用的是 firewalld 应用态,但操作的底层依旧是 netfilter。firewalld 分类方式比较简单,但是iptables 更加便于理解。

iptables 工作结构

众多的路由规则(Rule)和预设的规则(policy)组成了一个功能链(chain),多个链组成一个表,多个表就组成了防火墙iptables。
最常用的就是filter表,nat表。

iptables 历经的构造变化

内核版本 内核态 用户态
kernel 2.0.x firewall ipfw
kernel 2.2.x firewall ipchains
kernel 2.4.x netfilter iptables(CentOS 6/CentOS 7都是可以工作的)
kernel 3.13.x netfilter firewal

2.3 iptables 的原理

参考文献:[ https://blog.csdn.net/weixin_45186298/article/details/122910466 ]

四表五链功能性介绍

iptables是(4张)表的集合:filter、nat、mangle、raw

表是(5条)链的集合:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

  1. INPUT

客户端发起连接到Apache服务器的时候,数据报文到服务器的网卡处,首先判断 Router Table 的路由表信息,判断该用户的请求是不是本机的,如果不是则丢弃;如果是本机就会交给 netfilter 进行下一步处理。netfilter 会寻找匹配相应的规则,例如:如果目标端口是80的话,就允许放行,这样用户的数据报文就可以到 Http 应用进行处理并得到响应数据报文。

即 INPUT (入站)链。iptables 的规则就是写在 链上的。可以理解为所有入站的数据报文都要经过 iptables 的 INPUT 链,才能到达上层的用户空间。这就要看 INPUT 链的规则是如何编写的,需要匹配规则,如果是放行就放行,如果是拒绝就是拒绝。

  1. OUTPUT

当用户在服务器上操作时,执行 curl 命令请求到 WebServer 的时候,数据报文会向到 netfilter 进行处理,netfilter 将数据报文先后转发到服务器的网卡处,通过 Router Table 路由表中进行转发到 WebServer 进行处理。则 netfilter 的 OUTPUT 链就是用来处理出站的规则匹配。

OUTPUT (出站)链的主要功能就是对机器出去的数据报文进行对应的过滤操作。

  1. FORWORD

将Linux服务器充当是路由器。并且Linux 服务器开启 net.ipv4.ip_forward = 1 路由转发功能,当 Client 客户端发起请求到目标地址是 WebServer,Client 发送的数据包会到路由器(Linux服务器)eth0网卡,因为开启了路由转发功能,所以会将数据包转发到 eth1网卡。只要涉及到转发,那么就会经过 netfilter 的 FORWORD 链。

FORWORD (转发)链的主要功能就是处理机器的转发数据报文进行规则匹配。

  1. PREROUTING

PREROUTING 链在还没有路由表判断之前就对数据报文进行对应的修改。

PREROUTING (路由前)链翻译过来就是路由表之前对数据报文处理的一个接口

  1. POSTROUTING

POSTROUTING 是先经过路由表判断之后,才到POSTROUTING 进行下一步的处理。

POSTROUTING (路由后)链翻译过来就是路由表之后对数据报文处理的一个接口

链的作用是承载防火墙的规则,链则是存放在表中。

规则链:承载防火墙规则

处理入站数据包:INPUT

处理出站数据包:OUTPUT

处理转发数据包:FORWARD

在进行路由选择前应用规则(处理数据包):修改目标地址 PREROUTING

在进行路由选择后应用规则(处理数据包):修改源地址 POSTROUTING

规则表:承载防火墙链

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

  • 一旦我们的数据包经过防火墙以后,正常情况下会对数据包进行跟踪,跟踪会消耗资源。可以通过 raw 表将这些数据包进行跳出,不进行状态跟踪。

mangle 表:为数据包设置标记,例如:TTL MARK

  • 可以在数据包打上固定标签的 mangle 表

nat 表:修改数据包中的源、目的IP地址或者端口(实现地址转换)

  • 功能可以有端口映射,SNAT,DNAT

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

  • 基础类防火墙最主要的表,会对数据包进行过滤

主要的是 nat 表和 filter 表,raw 表和mangle 表的使用较少。

防火墙链表结构

不同表下面拥有的链也是不同的。只要知道要做的防火墙规则是怎么样的,只需要匹配对应的功能,再来选择对应的入站和出站。这样就知道 netfilter 的规则是写在哪张表的哪条链上。(红色标记是重点),例如在NAT表中的PREROUTING 链和 POSTROUTING 链是各自实现SNAT和DNAT的功能。

2.4 防火墙顺序

① 防火墙是一层一层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的;

② 如果匹配上规则,即明确表明阻止还是通过,此时数据包就不再向下匹配新规则了;

③ 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,则按照默认策略进行处理;

④ 防火墙的默认规则是对应的链的所有的规则执行完成后才会执行的;

规则匹配顺序:

  • 按顺序依次由上至下检查,匹配即停止(LOG策略 [ 相当于打了一个日志,并不做任何处理 ] 例外)
  • 若找不到相匹配规则,则按该链的默认策略(Default)处理

表应用顺序: raw > mangle > nat > filter

链应用顺序

  • 入站:PREROUTING > INPUT
  • 出站:OUTPUT > POSTROUTING
  • 转发:PREROUTING > FORWARD > POSTROUTING

数据链表匹配顺序:

  1. 网络A入站到应用程序顺序:网络A→raw-PREROUTING→mangle-PREROUTING→nat-PREROUTING→RouteTable→mangle-INPUT→filter-INPUT→应用程序
  2. 出战到网络B顺序:路由选择→raw-OUTPUT→mangle-OUTPUT→nat-OUTPUT→filter-OUTPUT→mangle-POSTROUTING→nat-POSTROUTING→网络B
  3. 网络A转发网络B:网络A→raw-PREROUTING→mangle-PREROUTING→nat-PREROUTING→RouteTable→mangle-FORWARD→filter-FORWARD→RouteTable→mangle-POSTROUTING→nat-POSTROUTING→网络B

进来标记转换过滤标记,出去也一样

2.5 iptables 语法规则

2.5.1 书写规则

语法构成

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

几个注意事项

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

指定的表要有相对应的链,才能进行操作

2.5.2 常见动作类型

  • ACCEPT :允许通过
  • DROP :直接丢弃,不给出任何回应
  • REJECT :拒绝通过,必要时会给出提示
  • LOG :记录日志信息,然后传给下一条规则继续匹配
  • SNAT :修改数据包源地址
  • DNAT :修改数据包目的地址
  • REDIRECT :重定向

SNAT 作用是内网用户通过同一个公网IP,访问公网的能力。

DNAT 作用是将公网中的访问映射到内网的服务器上

2.5.3 常见选项

类别 选项 用途
添加新的规则 -A 在链的末尾追加一条规则
-I 在链的开头(或者指定序号)插入一条规则
查看规则列表 -L 列出所有的规则条目
-n 以数字形式形式地址,端口等信息
-v 以更加详细的方式显示规则信息(显示当前过滤的数据包和过滤的字节数)
–line-numbers 查看规则时,显示规则的序号
删除、清空规则 -D 删除链内指定序号(或者内容)的一条规则
-F 清空所有的规则
设置默认策略 -P 为指定的链设置默认规则

示例:添加新的规则

#指定filter表中的INPUT入站链的末尾添加,协议为TCP执行的动作是ACCEPT允许通过
iptables -t filter -A INPUT -p tcp -j ACCEPT#如果没有写表名的话,默认是filter表
#指定filter表中的INPUT入站链开头添加,协议为UDP执行的动作是ACCEPT允许通过
iptables -I INPUT -p udp -j ACCEPT#指定filter表中的INTPUT入站链第2个序号上添加,协议为ICMP执行的动作是ACCEPT允许通过
iptables -I INPUT 2 -p icmp -j ACCEPT

示例:查看规则列表

iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

示例:删除,清空规则

# 删除filter表的INPUT链的编号3的规则
iptables -D INPUT 3
iptables -n -L INPUT
# 清空所有的规则(默认是filter表)
iptables -F

示例:设置默认策略

iptables -t filter -P FORWORD DROP
iptables -P OUTPUT ACCEPT

操作 iptables 防火墙

#CentOS 6打开防火墙
service iptables start
chkconfig iptables on#CentOS 7打开防火墙
systemctl enable --now firewalld###清空所有的规则
$ iptables -F
$ iptables -L
Chain INPUT (policy ACCEPT) #policy ACCEPT就是默认规则
target     prot opt source               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destination$ iptables -t filter -A INPUT -p tcp -j ACCEPT
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
#pkts  这条规则过滤的数据报文的大小
#bytes 这条规则过滤的数据报文的字节大小
num   pkts bytes target     prot opt in     out     source               destination
1      190 10288 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 240 packets, 25488 bytes)
num   pkts bytes target     prot opt in     out     source               destination$ iptables -t filter -I INPUT -p udp -j ACCEPT
$ iptables -vnL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
2     1711 86776 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 124 packets, 12560 bytes)
num   pkts bytes target     prot opt in     out     source               destination
## -I 默认是插入链的第一行,-A 默认是插入链的最后一行
$ iptables -t filter -A INPUT -p icmp -j ACCEPT
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
2     2121  109K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
3        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 20 packets, 2224 bytes)
num   pkts bytes target     prot opt in     out     source               destination#指定序号插入链的规则
$ iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        1   229 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3     2443  126K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
4        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 9 packets, 1016 bytes)
num   pkts bytes target     prot opt in     out     source               destination#删除规则(删除固定规则)
$ iptables -t filter -D INPUT 4
$ iptables -vnL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        1   229 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3     2959  153K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 10 packets, 1088 bytes)
num   pkts bytes target     prot opt in     out     source               destination#删除规则(删除所有规则)
$ iptables -t filter -F
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 108 packets, 6240 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 103 packets, 10584 bytes)
num   pkts bytes target     prot opt in     out     source               destination#设置默认规则
#安装Httpd服务并开启服务
#CentOS 6执行
$ yum install -y httpd && service httpd start && chkconfig httpd on
#CentOS 7执行
$ yum install -y httpd && systemctl enable --now httpd
#需求:放行80端口和放行22端口,其他的全部拒绝
#--dport指定目标端口
$ iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
$ iptables -t filter -P INPUT DROP
$ iptables -vnL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
2      265 14104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 9 packets, 968 bytes)
num   pkts bytes target     prot opt in     out     source               destination#测试ICMP协议是否可以ping通该机器
$ ping -c 1 -W 1 10.0.0.101
PING 10.0.0.101 (10.0.0.101) 56(84) bytes of data.--- 10.0.0.101 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

注意:默认规则只有两种执行动作,1.ACCEPT,2.DROP

书写规则的时候,应该将匹配规则频繁的放在链的最上面。是十分重要的优化策略。这样消耗的性能就较少。

2.5.4 匹配类型

通用匹配

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

隐含匹配

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

显式匹配

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

三者的区别就是使用的条件不一致而已。

2.5.4.1 通用匹配

协议匹配 :-p 协议名

地址匹配 :-s 源地址、-d 目的地址

接口匹配 :-i 入站网卡、-o 出站网卡

可以相互重叠使用,加的条件越多,匹配则越精确。

示例:

#在filter表中最后插入FORWARD转发链中源地址是192.168.1.11,执行动作是REJECT拒绝并告警
iptables -A FORWARD -s 192.168.1.11 -j REJECT #在filter表中开头插入INPUT入站链中源网段是10.20.30.0/24,执行动作是DROP丢弃
iptables -I INPUT -s 10.20.30.0/24 -j DROP #在filter表中开头插入INPUT入站链协议为ICMP,执行动作是DROP丢弃
iptables -I INPUT -p icmp -j DROP #在filter表中最后插入FORWARD转发链协议非ICMP的,执行动作是ACCEPT允许通过
#即除了ICMP协议执行动作是拒绝,其他的协议则是允许通过
iptables -A FORWARD -p ! icmp -j ACCEPT#在filter表中最后插入INPUT入站链,入站网卡是eth1并且源网段是172.16.0.0/12,执行动作是DROP丢弃
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

范例:DROP 和 REJECT 的区别

#Web服务器的设置
$ yum install -y httpd && systemctl enable --now httpd
$ echo "123456" > /var/www/html/index.html
$ curl 10.0.0.102
123456
#Web服务器的iptables规则设置为DROP丢弃
$ iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
### DROP是不需要消耗资源,因为过来的数据包直接丢弃,并不需要返回信息给对方#客户端访问
$ curl 10.0.0.102
#连接会超时#Web服务器的iptables规则设置为REJECT拒绝
$ iptables -F
$ iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 356 packets, 21600 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 342 packets, 35392 bytes)
num   pkts bytes target     prot opt in     out     source               destination#客户端再次访问
$ curl 10.0.0.102
curl: (7) Failed connect to 10.0.0.102:80; Connection refused
### REJECT是需要一定的资源,因为需要返回信息给客户端

2.5.4.2 隐含匹配

常用的隐含匹配条件:

端口匹配:–sport 源端口、–dport 目的端口

ICMP类型匹配:–icmp-type ICMP类型

示例

#在filter表的FORWARD转发链最后插入源地址是192.168.4.0/24,协议是TCP,协议端口为53,执行动作是ACCEPT放行
# UDP 53号端口即DNS服务
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT#在filter表的INPUT入站链最后插入协议为TCP,端口号为20和21,执行动作ACCEPT放行
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT#在filter表的INPUT入站链最后插入协议为ICMP,ICMP类型为8,执行动作DROP丢弃
iptables -A INPUT -p icmp --icmp-type 8 -j DROP#在filter表的INPUT入站链最后插入协议为ICMP,ICMP类型为0,执行动作ACCEPT放行
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT#在filter表的INPUT入站链最后插入协议为ICMP,ICMP类型为3,执行动作ACCEPT放行
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT#在filter表的INPUT入站链最后插入协议为ICMP,执行动作为DROP丢弃
iptables -A INPUT -p icmp -j DROP

范例:实现机器可以ping别的机器,但别的机器不能ping本机

$ iptables -F
$ iptables -A INPUT -p icmp -j DROP
#测试
$ ping -c 1 -W 1 10.0.0.102
PING 10.0.0.102 (10.0.0.102) 56(84) bytes of data.--- 10.0.0.102 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms#只要添加以下两条规则即可
$ iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
$ iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     icmp --  anywhere             anywhere             icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere             icmp echo-reply
DROP       icmp --  anywhere             anywhereChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destination$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 150 packets, 8304 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 3
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 0
3        1    84 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 184 packets, 19024 bytes)
num   pkts bytes target     prot opt in     out     source               destination#这样就实现了机器可以ping别的机器,但别的机器不能ping本机
$ ping -c 1 -W 1 10.0.0.103
PING 10.0.0.103 (10.0.0.103) 56(84) bytes of data.
64 bytes from 10.0.0.103: icmp_seq=1 ttl=64 time=0.533 ms--- 10.0.0.103 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.533/0.533/0.533/0.000 ms$ ping -c 1 -W 1 10.0.0.102
PING 10.0.0.102 (10.0.0.102) 56(84) bytes of data.--- 10.0.0.102 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

2.5.4.3 显式匹配

  • 多端口匹配

    • -m multiport --sport 源端口列表
    • -m multiport --dport 目的端口列表
  • IP 范围匹配

    • -m iprange --src-range IP 范围
  • MAC 地址匹配

    • -m mac –mac1-source MAC 地址
  • 状态匹配

    • -m state --state 连接状态
#在filter表的INPUT入站链中最后插入协议为TCP,引入的模块是multiport,
#目标端口是25,80,110,143,执行动作是ACCEPT放行
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
# 这样做的目的就可以实现该四个端口都可以添加再同一个编号中,即若这4个端口的访问流量都非常大,
# 之前的操作才能一条条添加,这不太好;使用 -m multiport 的模块就可以同时将这4个端口添加到
# 同一个规则中,岂不美哉。#在filter表的FORWARD转发链中最后插入协议为TCP,引入模块是iprange
#源地址范围是192.168.4.21 到 192.168.4.28,执行动作是ACCEPT放行
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT #在filter表的INPUT入站链中最后插入协议为TCP,引入的模块是mac
#源MAC地址是00:0c:29:c0:55:3f,执行动作是DROP丢弃
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP #在filter表的INPUT入站链中默认执行动作DROP丢弃
iptables -P INPUT DROP #在filter表的INPUT入站链中开头插入协议为TCP,引入的模块是multiport,
#目标端口是80 到 82,85,执行动作是ACCEPT放行
iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT #在filter表的INPUT入站链中开头插入协议为TCP,引用的模块是stats,
#连接的是NEW,ESTABLISHED,RELATED,则执行动作是ACCEPT放行
#NEW 新建连接;ESTABLISHED 有数据参数;RELATED 相关联
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT#示例:
#表示在INPUT入站链中开头插入协议为TCP,端口号为21,引用模块stats
#连接的是NEW 新建连接的话,则执行动作是DROP丢弃,这样就可以保留之前旧用户的连接请求
#拒绝新用户的新的连接,从而等旧用户请求处理完毕后,再实现对后续软件的升级
iptables -I INPUT -p tcp -dport 21 -m state --state NEW -j DROP

2.5.4.4 SNAT 规则

SNAT 策略的典型应用环境: 局域网主机共享单个公网 IP 地址接入 Internet

SNAT 策略的原理

  • 源地址转换,Source Network Address Translation
  • 修改数据包的源地址

SNAT 网络拓扑

未启用 SNAT

未启用 SNAT,并且网关服务器开启路由转发,那么在发送数据报文时会直接发送出去,但是,私有地址是在公网中无法找到的。

启用 SNAT

启用 SNAT,并且网关服务器开启路由转发,那么在发送数据报文时会将其源地址进行修改,当Web服务器发送过来的数据报文时,网关服务器再利用 SNAT 根据去的时候那个源和目的转换的记录更改的目的地址。

启动 SNAT 转换代码记录

前提条件

  • 局域网各主机正确设置 IP 地址/子网掩码
  • 局域网各主机正确设置默认网关地址
  • Linux 网关支持 IP 路由转发

实现方法:编写 SNAT 转换规则

POSTROUTING 路由后
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
2.5.4.4.1 实验操作:SNAT 规则

实验环境

#10.10.10.11 作为内网

#10.10.10.12 作为网关服务器(和10.10.10.11一块网卡,并且还与本机NAT模式 = 两块网卡)

  • 配置10.10.10.11机器网络
#10.10.10.11 操作
#修改网卡配置
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="10.10.10.11"
PREFIX="24"
#主要配置网卡地址指向网关服务器并且配置DNS服务器
GATEWAY="10.10.10.12"
DNS1=223.5.5.5
DNS2=223.6.6.6#重启网络服务
$ systemctl restart network
#查看路由表
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.10.12     0.0.0.0         UG    0      0        0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0#开启图形化功能
  • 配置10.10.10.12机器网络
#10.10.10.12 操作
#修改网卡配置(配置公网网卡)
$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="10.0.0.102"
PREFIX="24"
GATEWAY="10.0.0.2"
DNS1="114.114.114.114"
DNS2="8.8.8.8"
IPV6_PRIVACY="no"#重启网络服务
$ systemctl restart network
#查看路由表
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth1
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
#访问公网网址
$ ping -c 1 -W 1 www.baidu.com
PING www.baidu.com (183.232.231.174) 56(84) bytes of data.
64 bytes from 183.232.231.174: icmp_seq=1 ttl=128 time=16.7 ms--- www.baidu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 16.736/16.736/16.736/0.000 ms#开启路由转发功能
$ cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF
$ sysctl -p
net.ipv4.ip_forward = 1#开启防火墙功能
#CentOS6
$ service iptables start && chkconfig iptables on
#CentOS7
$ systemctl stop firewalld && yum install -y iptables-services #清空防火墙规则并进行配置
$ iptables -F
$ iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j SNAT --to-source 10.0.0.102
$ iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destinationChain INPUT (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  10.10.10.0/24        anywhere             to:10.0.0.102#保存iptables规则
$ systemctl enable iptables && systemctl start iptables
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
  • 测试 10.10.10.11 机器就可以进行上网
$ ping -c 1 -W 1 www.baidu.com
PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=128 time=15.9 ms--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.937/15.937/15.937/0.000 ms
#已经可以正常的访问了
$ curl -kv www.baidu.com

MASQUERADE —— 地址伪装

  • 适用于外网 IP 地址非固定的情况
  • 对于 ADSL 拨号连接,接口通常为 ppp0、ppp1
  • 将 SNAT 规则改为 MASQUERADE 即可

实现代码

POSTROUTING 路由后
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
2.5.4.4.2 实验操作:MASQUERADE 地址伪装实验

#利用2.5.4.4.1的环境

#在网关服务器进行操作
#清空iptables规则
$ iptables -t nat -F
#配置iptables规则
$ iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
$ iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination0     0 MASQUERADE  all  --  *      eth1    10.10.10.0/24        0.0.0.0/0#在10.10.10.11再次执行
$ ping -c 1 -W 1 www.baidu.com
PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=1 ttl=128 time=24.9 ms--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 24.900/24.900/24.900/0.000 ms
$ curl -v www.baidu.com
#网络依旧可以正常访问

浏览器打开外网网址,可以正常访问

2.5.4.5 DNAT 规则

DNAT 策略的典型应用环境: 在 Internet 中发布位于企业局域网内的服务器

DNAT 策略的原理

  • 目标地址转换,Destination Network Address Translation
  • 修改数据包的目标地址

DNAT 策略

启动 DNAT 转换代码记录

前提条件

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

实现方法:编写 DNAT 转换规则

PREROUTING 路由前
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
2.5.4.5.1 实验操作:DNAT 规则

实验环境:

  • 10.10.10.11 是内网的Web服务器
  • 10.10.10.12 是网关服务器(20.20.20.12 模拟公网IP)
  • 20.20.20.13 是公网的Client

10.10.10.11 实验操作

#Web服务器
$ yum install -y httpd
$ systemctl enable --now httpd
#CentOS 6操作:service httpd start && chkconfig httpd on#配置网页信息
$ echo "This is Apache Server" >> /var/www/html/index.html
#访问
$ curl 127.0.0.1
This is Apache Server#网关配置
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="10.10.10.11"
PREFIX="24"
#配置网关
GATEWAY="10.10.10.12"$ systemctl restart network
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.10.12     0.0.0.0         UG    0      0        0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

10.10.10.12 实验操作

#开启路由转发功能
$ cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF
$ sysctl -p
net.ipv4.ip_forward = 1#开启防火墙功能
#CentOS6
$ service iptables start && chkconfig iptables on
#CentOS7
$ systemctl stop firewalld
$ yum install -y iptables-services #清空防火墙规则
$ iptables -F
#配置iptables规则
# eth1 是公网网卡的入站网卡
$ iptables -t nat -A PREROUTING -i eth1 -d 20.20.20.0/24 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.11
$ iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination0     0 DNAT       tcp  --  eth1   *       0.0.0.0/0            20.20.20.0/24        tcp dpt:80 to:10.10.10.11Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination#保存配置
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]#配置网络
$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="20.20.20.12"
PREFIX="24"
IPV6_PRIVACY="no"$ systemctl restart network
$ ip addr show
...省略部分输出...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:70:8a:d6 brd ff:ff:ff:ff:ff:ffinet 10.10.10.12/24 brd 10.10.10.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe70:8ad6/64 scope linkvalid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:70:8a:e0 brd ff:ff:ff:ff:ff:ffinet 20.20.20.12/24 brd 20.20.20.255 scope global eth1valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe70:8ae0/64 scope linkvalid_lft forever preferred_lft forever

20.20.20.13 实验操作

#配置网络
$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="20.20.20.13"
PREFIX="24"$ systemctl restart network
$ ip addr show

测试访问

#在20.20.20.13 Client 端访问
$ curl 20.20.20.12
This is Apache Server
2.5.4.5.2 SNAT & DNAT 为什么分别使用对应的POSTROUTING和PREROUTING

2.5.4 iptables 选项小总结

参数 作用
-P 设置默认策略:iptables -P INPUT(DROP)
-F 清空所有的规则(清空规则链)
-L 列出所有的规则条目(查看规则链)
-n 以数字形式形式地址,端口等信息
-v 以更加详细的方式形式规则信息
–line-numbers 查看规则时,显示规则的序号
-A 在规则链的末尾加入新规则
-I num 在规则链的头部(或者指定序号)加入新规则
-D num 删除链内指定序号(或者内容)的一条规则删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
–dport num 匹配目标端口号
–sport num 匹配来源端口号

2.6 防火墙脚本

导出(备份)规则: iptables-save 工具,可结合重定向输出保存到指定文件

导入(还原)规则: iptables-restore 工具,可结合重定向输入指定规则来源

范例:

$ iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 68 packets, 4400 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 40 packets, 3696 bytes)
num   pkts bytes target     prot opt in     out     source               destination
#持久化保存
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]#备份iptables规则
$ iptables-save > 1.iptables
$ cat 1.iptables
# Generated by iptables-save v1.4.21 on Sun Sep  4 12:35:43 2022
*nat
:PREROUTING ACCEPT [2:458]
:INPUT ACCEPT [2:458]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sun Sep  4 12:35:43 2022
# Generated by iptables-save v1.4.21 on Sun Sep  4 12:35:43 2022
*filter
:INPUT ACCEPT [168:11226]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [97:8648]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Sun Sep  4 12:35:43 2022#清空规则
$ iptables -F && iptables -vnL
#还原规则
$ iptables-restore < 1.iptables && iptables -vnL

iptables 服务

脚本位置:/etc/init.d/iptables

规则文件位置:/etc/sysconfig/iptables

防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重 设。要保存规则以便今,请使用以下命令:后载入 /usr/sbin/service iptables save 保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时) 被应用

Centos7 使用 Iptables 为 netfilter 应用层工具

$ systemctl disable --now firewalld
$ systemctl status firewalld
#rpm -e --nodeps firewalld
$ yum -y install iptables-services
$ systemctl start iptables && systemctl enable iptables$ iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -vnL --line-number
Chain INPUT (policy ACCEPT 14 packets, 896 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 8 packets, 800 bytes)
num   pkts bytes target     prot opt in     out     source               destination
$ service iptables save

常用 Iptables 配置脚本分享

$ vim new.iptalbes#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
function support_distro(){ if [ -z "`egrep -i "centos" /etc/issue`" ];then echo "Sorry,iptables script only support centos system now." exit 1 fi
}support_distro
echo "====================iptablesconfigure====================="
# Only support CentOS system# 获取 SSH 端口
if grep "^Port" /etc/ssh/sshd_config>/dev/null;then sshdport=`grep "^Port" /etc/ssh/sshd_config | sed "s/Port\s//g" `
else sshdport=22
fi# 获取 DNS 服务器 IP
if [ -s /etc/resolv.conf ];then nameserver1=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'` nameserver2=`cat /etc/resolv.conf |grep nameserver |awk 'NR==2{print $2 }'`
fiIPT="/sbin/iptables"# 删除已有规则
$IPT --delete-chain
$IPT --flush# 禁止进,允许出,允许回环网卡
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$IPT -A INPUT -i lo -j ACCEPT# 允许已建立的或相关连接的通行
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# 限制 80 端口单个 IP 的最大连接数为 10
# 可以简单的防御DOS攻击
# $IPT -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP# 允许 80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接
# 生产环境可以自己定义
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT# 允许 SSH 端口的连接,脚本自动侦测目前的 SSH 端口,否则默认为 22 端口
$IPT -A INPUT -p tcp -m tcp --dport $sshdport -j ACCEPT# 允许 ping
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j# 允许 DNS
[ ! -z "$nameserver1" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver1 --dport 53 -j ACCEPT
[ ! -z "$nameserver2" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver2# 保存规则并重启 IPTABLES
service iptables save
service iptables restart
echo "====================iptables configure completed============================"$ bash new.iptables

【Linux集群教程】12 集群安全防御 - 安全防御概述和Linux防火墙相关推荐

  1. mysql集群 教程_mysql集群搭建教程-基础篇

    计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根据步骤一步步的 ...

  2. linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6

    目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...

  3. Rimworld Mod制作教程12 集群AI机制介绍

    文章目录 简介 什么是集群AI? RimWorld源码中有没有一个节点用于集群AI? 职责节点 集群AI如何与职责节点联系? 集群AI LordToil与Toil的关系? 集群AI的状态机 简介 相信 ...

  4. Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...

  5. 实战生产环境:kubeadmin安装1.13.3最新版k8s集群教程

    2019年3月6日:出版安装kubeadmin部署k8s集群教程 本次安装采用kubeadmin ! 安装的k8s版本为1.13.3版,是当前最新版本! 本篇文章,所使用的任何镜像和yaml我都会发一 ...

  6. 集群-大规模Linux集群部署-MPI集群搭建与MPI编程

    一.集群的概念及其相关技术 集群计算机是指利用高速通信网络将一组高档工作站或PC按某种结构连接起来,在并行程序设计甚至可视化人机交互集成开发环境支持下,统一调度,协调处理,实现高效并行处理的系统,利用 ...

  7. Linux Redis集群搭建与集群客户端实现

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本:3.2.1 Redis已经成功安装,安装路径为/home/idata/yangf ...

  8. 虚拟机本地搭建Hadoop集群教程

    Hadoop概述 狭义下Hadoop是Apache的一套开源软件,用java实现,广义上是围绕Hadoop打造的大数据生态圈 http://hadoop.apache.org Hadoop核心组件: ...

  9. linux ajp集群,Apache应用集群——AJP方式

    Apache集群:ajp集群方式 1.下载并安装Apache服务器 2.修改配置文件conf/httpd.conf #修改安装路径 Define SRVROOT "/httpd-2.4.29 ...

  10. elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)

    一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...

最新文章

  1. Asynchronous CDI Events
  2. SQL 基础知识梳理1
  3. windows上的几个常用端口号
  4. 大数据学习路线copy自淘宝
  5. 数据有偏差,照样能学对!20年前就有这么强的算法了?
  6. iis的web站点配置
  7. python语言程序设计是干什么的-Python语言程序设计
  8. 51单片机波特率计算c语言,51单片机波特率怎么算?51单片机波特率计算公式
  9. 【定制项目】【M13】【数据监控 + 数据分析 + 可视化大屏】- 关键技术 python flask + pandas + echarts + excel
  10. MySQL两种存储引擎: MyISAM和InnoDB 简单总结
  11. Vue之鼠标悬停显示页面加载时间
  12. 文字的纵向显示的问题 cdc drawtext
  13. 聊天机器人技术分析综述
  14. uva 1471 Defense Lines (降低复杂度)
  15. 如何去除PDF的水印?【9种方法总结】
  16. iOS 各视频播放器评价~总结
  17. 光流法——Opencv
  18. jdk8新特性之for循环
  19. 每日新闻:英特尔发布第九代处理器;腾讯与英国公司用AI改善帕金森病;华为申请电池专利;中兴为印度提供5G技术;微软投资Grab...
  20. 怎样寻找好的心理医生

热门文章

  1. axure没有团队页签_使用Axure管理团队项目以及分享原型
  2. 5G,建设得怎么样了?
  3. 对自己未来职业的规划
  4. 银联国际推出开发者平台,创新升级技术服务能力
  5. 网易高层赴京庆功 高调宣扬网游业绩
  6. 从字节跳动离职后,拿到探探、趣头条、爱奇艺、小红书、15家公司的 offer
  7. 消除数据库表中的重复组
  8. rabbitmq安装问题汇总
  9. 推荐系统︱基于bandit的主题冷启动在线学习策略
  10. 外研社写作阅读大赛整理