0%

iptables 配置详解

iptables 语法

1
iptables (选项) (参数)

选项

选项 说明
-t<表> 指定要操纵的表;
-A 向规则链中添加条目;
-D 从规则链中删除条目;
-I 向规则链中插入条目;
-R 替换规则链中的条目;
-L 显示规则链中已有的条目;
-F 清楚规则链中已有的条目;
-Z 清空规则链中的数据包计算器和字节计数器;
-N 创建新的用户自定义规则链;
-P 定义规则链中的默认目标;
-h 显示帮助信息;
-p 指定要匹配的数据包协议类型;
-s 指定要匹配的数据包源ip地址;
-j<目标> 指定要跳转的目标;
-i<网络接口> 指定数据包进入本机的网络接口;
-o<网络接口> 指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:

1
2
3
4
5
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] \
<-i/o 网卡名> -p 协议名 \
<-s 源IP/源子网> --sport 源端口 \
<-d 目标IP/目标子网> --dport 目标端口 \
-j 动作

表名包括:

表名 说明
raw 高级功能,如:网址过滤。
mangle 数据包修改(QOS),用于实现服务质量。
net 地址转换,用于网关路由器。
filter 包过滤,用于防火墙规则。

规则链名包括:

规则链名 说明
INPUT链 处理输入数据包。
OUTPUT链 处理输出数据包。
PORWARD链 处理转发数据包。
PREROUTING链 用于目标地址转换(DNAT)。
POSTOUTING链 用于源地址转换(SNAT)。

动作包括:

动作名 说明
ACCEPT 接收数据包。
DROP 丢弃数据包。
REDIRECT 重定向、映射、透明代理。
SNAT 源地址转换。
DNAT 目标地址转换。
MASQUERADE IP伪装(NAT),用于ADSL。
LOG 日志记录。

使用说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启动防火墙
service iptables start

# 重启防火墙
service iptables restart

# 停止防火墙
service iptables stop

# 查看防火墙状态
service iptables status

# 保存配置到文件
service iptables save

# 设置开机启动
chkconfig iptables on

清除已有规则

1
2
3
iptables -F
iptables -X
iptables -Z

允许已建立的或相关连的通行

1
2
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

打开回环

1
2
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

允许所有本机的访问

1
2
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT

在所有网卡上打开ping功能

1
2
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

限制ping的速率不超过3次/秒,同时不超过15台主机ping服务器

1
iptables -A INPUT -p icmp -m limit --limit 3/s --limit-burst 15 -j ACCEPT

允许管理员主机访问本地ssh服务

1
2
iptables -A INPUT -s 192.168.1.88 -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.88 -p tcp --sport 22 -j ACCEPT

允许DNS

1
2
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

打开22端口:ssh

1
2
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 22 -j ACCEPT

打开80端口:http

1
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

禁止其他未允许的规则访问

1
2
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

屏蔽单个IP

1
2
iptables -I INPUT -s 123.45.6.7 -j DROP
iptables -I INPUT -p tcp -s 123.45.6.7 --dport 22 -j DROP

解屏单个IP

1
iptables -D INPUT -s 123.45.6.7 -j DROP

屏蔽整个段

1
2
3
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #从123.0.0.1到123.255.255.254
iptables -I INPUT -s 124.45.0.0/16 -j DROP #从123.45.0.1到123.45.255.254
iptables -I INPUT -s 123.45.6.0/24 -j DROP #从123.45.6.1到123.45.6.254

删除已添加的iptables规则

1
2
3
4
5
# 将所有iptables以序号标记显示
iptables -L -n --line-numbers

# 删除INPUT里序号为8的规则
iptables -D INPUT 8

首先允许所有的包,然后再禁止有危险的包通过放火墙

1
2
3
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙

1
2
3
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

完整配置示例

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
40
41
42
43
44
45
46
47
48
49
50
51
52
# 完整配置示例
## 清除已有规则
iptables -F
iptables -X
iptables -Z

## 允许所有请求
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

## 允许回环
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

## 允许本机请求
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT

## 允许已同意请求
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## 允许PING
iptables -A INPUT -p icmp -m limit --limit 3/s --limit-burst 15 -j ACCEPT

## 允许DNS
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

## 允许SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 22 -j ACCEPT

## 允许SVN
iptables -A INPUT -p tcp --dport 3690 -j ACCEPT
iptables -A OUTPUT -p udp --dport 3690 -j ACCEPT

## 允许HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
## 允许HTTPS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

## 保存配置到文件
service iptables save
## 启动或重启防火墙
service iptables start
service iptables restart
## 查看防火墙状态
service iptables status
## 设置开机启动
chkconfig iptables on