Linux iptables学习笔记

技术文档网 2021-04-16

最近工作需要跟firewall打交道,在这里写下自己的使用心得。

firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理

iptables

不管是从内部端口或者从连接互联网的端口进入的数据包,都需要从上面这种图中流动的。

图中,上面小写的表示表名,小写表示链。

iptables 包含 5 张表(tables):

  1. raw:用于配置数据包,raw中的数据包不会被系统跟踪。
  2. filter:是用于存放所有与防火墙相关操作的默认表。
  3. nat用于网络地址转换(例如:端口转发)。
  4. mangle:用于对特定数据包的修改(参考 损坏数据包)。
  5. security:用于强制访问控制网络规则

大多数情况下都不会使用raw,mangle和security表,因此我们只需要关注filter跟nat表即可。

为什么起名为iptables呢?因为定义了很多个表。

链与规则

可以说表是组织链的一种方式,而链则是组织规则的一种方式。 规则则定义了一系列用来匹配数据包和匹配成功之后的动作。链则更像一种钩子或者事件,数据包在上图流动的某个时间点触发某条链的规则。

内置目标是 ACCEPT, DROP, QUEUE 和 RETURN,目标扩展是 REJECT and LOG

默认情况下,任何链中都没有规则。可以向链中添加自己想用的规则。链的默认规则通常设置为 ACCEPT,如果想确保任何包都不能通过规则集,那么可以重置为 DROP。默认的规则总是在一条链的最后生效,所以在默认规则生效前数据包需要通过所有存在的规则。

常见options的含义: append (-A) 、 delete (-D)、 insert (-I) 、replace (-R)

实例

了解了前面的概念之后,现在是时候动手实际操作一下了。

在通常的情况下,我们可以使用ping来测试网络的连通性。

比如:

c7@computer:~$ ping 127.0.0.1 -t 4
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms

使用iptables加入规则:

 sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

sudo表示使用超级管理员,-A表示append,加入一条规则,-s表示source为127.0.0.1.INPUT表示INPUT链,-p表示协议,-j表示目标为drop。

之后再ping一次,就会发现ping不通了。

删除这条规则:

sudo iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

很容易发现,只是将-A变成-D而已。

如果要禁止其他主机的ping,我们直接使用非操作即可,比如-s !127.0.0.1。

NAT:网络地址转换,我们可以以任何來源地址把封包送出去﹐但只有正确的源地址,封包才可以回来。如果有多台不同主机通过一条线路上网﹐那么就需要NAT了。

(未完待续)

参考资料

iptables wiki:https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) iptables官网:http://www.netfilter.org/projects/iptables/index.html

相关文章

  1. Linux iptables学习笔记

    最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从

  2. Linux vim命令使用教程

    vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上

  3. 校准linux系统时间

    服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt

  4. yum与rpm使用说明

    rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安

  5. service与chkconfig的替代者systemctl

    在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st

随机推荐

  1. Linux iptables学习笔记

    最近工作需要跟firewall打交道,在这里写下自己的使用心得。 firewall主要的特性有: 1.支持区域设置 2.运行时跟持久化的配置是分离的 3.能够动态管理 iptables 不管是从

  2. Linux vim命令使用教程

    vim使用 参考链接 vim4种模式: 普通模式 插入模式 可视模式 命令行模式 进入vim,按下i或a进入插入模式 按ESC进入普通模式 在该模式下可以使用方向键 h向左 j向下 k向上

  3. 校准linux系统时间

    服务器的时间对于记录请求和数据库操作时间具有重要意义,对于一些如数据库备份的操作,时间尤为重要,需要避开白天业务繁忙时间进行。 修改时区 # cp /etc/localtime /etc/localt

  4. yum与rpm使用说明

    rpm 命令 rpm 命令是 RPM 软件包的管理工具。 语法 rpm (选项)(参数) 选项 -h:安装时列出标记;-i:安装时显示套件的相关信息;-v:安装时显示指令执行过程;-e:卸载已安

  5. service与chkconfig的替代者systemctl

    在安装 redis 时,看到将 redis 配置成 service 系统服务后,采用 service redisd start 命令启动;在安装 mariadb 时,看到利用 systemctl st