iptables
iptables
一、简介
iptables是 Linux系统中用于管理网络包过滤的工具。它可以用来设置规则,以控制网络数据包的流动。iptables可以用于防火墙、网络地址转换(NAT)和网络包过滤等多种用途。
netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框架。
二、iptables四表五链
五链
INPUT 链:处理输入数据包
OUTPUT链 :处理输出数据包
FORWARD链 :处理转发数据包
PREROUTING链 :用于目标地址转换(DNAT)
POSTOUTING链 :用于源地址转换(SNAT
四表
raw :主要用来关闭连接跟踪,即配置参数时使用-j NOTRACK,如:网址过滤,基本不用,只能2个链 PREROUTING ,OUTPUT
mangle :修改数据包的TOS、TTL,和为数据包设置标记,用来实现Qos调整以及策略路由功能。5个链都可以
nat :负责地址转换,用于网关路由器。只能3个链PREROUTING ,OUTPUT ,POSTROUTING
filter :负责包过滤功能,用于防火墙规则, 只能3个链 INPUT ,FORWARD ,OUTPUT
三、处理流程
首先数据包进入PREROUTING链,之后根据路由决策进入INPUT(本机)还是FORWARD(转发),进入INPUT后会继续进入OUTPUT链,最后都走到POSTROUTING链。
另外,如果加入各种规则之后,则数据包进入某个链之后,还要顺序执行链上的规则,如果匹配某个规则,则根据匹配的规则来处理数据包(例如ACCEPT、DROP或者REJECT),如果都不匹配则使用默认的策略处理数据包。
四、基础命令组成
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 处理动作或跳转]
注: -t 表名在缺省状态下,默认为filter表,即默认 -t filter。
常用命令
-A 追加规则-->iptables -A INPUT, 添加链是添加到最后一条
-D 删除规则-->iptables -D INPUT 1(编号) 按规则序号或内容确定要删除的规则
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出一个或所有链的规则
-F: 清空指定链中的所有规则,默认清空表中所有链的内容
-X: 删除指定表中用户自定义的规则链
-N 新的规则-->iptables -N allowed 定义新的规则
-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
查看已添加的规则
sudo iptables -L OUTPUT -n -x -v --line-numbers
--line-numbers 显示行号 -L 列出所有规则 后边可以跟上新的规则链名称 —N 可以新建链 -n 以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名,加上提速 -v 详细信息 越多v越详细 -x 在计数器上显示精确值,不做单位换算
num
:规则的编号。pkts
:数据包的数量。bytes
:数据包的总字节数。target
:目标动作或规则,例如接受(ACCEPT)或拒绝(REJECT)。prot
:协议,例如TCP(传输控制协议)或UDP(用户数据报协议)。opt
:其他选项或标记,例如是否使用了特定的网络接口或标记。in
:数据包进入的网络接口。out
:数据包离开的网络接口。source
:数据包的源IP地址。destination
:数据包的目标IP地址。
根据这个表格,第一条规则允许从任何源地址到IP地址10.64.4.70的所有TCP流量。第二条规则允许到IP地址180.101.50.188的所有流量,不论协议如何。
添加规则
sudo iptables -A OUTPUT -d 10.64.4.70 -p tcp(添加到最后)
sudo iptables -I INPUT -s 10.64.4.70 -j DROP(添加到第一条,来源10.64.4.70,执行目标动作为丢弃)
删除链内指定规则
sudo iptables -D OUTPUT -d 180.101.50.188
sudo iptables -D OUTPUT -s 180.101.50.188 -j DROP (删除源IP为180.101.50.188且目标动作为DROP )
清除现有的规则
iptables -F
创建新链
默认filter
sudo iptables -N WEB_BAN_IP
可以指定filter
sudo -t filter -N WEB_BAN_IP
这个时候,这个链并没有被任何默认链进行引用;即使你现在对其增加规则,它也是不会生效的
引用新链接
使用以下命令将新链添加到INPUT链中:
sudo iptables -A INPUT -j WEB_BAN_IP
删除和清除链接
取消引用
sudo iptables -D INPUT -j WEB_BAN_IP
清空表
sudo iptables -F WEB_BAN_IP
删除表
sudo iptables -X WEB_BAN_IP
通用参数
-p 协议 例:iptables -A INPUT -p tcp
-s源地址 例:iptables -A INPUT -s 192.168.1.1
-d目的地址 例:iptables -A INPUT -d 192.168.12.1
--sport源端口 例:iptables -A INPUT -p tcp --sport 22
--dport目的端口 例:iptables -A INPUT -p tcp --dport 22
-i指定入口网卡 例:iptables -A INPUT -i eth0
-o指定出口网卡 例:iptables -A FORWARD -o eth0
-j 指定要进行的处理动作 常用的ACTION:
DROP:丢弃 REJECT:明示拒绝
ACCEPT:接受 SNAT基于原地址的转换
source 指定原地址
比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1(外网有效ip)
这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP. MASQUERADE(动态伪装)--家用带宽获取的外网ip,就是用到了动态伪装
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE DNAT目标地址转换 destination 指定目标地址
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2 10.18访问80端口转换到100.2上
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链。