当前位置: 首页 > news >正文

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具,你可以使用它来控制网络流量的访问和转发。

前面已经学习了iptables的基本原理,四表五链的基本概念,也已经安装好了iptables,下面我们主要学习iptables命令的基本使用。

在这里插入图片描述

可以使用iptables -h来查看帮助:

$ iptables -h
iptables v1.6.1Usage: iptables -[ACD] chain rule-specification [options]iptables -I chain [rulenum] rule-specification [options]iptables -R chain rulenum rule-specification [options]iptables -D chain rulenum [options]iptables -[LS] [chain [rulenum]] [options]iptables -[FZ] [chain] [options]iptables -[NX] chainiptables -E old-chain-name new-chain-nameiptables -P chain target [options]iptables -h (print this help information)Commands:
Either long or short options are allowed.--append  -A chain            Append to chain--check   -C chain            Check for the existence of a rule--delete  -D chain            Delete matching rule from chain--delete  -D chain rulenumDelete rule rulenum (1 = first) from chain--insert  -I chain [rulenum]Insert in chain as rulenum (default 1=first)--replace -R chain rulenumReplace rule rulenum (1 = first) in chain--list    -L [chain [rulenum]]List the rules in a chain or all chains--list-rules -S [chain [rulenum]]Print the rules in a chain or all chains--flush   -F [chain]          Delete all rules in  chain or all chains--zero    -Z [chain [rulenum]]Zero counters in chain or all chains--new     -N chain            Create a new user-defined chain--delete-chain-X [chain]          Delete a user-defined chain--policy  -P chain targetChange policy on chain to target--rename-chain-E old-chain new-chainChange chain name, (moving any references)
Options:--ipv4      -4              Nothing (line is ignored by ip6tables-restore)--ipv6      -6              Error (line is ignored by iptables-restore)
[!] --protocol  -p proto        protocol: by number or name, eg. `tcp'
[!] --source    -s address[/mask][...]source specification
[!] --destination -d address[/mask][...]destination specification
[!] --in-interface -i input name[+]network interface name ([+] for wildcard)--jump -j targettarget for rule (may load target extension)--goto      -g chainjump to chain with no return--match       -m matchextended match (may load extension)--numeric     -n              numeric output of addresses and ports
[!] --out-interface -o output name[+]network interface name ([+] for wildcard)--table       -t table        table to manipulate (default: `filter')--verbose     -v              verbose mode--wait        -w [seconds]    maximum wait to acquire xtables lock before give up--wait-interval -W [usecs]    wait time to try to acquire xtables lockdefault is 1 second--line-numbers                print line numbers when listing--exact       -x              expand numbers (display exact values)
[!] --fragment  -f              match second or further fragments only--modprobe=<command>          try to insert modules using this command--set-counters PKTS BYTES     set the counter during insert/append
[!] --version   -V              print package version.

iptables的命令语法通常如下:

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

这里的各个部分解释如下:

  • -t 表名:这是可选的,用于指定你要操作的表。如果没有指定,默认是“filter”表。其他可用的表包括“nat”,“mangle”和“raw”。
  • 管理选项:这是你要执行的操作,比如添加(-A)或删除(-D)一条规则,插入一条规则(-I),替换一条规则(-R),清空链(-F)等。
  • 匹配条件:这是可选的,用于指定匹配条件。比如,你可以匹配源或目标IP地址,源或目标端口,输入或输出接口等。
  • -j 动作:这是规则的动作,当匹配条件满足时,执行的操作。比如,你可以接受(ACCEPT)数据包,拒绝(DROP)数据包,记录(LOG)数据包,或者跳转到另一个链(JUMP)。

规则的管理

规则的查询

查看当前防火墙规则:

$ sudo iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination

选项:

  • -n:将地址和端口显示为数字
  • -t table:指定表名,默认为filter
  • -v:显示更为详细的信息
  • --line-numbers:显示规则的ID

规则的添加

向表的链中添加规则:

$ sudo iptables -t filter -A INPUT -p icmp -j REJECT$ sudo iptables -t filter -nvL
Chain INPUT (policy ACCEPT 44 packets, 2912 bytes)pkts bytes target     prot opt in     out     source               destination0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 33 packets, 2508 bytes)pkts bytes target     prot opt in     out     source               destination

这条规则的含义就是在filter表的INPUT链上增加一条拒绝所有icmp请求的规则,这样所有的ping请求将无法通讯:

$ ping 172.29.142.35 -c 3
PING 172.29.142.35 (172.29.142.35) 56(84) bytes of data.--- 172.29.142.35 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2044ms

再添加一条规则:

$ sudo iptables -t filter -A INPUT -p tcp -j ACCEPT$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        6   588 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
2       96  5568 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 49 packets, 3724 bytes)
num   pkts bytes target     prot opt in     out     source               destination

-A选项表示在尾部规则链中进行追加。

如果想在规则链的指定位置插入规则,可以使用-I选项,需要指定插入到规则链的哪个位置,默认为1。

$ sudo iptables -t filter -I INPUT 2 -p udp -j ACCEPT$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        6   588 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
3      327 19308 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 51 packets, 3876 bytes)
num   pkts bytes target     prot opt in     out     source               destination

规则的替换

使用-R选项进行规则的替换。

$ sudo iptables -t filter -R INPUT 1 -p icmp -j ACCEPT$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
2        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0
3      473 27740 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 6 packets, 488 bytes)
num   pkts bytes target     prot opt in     out     source               destination

规则的删除

使用-D选项进行规则的删除,可以根据规则的ID进行删除,也是根据整个规则进行删除。

