目录
一、iptables
Linux系统的防火墙主要是IP信息包的过滤,由netfilter组和iptables组成。
是在网络层上工作,对于tcp/ip的数据包进行过滤和限制。
1.1 防火墙的概述
主要由netfilter和iptables组成。
①netfilter:属于内核态的防火墙功能体系
它是内核的一部分,由数据包过滤表组成。
②iptables:属于用户态的防火墙管理体系
是一种用来管理Linux防火墙的命令程序,通常位于/sbin/iptables文件下
1.2 iptables表、链的概述
iptables的作用是为包过滤机制的实现提供规则,通过制定不同的各种规则去告诉如何处理某些协议特征的数据包。
iptabels采用了表和链的分层结构,每一个表中都会有不同的链每个链中会去制定不同的规则去限制数据包。
1.2.1 四表
四表 | 功能 |
raw | 确定是否对该数据包进行状态跟踪。其中包括两个规则链 :OUTPUT PREROUTING |
mangle | 修改数据包内容,对数据包进行标记。其中包括五个规则链:INPUT OUTPUT FORIARD PREROUTING POSTROUTING |
nat | 负责网络地址的转换,用来修改数据包中的源、目的IP地址或者端口。其中包含三个规则链:OUTPUT PREROUTING POSTROUTING |
filter | 负责过滤数据包,确定是否放行该数据包。其中包含三个数据链: INPUT FORWARD OUTPUT |
在iptables的四表中,mangle和raw用的较少。每个规则表中要去按照顺序进行
raw→mangle→nat→filter
1.2.2 五链
五链 | 功能 |
INPUT | 处理入站的数据包,匹配目标IP为本机的数据包 |
OUTPUT | 处理出站的数据包 |
FORWARD | 处理转发数据包,匹配经过本机的数据包 |
PREROUTING | 在进行路由器选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上 |
POSTROUTING | 在路由器选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网 |
规则链的匹配顺序:
入站数据(外界的数据进入本机):PREROUTING→INPUT→本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包):本机应用程序→OUTPUT→POSTROUTING
转发数据:PREROUTING→FORWARD→POSTROUTING
●规则链的匹配顺序是自上向下按顺序一次检查,找到相匹配的规则。若在链中找不到相匹配的规则则按照默认的处理
1.3 匹配流程
入站数据流向:
来自外界的数据包到达防火墙之后,首先会被PREROUTING链处理判断是否修改数据包地址,然后路由器选择如果数据包的目的地址是防火墙本机那么就会传递给INPUT链处理决定是否通过。
转发数据流向:
来自外界的数据包进入防火墙之后首先被PREROUTING链处理,路由器进行判断如果目的地址是其它外部的地址则传递给FORWARD链进行处理,最后交给POSTROUTING链判断是否修改数据包的地址等等
出站数据流向:
防火墙本机向外地址发送数据包时首先进行路由器选择确定路径后再经过OUTPUT链处理,再经过POSTROUTING链去决定是否修改数据包的地址等
二、iptabels的安装
2.1 安装的前提条件
centos7 默认用的是firewall防火墙,需要提前关闭防火墙并且安装iptabels
①关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
②安装iptabels设置成开机自启
yum -y install iptables iptables-services
systemctl start iptables.service
systemctl enable iptables.service
2.2 iptabels防火墙的配置
2.2.1 基本语法
iptables 【-t 表名】 管理选项 【链名】 【匹配条件】 【-j控制类型】
①管理选项
-A | 在指定链的末尾追加一条新的规则 |
-I | 在指定链的开头插入一条新的规则 |
-R | 修改指定链中的某条规则 |
-P | 设置指定链的默认策略 |
-D | 删除指定链中的某一条规则 |
-F | 清空指定链中的规则,若没指定链名则清除表中的所有链 |
-L | 列出指定链中的规则 |
-n | 以数字的形式输出结果 |
-v | 显示详细的信息 |
-Z | 清空链的计数器 |
-X | 清空自定义的链的规则 |
②控制类型
ACCEPT | 允许数据包通过 |
PROP | 直接丢弃数据包 |
REJECT | 拒绝数据包通过 |
LOG | 在var/log/messages文件记录日志, |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装一个非固定公网IP地址 |
2.3 添加规则
iptables -t filter -A INPUT -p icmp -j REJECT (不允许任何主机去ping 此主机)
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT ( 指定tcp端口22,添加的位置允许主机ssh端口经过本主机)
拒绝数据包通过tcp 22端口
因为规则是安装顺序去执行的所以设置完拒绝端口连接会断开,要想重新连接上必须去删除相应的规则
2.4 查看规则表
①iptables 【-t 表名】 -n -L 【链名】【--line-numbers】
②iptables -vnL
③iptables -n -L --line-numbers
2.5 删除、清空规则
①删除规则
iptables -D 链名 第几条规则
②清空规则
iptables -F 链名
-F仅是清空链中的规则不会影响默认的规则
2.6 设置默认策略
默认策略是每条链中规则的最后一项,如果一条链中找不到一条规则则会去执行默认策略。
默认策略的类型分为:ACCEPT和DROP
格式:iptables -t表 -P链名 控制类型
在iptables -t filter -P OUTPUT ACCEPT(设置在出站时允许通过)
2.7 通用匹配
也被称为常规匹配,可以独立使用。常见的通用匹配包括:协议匹配、地址匹配、网络接口匹配
①协议匹配
以“-p 协议”形式定义,如tcp、udp、icmp或者all
2.7.1 通用匹配
协议匹配:-p协议名
地址匹配:-s 源地址、-d目的地址
接口匹配:-i 入站网卡、-o 出战网卡
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.58.88 -j DROP
iptables -I INPUT -i ens33 -s 192.168.58.0/24 -j DROP
例:禁止192.168.58.88主机访问本机
禁止192.168.58.0/24访问本机
2.7.2 隐含匹配
端口匹配:--sport源端口、--dport目的端口
--sport 1000;2000 匹配段端口是1000-2000
--sport:2000 匹配源端口2000以下的数据包
--sport2000: 匹配源端口2000以上的数据包
iptables -A INPUT -p tcp --sport 1000:2000 -j REJECT
iptables -I FORWARD -d 192.168.111.0/24 -p tcp --dport 24500:24600 -j DROP
①TCP标记匹配: --tcp-flags
iptables -I INPUT-i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
(丢弃SYN请求包,放行其他包)
②ICMP类型匹配:--icmp-type
"Echo- Request" (代码为8)表示请求
"Echo- Reply"(代码为0)表示回显
"Dest ination-Unreachable”(代码为3)表示目标不可达
iptables -A INPUT -p icmp --icmp-type 8 -j DROP (禁止其他主机ping本机)
iptables -A INPUT -P icmp --icmp-type o -j ACCEPT (允许本机ping其它主机)
2.7.3 显示匹配
“-m”的形式指出类型,包括多端口、MAC地址、IP范围、数据包状态
①多端口匹配:
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 22 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
②IP范围匹配
-m iprange --src -range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.58.100-192.168.58.150 -j DROP
禁止转发源地址是192.168.58.100到192.168.58.150的udp数据包
③MAC地址匹配
-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source MAC地址 -j DROP
禁止某个MAC地址的数据进行转发
总结
1. iptables的基本理论分为:四表、五链(按照顺序自上而下的执行)
2.iptables的基本用法:iptables -t表名 管理选项 链名 匹配条件 -j 控制类型
3.iptables的规则匹配条件:通用匹配、隐含匹配、显示匹配