一、iptables参数简介

1. 清理参数

1
2
3
-F	清除所有规则,不会处理默认规则 
-X 删除用户自定义的链
-Z 链的计数器清零

2. 查询显示参数

1
2
3
4
5
-n	以数字形式显示IP
-L 以列表形式显示所有规则信息
-t 指定表,也可以不指定默认是filter
-v 表示显示详细规则信息,包含匹配计数器数值信息
--line-number 显示规则序号信息

3. 配置参数

  • 增删改参数
1
2
3
4
5
-t	指定表,也可以不指定默认是filter 
-A 添加规则到指定链的结尾,最后一条
-I 添加规则到指定链的开头,第一条
-D 表示删除规则从相应链上
-R 指定将配置好的规则信息进行替换
  • 规则参数
1
2
3
4
5
6
7
8
9
-P	设置链表的默认规则 
-p 指定协议(all.tcp,udp.icmp)默认all
-s 指定匹配源地址信息
-d 指定匹配目的地址信息
--dport 指定目的端口
--sport 指定源端口
-j 处理的行为[ACCPET接收、DROP丢弃、REJECT拒绝]
-i input 匹配进入的网卡接口, 只能配置在INPUT链上
-o output 匹配出去的网卡接口, 只能配置在OUTPUT链上
  • 扩展模块参数
1
2
3
4
-m	使用扩展模块
-m state 可匹配网络状态
-m multiport 可匹配多个不连续的端口
-mlimit --limit n/{second/minute/hour} 限制限定时间包的允许通过数量及并发数

更多命令可以使用man iptables 或iptables -h

二、初始化

1. 启动

1
2
/etc/init.d/iptables start
chkconfig iptables on

2. 清除规则

1
2
3
iptables -F              --- 清除防火墙默认规则
iptables -X --- 清除防火墙自定义链
iptables -Z --- 清除防火墙技术器信息

三、查看iptables规则

1. status命令

1
2
3
4
5
6
7
8
9
10
/etc/init.d/iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

默认显示的filter表的规则

2. 常用查询参数组合

1
2
3
4
5
6
7
8
1)	列表显示规则并显示IP
iptables -n -L
2) 指定显示NAT表相关信息
iptables -t nat -n -L
3) 表示显示详细规则信息,包含匹配计数器数值信息
iptables -n -L -v
4) 显示规则序号信息
iptables -L -n --line-number

四、实战1:常用命令组合

提示:所有操作默认都是正对filter表,所以以下命令中,凡是有[-t filter]命令的,都可以省略

1. 阻止用户访问服务器的22端口

1
2
3
4
5
6
7
8
9
10
11
12
1)	添加规则
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
2) 删除规则
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP
iptables -t filter -D INPUT 规则序号
3) 插入规则
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP
-I参数默认插入最前面,也可指定插入的序号
4) 替换规则
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP
-R参数需指定要替换的规则序号

2. 阻止某网段或主机访问服务端指定端口服务

1
2
3
4
5
6
7
8
9
1)	阻止某网段访问服务器22端口
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
2) 阻止某主机访问服务器22端口
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
3) 除某主机访问外,都不能访问服务器22端口
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
使用感叹号[!]对规则取反
4) 阻止某主机从指定网卡上访问服务器22端口
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP

3. 指定阻止访问多个端口

1
2
3
4
5
1)	阻止访问连续的多个端口
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP
2) 阻止访问不联系的多个端口
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP
-m 使用扩展模块. multiport->可以匹配多个不连续端口信息

五、实战2:组合操作

1. 服务器禁ping

实现ping功能测试链路是否正常,基于icmp协议实现的,icmp协议有多种类型:主要关注如下两个

  • icmp-type 8:请求类型
  • icmp-type 0:回复类型
1
2
3
4
5
6
7
8
9
1)	禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
2) 禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP
3) 所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP

2. 实现防火墙状态机制控制[FTP]

  • 链接状态
1
2
3
4
NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的
  • 控制命令
1
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

3. 限制指定时间包的允许通过数量及并发数

  • 知识点:
1
2
3
4
-m limit --limit n/{second/minute/hour}
指定时间内的请求速率“n”为速率,后面为时间分别为:秒、分、时
-m --limit-burst [n]
在同一时间内允许通过的请求“n”为数字,不指定默认为5
  • 控制命令
1
iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT