IPTables配置

概述

netfilter/iptables 为 Linux 内核级有状态防火墙。支持连接跟踪,包含四种有效状态:ESTABLISHEDINVALIDNEWRELATED


一、安装与检测

  • 检测安装:whereis iptables
  • 安装命令:apt-get install iptables
  • 加载内核模块:modprobe ip_tables

二、规则配置

编辑策略文件:vi /etc/iptables.rules

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 允许特定IP访问8080
-A INPUT -s 59.109.149.221 -p tcp -m tcp --dport 8080 -j ACCEPT

# 常用业务端口
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7180 -j ACCEPT

# 状态追踪(允许已建立和相关连接)
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Loopback接口(保障本地通信与DNS)
-A OUTPUT -o lo -p all -j ACCEPT
-A INPUT -i lo -p all -j ACCEPT

# SSH连接(端口需与 /etc/ssh/sshd_config 一致)
-A INPUT -p tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp --sport 22 -j ACCEPT

# ICMP控制(允许ping,丢弃时间戳等探测包)
-I INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p ICMP --icmp-type timestamp-request -j DROP
-A INPUT -p ICMP --icmp-type timestamp-reply -j DROP
-A INPUT -p ICMP --icmp-type time-exceeded -j DROP
-A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-A OUTPUT -p ICMP --icmp-type time-exceeded -j DROP

# 默认拒绝策略
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 8080 -j DROP
COMMIT

[!NOTE]
INPUT 为入口,OUTPUT 为出口,REJECT 为禁止。若需完全开放出口,将默认策略改为 -A OUTPUT -j ACCEPT


三、加载与持久化

  • 加载生效:iptables-restore < /etc/iptables.rules
  • 查看规则:iptables -L -n
  • 开机自启配置:
    • 创建软链:ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/
    • 编辑服务:vi /lib/systemd/system/rc-local.service,末尾追加 [Install]
    • 创建脚本:vi /etc/rc.local,写入 iptables-restore < /etc/iptables.rules
    • 赋权:chmod +x /etc/rc.local

四、常用命令速查

4.1 基础管理

1
2
3
4
5
6
7
8
# 查看现有规则
iptables -L -n
# 临时放行所有(防误锁)
iptables -P INPUT ACCEPT
# 清空规则
iptables -F # 清空默认规则
iptables -X # 清空自定义规则
iptables -Z # 计数器归零

4.2 端口与协议

1
2
3
4
5
6
7
# 开放常用端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 21 -j ACCEPT # FTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# 允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

4.3 策略与黑白名单

1
2
3
4
5
6
7
8
9
# 设置默认策略
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# 信任内网IP(放行所有TCP)
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT
# 封停/解封IP
iptables -I INPUT -s ***.***.***.*** -j DROP
iptables -D INPUT -s ***.***.***.*** -j DROP

4.4 保存规则

1
service iptables save

五、核心概念对照

方向 说明
INPUT 入站 目标为本机的数据包
OUTPUT 出站 源为本机的数据包
FORWARD 转发 经本机路由转发的数据包
状态 说明
ESTABLISHED 已建立的连接
NEW 新连接请求
RELATED 与已有连接关联的数据包
INVALID 无法识别或无效的数据包