本文旨在简单介绍Linux下防火墙软件iptables
的使用及相关知识。
1. Netfilter
一般依据防火墙的作用域范围,Linux下提供了三种防火墙机制:Netfilter(同时适用单一主机网域和区网域)、TCP Wrapper(常用于单主机网域)和Proxy Server(常用于区网域),而本文要讲的是iptables
这个软件则是由Netfilter提供的,通过分析进入主机的网络,主要是比对封包的表头数据比如MAC、IP等,进而决定对其放行或是阻挡。
2. iptables几个重要概念
iptables
下定义了几个表格,而每个表格又定义了自己的预设政策和规则,来实现不同的功能。
2.1 filter
主要跟进入的Linux本机的封包相关,且是默认的表格,主要包括如下三种类型的链:
- INPUT:进入本机的封包;
- OUTPUT:本机发出的封包;
- FROWARD:转发,跟NAT表相关;
举个简单的例子:
iptables -A INPUT -p tcp -s 192.168.10.50 --dport 21:23 -j DROP
2.2 nat
主要是用来做源、目标地址和端口转换的,包括如下常见的三种类型的链:
- PREROUTING:进入路由之前要判断的规则(DNAT/REDIRECT),可以修改封包的目标IP;
- POSTROUTING:进入路由之后要判断的规则(SNAT/MASQUERADE),可以修改封包的源IP;
- OUTPUT:发出的封包规则;
举两个相关的简单例子:
iptables -t nat -A POSTROUTING -s 192.168.10.100 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SDAT --to-source 10.106.5.14
2.3 mangle
这个一般用的不多特别对于初学者,此处不做赘述。
3. iptables软件的使用
3.1 预设防火墙policy
当所有设定的规则没匹配上时,会按照预设的防火墙policy来决定流量的处理。
如下是单机最常见的防火墙预设设定:
iptables -P INPUT DROP
iptables -P OUYPUT ACCEPT
iptables -P FROWARD ACCEPT
iptable -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
3.2 规则添加格式
iptables -A <chain_name> [optional params]
默认操作filter
表,如果要添加NAT规则,需要加上参数-t nat
optional params:
-s/-d <ipaddrs>: 源/目标地址IP
-p <protocol>: 协议,常见的取值有tcp、udp、icmp、all
--sport/--dport <port>: 源/目标port
-i/-o <net_device>: 源/目标网卡设备
-j <action>: 操作,常见的取值有ACCEPT、DROP、LOG等
在实际添加防火墙规则时,要注意添加的规则顺序以防有些规则根本不会生效,因为当有流量接入时,iptables会自上而下对规则进行扫描,一旦规则匹配上则停止继续扫描。
3.3 规则保存
直接通过iptables
命令添加的规则是临时生效的,一旦机器重启或者关机,该规则就会失效。因此建议把规则添加到iptables的规则配置文件(比如ubuntu 14.04下/etc/iptables/rules.v4),而后通过命令iptables-restore < /etc/iptables/rules.v4
来生效。
网友评论