Iptables

#1.语法

iptables [选项][参数]

#2.选项

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

#3.参数

iptables 命令选项输入顺序:

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

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

规则链名:
INPUT: 处理入数据包
OUTPUT: 处理出数据包
FORWARD: 处理转发数据包
PREROUTING: 用于目标地址转换(DNAT)
POSTROUTING: 用户源地址转换(SNAT)

动作包含:
accept: 接受数据包
drop: 丢弃数据包
redirect: 重定向、映射、透明代理
snat: 源地址转发
dnat: 目标地址转发
masqueread: ip伪装(nat), 用于adsL
log: 日志记录

#4.基本事例

#4.1清除iptables规则

iptables -F 
iptables -X
iptables -Z

#4.2 设置默认规则

iptables -P INPUT reject 
iptables -P PORWARD reject
iptables -P OUTPUT ACCEPT

#4.3 设置本地回环

iptables -A INPUT -i lo -j ACCEPT

#4.4 允许已建立或相关连的连通

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#4.5 开放端口【建议加上-m】

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

#4.6 封禁IP

iptables -I INPUT -s 124.10.13.10 -j DROP

#4.7 其他常用命令

iptanles -nvL  查询已经添加的规则链
iptables -nL --line-numbers 将所有iptables以序号标记显示
iptables -D INPUT 8 删除input链序号为8的规则
iptables-save > /root/iptable.rules 保存到文件
iptables-restore < /root/iptable.rules 重载

#5. 其他用法

#5.1 默认input, output都reject

iptables -P INPUT  -j reject 
iptables -P OUTPUT -j reject 

#5.2 开放端口事例

# 允许在eth0上接入ssh
iptables -A INPUT  -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
 
# 允许特殊网段接入ssh
iptables -A INPUT -i eth -p tcp -s 192.168.100.0/24 --dport 22 -m state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 同时开放 22,443,80 
iptables -A INPUT  -i eth0 -p tcp -m multiport --dport 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sport 22,80,443 -m state --state ESTABLISHED -j ACCEPT 

# 要连接外面ssh
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

#5.3 限流

5.3.1 限制端口最大链接数

1
2
3
4
5
# connlimit-above 限制3次, connlimit-mask 限制IP组情况,默认为32表示每个IP限制3次, 0表示所有IP限制为3次
iptables -I INPUT  -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 0 -j DROP
iptables -I OUTPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 0 -j DROP

# 多端口 --dport 10000:10024
#5.3.2 限制端口传输速度
1
2
iptables -A INPUT -p tcp --sport 5037 -m limit –limit 60/s -j ACCEPT
iptables -A INPUT -p tcp --sport 5037 -j DROP 

#5.4 转发