防火墙配置
上一页
下一页

防火墙配置

Linux 内核包括 Netfilter 子系统,用来处理或决定网络传输头部进入或穿过你的服务器,目前所有的 Linux 防火墙都用该系统来做包过滤。

防火墙介绍

内核的包过滤系统如果没有一个用户态 (userspace) 界面来管理它的话对管理员来说几乎没有用。这正是 iptables 的目的。当一个包到达您的服务器,它从用户态 (userspace) 通过 iptables 传给 Netfilter 子系统,然后基于提供的规则去接受、操作或拒绝。因此,如果你能熟悉它的话,那么 iptables 就是您管理您防火墙所需的全部。

IP 伪装

IP 伪装的目的是为了允许您网络上那些有着私有的、不可路由的 IP 地址的机器可以通过做伪装的机器访问 Internet。来自您私有网络并要访问 Internet 的传输必须是可以操作的,也就是说回复要可以被路由回来以送到发出请求的机器上。要做到这一点,内核必须修改每个包 IP 地址以便回复能被路由回它这里,而不是发出请求的私有 IP 地址,因为它们对于 Internet 来说是不存在的。Linux 使用 Connection Tracking (conntrack) 来保持那个连接是属于哪个机器的,并相应地对每个返回包重新做路由。发自您私有网络的流量就这样被伪装成源于您的网关机器。这一过程在 Microsoft 文档中被称为 Internet 连接共享。

这可以用单条 iptables 规则来完成,也许基于您网络配置来说会有一些小的差异:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

上述命令假设您的私有地址空间是192.168.0.0/16,您与 Internet 相连的设备是 ppp0。语法分解如下所示:

  • -t nat -- 该规则将进入 nat 表

  • -A POSTROUTING -- 该规则将被追加 (-A) 到 POSTROUTING 链

  • -s 192.168.0.0/16 -- 该规则将被应用在源自指定地址空间的流量上

  • -o ppp0 -- 该规则应用于计划通过指定网络设备的流量。

  • -j MASQUERADE -- 匹配该规则的流量将如上所述 "跳转" (-j) 到 MASQUERADE (伪装) 目标。

在过滤表 (缺省表,在那里有着大多数或全部包过滤指令) 中的每条链 (chain) 都有一个默认的 ACCEPT 策略,但如果您还在网关设备上设置防火墙,那么您也许还要设置 DROP 或 REJECT 策略,这时您被伪装过的流量还需要被 FORWARD 链 (chain) 中的规则允许才能正常工作:

sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

上述命令将允许通过从您局域网到 Internet 的所有连接,这些连接所有的相关流量也都返回到发起它们的机器。

工具

有很多工具可以帮助您构建一个完整的防火墙,而不需要 iptables 的专业知识。偏好图形界面的,Firestarter 非常流行也易于使用,fwbuilder 则非常强大而且其界面对于用过诸如 Checkpoint FireWall-1 商业防火墙工具的管理员来说相当熟悉。如果您偏好有着纯文本配置文档的命令行工具,Shorewall 是个非常强大的解决方案,可以帮您为任何网络配置一个高级防火墙。如果您的网络相对简单,或如果您没有网络,那么 ipkungfu 将给您一个无需配置就可以工作的防火墙,也允许您通过编辑简单友好的配置文件来轻松设置更高级的防火墙。另一个感兴趣的工具就是fireflier,被设计成桌面防火墙应用程序。它由一个服务器 (fireflier-server) 和可选的 GUI 客户端 (GTK 或 QT) 组成,操作就象 Windows 中许多流行的交互式防火墙应用程序一样。

日志

防火墙日志主要是为了确认攻击、找出并解决您防火墙规则的问题以及注意您网络中不正常的活动。您必须在您防火墙中包含这些日志规则以便生成相应日志,虽然,日志规则必须优先于任何可应用的最终规则 (那些决定其目的包命运的规则,如ACCEPT、DROP 或 REJECT) 。

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

一个从本机发起的对 80 端口的请求将会在 dmesg 中生成一条日志,如下所示:

[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

上面的日志也会出现在/var/log/messages/var/log/syslog/var/log/kern.log 中。这一过程可以通过适当编辑 /etc/syslog.conf 或安装配置 ulogd 并用 ULOG 代替 LOG 来进行改变。ulogd 守护程序是一种用户态服务器可以监听来自内核的防火墙日志指令,并且能够将其写到任何您希望的文件中,甚至是 PostgreSQLMySQL 数据库。使用诸如 fwanalogfwlogwatchlire 日志分析工具将会很轻松地弄懂您的防火墙日志。

上一页
下一页
起始页