$ sudo iptables -t filter -D INPUT 2$ sudo iptables -t filter -D INPUT -p tcp -j ACCEPT$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 8 packets, 464 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 5 packets, 388 bytes)
num   pkts bytes target     prot opt in     out     source               destination

可以使用-F来删除所有的规则:

$ sudo iptables -t filter -F$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 8 packets, 464 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 5 packets, 380 bytes)
num   pkts bytes target     prot opt in     out     source               destination

可以使用-Z选项让规则的计数器从0重新开始:

$ sudo iptables -t filter -Z

匹配条件

iptables可以根据不同的匹配条件来过滤网络数据包。iptables的匹配条件可以分为通用匹配条件和扩展匹配条件两种。

通用匹配条件:

  • -p:指定协议类型,如TCP、UDP、ICMP等。
  • -s:指定源IP地址或地址段。
  • -d:指定目标IP地址或地址段。
  • –sport:指定源端口号。
  • –dport:指定目标端口号。
  • -i:指定数据包进入的网络接口。
  • -o:指定数据包输出的网络接口。

扩展匹配条件:除了通用匹配条件其余可用于匹配的条件称为扩展配条件,这些扩展匹配条件在netfilter中以模块的形式存在,如果想使用这些条件,则需要依赖对应的拓展模块。

扩展匹配条件包括:

  • –mac-source:指定源MAC地址。
  • –mac-destination:指定目标MAC地址。
  • –state:指定连接状态,如NEW、ESTABLISHED、RELATED等。
  • –tcp-flags:指定TCP标志位。
  • –icmp-type:指定ICMP类型。
  • –limit:限制匹配规则的匹配次数。
  • –comment:为匹配规则添加注释。

处理动作

iptables规则的处理动作是指对匹配到的数据包所采取的操作。

常见的处理动作包括:

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息。。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个相应的信息,客户端刚请求就会收到拒绝的信息。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上。
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射。
  • LOG:在/var/log/mesages文件中记录日志信息,然后将数据包传递给下一条规则。即除了记录外不对数据包做任何其他操作,仍然让下一条规则进行匹配

自定义链

在iptables中,可以创建自定义链(Custom Chains)来组织和管理防火墙规则。

自定义链可以以更高层次和更好的可读性来管理规则,使配置和维护更加简单。

创建链mychain

$ sudo iptables -N MYCHAIN$ sudo iptables -t filter -nvL
Chain INPUT (policy ACCEPT 201 packets, 12360 bytes)pkts bytes target     prot opt in     out     source               destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 127 packets, 9820 bytes)pkts bytes target     prot opt in     out     source               destinationChain MYCHAIN (0 references)pkts bytes target     prot opt in     out     source               destination

此时filter表中多了一条MYCHAIN链。

添加规则到自定义链:

$ sudo iptables -t filter -A MYCHAIN -s 192.168.1.0/24 -j DROP

禁止192.168.1.0/24的网段访问本机,丢弃源地址的流量。

调用自定义链:

$ sudo iptables -t filter -A INPUT -p tcp --dport 80 -j MYCHAIN$ sudo iptables -t filter -nvL --line-numbers
Chain INPUT (policy ACCEPT 6 packets, 348 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 MYCHAIN    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 4 packets, 304 bytes)
num   pkts bytes target     prot opt in     out     source               destinationChain MYCHAIN (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       192.168.1.0/24       0.0.0.0/0

将所有传入TCP端口80的流量传递到MYCHAIN自定义链进行处理。如果不调用自定义的规则链,则自定义的规则链无效。

清空链中的规则:

$ iptables -F MYCHAIN

删除指定的自定义链:

$ iptables -X MYCHAIN

删除所有的的自定义链:

$ iptables -X
http://www.lryc.cn/news/223536.html

相关文章:

  • Flex bison 学习好代码
  • 学习Nginx配置
  • 怎么批量获取文件名,并保存到excel?
  • 数据结构: unordered_map与unordered_set
  • WebDAV之π-Disk派盘 + PassStore
  • OpenCV实现手势虚拟拖拽
  • 深圳市宝安区委常委、宣传部部长周学良一行莅临联诚发考察调研
  • Presentation Prompter 5.4.2(mac屏幕提词器)
  • 9 网关的作用
  • 计算机网络实验
  • 九凌网络分享外贸快车实现迅速出口的目标
  • 分享66个Python管理系统源代码总有一个是你想要的
  • python 删除特定字符所在行
  • 邮箱哪家强?哪个牌子邮箱好用
  • 关于DDD的贫血模型和充血模型到底是什么区别?
  • 让BI自动生成零售数据分析报表?用模板
  • 以吉祥物宣传片实力出圈!吉祥物三维动画宣传片怎么制作?
  • TensorFlow(1):深度学习的介绍
  • C# 如何优雅的写代码[进阶篇]
  • 【JavaEESpring】Spring, Spring Boot 和Spring MVC的关系以及区别
  • 【网络编程】传输层——TCP协议
  • 【数据结构与算法】如何衡量一个算法的好坏?
  • 在PostgreSQL中创建和管理数据库
  • 从哪些方面做好电商系统的网站建设?
  • C++的Odyssey之旅——STL
  • μC/OS-II---内核:多任务与调度
  • 【紫光同创国产FPGA教程】——PDS安装教程
  • 基于Fuzzing和ChatGPT结合的AI自动化测试实践分享
  • 基于Jaccard相似度的推荐算法---示例
  • 基于指数分布算法的无人机航迹规划-附代码