iptables服务

  • ➤前述:
  • ➤netfilter/iptables的关系
  • ➤四表五链
  • ➤四表:
  • ➤五链
  • ➤总结:表里有链,链里有规则
  • ➤数据包到达防火墙时,规则表之间的优先顺序:
  • ➤规则链之间的配置顺序
  • ➤规则链内的匹配顺序:
  • ➤ iptables 命令行配置方法
  • ➤iptables的安装
  • ➤命令格式:
  • ➤参数说明
  • ►实例
  • ➤规则的匹配条件


➤前述:

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

➤netfilter/iptables的关系

➤netfilter:属于"内核态" 的防火墙功能体系,是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

➤iptables:属于"用户态"的防火墙功能体系,是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录

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

iptables 数据流路径 iptables在哪个目录_表名

➤四表五链

➤四表:

raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT PREROUTING
mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT.OUTPUT.FORWARD.PREROUTINGPOS.TROUTING
nat表:负责网络地址转换,用来修改数据源包中的源、目标IP地址或端口。包含三个规则链,OUTPUT.PREROUTINGPOS.TROUTING
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT.FORWARD.OUTPUT

➤五链

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

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

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

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

在iptable 的四个规则标准,mangle表和raw表的应用相对较少

iptables 数据流路径 iptables在哪个目录_表名_02

➤数据包到达防火墙时,规则表之间的优先顺序:

raw > mangle > nat > filter

➤规则链之间的配置顺序

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

➤规则链内的匹配顺序:

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

➤ iptables 命令行配置方法

➤iptables的安装

centos7默认使用firewalld防火墙,没有安装iptables. 需要关闭firewalld.

systemctl stop firewalld
systemctl disable firewalld.service
yum -y install iptables iptables-services
systemctl start iptables

➤命令格式:

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

➤参数说明

不指定表名时,默认指filter表
不指定链名时,默认指定表内所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型使用大写字母,其余均为小写
常用的管理选项:
-A: 在指定链的末尾追加一条新的规则
-I: 在指定链的开头中插入一条新的规则
-R: 修改替换指定链中的某一条规则
-P: 设置指定链的默认策略
-D: 删除指定链的策略
-F: 清空指定链的所有策略
-L: 列出指定链中所有规则
-j:  执行目标
-p: 协议
-n: 使用数字形式显示输出结果[如显示IP地址而不是主机名]
-v: 显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers: 查看规则时,显示规则的序号
常用的控制类型:
ACCEPT:允许数据包通过
DROP: 直接丢弃数据包
REJECT: 拒绝数据包通过
DNAT :修改数据包的目的地址
SNAT :修改数据包的源地址
MASQUERADE :伪装成一个非固定公网IP地址
LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

►实例

►查看规则列表

iptables [-t 表名] -n -L [链名] [--line-numbers]
iptables -[vn]L  #不能写成-Ln
iptables -n -L --line-numbers

iptables 数据流路径 iptables在哪个目录_IP_03

►添加新的规则

iptables -t filter -A INPUT -p icmp -j REJECT
如不指定表则默认时filter表

iptables 数据流路径 iptables在哪个目录_iptables_04


#禁止ping通 ,过滤入站所有icmp的数据包,就是不让icmp协议的数据包通过

iptables -I INPUT -p tcp --dport 22 -j DROP
拒绝TCP的22的目的端口

iptables 数据流路径 iptables在哪个目录_IP_05


iptables 数据流路径 iptables在哪个目录_linux_06


登陆本机查看结果

►在第二行增加一条规则
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT

iptables 数据流路径 iptables在哪个目录_iptables_07

►删除第一条规则[从下网上删]

iptables -D INPUT 1

iptables 数据流路径 iptables在哪个目录_linux_08

iptables -D INPUT -p icmp -j REJECT

若规则列表中有多余相同的规则,按内容匹配只删除的序列号最小的

►设置默认策略
iptables [-t 表名] -P <链名> <控制类型>

iptables -P INPUT DROP

iptables 数据流路径 iptables在哪个目录_linux_09

►清空规则
iptables [-t 表名] -F [链名]

iptables -F INPUT

iptables 数据流路径 iptables在哪个目录_iptables_10

1.-F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要是手进行修改
2.-P设置了DROP后,使用-F一定要注意,推荐先增加一条放通22
3.如果不写表名和链名,默认清空filter表中所有链里的所有规则

➤规则的匹配条件

1.通用匹配

可直接使用,不依赖于其他的条件按或扩展,包括网络协议、IP地址、网络接口等条件
协议匹配 -p 协议名
地址匹配 -s 源地址、-d 目的地址
接口匹配 -i 入站网卡、-o 出站网卡
iptables -A FORWARD ! -p icmp -j ACCEPT #除了icmp协议,其他所有都可以转发
iptables -A INPUT -s 192.168.78.22 -j DROP  #来自192.168.78.22 的入站数据包直接丢弃
iptables -I INPUT -i ens33 -s 192.168.78.0/24 -j DROP  #来自192.168.78.0网段的网卡的入站数据包直接丢弃

iptables 数据流路径 iptables在哪个目录_IP_11

2.隐含匹配

要求以特定的协议匹配作为前提[包括端口、TCP标记、ICMP类型等条件]
端口匹配:–sport 源端口 --dport目的端口
--sport 100 指定
--sport 100:200 指定100~200
--sport :100 100以下
--sport 100: 100以上
iptables -A INPUT -p tcp --dport 1:5 -j ACCEPT #行尾添加入站数据包类型为tcp协议前往端口1到5的数据可以通过

iptables 数据流路径 iptables在哪个目录_表名_12

  1. TCP标记匹配
--tcp-flags TCP标记
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT #插入一条入站网卡为tcp数据包标记为 syn,rst,ack中的 syn数据可以通过

iptables 数据流路径 iptables在哪个目录_表名_13

  1. ICMP类型匹配
--icmp-type ICMP类型[可以是字符串及数字代码]
Echo-Request[请求] 代码为8
Echo-Reply[回显] 代码为0
Destination-Unreachable[目标不可达] 代码为3
iptables -A INPUT -p icmp -j REJECT
iptables -I INPUT -p icmp --icmp-type 8 -j DROP # 禁止其他主机Ping 本机
iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT #允许本机Ping 其他主机
iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其他主机显示不可达

server1:

iptables 数据流路径 iptables在哪个目录_表名_14


iptables 数据流路径 iptables在哪个目录_表名_15

server2:

iptables 数据流路径 iptables在哪个目录_linux_16

iptables 数据流路径 iptables在哪个目录_linux_17

  1. 显示匹配
要求以-m模块模式的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配
-m multiport --sport 源端口列表
-m mulitiport --dport 目的端口列表

注意:
ftp : 20(数据端口) 21(控制端口)ssh :22DNS: 53apache-tomcat:8080

iptables -A INPUT -p tcp -m multiport --dport 8080,22,21,20 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT

iptables 数据流路径 iptables在哪个目录_linux_18

6.IP范围匹配

-m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.xxx.xxx-192.168.xxx.xxx -j DROP
iptables -A FORWARD -p udp -m iprange --dst-range 192.168.1.xxx-192.168.1.xxx -j DROP

7.MAC地址匹配

-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

8.状态匹配

-m state --state 连接状态
常见的连接状态
NEW 与任何连接无关的,还没开始连接
ESTABLISHED 响应请求或者已创建连接的
RELATED 衍生的已有连接
INVALID 不能被识别属于哪个连接或没有任何状态
iptables -A FORWARD -m state --state ESTABLISHED;RELATED -p -tcp ! --syn -j DROP