iptables

对于任何一个操作系统,防止被攻击,被入侵,防火墙的作用是至关重要的。

下文将 iptables 的 关键用法讲解清楚。

基本概念

iptables 流程图


                               XXXXXXXXXXXXXXXXXX
                             XXX     Network    XXX
                               XXXXXXXXXXXXXXXXXX
                                       +
                                       |
                                       v
 +-------------+              +------------------+
 |table: filter| <---+        | table: nat       |
 |chain: INPUT |     |        | chain: PREROUTING|
 +-----+-------+     |        +--------+---------+
       |             |                 |
       v             |                 v
 [local process]     |           ****************          +--------------+
       |             +---------+ Routing decision +------> |table: filter |
       v                         ****************          |chain: FORWARD|
****************                                           +------+-------+
Routing decision                                                  |
****************                                                  |
       |                                                          |
       v                        ****************                  |
+-------------+       +------>  Routing decision  <---------------+
|table: nat   |       |         ****************
|chain: OUTPUT|       |               +
+-----+-------+       |               |
      |               |               v
      v               |      +-------------------+
+--------------+      |      | table: nat        |
|table: filter | +----+      | chain: POSTROUTING|
|chain: OUTPUT |             +--------+----------+
+--------------+                      |
                                      v
                               XXXXXXXXXXXXXXXXXX
                             XXX    Network     XXX
                               XXXXXXXXXXXXXXXXXX

chains

默认链中包含:

  • INPUT
  • OUTPUT
  • FORWARD

入站,出站,转发。这三个链的作用是在整个流程的哪个位置过滤数据包。

rules

规则可以是一个或多个,也可以是不同类型相互组合。

  • -p (protocol)
    • tcp
    • udp
    • icmp
  • -i (input interface)
    • like eth0
  • -o (output interface)
    • like eth0
  • -s (source)
    • ip_addr
  • -d (destination)
    • -ip_addr
  • j (jump)
    • ACCEPT
    • DROP
    • QUEUE
    • RETURN

tables

iptables 包含 5个 表:

  • raw > 用于配置数据包, raw 中的数据包不会被系统跟踪。
  • filter (default) 是用于存放所有与防火墙相关操作的默认表。
  • nat 用于 网络地址转换(例如:端口转发)。
  • mangle 用于对特定数据包的修改。
  • security 用于 Mandatory access control 网络规则。

一般情况下 filter 和 nat 更为常用,其他表用于更复杂的特殊目的。

  • -t
    • filter
    • nat

运行和管理

一般来说 不会遇到安装iptables的需求,这已经被集成Llinux Kernel里了,并且是默认启用的。

重置规则

# 重置所有
iptables -F

# 重置 nat 表
iptables -t nat -F

可以使用 -X 替换 -F 参数,该方法可以删除非默认规则。

保存现有规则

注意 不同的Linux发行版 iptables的 配置文件路径是不一样的。

iptables-save > /etc/iptables

iptables 在启动的时候会从 /etc/iptables 载入规则,如果直接添加规则 是不会被保存的。下次重启这些规则将会丢失。

新建规则

在了解以上的 基础概念,我们就可以严谨的编辑防火墙规则了。
以下为一些示例,主要讲解 iptables 规则的语法和其背后的思想,而不是作为一种保护服务器的手段,如果想要提高系统的安全性,参考 Simple stateful firewall 来获得一个最低限度的 iptables 安全配置。

打开 9000 端口

iptables -A INPUT -p tcp --dport 9000 -j ACCEPT

打开 2375 端口 并仅限 某个 IP 访问

iptables -A INPUT -p tcp -s 192.168.10.2 --dport 2375 -j ACCEPT

转发 80 端口 到 2020 端口

iptables -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 2020

TIPS

参考: