程序员人生 网站导航

Linux 网络管理 IPTables 基本设置

栏目:服务器时间:2014-04-21 22:38:17

1. 引言

CentOS 内置了一个非常强劲的防火墙,统称为 iptables,但更正确的名称是 iptables/netfilter。iptables 是一个用户空间的模块。作为用户,你在命令行就是通过它将防火墙规则放进缺省的表里。netfilter 是一个核心模块,它内置于内核中,进行实际的过滤。iptables 有很多前端图像界面可以让用户新增或定义规则,但它们很多时不及使用命令行般有灵活性,而且限制用户了解实际发生的事情。我们将会学习 iptables 的命令行界面。

在我们正式应付 iptables 前,我们必须对它的运作有一个基本的理解。iptables 利用到 IP 地址、协议(tcp、udp、icmp)及端口这些概念。我们不需要成为这些方面的专家(因为我们可以找到所需的信息),但对它们有一般的理解会有帮助。

iptables 将规则放进缺省的规则链(INPUT、OUTPUT 及 FORWARD),而所有流量(IP 封包)都会被相关的规则链检查,根据当中的规则判断如何处理每个封包,例如:接纳或丢弃它。这些动作称为目标,而最常见的两个缺省目标就是 DROP 来丢弃封包;或 ACCEPT 来接纳封包。

规则链

我们可以在过滤表的 3 条缺省规则链内加入规则,来处理通过这些规则链的封包。它们分别是:

INPUT - 所有以主机为目的地的封包。

OUTPUT - 所有源自主机的封包。

FORWARD - 这些封包的目的地或来源地都不是主机,但路经主机(由它选路)。假若你的主机是一个路由器,这条规则链将会被应用。

我们将会花费最多时间处理 INPUT 规则链,藉以过滤进入我们的机器的封包 —— 亦即是将坏蛋拒诸门外。

规则是以列表的方式被加进每条规则链。每个封包会被头一条规则开始检查,才至最后一条。假若封包与其中一条规则吻合,相应的动作便会被执行,例如接纳(ACCEPT)或丢弃(DROP)封包。一旦有吻合的规则,这个封包便会按照规则来处理,而不再被规则链内的其它规则所检查。假如封包通过所有检查而不符合任何规则链内的任何一条规则,那应这条规则链的缺省动作将会被执行。这就是所谓的缺省政策,可以设置为接纳(ACCEPT)或丢弃(DROP)封包。

规则链拥有缺省政策这个概念带来两个基本的可能性,而我们必须考虑它们才能决定如何组织我们的防火墙。

1. 我们可以缺省一个政策来丢弃(DROP)所有封包,然后刻意加入规则来接纳(ACCEPT)源自被信任的 IP 地址的封包,或者打开那些提供服务的端口,如:bittorrent、FTP 服务器、网页服务器、Samba 文件服务器等。

又或者,

2. 我们可以缺省一个政策来接纳(ACCEPT)所有封包,然后刻意加入规则来拦截(DROP)来自有问题的 IP 地址或系列的封包,也或者阻止封包进出只作私人用途或未提供服务的端口。

普遍来说,第一个方法多数用在 INPUT 规则链,因为我们会希望控制哪些东西可以访问我们的机器;而第二个方法多数用在 OUTPUT 规则链,因为我们多数信赖那些离开(源自)我们机器的封包。

2. 准备开始

在命令行上使用 iptables 需要 root 的权限,因此你必须化身为 root 用户来做下面的事情。

注意: 我们将会停用 iptables 及复位你的防火墙规则,因此假若你依赖你的 Linux 防火墙作为第一道防线,请特别留意这点。

iptables 应该缺省被安装在所有 CentOS 3.x、4.x 及 5.x 上。你可以这样来检查 iptables 是否已安装在你的系统上:

$ rpm -q iptables iptables-1.3.5-1.2.1

要知道 iptables 是否正在运作中,我们可以检查 iptables 这个模块是否已被装入,并利用 -L 这个选项来查看活动的规则:

# lsmod | grep ip_tables ip_tables 29288 1 iptable_filter x_tables 29192 6 ip6t_REJECT,ip6_tables,ipt_REJECT,xt_state,xt_tcpudp,ip_tables

# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ACCEPT udp -- anywhere anywhere udp dpt:ipp ACCEPT tcp -- anywhere anywhere tcp dpt:ipp ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

从上面我们可看见缺省的规则,与及访问 SSH 服务用的规则。

如果 iptables 并未被执行,你可以这样启用它:

# system-config-securitylevel

3. 创建一组简单的规则

注意: 此刻我们将会清除缺省的规则集。如果你是通过 SSH 远程连接到一台服务器来进行学习,你有可能会将自己拒诸这台机器之外。你必须将缺省的输入(input)政策改为接纳(accept),然后才清除现有规则,接著你要预先加入一条容许你自己访问机器的规则,避免你将自己封锁在外。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