iptables常用命令小清单

简介: iptables常用命令小清单

iptables常用命令小清单

iptables简介

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

**“四表”**是指 iptables 的功能,默认的 iptable s规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):

  1. filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
  2. nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
  3. mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
  4. raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

**“五链”**是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:

  1. INPUT(入站数据过滤)、
  2. OUTPUT(出站数据过滤)、
  3. FORWARD(转发数据过滤)、
  4. PREROUTING(路由前过滤)
  5. 和POSTROUTING(路由后过滤),

防火墙规则需要写入到这些具体的数据链中。

Linux 防火墙的过滤框架,如图 1 所示。

可以看出,

如果是外部主机发送数据包给防火墙本机,数据将会经过 PREROUTING 链与 INPUT 链;

如果是防火墙本机发送数据包到外部主机,数据将会经过 OUTPUT 链与 POSTROUTING 链;

如果防火墙作为路由负责转发数据,则数据将经过 PREROUTING 链、FORWARD 链以及 POSTROUTING 链。


iptables语法

iptables [-t table] command [match] [target]

-t: 用于指定所要操作的表,不指定则默认 filter 表

command:具体的命令动作,比如对指定链添加/删除规则

match:对所要处理包的匹配规则

target:数据包的处理动作

command

每个链由一条条的规则组成,对于一个链可以添加规则、删除规则、检测是否存在该条规则等操作,相应的命令选项如下:

命令 说明
-A iptables -A chain rule-specification 在指定链表chain末尾添加规则
-C iptables -C chain rule-specification 检测是否存在该规则
-D iptables -D chain rule-specification 删除指定规则,需要将规则完整的写出来
-D iptables -D chain rulenum 删除指定规则序号对应的那条规则,上面的rulenum 可通过 iptables -L –line-numbers 显示,每个链表的第一条规则对应序号1
-I iptables -I chain [rulenum] rule-specification 向指定链表的对应规则序号前面插入规则,如果不指定 rulenum,则默认是序号1
-R iptables -R chain rulenum rule-specification 替换规则
-L iptables -L [chain] 显示所有的规则,一般紧跟使用-n 选项,避免转换成主机名形式;跟-v选项可以看更详细的信息。默认显示所有链([] 中括号表示该参数是可选的)
-S iptables -S [chain] 显示所有的规则
-F iptables -F [chain] 默认删除所有链表里的规则
-P iptables -P chain target 指定该链表的默认操作(DROP和ACCEPT)


match

1、通用匹配

匹配 选项 说明
[!] -p iptables -A INPUT -p protocol …
1、指定协议,如tcp、udp等,不区分大小写,也可以是协议对应的数字编号,都可以在/etc/protocols查看。
2、数字0和‘all’表示所有的协议,也是缺省值,注意只匹配 TCP、UDP、ICMP。而不是/etc/protocols里的所有协议。
3、可以同时指定多个匹配协议,以逗号分隔,如tcp,udp
4、可选参数 ! 表示取反的意思,如 ! -p tcp 则表示匹配UDP和ICMP
[!] -s 示例:iptables -A INPUT -s 192.168.1.0/24 …
指定源地址,可以是主机名也可以是IP形式的地址,主机名会先dns解析得到相应的IP地址再添加到过滤表当中;可以是单个IP地址,也可以像上面示例一样是某个网段
[!] -d 匹配目的地址,跟 -s 用法一致
[!] -i 示例:iptables -A INPUT -i eth0 …
1、对于链表INPUT、FORWARD、PREROUTING的数据指定接口名
2、可以使用通配符,如 eth+,则可以匹配 eth0、eth1 等所有eth开头的网口
3、这个尤其适用于多核设备内部地址通信默认允许策略配置
[!] -o 指定离开本地所用的网口
–sport iptables -A INPUT -p tcp –sport 22 …
1、可以指定 tcp 或者 udp 的源端口号…
2、可以使用连续的端口号,如 –sport 22:100,则表示从22到100的所有端口…
3、可以进行取反操作如,! –sport 22,即除22以外的端口
–dport 指定目标端口,用法和 –sport 一样


2、显示匹配

通过-m选项指定所要加载的匹配模块名称,后面再跟相应的选项即可。 如过滤mac地址操作,指定模块mac,选项如下:

匹配选项 说明
-m mac [!] –mac-source 示例:iptables -A INPUT -m mac –mac-source XX:XX:XX:XX:XX:XX 匹配的源MAC地址,格式必须是XX:XX:XX:XX:XX:XX,只能用于过滤进入的数据
-m multiport 示例:iptables -A INPUT -p tcp -m multiport –sport 22,23,24 前面匹配端口时只写了连续的端口匹配方式,如果想指定多个端口,则需要使用 -m multiport
-m iprange 示例:iptables -A INPUT -m iprange –src-range 192.168.1.1-192.168.1.10 -j ACCEPT 匹配连续的多个IP地址


target

最后说下数据包的处理动作,通过参数-j指定

