21、linux之iptables学习

1.什么是防火墙

应用态:iptables

内核态:netfilter

使用iptables 命令来操作netfilter,netfilter才是真正的防火墙匹配规则

在这里插入图片描述

2.防火墙的工作原理

简述:iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制
在这里插入图片描述

2.1.规则表

  • filter表:对数据进行过滤,根据具体的规则要决定如何处理一个数据包,包含三个链
  • nat表:主要用于修改数据包IP地址,端口号等信息,包含三个链
  • mangle表:主要用于修改数据包的TOS(Type Of Service,服务类型),TTL(Time To Live 生命周期),为数据包设置mark标记,包含五个链
  • raw表:对数据包进行状态跟踪

2.2.规则链

  • INPUT链:当防火墙收到放问本机地址的数据包(入站)时,应用此链中的规则
  • OUTPUT链:当防火墙本机向外发送数据包(出站),应用此链中的规则
  • FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)是,应用测链中的规则。
  • PREROUTING链:在对数据包做路由选择之前,应用测链中的规则。
  • POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

简述:其中INPUT,OUTPUT链主要用在“主机防火墙”中。即主要针对服务器本机保护的防火墙;而FORWARD,PREROUTING,POSTROUTING链多用在“网络型防火墙”中,例如使用Linux防火墙作为网关服务器在公司与Inetnet之间进行安全控制。

2.3.数据包过滤工作流程

在这里插入图片描述

链内部匹配规则:链内部的过滤遵循“匹配即停止”的原则,如果对比完整个链也没有找到和数据包匹配的规则,则会按照链的默认策略进行处理。

入站数据流向:数据包到达防火墙后首先被PREROUTING链处理(是否修改数据包地址等),然后进行路由选择(判断数据包发往何处),如果数据包的目标地址是防火墙本机(如:Internet用户访问网关的Web服务端口),那么内核将其传递给INPUT链进行处理(决定是否允许通过等)。

转发数据流向:来自外界的数据包到达防火墙后首先被PREROUTTING链处理,然后再进行路由选择;如果数据包的目标地址是其他的外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给FORWARD链进行处理(允许转发,拦截,丢弃),最后交给POSTROUTING链(是否修改数据包的地址等)进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链(是否修改数据包的地址等)进行处理。

3.Iptables语法规则

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
注意
	1.不指定表名时,默认指filter表
	2.不指定链名时,默认指表内的所有链
	3.除非设置链的默认策略,否则必须指定匹配条件
	4.选项、链名、控制类型使用大写字母,其余均为小写

3.1.常见的动作类型

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

3.2.查看规则列表

查看规则列表
 -L:列出所有的规则条目
 -n:已数字的形式显示地址,端口信息
 -v:已更详细的方式显示规则信息
 --line-numbers:查看规则时,显示规则序号
 
 # 查看所有的规则
 iptables -L -n
 # 查看指定表名的规则
 iptables -t nat -L -n -v

3.3.添加新的规则

—A: 在链的末尾添加新的规则
-I: 在链的开头添加新的规则
默认的时filter表
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT 2 -p icmp -j ACCEPT  # 在编号为2的头部添加一个规则

3.4.删除以及清空规则

-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
iptables -t nat -D INPUT 3
iptables -t filter -F

3.5.设置默认策略

-P:为指定的链设置默认规则
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT

3.6.备份和还原

持久化保存:
service iptables save

导出文件:
iptables-save > 1.iptables

还原文件:
iptables-resore < 1.iptables

3.7.总结

在这里插入图片描述

4.Iptables复杂的语法规则

4.1.通用匹配

可以直接使用,不依赖于其他条件或者扩展

包括网络协议,IP地址,网络接口等条件

协议地址:-p 协议名
地址匹配:-s 源地址 -d 目标地址
接口匹配:-i 入站网卡 -o 出站网卡

iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD -p ! icmp -j ACCEPT
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

4.2.隐含匹配

要求已特定的协议匹配作为前提

包含端口,TCP标记,ICMP类型等条件

常用的隐含匹配条件
	端口匹配:--sport 源端口、--dport 目的端口
	ICMP类型匹配:--icmp-type ICMP 类型
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

4.3.显示匹配

要求已“-m 扩展模块” 的形式明确指出类型

包括多端口,mac地址,IP范围,数据包状态等条件

常用的显示匹配条件
	多端口匹配:-m multiport --sport 源端口列表
			  -m multiport --dport 目的端口列表
	IP范围匹配:	-m iprange --src-range IP范围
    MAC地址匹配:-m mac –mac1-source MAC地址
    状态匹配:-m state --state 连接状态
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 j ACCEPT  
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
iptables -P INPUT DROP
iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

5.NAT表SNAT策略

应用环境:局域网主机共享单个公网IP地址接入Internet

原理:修改数据包的源地址

原理

在这里插入图片描述

环境准备

第一台电脑

IP 网卡 网卡模式
192.168.64.129 eth0 NAT
192.168.182.130 eth1 主机模式

第二台电脑

IP 网卡 网卡模式
192.168.182.131 eth0 主机模式

配置静态地址

DEVICE=eth0
HWADDR=00:0C:29:12:8F:7B
TYPE=Ethernet
UUID=8f842041-d5d1-4b0f-a021-67de410e00a7
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.64.129
NETMASK=255.255.255.0
GATEWAY=192.168.64.2
DNS1=8.8.8.8
DNS2=8.8.8.4


DEVICE=eth1
TYPE=Ethernet
UUID=8f842041-d5d1-4b0f-a021-67de410e00a7
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.182.130
NETMASK=255.255.255.0

DEVICE=eth0
HWADDR=00:0C:29:D7:E9:57
TYPE=Ethernet
UUID=688e7269-d719-4776-82ee-9055383c9c2f
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.182.131
NETMASK=255.255.255.0
GATEWAY=192.168.182.130
USERCTL=no
PEERDNS=yes
IPV6INIT=no
DNS1=8.8.8.8
DNS2=114.114.114.114

条件准备

 vim /etc/sysctl.conf
 修改为1
 然后:执行sysctl -p

在这里插入图片描述

最后执行如下语句

iptables -t nat -A POSTROUTING -s 192.168.182.0/24 -o eth0 -j SNAT --to-source 192.168.64.129
或者:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE 

6.NAT表的DNAT策略

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

DNAT策略的原理:
目标地址转换,Destination Network Address Translation 修改数据包的目标地址
在这里插入图片描述

iptables -t nat -A PREROUTING -i eth0 -d 192.168.64.129 -p tcp --dport 80 -j DNAT --to-destination 192.168.182.130

7.工作中遇到过的匹配规则

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22

iptables -t nat -A OUTPUT -p tcp  --dport 10350 -j DNAT --to 127.0.0.1:10003

猜你喜欢

转载自blog.csdn.net/weixin_43443216/article/details/108011238