iptables防火墙


linux包过滤防火墙

netfilter

位于Linux内核中

Linux防火墙的“内核态”

iptables

位于/sbin/iptables,用于管理防火墙规则的工具

Linux防火墙的“用户态”

包过滤:网络层,针对IP数据包

处理包内IP,端口等信息


iptables防火墙

规则表

1
2
3
4
raw:确定是否对该数据包进行状态跟踪
mangle:为数据包设置标记
nat:修改数据包中的源,目标IP或端口
filter:确定是否放行该数据包

规则链

1
2
3
4
5
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
PREROUTING:进行路由选择前处理数据包
POSTROUTING:进行路由选择后处理数据包

动作

1
2
3
4
5
6
7
8
ACCEPT:允许通过	
DROP:丢弃数据包,无回应
REJECT:拒绝通过,必要时会给出提示
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。然后传给下一条规则继续匹配

1.png


规则表匹配顺序

1
raw-->mangle-->nat-->filter

规则链匹配顺序

1
2
3
入站:PREROUTING-->INPUT
出站:OUTPUT-->POSTROUTING
转发:PREROUTING-->FORWARD-->POSTROUTING

链内匹配顺序

依次检查,匹配则停止(LOG策略除外)

无匹配规则,则按该链默认策略处理

2.png


iptables基本语法

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

iptables参数

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
-t:指定表,默认filter表

-A:链尾追加规则
-I:链头(或指定位置)插入规则
-R:替换规则链中的条目
-Z:清空规则链中的数据包计算器和字节计数器
-X:删除用户自定的链. 要删除的链必须不存在其他参考.

-L:列出指定表中所有规则
-n:以数字形式显示地址,端口信息
-v:显示详细信息
--line-numbers:显示规则的序号

-D:删除链内指定序号的的一条规则
-F:清空指定表的所有规则
-P:为指定表指定链设置默认规则

-p:指定协议名
-s:指定源地址
-d:指定目的地址
-i:指定入站网卡
-o:指定出站网卡

--sport:指定源端口
--dport:指定目的端口
--tcp-flags:指定tcp标志位类型
--icmp-type:指定ICMP类型

-m multiport --sports 或-m multiport --dports:多端口匹配
-m iprange --src-range:IP范围匹配
-m mac --mac-source:mac地址匹配
-m state --state:状态匹配

注意

使用nat规则必须配置内核文件,开启路由转发功能

1
2
3
4
5
/etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p #生效内核配置文件

或echo "1" > /proc/sys/net/ipv4/ip_forward

导出iptables配置

iptables-save用于将linux内核中的iptables表导出到标准输出设备。

通常,使用shellI/O重定向功能将其输出保存到指定文件中。

使用此功能可能需要安装

1
yum install iptables-services

参数

1
2
-c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值;
-t:指定要保存的表的名称。


1
2
iptables-save -t filter > iptables.bak
cat iptables.bak


本地端口转发

1
2
3
4
5
6
7
8
开启路由转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward

发往442端口的流量转到22端口
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

允许目的为442端口的入站
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
---------------The End---------------
0%