iptables

三葉Leaves Author

iptables是一个与系统本身ip数据包出入规则有关的命令,用于配置Linux的防火墙规则。第一次接触这个命令感觉很像是ACL(Access Control List)那一套。
下面我将用一个简单的实验实践iptables,以演示其基本功能


实验:用iptables封禁ssh服务(默认使用22端口)

步骤

执行命令iptables -h(简略)或者man iptables(详细)可以查看帮助
这里我们在另一台客户端主机上,随便用一个ssh客户端工具远控服务器

!!请确保你能本地操作或者以任何非ssh的方式进入被控服务器的终端,再执行下面的步骤,因为一旦执行此命令,ssh远控服务将失效

连接成功后终端输入命令

1
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

其中:

  • -t filter可以省略,因为默认就是用筛选器
  • -A表示追加规则
  • -p表示使用协议,不指定的话默认-p all(tcp, udp, icmp)
  • --dport 22指定目标端口为22
  • -j DROP指定行为(丢弃)

命令执行后,ssh远控工具已经输入不了任何命令,因为连接已经丢失

不一会,工具就报告连接失败

我们来到服务器终端这边,输入命令,删除刚才的规则

1
iptables -F

再次在客户端这边用ssh连接服务器,已经能重连成功

思考

Q?

如果把刚才的命令由

1
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

改为

1
iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT

(DROP换为REJECT)那么功能上有什么区别?

A:

DROP会直接丢弃数据包而不给对方任何提醒,就像
你给女神拨打电话但无人接听,那么你的女神可能遭遇了什么问题(就像ssh服务可能出错),也可能是你的女神已经换号码了(就像ssh服务根本就没开或者部署在了别的端口)
REJECT会拒绝匹配到的包并且给对方一个提醒,就像
你给你的女神打电话,响了一会后提示“对方正在通话中”,很显然对方直接把你电话挂了

常用命令

添加规则

上面的实验能了解到-A可以追加规则。事实上,-I-A都可以用于追加规则,区别在于

  • -A规则追加到指定链的末尾

  • -I规则默认追加到指定链的开头,后面跟个参数还能添加到指定位置,如:

    1
    2
    #插入到第二行
    iptables -t filter -A INPUT 2 -p tcp --dport 22 -j DROP

    删除规则

  • 删除所有规则

    1
    iptables -F
  • 指明规则本身删除

    实际上就是把刚才的追加-A换成删除-D

    1
    iptables -t filter -D INPUT -p tcp --dport 22 -j DROP
  • 指明规则号进行删除

    1
    iptables -t filter -D INPUT 1

查看已有规则

  • 查看规则列表

    1
    iptables -L
  • 查看规则序列号

    1
    iptables -L -n --line-numbers
  • 标题: iptables
  • 作者: 三葉Leaves
  • 创建于 : 2024-09-25 00:00:00
  • 更新于 : 2024-11-21 16:56:20
  • 链接: https://leavesblog.netlify.app/7e3e4ef1cd3d/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论