前言:iptable基于内存的防火墙,添加规则后临时保存生效,机器重启后则失效;
添加规则后注意保存 :
iptables规则配置保存:
(1) 方法一:
# service iptables save
(2) 方法二:
# iptables-save > /etc/sysconfig/iptables注意:iptables-save是连在一起的,是一个命令,不是参数;
iptables-save 仅仅是列出当前设置,并不是将配置保存
历史介绍: linux 内核2.0 RedHat 5.1 ipfwadmin
linux 内核2.2 RedHat 7.x ipchains
linux 内核2.4 RedHat 9.x iptables
其实linux内核中运行的是 netfilter,用户通过iptables命令来调用 netfilter。
iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。
首先介绍iptables的结构:
iptables -> Tables -> Chains -> Rules.
简单地讲,tables由chains组成,而chains又由rules组成。
如果把linux当做网络防火墙的话,需要在执行iptables 之前激活ip数据包的转发功能。
因为普通的主机只能处理目标地址为自己的单播数据包,而防火墙需要把符合规则的、且目标地址为其他的机器的数据包进行转发,这样必须激活ip的转发功能(路由功能),激活命令|
echo"1">/proc/sys/net/ipv4/ip_forward 此命令一次有效
编辑 /etc/sysctl.conf 设置net.ipv4.ip_forward=1 执行命令 #sysctl -p 永久生效
一、iptables的表与链
iptables具有Filter, NAT, Mangle, Raw四种内建表:
1. Filter表(过滤)
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
INPUT链 – 处理来自外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。
2. NAT表
NAT表有三种内建链:
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。
3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4. Raw表
Raw表用于处理异常,它具有2个内建链:
PREROUTING chain
OUTPUT chain
二
iptables定义规则的方式比较复杂:
格式:
iptables [-t table] COMMAND chain [match] [-j ACTION] A增加 D删除 R替换 -p 协议
I插入 L列表 -s源地址 -d 目的地址 F清除所有 -i进入网卡
X清除用户的 -o流出网卡
Z统计归零 --sport源端口 --dport 目的端口 N 新建链 P内置链策略
E链改名
-t table :3个filter nat mangle 省略即默认为 filter表
COMMAND:执行的命令
chain:指定操作的链,当定义策略的时候,是可以省略的
match :指定匹配模板
-j ACTION :指定如何进行处理
三
详解COMMAND:
1.链管理命令(这都是立即生效的)
-P :设置默认策略的(设定默认门是关着的还是开着的,只试用于内置链)
默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的
比如:
iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作, 所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
-F: FLASH,清空规则链的(注意每个链的管理权限)
iptables -t nat -F PREROUTING
iptables -t nat -F 清空nat表的所有链
-N:NEW 支持用户新建一个链
iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X: 用于删除用户自定义的空链
使用方法跟-N相同,但是在删除之前必须要将里面的链给清空了
只能删除用户自定义的链
-E:用来Rename chain主要是用来给用户自定义的链重命名
-E oldname newname 只更改名字 不影响规则
-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
iptables -Z :清空
2.规则管理命令
-A:追加,在当前链的最后新增一个规则
iptables -A INPUT -j ACCEPT 向默认(filter表)追加一条 -I num : 插入,把当前规则插入为第几条。其它规则依次向后移
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
-R num:Replays替换/修改第几条规则
格式:iptables -R 3 …………
-D num:删除,明确指定删除第几条规则
iptables -D INPUT -p tcp --dport 80 -j DROP 完整
iptables -D INPUT 1 简洁
3.查看管理命令 “-L”
iptables [-t 表] -L
附加子命令:
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息
四:详解匹配(match)标准
1.通用匹配:源地址目标地址的匹配
-s:源ip 指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0 而且地址可以取反,加一个“!”表示除了哪个IP之外
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
-s 192.168.1.0/24
-s ! 192.168.1.1
-d:目的ip 表示匹配目标地址
iptables -A INPUT -d 10.0.0.2
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
iptables -A INPUT -p tcp|udp|icmp -j ACCEPT
-p ! tcp
-p all -i eth0: 指定数据包进入的网卡,流入一般用在INPUT和PREROUTING上
-i 只能用在input forward prerouting链上
iptables -A INPUT -i eth0 -j ACCEPT
-i eth+
-i ! eth0
-o eth0:从这块网卡流出的数据 流出一般在OUTPUT和POSTROUTING上
-o 只能用在output forward prerouting链上
iptables -A FORWARD -o eth0 -j ACCEPT
2.扩展匹配
2.1隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。一般有三种扩展
--dport: XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21 或者 --dport 21-23 (此时表示21,22,23) 或 --dport ! 21
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN同步,ACK确认,FIN结束,PSH强推,RST重置,URG紧急)
对于它,一般要跟两个参数:
1.检查的标志位
2.必须为1的标志位
iptables -A INPUT -p tcp --tcpflags syn,ack,fin,rst syn
表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的 第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
--tcpflags syn,ack,fin,rst syn = --syn -p udp:UDP协议的扩展
--dport
--sport
-p icmp:icmp数据报文的扩展
--icmp-type:
iptables -A -p icmp --icmp-type 8 -j ACCEPTecho-request(请求回显), 用8来表示 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)用0来表示 --icmp-type 0
2.2显式扩展(-m)
扩展各种模块
-m multiport:表示启用多端口扩展
--port 接受源端口号和目的端口号都为为20,21,80,110的连接
iptables -A INPUT -p tcp -m multiport --port 20,21,80,110 -j ACCEPT
--destination-port 接受目的端口号为20,21,80,110的连接:
iptables -A INPUT -p tcp -m multiport --destination-port 20,21,80,110 -j ACCEPT
--source-port 接受源端口号为20,21,80,110的连接: iptables -A INPUT -p tcp -m multiport --source-port 20,21,80,110 -j ACCEPT
-m limit:流量限制 --limit 流量限制
--limit-burst 触发条件
iptables -A INPUT -m limit --limit 3/m --limit-burst 5 -j ACCEPT
单位时间超过5个包后,触发 3个/每分钟 的限制
-m mac --mac-source : mac地址限制 不能用在output和postrouting链上 iptables -A INPUT -m mac --mac-source 00:60:X:X:X -j DROP
拒绝源mac为xx的主机数据
-m owner --uid-owner :匹配本机特定用户发送的数据包 只能用在output链
iptables -A OUTPUT -m owner --uid-owner 1000 -j DROP
拒绝本机中uid为1000的用户发出的数据包
--gid-owner :匹配本机特定用户组发送的数据包 只能用在output链 iptables -A OUTPUT -m owner --uid-owner 1000 -j DROP
拒绝本机中uid为1000的用户组发出的数据包
-m state --state :匹配连接状态
iptables -A INPUT -m state --state RELATED.ESTABLISHED -j ACCEPT
接受连接状态为……的数据包(允许已建立的连接进入本机)
五 详解-j ACTION
常用的ACTION:
-j DROP: 悄悄丢弃 一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
-j REJECT: 明示拒绝
iptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j REJECT --reject-with icmp-proto-unreachable
拒绝源地址为10.0.0.2 访问80的数据包 并回应拒绝理由
-j ACCEPT:接受
-j REDIRECT:重定向:主要用于实现端口重定向 完成后 继续匹配其它规则
-j MASQUERADE:源地址伪装 可将源ip改为防火墙ip 一般用在linux做网关 代理局域网内电脑上网
-j LOG 符合匹配的信息记录在日志,此步骤完成后会继续匹配其它规则
iptables -A INPUT -p tcp -j LOG --log-prefix "my INPUT packets"
-j SNAT 将符合匹配的数据包源ip 改写为某个特定ip(或ip范围) 完成后跳往先一个规则链 还可设置端口
-j DNAT 将符合匹配的数据包目的ip 改写为某个特定ip(或ip范围) 完成后跳往先一个规则链 可设置端口 -j MIRROR 数据包镜射 将包的源ip与目的ip对调 又将该包返回 处理完后 中断过滤
iptables -A INPUT -p tcp --dport 80 -j MIRROR (此功能redhat9中加入,RHEL4.0需冲边内核)
其它主机访问80时 最终访问的是自己的80端口
-j RETURN:返回 结束当前链的处理 返回调用该链的规则继续处理 -j MARK:打防火墙标记的 将符合规则的数据包打上标记 作为后续过滤的条件 完成后会继续匹配其它规则
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
六 nat表应用
这个nat表实现的功能和 思科ios等等的nat功能非常相似
NAT表有三种内建链:
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。1.SNAT
修改封包表头的『来源』项目,即修改源 ip。一般局域网内的内网机器 访问外网时 ,网关将数据包的源ip(内网地址)转换为网关ip(外网地址),再进行发送。 iptables -t NAT -A POSTROUTING -s 10.0.7.0/24 -o eth2 -j SNAT --to-source 202.204.1.31 iptables -t NAT -A POSTROUTING -s 10.0.7.1 -o eth2 -j SNAT --to-source 202.204.1.3110.0.7.0/24 -o eth2 -j SNAT --to-source 202.204.1.31-202.204.1.35
将数据包的源ip10段 转换为202.204.1.31 ip的转换可以是 多对一 一对一 多对多 多种映射
2.DNAT
修改数据包的目的ip地址,一般使用在 PREROUTING链上,
iptables -t NAT -A PRETROUTING -i eth2 -p tcp --dport 21 -j DNAT --to 10.0.0.2:21
iptables -t NAT -A PRETROUTING -i eth2 -p tcp --dport 22 -j DNAT --to 10.0.0.2:22
开放内网的80 21 22 端口
iptables 保存命令 iptables如何保存
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
详解网络知识:iptables规则
本文主要为大家详解介绍iptables规则。
IP iptables规则 云容器网络