Skip to main content

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/sysconfig/iptables

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

新建规则

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

打开 9000 端口

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

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

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

转发 80 端口 到 2020 端口

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

TIPS

参考: