前言
iptables作为Linux内核级别的防火墙,可以说在功能和实用性上还是非常强大的,但是在操作时上小白上手还是有少许难度的,如果只是简单的端口开放、关闭,更推荐你使用UFW指令。今天这篇文章带你浅用一下iptables(因为我也只会平时需要用到的iptables指令, 所以这篇文章可能不是很严谨 ),让你了解下iptables下的端口关放行、端口转发、流量监控,下面开始吧!
前置知识
你需要知道Linux命令行的基本操作、服务器搭建服务的端口访问方式(ip:port,你之所以大部分时候看不到端口因为大部分服务都有默认端口,那些默认端口都被隐藏了)以及一些简单的计算机网络知识
iptables 中的 INPUT 表示进入本机的数据包,OUTPUT 表示从本机发出的数据包。也就是说,当有数据包进入本机时,会先通过 INPUT 链的规则进行过滤,而当本机向外发送数据包时,会先经过 OUTPUT 链的规则进行过滤。
iptables指令参数
-A:指定链名
-p:指定协议类型(一般为udp或者tcp)
-d:指定目标地址
--dport:指定目标端口(destination port 目的端口)
--sport:指定源端口(source port 源端口)
-j:指定动作类型(ACCEPT、DROP、DENY)
-s:指定ip地址
端口放行问题
大部分国外服务器应该是默认放行所有端口的。
所以我们有两个选择,一个是白名单模式,一个是黑名单模式,所以就根据你自己的想法去选择了。
查看端口放行模式
1 | iptables -L |
可以看到policy后面跟的是DROP那么就是丢弃所有端口就是不放行,如果是ACCEPT就是默认放行所有
黑名单模式
确保你的服务器已默认放行所有端口,否则执行下面的命令
1 | # 如果你的iptables已经默认放行所有端口,请跳过下面的三个指令 |
然后仅将指定的端口丢弃也就是不放行。
1 | iptables -A OUTPUT -p tcp --sport 8001 -j DROP # 一般使用这条指令就可以禁止此端口访问了 |
白名单模式
下面的操作是非常危险的行为,将关闭所有未放行的端口访问。
确保你放行了ssh(22)端口,否则执行下面指令时,以免无法进行ssh
1 | iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT # 一般使用这条指令就可以了 |
1 | # 如果你的iptables已经默认阻止新端口放行,请跳过下面的三个指令 |
查看端口放行情况
iptables -nL --line-number
可以看到有3个链表规则,分别是 INPUT、FORWARD、OUTPUT
删除规则
假设要删除OUTPUT表中的第一个规则
1 | iptables -D OUTPUT 1 |
如果要删除其他规则,可以看到我们只需要修改这个指令中的两个地方
- 链表名,也就是这三个 INPUT、FORWARD、OUTPUT
- 需要删除规则的序号 1
修改规则
假设要修改OUTPUT表中的第一个 规则从 DROP 变为 ACCEPT
1 | iptables -R OUTPUT 1 -p tcp --sport 8001 -j ACCEPT |
可以看到只需要将前面的执行的过的指令中加上 -R OUTPUT 1 -R的意思就是修改了
执行这段指令后target将变成ACCEPT
注意:如果只执行 iptables -R OUTPUT 1 -j ACCEPT 会怎么样呢
可以看到变成所有端口放行了,所以在修改规则的时候我们要将参数写全才行
端口转发
顾名思义就是将一个端口转发到另一个端口访问,在nat鸡或者natv4+ipv6的鸡上使用比较多,假设我们开放了一个443端口,可以用[ipv6]:443去访问,但是nat鸡的ipv4并不能用这个端口去访问,nat鸡一般只会给你1w+(例如17010)以上端口,我们只需要将443转发到1w+的端口上就行了
指令:
1 | iptables -t nat -A PREROUTING -p tcp --dport 17010 -j REDIRECT --to-ports 443 |
使用这条指令即可用ipv4:17010就可以访问443端口的服务了
规则查看与删除
1 | #查看规则 |
流量监控
一般分为输入输出流量(服务器的下载和上传)
假设我们需要监控8080端口使用的流量,我们需要现在iptables中添加规则
1 | #输入流量 / 下载 |
再使用指令
1 | iptables -L -v -n | grep 8080 |
就可以看到相应端口使用的流量了
移除端口
1 | #移除输入端口 |
防止开机重置
service iptables save
最后
如果你认真看完,相信你大致掌握了iptables的基本使用,当然iptables不光是这些指令和用法,更深层次的使用需要靠你自己了,或许在我今后的学习会再次完善这篇文章,也欢迎你继续回访或者收藏本页!
PS: 不过iptables还有蛋疼的一点,就是只能管理ipv4的端口 如果需要管理ipv6的端口情况,你需要将指令中的iptables改为ip6tables




Thank u,great!!!