Linux防火墙
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言
一旦连上网络,就充满各种危机。
许多人基于各式各样的理由,想侵入你的系统,这种人俗称为 cracker。
尤有甚者,近年来,cracker 圈里流行一种结合病毒行为及系统漏洞的入侵工具,称为网虫(Netwrom),它以类似网络机器人(robot)的模式,到处扫射咬噬,已形成泛滥。
比如:Lion、CodeRed、Nimda 等。
现在你只要将一台新安装好的Win平台的机器连上网络,不消几分钟之内,即可钓中一堆 CoreRed 或 Nimda 咬噬的封包。
传统上,为了保护自身内部网络的安全,另一方面,也为了可以做网络进出交通的控管,通常所采用的方法是建构一层网络防火墙系统,在外部网络和内部网络之间,构筑一道屏障,以做为安全的区隔,使得特定的封包才能进入我们的内部网络,而将大部份奇奇怪怪的封包,如 Nimda 网虫扫射的封包,完全隔离在外,但同时,又可允许内部网络的机器自在地对外联机,内部的使用者上网的行为甚少需要有任何改变。
换言之,防火墙系统可区隔网络封包,使内部网络中流通的封包十分干净,更让网络管理者在安装新机器时,比如 NT/W2K,不致于一装好、连上网络就中标。
单就这点,防火墙系统对校园网络管理者而言,就十分有价值。
不过,防火墙系统十分昂贵,平民百姓及小单位的我们实在买不起,而且其功能也未必就如其所宣称的那样足以符合我们的需求。
因此许多前贤开始寻找其它替代的方案,在低成本、高效益、弹性大的考量下,使用FreeBSD/OpenBSD/Linux 来建构小型防火墙系统蔚为流行。
甚至许多公司拿 FreeBSD/Linux的防火墙机制为基础,制造出商用的防火墙系统;国内某一知名的防火墙公司,其防火核心即源自于 Linux。
什么是网络防火墙?
根据前述,在此我给防火墙一个简单的定义(这是OLS3自己的说法,若有误谬,请不吝指正)。
"防火墙" 是指一套用来明显区隔两个(或以上)网络之间的一组软硬件装置,使网管人员得以事先制定种种安全规则,针对网络交通及安全程度,进行过滤控制和调整,最大的目的在于防止网络遭受入侵。
防火墙的种类?
防火墙大概可以分为以下三种:
·封包过滤式(Packet Filtering Firewall)
·网关式
·代理式
简单说明如下:
所谓封包过滤式防火墙是指:利用操作系统,在 IP 层及传输层运作,藉由检查封包的 IP 表头,来决定该封包的路由(放行/转向/丢弃/拒绝),而达到保护自身网络的功能。
本次研习要介绍的防火墙,即属于封包过滤式的。
这种防火墙的优点是:效能好、控管性高、成本低廉。
所谓网关式防火墙是指:所有外部网络可以到达的地方,仅止于这台网关主机,而内部网络的使用者欲连至外部网络,需要先登入这台网关主机。
所谓代理式防火墙是指:针对每一种应用服务程序,做代理伺服的工作,clietn端的使用者其实是和这台代理主机连接,而非外部网络的主机,但却可使client端的使用者,感觉到他真的在取用外部网络的主机服务一样,此种特性,称为 Proxy。
代理式防火墙的优点是:可确保资料的完整性,只有特定的服务才会被交换,并可针对其内容做过滤防毒,可进行高阶的存取控制。
现代功能完备的的防火墙,经常结合封包过滤及Proxy代理这二种特性,不过价格相常地高。
以中小学校园网络而言,封包过滤式的防火墙,其实已足敷需要了。
Linux 防火墙入门:网络拓朴
所谓网络拓朴(Topology),简单地说,是指网络的架构,什么地方摆放路由器、什么地方摆放主机、集线器、封包路由如何安排等细节,经由一番规划之后所呈现的网络结构。
内部网络欲引入防火墙系统,经常必须改变网络拓朴,针对防火墙的特性,及欲达成的目标效益,选择最恰当的结构组成。
因此之故,网络拓朴做一番变动,是必然的结果,各位要先有点心理准备才行。
心理层有了准备之后,一切也会自然起来,不致于有无谓的害怕。
最简单的防火墙拓朴是城堡式的防火墙系统(bastion firewall system),其结构如下图所示:
Figure 1. 城堡式的防火墙
上图中,配有二片网络卡的这台防火墙主机,我们称之为 dual-homed (二片网络界面) 的 bastion firewall。
本次研习,将以这种简单的拓朴,让大家熟悉基本的防火墙建构过程。
当然,防火墙系统还有许多种变化,不过,由于时间的因素,无法在本次研习中一一介绍。
我们来看一下敝校麻豆国中的网络拓朴:(课堂上看图,该图不列在本讲义中)
Linux 防火墙入门:所需配备
以下介绍需要的配备:
· 一部 PC (P100以上等级) + 二片网络卡(100M) , 硬盘不必太大(当然 PC 的等级越高越好,不过太高也是一种浪费)
· 交换式集线器 + 若干条 RJ45 网络线
· RedHat 7.2 (或 RedHat 6.x)
Linux 防火墙入门:基本观念
以下介绍防火墙入门时,所需要的一些基本观念。
TCP/IP
Figure 2. TCP/IP 四层架构
封包过滤
所谓封包过滤,是一种小软件,它藉以检查 IP 封包的表头,来决定该封包的命运(接受/转向/丢弃/拒绝)。
在 Linux 中,封包过滤的功能,已整合进入 Linux 核心(kernel)之中。
如何得知核心目前是有支持封包过滤功能呢?
查看此檔 /proc/net/ip_fwchains 是否存在便知(适用Linux kernel 2.1.x~2.x)。
若此檔不存在,则核心必须重新制作,打开封包过滤选项,重新编译安装之。
IP 封包,如下图所示:
Figure 3. IP 封包
Figure 4. TCP 封包
封包过滤程序,即根据 IP 封包的表头中的来源IP、目的IP、封包型态、取自TCP/UPD表头的 port 及其它一些旗标信息,来决定此封包最后的命运。
至目前为止,Linux 核心封包过滤已发展到了第四代:
第 1 代: Linux 1.x 移植自 BSD 的 ipfw第 2 代: Linux 2.0 ipfwadm第 3 代: Linux 2.1~2.x ipchains第 4 代 : Linux 2.4~ iptables
服务信道 (Service Ports)
所谓服务信道(port)是指:主机中应用程序对外服务的管道。
port 的范围从 0 到 65535。
1~1023 保留给系统专用,仅有 root 权限者才能使用,称之为:privileged ports (特权信道)。
1024 ~ 65535 则称为 unprivileged ports (非特权信道)。
非特权信道有二种用途:
· 开放给系统中其它应用服务程序使用,如 mysql 用 3306, X11 用 6000。
· 当使用 client 端程序(如 ssh),连接到其它 server 主机的服务时(如 ssh server),系统会在 1024 ~ 65535 中,随机抽出一个未被占用的 port,指定给 client 联机端,来当作 client 端这边的通讯 port,此时 client端的IP、port 以及 server端的IP、port,四者形成联机时唯一的连结识别,当双方完成联机所需的沟通时,我们说:client 端和 server 端的联机,已经建立(ESTABLISHED)。
(我们称这四者形成一组 socket pair。
)
如下图所示:
Figure 5. client 和 server 联机图 (1)
Figure 6. client 和 server 联机图 (2)
常见的服务信道
Table 1. port list
IANA : port 的完整定义
IANA port numbers
封包的种类
有三种 IP 封包,我们称之为 IP 网络讯息。
这三种封包,正是封包过滤型防火墙所要专注的对象。
它们各有不同的特性,如下所示:
· ICMP (network layer / IP control / status messages)
· UDP (request / response)
· TCP (syn, syn/ack, ack 三向交握)
其过程,如下图所示。
Figure 7. ICMP ping and pong
Figure 8. UDP request/response
Figure 9. TCP 三向交握
私有 IP 空间
RFC 1918 里规定了三段范围的 IP,供私有网络(private network)实验用途使用,在公开的网络上它们不会被路由,正因为这种特性,因此极适合拿它们当作内部网络的 IP,从而达到保护内部网络的目的。
列出如下:· Class A : 10.0.0.0/8 (整个 10.0.0.0 的 A Class 的 IP,约 1 千 6 百多万个可用 IP
· Class B : 172.16.0.0/12 (共 16 个 B Class 的 IP,由 172.16.0.0 ~ 172.31.0.0,约一百万个可用 IP)
· Class C : 192.168.0.0/16 (共有 255 个 C Class 的 IP,即:192.168.1.0 ~ 192.168.255.0,约 65000 个可用 IP NAT
何谓 NAT ?
NAT 的 Network Address Translation 的简称,简单来说,它是一种转换地址的技术,经常运用在防火墙的建置上,
使得内部的私有 IP,转换成公开的 IP,而能和外界沟通。
IDS
何谓 IDS ?
IDS 是 Intrusion detection system 的简称(入侵侦测系统),它是一种监测封包进出、比对入侵型态、预防入侵攻击,并能适时提出警告的防御系统。
OLS3 推荐的 IDS 是 Snort,不输商用专业级的入侵侦测系统。
Figure 10. 可爱的 Snort
DMZ
何谓 DMZ ?
DMZ 是 De-militarized zone 的简称(非军事区),它是内部网络(军事区)和外部网络之间的一小段网络,该区可受IDS 的侦测保护,亦可受防火墙的监控,或受其它安全机制的检测,有一点接近公开的网段,但却可以受到整个防火墙系统的保护。
封包过滤预设政策(Default Packet-Filtering Policy)
有二种预设的政策,设定防火墙时,要选择使用那一种。
1. 丢弃所有,欲放行,需用设定将它打开。
(deny-everything policy)
2. 接受所有,欲丢弃,需用设定将它关闭。
(accept-everything policy)
第一种比第二种安全,在设定上比较单纯。
但第二种,比较容易使用,唯较容易忽略了某些考量。
Linux 防火墙入门:架设步骤
以下介绍防火墙的架设步骤
1.备妥硬件及连接线
2.按预定的网络拓朴串接
3.安装OS,打开核心支持
4.设定防火墙规则
5.测试
6.校调
7.正式启用
8.观察运作情形,视情况再作调整
Linux 防火墙入门:ipchains manpage
ipchains 的 manpage
IPCHAINS(8) IPCHAINS(8)
NAME
ipchains - IP firewall administration
SYNOPSIS
ipchains -[ADC] chain rule-specification [options]
ipchains -[RI] chain rulenum rule-specification [options]
ipchains -D chain rulenum [options]
ipchains -[LFZNX] [chain] [options]
ipchains -P chain target [options]
ipchains -M [ -L | -S ] [options]
DESCRIPTION
Ipchains is used to set up, maintain, and inspect the IP
firewall rules in the Linux kernel. These rules can be
divided into 4 different categories: the IP input chain,
the IP output chain, the IP forwarding chain, and user
defined chains.
For each of these categories, a separate table of rules is maintained, any of which might refer to one of the user-
defined chains. See ipfw(4) for more details.
TARGETS
A firewall rule specifies criteria for a packet, and a
target. If the packet does not match, the next rule in
the chain is the examined; if it does match, then the next
rule is specified by the value of the target, which can be
the name of a user-defined chain, or one of the special
values ACCEPT, DENY, REJECT, MASQ, REDIRECT, or RETURN. ACCEPT means to let the packet through. DENY means to
drop the packet on the floor. REJECT means the same as
drop, but is more polite and easier to debug, since an
ICMP message is sent back to the sender indicating that
the packet was dropped. (Note that DENY and REJECT are
the same for ICMP packets). [Note: this is incorrect; set-
ting ICMP to REJECT will cause ICMP port unreachables to
be sent!]
MASQ is only legal for the forward and user defined
chains, and can only be used when the kernel is compiled
with CONFIG_IP_MASQUERADE defined. With this, packets
will be masqueraded as if they originated from the local
host. Furthermore, reverse packets will be recognized as
such and they will be demasqueraded automatically, bypass-
ing the forwarding chain.
REDIRECT is only legal for the input and user-defined
chains and can only be used when the Linux kernel is com-
piled with CONFIG_IP_TRANSPARENT_PROXY defined. With this, packets will be redirected to a local socket, even
if they were sent to a remote host. If the specified
redirection port is 0, which is the default value, the
destination port of a packet will be used as the redirec-
tion port. When this target is used, an optional extra
argument (the port number) can be supplied.
If the end of a user-defined chain is reached, or a rule
February 8, 1998 1
IPCHAINS(8) IPCHAINS(8)
with target RETURN is matched, then the next rule in the previous (calling) chain is examined. If the end of a
builtin chain is reached, or a rule in a builtin chain
with target RETURN is matched, the target specified by the chain policy determines the fate of the packet.
OPTIONS
The options that are recognized by ipchains can be divided into several different groups.
COMMANDS
These options specify the specific action to perform; only one of them can be specified on the command line, unless otherwise specified below. For all the long versions of
the command and option names, you only need to use enough letters to ensure that ipchains can differentiate it from
all other options.
-A, --append
Append one or more rules to the end of the selected
chain. When the source and/or destination names
resolve to more than one address, a rule will be
added for each possible address combination.
-D, --delete
Delete one or more rules from the selected chain.
There are two versions of this command: the rule
can be specified as a number in the chain (starting
at 1 for the first rule) or a rule to match.
-R, --replace
Replace a rule in the selected chain. If the
source and/or destination names resolve to multiple addresses, the command will fail. Rules are num-
bered starting at 1.
-I, --insert
Insert one or more rules in the selected chain as
the given rule number. So, if the rule number is
1, the rule or rules are inserted at the head of
the chain.
-L, --list
List all rules in the selected chain. If no chain
is selected, all chains are listed. It is legal to specify the -Z (zero) option as well, in which case no chain may be specified. The exact output is effected by the other arguments given.
-F, --flush
Flush the selected chain. This is equivalent to deleting all the rules one by one.
February 8, 1998 2
IPCHAINS(8) IPCHAINS(8)
-Z, --zero
Zero the packet and byte counters in all chains.
It is legal to specify the -L, --list (list) option
as well, to see the counters immediately before they are cleared; if this is done, then no specific chain can be specified (they will all be displayed
and cleared.
-N, --new-chain
Create a new user-defined chain of the given name. There must be no target of that name already.
-X, --delete-chain
Delete the specified user-defined chain. There must be no references to the chain (if there are
you must delete or replace the referring rules before the chain can be deleted). If no argument
is given, it will attempt to delete every non-
builtin chain.
-P, --policy
Set the policy for the chain to the given target.
See the section TARGETS for the legal targets. Only non-userdefined chains can have policies, and neither built-in nor user-defined chains can be
policy targets.
-M, --masquerading
This option allows viewing of the currently mas-
queraded connections (in conjuction with the -L
option) or to set the kernel masqerading parameters
(with the -S option).
-S, --set tcp tcpfin udp
Change the timeout values used for masquerading.
This command always takes 3 parameters, represent-
ing the timeout values (in seconds) for TCP ses-
sions, TCP sessions after receiving a FIN packet,
and UDP packets, respective
Linux 防火墙入门:ipchains 的结构 Figure 11. ipchains 结构图
Figure 12. ipchains 指令结构图
ipchains 指令表中译版
以下由 OLS3(ols3@.tw) 中译,翻得不好,请见谅。
(您可以自由传播)使用版本:ipchains 1.3.9, 17-Mar-1999使用法: ipchains -[ADC] 规则链规则设定[选项] ipchains -[RI] 规则链规则编号规则设定[选项] ipchains -D 规则链规则编号[选项] ipchains -[LFZNX] [规则链] [选项] ipchains -P 规则链处置方式[选项]ipchains -M [ -L | -S ] [选项]ipchains -h [icmp] (显示使用方法, 或 ICMP 信息)命令:可用长名或简称,有些可以附加选项.(以 -- 开头者为长名,以 - 开头者为简称)--add -A 规则链 附加至指定的规则链中 --delete-D 规则链 由指定的规则链中删除一条规则 --delete-D 规则链规则编号 由指定的规则链中,删除某一指定规则编号的规则 (编号由1开始)--insert-I 规则链[规则编号]插入规则链时,使用规则编号的方式插入 (编号由1开始) --replace -R 规则链规则编号 取代某一条规则编号的规则 --list-L [规则链]列出指定的规则链或所有的规则链中的规则 --flush -F [规则链]删除指定的规则链或所有的规则链中的规则 --zero-Z [规则链]清空计数指定的规则链或所有的规则链中的规则 --check -C 规则链在指定的规则链中,测试封包 --new -N 规则链 开启一个新的使用者自订的规则链 --delete-chain -X 规则链 删除使用者自订的规则链 --policy-P 规则链处置方式 更改规则链的预设政策为某一处置方式 --masquerade -M -L列出现有的伪装封包联机 --set -M -S tcp tcpfin udp 设置伪装封包逾时数值选项:--bidirectional -b 插入两值: 一个是 -s ,一个是 -d 反过来(双向之意)--proto -p [!] proto 协议: 使用名称或数字, eg. `tcp' or 6--source -s [!] address[/mask] [!] [port[:port]] 来源地址设定 --source-port [!] [port[:port]] 来源port设定 --destination -d [!] address[/mask] [!] [port[:port]] 目的地址设定 --destination-port [!] [port[:port]] 目的port设定 --icmp-type [!] typename 设立 ICMP 的型态 --interface -i [!] name[+] 网络接口名称 ([+] 使用万用字符)--jump -j 处置方式 [port] 跳到指定的处置方式 ([port] 做 REDIRECT 之用)--mark -m [+-]mark 数值用来标示符合比对规则的封包 --numeric -n 使用数字来显示地址及 port--log -l 对符合比对规则的封包,打开核心记录文件的功能 --output -o [maxsize] 输出比对符合的封包至网络连结设备 --TOS -t and xor 针对 TOS 字段做 and 或 xor mask 运算 --verbose -v 详细模式 --exact -x 显示完整的封包数及计数值[!] --fragment -f 仅比对第二个或后续的fragments[!] --syn -y 凡 SYN 有设立的 TCP 封包才符合比对规则[!] --version -V 显示封包的版本 --line-numbers 列出编号 --no-warnings关闭所有警告讯息
Linux 防火墙入门:iptables manpage
iptables manpage 中译
(由 OLS3 翻译,未完,翻得不好,请见谅。
)
IPTABLES(8)封包过滤管理语法 iptables -[ADC] chain rule-specification [options] iptables -[RI] chain rulenum rule-specification [options] iptables -D chain rulenum [options] iptables -[LFZ] [chain] [options] iptables -[NX] chain iptables -P chain target [options] iptables -E old-chain-name new-chain-nameDESCRIPTION Iptables is used to set up, maintain, and inspect the tables of IP packet fil ter rules in the Linux kernel. Several different tables may be defined. Each table contains a number of built-in chains and may also contain user-defined chains. Each chain is a list of rules which can match a set of packets. Each rule specifies what to do with a packet that matches. This is called a `target', which may be a jump to a user-defined chain in the same table.描述 iptables 是用来设定、维护、检验 Linux 核心中的 IP 封包过滤规则表。
在核心中,可以定义许多不同的规则表。
每一个规则表包含许多内建的规则链和使用者自订的规则链。
每一个规则链是许多规则的列表,这些规则可以比对一组封包。
每个规则描述符合的封包应该怎么处置。
这种处置的动作就是所谓的"目标" (target),这个目标也可以是一个跳入的动作 --- 跳入同一个表中的自订的规则链。
TARGETS A firewall rule specifies criteria for a packet, and a target. If the packet does not match, the next rule in the chain is the examined; if it does match, then the next rule is specified by the value of the target, which can be the name of a user-defined chain or one of the special values ACCEPT, DROP, QUEUE, or RETURN. ACCEPT means to let the packet through. DROP means to drop the packet on the floor. QUEUE means to pass the packet to userspace (if supported by the ker nel). RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain. If the end of a built-in chain is reached or a rule in a built-in chain with target RETURN is matched, the target specified by the chain policy determines the fate of the packet.TARGETS 一条防火墙规则描述对一个封包及一个目标的判准。
如果一个封包不符合这条规则,则同一个链中的下一条规则接着检验;若真的符合,则接下来的规则就是这个目标的内容,它可以是一个自订链名或 ACCEPT、DROP、QUEUE 或 RETURN。
ACCEPT 意指让封包通过。
DROP 意指丢弃该封包。
QUEUE 意指将该封包送入
使用者空间。
RETURN 意指停止比对这个链,返回呼叫此链时的下一条规则。
若内建的链结束或一条规则符合RETURN,则用该链的预设政策来决定封包的最后命运。
TABLES There are current three independent tables (which tables are present at any time depends on the kernel configuration options and which modules are pre sent). -t, --table This option specifies the packet matching table which the command should operate on. If the kernel is configured with automatic module loading, an attempt will be made to load the appropriate module for that table if it is not already there. The tables are as follows: filter This is the default table. It contains the built-in chains INPUT (for packets coming into the box itself), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets). nat This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for altering locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out). mangle This table is used for specialized packet alteration. It has two built- in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT (for altering locally-generated packets before routing).TABLES 现有三个独立的规则表。
-t, --table 这个选项指明命令应作用在那一个封包相符的规则表。
若核心设成自动载入模组,且若该表尚未存在,则将会试着去载入适当的模组。
规则表如下: filter 这是预定的表。
它包含内建的链 INPUT(针对传入主机本身的封包)、FORWARD(针对经由本主机转换路由的封包) 和 OUTPUT(针对本地产生的封包)。
nat 当产生一个新的连通时,此表会被查及。
它由三个内建的链组成:PREROUTING (针对一旦进入即改变的封包)、OUTPUT (针对在路由之前,即改变的本地产生的封包) 及 POSTROUTING (针对将要离去时即改变的封包)。
mangle 此表用于专殊化的封包变更。
它有二个内建的链:PREROUTING (针对路由前即改变进入的封包) 和 OUTPUT (针对路由前即改变本地产生的封包)。
OPTIONS The options that are recognized by iptables can be divided into several differ ent groups. COMMANDS These options specify the specific action to perform. Only one of them can be specified on the command line unless otherwise specified below. For all the long versions of the command and option names, you need to use only enough let ters to ensure that iptables can differentiate it from all other options. -A, --append Append one or more rules to the end of the selected chain. When the source and/or destination names resolve to more than one address, a rule will be added for each possible address combination. -D, --delete Delete one or more rules from the selected chain. There are two ver sions of this command: the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match. -R, --replace Replace a rule in the selected chain. If the source and/or destination names resolve to multiple addresses, the command will fail. Rules are numbered starting at 1. -I, --insert Insert one or more rules in the selected chain as the given rule number. So, if the rule number is 1, the rule or rules are inserted at the head of the chain. This is also the default if no rule number is specified. -L, --list List all rules in the selected chain. If no chain is selected, all chains are listed. It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically listed and zeroed. The exact output is affected by the other arguments given. -F, --flush Flush the selected chain. This is equivalent to deleting all the rules one by one. -Z, --zero Zero the packet and byte counters in all chains. It is legal to specify the -L, --list (list) option as well, to see the counters immediately before they are cleared. (See above.) -N, --new-chain Create a new user-defined chain by the given name. There must be no target of that name already. -X, --delete-chain Delete the specified user-defined chain. There must be no references to the chain. If there are, you must delete or replace the referring rules before the chain can be deleted. If no argument is given, it will attempt to delete every non-builtin chain in the table. -P, --policy Set the policy for the chain to the given target. See the section TAR GETS for the legal targets. Only non-user-defined chains can have poli cies, and neither built-in nor user-defined chains can be policy tar gets. -E, --rename-chain Rename the user specified chain to the user supplied name. This is cos metic, and has no effect on the structure of the table. -h Help. Give a (currently very brief) description of the command syntax.OPTIONS 规则表认得的选项可区分成许多组。
那些选项指明执行时的特殊动作。
若无特别明讲,以下的选项只有其中一个可以放在命令列中。
使用长名或短名时,只要确使 iptables 能区分和其它选项的不同即可。
-A, --append -D, --delete -R, --replace -I, --insert -L, --list -F, --flush 清空某一链中的所有规则。
-Z, --zero -N, --new-chain 新产生一个使用者自订的链。
-X, --delete-chain 删除某一个指定的自订的链。
若未指明对象,则删除该表中所有非内建的链。
-P, --policy 只有内
Linux 防火墙入门:ipchains 入门
ipchains 的规则链
以下介绍 ipchains 的基本用法
ipchains 中的指令,皆需要区分大小写。
ipchains 把封包过滤规则分成四个类别,每一个类别可以是许多过滤规则的集合,称之为"规则链"(chains),而封
包过滤的过程,每个封包会进入其所属的链中,进行比对的动作,若某一条规则符合,就执行该规则所指定的目标动作(TARGET),如 DENY/REJECT/ACCEPT/MASQ/REDIRECT/RETURN;若不然,则继续下一条。
若所有的规则都不符合,则由预设政策(policy),来决定该封包最后的命运。
四种规则链,如下:
· input
· output
· forward
· 使用者自订
前三者,是内订就有的链。
其特性,在课堂上说明之。
ipchains 使用时的样板
在设定 ipchains 的封包过滤规则时,有几个样板的动作,若先熟悉它们,往后就可自行套用,依此类推,很快地,您就可以进入这个天地之中。
观察目前的设定
在做设定时,通常我们会用指令来观察一下现况,作法如下:
ipchains -L -n
上述 -n 是指不要进行 IP 反解的动作, 只显示数字 IP 即可, 以加快指令的速度。
定义变数
以下 $FW_IP 代表防火墙的第一片网卡的 IP,我们以下列来定义之。
FW_IP="163.26.197.8"
清除所有的规则
一开始要先清除所有的规则,重新开始,以免旧有的规则影响新的设定。
作法如下:
ipchains -F
选定预设的政策
接着,要选定各个不同的规则链,预设的政策为何。
作法如下:
预设全部丢弃
ipchains -P input DENYipchains -P output DENYipchains -P forward DENY
或者,预设全部接受
ipchains -P input ACCEPTipchains -P output ACCEPTipchains -P forward ACCEPT
各个规则链的预设政策可独立自主的设定,不必受其它链的影响。
以下练习,若目标为 DENY,则 policy 请设为 ACCEPT;若目标为 ACCEPT,则 policy 请设为 DENY,如此方可看出效果。
开放某一介面
开放 loopback 介面。
作法如下:
ipchains -A input -i lo -j ACCEPTipchains -A output -i lo -j ACCEPT
因为 loopback 是 127.0.0.0/8,为 local 测试用途,因此开放。
ipchains -A input -i eth1 -j ACCEPTipchains -A output -i eth1 -j ACCEPTipchains -A forward -i eth1 -j ACCEPT
丢弃不合理的封包
有些封包是不合理的,比如:它的来源,明明是私有IP,却在连接外部的网卡上,有进出的情况,如此明显是有人假造的,可能是有心者的入侵攻击,因此予以丢弃。
作法如下:
ipchains -A input -i eth0 -s 172.16.0.0/12 -j DENY(来自私有B Class IP,却欲进入 eth0)ipchains -A output -i eth0 -d 172.16.0.0/12 -j DENY(欲输出,目的地竟是私有B Class IP)
在此例中,eth0 是连接对外的网路介面。
封包伪装(NAT)
作法如下:
echo 1 > /proc/sys/net/ipv4/ip_forwardipchains -A forward -i eth0 -s 172.16.0.0/16 -j MASQ
上述指令将内部私有 IP 段: 172.16.0.0/16 伪装为 eth0 的 IP
效果如下:
Figure 13. client 和 server 连线图 (1)
NAT 的封包改写动作,其实很简单。
我们以下图来加以说明:
假设防火墙第一片网卡的 IP 是 163.26.197.21,内部网路某一主机 IP 是 192.168.1.8,今该内部 PC 欲观看外部网路某一Web站台(IP 是 211.22.33.44),其封包改写伪装的过程,如下图所示:
Figure 14. NAT 机制下封包运作图
NAT 的改写动作,不仅是在 IP 及 port 而已,另外像 checksum 等,都要重新计算。
虚拟主机
从一部主机的 port 转向到另一部主机的 port
作法如下:
ipchains -A input -p tcp -d $FW_IP 80 -j REDIRECT 8080redir --lport=8080 --caddr=172.16.0.101 --cport=80 &
上面的意思是说:借用 8080 的 port,使原本要连至 163.26.197.8 Web Server port 80 的封包,转向到私有 IP 172.16.0.101 的Web Server port 80,从而达到俗称"虚拟主机" 的目的。
redir 是 redir*.rpm 套件的主程式,为一种转 port 的工具,可在 .tw/pub/Sysop/firewall/ 下载。
拒绝 ping
有时想拒绝别人 ping 我们的主机。
作法如下:(预设 policy 为 ACCEPT)
ipchains -A input -i eth0 -p icmp -s any/0 8 -d $FW_IP -j DENY
但我们想 ping 别人,因此接受回应。
(预设 policy 为 DENY)
ipchains -A output -i eth0 -p icmp -s $FW_IP 8 -j ACCEPTipchains -A input -i eth0 -p icmp -s any/0 0 -d $FW_IP -j ACCEPT
在此例中,$FW_IP 是连接对外的网路介面的 IP。
开放"别人"(如 163.26.200.4) 可以 ping 你
ipchains -A input -i eth0 -p icmp -s 163.26.200.4 8 -d $FW_IP -j ACCEPTipchains -A output -i eth0 -p icmp -s $FW_IP 0 -d 163.26.200.4 -j ACCEPT
在此例中,$FW_IP 是连接对外的网路介面的 IP。
ICMP 有几个常用的 message type
0 ping response(回应); 3 destination-unreachable ; 4 source-quench ; 5 redirect ; 8 echo-request(ping的要求) ; 11
time-exceeded ; 12 parameter-problem
拒绝 traceroute
有时想拒绝别人 traceroute 我们的主机。
作法如下:
注意: 预设 policy 是 ACCEPT 的情况下
ipchains -A output -i eth0 -p icmp -s $FW_IP 3 -j DENYipchains -A output -i eth0 -p icmp -s $FW_IP 11 -j DENY
上述作法,最主要的原因是:traceroute 会发出 udp 封包,使中途的主机产生 ICMP Time Exceeded 讯息 (icmp message type 是 11),最后的目的地则会产生 Destination Unreachable 讯息(icmp message type 是 3),因此把对外的icmp 3 / icmp 11 给挡掉(不回应对方),就可使对方的 traceroute 失效。
注意:traceroute 发出的封包,大部份情况下,会使用 32769:65535 (or 1024:65535) 及 33434:33523 这二段的 port 范围,但不是绝对的。
因此,欲拒绝别人 traceroute,光只拦掉这二段 port,并不保险。
上述 traceroute 的运作原理,可由以下记录档对照验证:
在此记录档中,由 163.26.197.253 执行 traceroute 211.22.236.162,中途的路由器全都回应 icmp 11,而目的地211.22.236.162 则回应 icmp3,每一个路由器之资讯取得,则使用 TTL 原理,皆可由下列记录档印证之。
Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33435 L=38 S=0x00 I=58241 F=0x0000 T=1 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 163.26.197.254:11 163.26.197.253:0 L=66 S=0x00 I=13592 F=0x0000 T=30 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33436 L=38 S=0x00 I=58242 F=0x0000 T=1 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 163.26.197.254:11 163.26.197.253:0 L=66 S=0x00 I=13593 F=0x0000 T=30 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33437 L=38 S=0x00 I=58243 F=0x0000 T=1 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 163.26.197.254:11 163.26.197.253:0 L=66 S=0x00 I=13594 F=0x0000 T=30 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33438 L=38 S=0x00 I=58244 F=0x0000 T=2 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 10.162.66.250:11 163.26.197.253:0 L=56 S=0x00 I=28626 F=0x0000 T=29 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33439 L=38 S=0x00 I=58245 F=0x0000 T=2 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 10.162.66.250:11 163.26.197.253:0 L=56 S=0x00 I=28627 F=0x0000 T=29 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33440 L=38 S=0x00 I=58246 F=0x0000 T=2 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 10.162.66.250:11 163.26.197.253:0 L=56 S=0x00 I=28628 F=0x0000 T=29 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33441 L=38 S=0x00 I=58247 F=0x0000 T=3 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 10.162.82.250:11 163.26.197.253:0 L=56 S=0xC0 I=54471 F=0x0000 T=253 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33442 L=38 S=0x00 I=58248 F=0x0000 T=3 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth0 PROTO=1 10.162.82.250:11 163.26.197.253:0 L=56 S=0xC0 I=54472 F=0x0000 T=253 (#13)Feb 12 09:43:59 mdfw kernel: Packet log: output ACCEPT eth0 PROTO=17 163.26.197.253:1038 211.22.236.162:33443 L=38 S=0x00 I=58249 F=0x0000 T=3 (#5)Feb 12 09:43:59 mdfw kernel: Packet log: input ACCEPT eth
Linux 防火墙入门:iptables 结构图
Figure 17. iptables 结构图。