目录
[iptables filter表应用案例](#iptables filter表应用案例)
一、防火墙概述
1、防火墙分类:
逻辑上划分:防火墙可以大体分为主机防火墙和网络防火墙
物理上划分:防火墙可分为硬件防火墙和软件防火墙
-
硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护
-
软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用于单机系统或个人计算机中,不直接用于计算机网络中

2、iptables介绍:
iptables是什么?
iptables不是防火墙,是防火墙用户代理
用于把用户的安全设置添加到"安全框架"中
"安全框架"是防火墙
"安全框架"的名称为netfilter
netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块
iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
netfilter/iptables功能
netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的企业级硬件防火墙,能够实现如下功能:
数据包过滤,即防火墙
数据包重定向,即转发
网络地址转换,即可NAT
iptables工作依据------规则(rules)
iptables是按照规则(rules)来办事的,而规则就是管理员所定义的条件;规则一般定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。
规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、丢弃(DROP)等
配置防火墙主要工作就是对iptables规则进行添加、修改、删除等
iptables中链的概念
当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址。
我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内核中设置"关口",所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做"链"。

INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目标主机
PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往下一跳

iptables中表的概念
每个"规则链"上都设置了一串规则,这样的话,我们就可以把不同的"规则链"组合成能够完成某一特定功能集合分类,而这个集合分类我们就称为表,iptables中共有4张表
filter: 过滤功能,确定是否放行该数据包,属于真正防火墙
nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口
mangle: 对数据包进行重新封装功能,为数据包设置标记
raw: 确定是否对数据包进行跟踪
iptables中表链之间的关系
filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT
nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT

数据包流经iptables流程
iptables中表的优先级 : raw-mangle-nat-filter(由高至低)

#查看iptables配置
iptables -L -n -t filter

#-L:查看规则
#-n:以数字形式显示地址,端口等信息
#-t:指定表名
#-F:清空规则
二、编写防火墙规则
1、iptables语法结构:
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
规则组成:

制定iptables规则策略
黑名单:没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐
白名单:没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策略,推荐
制定iptables规则思路
选择一张表,此表决定了数据报文处理的方式
选择一条链,此链决定了数据报文流经哪些位置
选择合适的条件,此条件决定了对数据报文做何种条件匹配
选择处理数据报文的动作,制定相应的防火墙规则
2、iptables基础应用:
安装iptables-services
centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件,安装iptables-services后,将直接生成配置文件,便于配置保存
yum -y install iptables-services
systemctl start iptables.service
systemctl enable iptables.services
rpm -ql iptables-services

#保存iptables配置
iptables-save > /etc/sysconfig/iptables

#重载iptables配置
#iptables-restore < /etc/sysconfig/iptables

iptables链管理方法
-F, --flush [chain]:清空指定的规则链上的规则;
-Z, --zero [chain [rulenum]]:置零计数器;
注意:每个规则都有两个计数器
packets:被本规则所匹配到的所有报文的个数;
bytes:被本规则所匹配到的所有报文的大小之和;
-P, --policy制定链表的策略(ACCEPT|DROP)
iptables规则管理
-A, --append 追加新规则于指定链的尾部;
-I, --insert 插入新规则于指定链的指定位置,默认为首部;
-R, --replace 替换指定的规则为新的规则;
-D, --delete 根据规则编号或者规则本身删除规则;
iptables规则显示
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-n, --numeric:数字格式显示主机地址和端口号;
--line-numbers:列出规则时,显示其在链上的相应的编号;
iptables基本应用
#清除所有规则
#iptables -F

#修改链上默认策略
iptables -t filter -P INPUT DROP

#允许ssh远程连接

#允许http协议通过

#删除允许http协议通过

#删除指定编号的规则,1是规则编号

基本匹配使用选项及功能
-p 指定规则协议,tcp udp icmp all
-s 指定数据包的源地址,ip hostname
-d 指定目的地址
-i 输入接口
-o 输出接口
扩展匹配条件
-p tcp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
-p udp
--sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--icmp-type
0:echo-reply 允许其他主机ping
8:echo-request 允许ping其他主机
iptables filter表应用案例
#安装ssh,httpd.vsftp,添加一下规则

#问题1:本机无法访问其它主机,例如:ssh http等
#解决方法

#state追踪本机上的请求和响应之间的数据报文的状态。状态有五种:
INVALID、ESTABLISHED、NEW、RELATED、UNTRACKED.
--state state
NEW 新连接请求
ESTABLISHED 只要发送并接到应答,一个数据表的状态就从NEW变为ESTABLISHED,并且该状态会继续匹配这个连接后继数据包(连接态)
INVALID 无法识别的连接(无效态)
RELATED 相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接(衍生态)
#问题2:ftp客户端可以连接ftp服务器,但是看不到数据
#解决方法①:使用连接追踪模块

#找到IPTABLES_MODULES=""这行(第6行)

#启动服务时加载
②#配置标准流程:

3、iptables扩展匹配应用:
#-m icmp
#允许ping回应(echo-reply)

#-m multiport
#multiport:多端口

#在INPUT链中开放本机tcp 22,tcp80端口

#-m iprange
#iprange多ip地址(-src-range原地址范围,--dst-range目的地址范围)


#-m time
#time指定访问时间范围
#每天8:00-18:00

#每周1-5的8:00-18:00

#2020-1-10的18点到2022-1-10的18点

#-m comment 对规则进行备注说明(添加注释)