选项 说明
-j 示例:iptables -A INPUT -p tcp -sport 22 -j DROP –jump target 指定要进行的处理动作 ACCEPT :允许,匹配后就不会去匹配当前链中的其他规则 DROP :丢弃

IP地址过滤策略一般就两种,要么设置允许哪些地址通行,要么就禁止哪些地址进行通行。


iptables命令选项的输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表名包括:

  • raw:高级功能,如:网址过滤
  • mangle:数据包修改(QOS),用于实现服务质量
  • net:地址转换,用于网关路由器
  • filter:包过滤,用于防火墙规则

规则链名包括:

  • INPUT链:处理输入数据包
  • OUTPUT链:处理输出数据包
  • PORWARD链:处理转发数据包
  • PREROUTING链:用于目标地址转换(DNAT)
  • POSTOUTING链:用于源地址转换(SNAT)

动作包括:

  • accept:接收数据包
  • DROP:丢弃数据包
  • REDIRECT:重定向,映射,透明代理
  • SNAT:源地址转换
  • DNAT:目标地址转换
  • MASQUERADE:IP伪装(NAT),用于ADSL
  • LOG:日志记录


实例

清除已有iptables规则

iptables -F
iptables -X
iptables -Z


开发指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问


屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是


查看已添加的iptables规则

iptables -L -n -v 或者 iptables -nvL

各参数的含义为:

-L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。

-n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。

-v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。

iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v76C8hLf-1648025815595)(C:\Users\FLY\AppData\Roaming\Typora\typora-user-images\image-20220317141405406.png)]


将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers


删除已添加的iptables规则

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8


iptables调试

用raw表进行调试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tug7jTuy-1648025815596)(https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg)]

使用到raw表、ipt_LOG内核模块、日志记录在kern.log中。

具体的步骤如下:


1.准备ipt_LOG内核模块

modprobe ipt_LOG
modprobe nf_log_ipv4
sysctl net.netfilter.nf_log.2=nf_log_ipv4


2.使用raw表,加入跟踪规则

iptables -t raw -A PREROUTING -p icmp -j TRACE
iptables -t raw -A OUTPUT -p icmp -j TRACE
iptables -t raw -A PREROUTING -p tcp -dport 80 -j TRACE
iptables -t raw -A OUTPUT -p tcp -dport 80 -j TRACE

raw表只能在PREROUTING和OUTPUT上加处理规则,符合规则的包会被跟踪,并输出到日志中。


3.查看日志

tail -f /var/log/kern.log


参考来源:

http://man.linuxde.net/iptables


相关文章
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
74723 2
|
Linux
mount 挂载 iso 镜像文件
【1月更文挑战第3天】
2621 0
|
前端开发 小程序 搜索推荐
什么类型的项目会优先选择Headless CMS
Headless CMS的核心价值在于内容与展示的解耦,当项目需要跨终端、高定制化前端、敏捷迭代或强扩展性时,它会成为更优选择;而在小规模、低预算、内容简单且稳定的场景中,传统CMS则更具实用性。
507 1
|
NoSQL Linux 程序员
Linux | 调试器GDB的详细教程【纯命令行调试】-1
Linux | 调试器GDB的详细教程【纯命令行调试】
1119 0
|
7月前
|
数据采集 供应链 安全
商品条码查询-药品条码查询-商品条码识别-药品条码识别API接口简介
商品条码查询API支持13/14位条码识别,可快速获取商品名称、品牌、厂家、规格、价格、产地、图片等信息,助力真伪鉴别、溯源追踪、零售结算、库存管理及消费者比价决策,提升数据准确性与运营效率。
1205 1
|
机器学习/深度学习 人工智能 运维
这个多模态智能体,让电力装备运维越来越“聪明”
DeepSeek的出圈为AI发展开辟新路径,大模型在各行业应用也愈发深入。例如“许继智算”团队在昇腾AI创新大赛中获奖,他们通过大模型解决了电力装备运维中的缺陷检测与风险识别难题。传统电力运维依赖人工,存在效率低、误报率高等问题,而该团队基于多模态大模型,融合文本、声纹、图像等信息,构建“智电灵眸”智能运维平台,大幅提升故障诊断精度与效率。其创新方案已在多个项目试点,识别准确率提升30%以上,故障预警速度提高50%,标志着电力运维进入“智能体”时代。这不仅体现了大模型的实际价值,也为其他行业应用提供了参考范例。
1251 14
|
数据管理 程序员 数据处理
利用Python自动化办公:从基础到实践####
本文深入探讨了如何运用Python脚本实现办公自动化,通过具体案例展示了从数据处理、文件管理到邮件发送等常见办公任务的自动化流程。旨在为非程序员提供一份简明扼要的实践指南,帮助他们理解并应用Python在提高工作效率方面的潜力。 ####
|
网络协议
Wireshark 如何过滤抓到的网络包?
Wireshark 如何过滤抓到的网络包?
615 0

热门文章

最新文章