0%

防火墙

防火墙

iptables 是建立在 netfilter 架构基础上的一个包过滤管理工具。
用户通过 /sbin/iptables 命令来管理 iptables,和 route 命令相同,iptables 命令的效果在重新启动以后就不再有效。

可以使用 /etc/rc.d/init.d/iptables save 将当前 iptables 规则写到 /etc/sysconfig/iptables 文件中,那么每次开机时/etc/rc.d/init.d/iptables start 命令会使 /etc/sysconfig/iptables 中的规则生效

iptables构成

iptables 是由几张表所组成,每张表又由几条链组成,每张表负责不同的封包处理机制,每条链负责不同的封包走向,具体采取的策略由链里的规则设定

  • filter 表: 包含真正的防火墙过滤规则,用于过滤包
    • INPUT 链: 存在于 filter 表,主要用于处理进入本机的包
      • OUTPUT 链: 存在于 filter 表,主要用于处理离开本机的包
      • FORWARD 链: 存在于 fileter 表,主要用于处理穿过本机的包
  • Nat 表 : 包含源和目的地址及端口转换使用的规则,用于做地址转换
    • PREROUTING 链: 存在于 nat 表,主要用于在包刚刚到达防火墙时改变目的地址(DNAT)
    • POSTROUTING 链: 存在于 nat 表,主要用于在包就要离开防火墙之前修改来源地址(SNAT)
    • OUTPUT链:存在于nat表,主要用于改变本地产生的包的目的地址
  • mangle 表: 允许改变包的内容来进一步矫正包,主要用于给数据包打标记,这些标记会被filter表中的规则检查

iptebles 配置文件在/etc/sysconfig/iptables

1
2
3
4
5
6
7
8
#配置保存命令
service iptables save
# 启动
service iptables start
# 停止
service iptables stop
# 重启
service iptables restart

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# table 指定表名
# NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对filter 表操作
# chain 链名
# rules 规则
# target 动作如何进行
iptables [-t table] <-A|I|D|R>chain [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [--sport 源端口号] [-d 目标ip地址|目标子网] [--dport 目标端口号] <-j 动作>

如:
设置 INPUT 规则,将所有基于 icmp 协议的数据包全部丢弃
iptables -A INPUT -p icmp -j DROP
对链的操作的option有
-L 列出当前的 iptables 的规则
-vnL 列出所有 iptables 相关规则的详细参数
-A 追加一条规则(默认添加道最后)
-I 插入一条规则
-D 删除一条规则
-P 设置某条链的默认规则
-F 清空规则
如:追加一条 INPUT 记录,将源目的地址为 200.200.200.200 的数据包丢弃
iptables -A INPUT -s 200.200.200.200 -j DROP

规则的操作命令
按网络接口匹配
-i eth0 匹配数据进入的网络端口
-o eth0 匹配数据流出的网络端口
按来源目的地址匹配
-s ip 匹配来源 IP
-d ip 匹配目的 IP
例:
在 INPUT 链里追加一条规则,所有从 eth0 口进入的源地址为 200.200.200.200 的数据包全部丢弃
iptables -A INPUT -i eth0 –s 200.200.200.200 –j DROP

在 INPUT 链里追加一条规则,所有源地址为 200.200.200.200 的基于 tcp 协议的数据包允许通过 按来源目的端口匹配
--sport 来源端口
--dport 目的端口
例:
在 INPUT 链里追加一条规则,所有基于 TCP 的源端口为 21 号端口的数据包,全部丢弃。
iptables -A INPUT -p tcp -sport 21 -j DROP

动作处理 -j 动作
ACCEPT 接收数据包
DROP 丢弃数据包
REDIRECT 将数据包重定向到本机或另一台主机的某个端口,通常能实现透明代理或对外开放内网的某个服务
REJECT 拦截该数据封包,并发回封包通知对方
SNAT 源地址转换,即改变数据包的源地址,在NAT表的POSTROUTING链上进行该操作
DNAT 目的地址转换,即改变数据包的目的地址,在NAT表PREROUTING链上进行该动作
MASQUERADE ip伪装,只能用于ADSL等拨号上网的IP伪装(也就是主机的IP是由ISP动态分配的),如果主机的IP地址是静态固定的,就要使用SNAT
LOG 日志功能,降负荷规则的数据包相关信息记录下来

定义默认策略

1
# iptables [-t table] <-P> <chain> <动作>

查看iptables规则

1
2
# iptables [-t table] <-L> [chain]
iptables -nv -L

欢迎关注我的其它发布渠道