|
来源:http://www.knowplace.org/netfilter/index.html
2002-12-8 16:14:00
防火墙介绍
Disclaimer: 下面描述
果你发现了错误,请通知我
的有些内容可能不完全正确.但
。
希望对你理解iptables有帮助,如
注意,此说明是非拷贝
联系我。(哈哈,不管了)
的(例如在GPL).如果你想做任
何修改、发布、拷贝、引用,请先
什么是防火墙?
简单说,防火墙就是用
护)之间的通讯进行限制,
来保护你的网络的一台主机,它
反过来亦可。
对来自internet和你的内网(受保
非防火墙功能
误区 - 防火墙并不能保证你的网络绝对安全
堡垒主机(A bastion host)- In a
firewall is only as secure as the wo
n ideal world, this would be true. However, a
rk you put into securing it.
主机安全替换(A replacement for
在的风险。
host security) - 每一项防火墙允许的服务都是潜
使用类型
本地 - 对于在实际的
物理连接而言,没有安全可言。
很明显,防火墙对此无能为力。
Local privilege escalation - The
a local account on your box (inside
(vulnerability or misconfiguration).
attacks.
trojan horse attack. The attacker alreay has
the gates) and obtains root by some means
A firewall cannot protect again this type of
Remote - Your host i
connect to remotely over
the only type of attack
another important point
someone to exploit your
providing a way for an a
listening on any ports,
manages to attack the ne
s listening on a port that t
a network and exploit a vun
a firewall can (hopefully) p
here that most firewall howt
box remotely, it has to be l
ttacker to connect). Therefo
you are safe from remote exp
twork stack itself).
he attacker is able to
erability somehow. This is
rotect you against. There is
os neglect. In order for
istening on some ports (i.e.
re, if your host isn't
loits (unless the attacker
为何需要防火墙?
提高网络安全 - 某些
网段或部分网络的安全性。
服务有着固有的风险,不可能作
到安全性。防火墙可以帮助你提高
网络访问控制 - 防火墙可以强制性的在网络中应用安全规则。
日志记录 - 由于防火
墙检测所有入站/出站的网络通
讯,它可以记录网络中的活动。
防火墙的类型
代理防火墙 - 代理服务器.
包过滤防火墙 - 检测IP包 (Netfilter).
什么是 Netfilter/Iptables?
Linux 2.4内核中Netfilter是新的用
则的用户工具。
来实现防火墙的. Iptables 是用来指定Netfilter规
为什么Ipchains被改为Netfilter/Iptables
状态匹配 - 连接跟踪(can you trus
firewall will accept a packet?).
t the remote host to determine whether your
自动碎片重装- Connec
packets for examination.
tion tracking automatically
reassembles fragmented
改良的匹配规则 - 高级包匹配,例如速率限制、字符串匹配.
增强的日志功能 - 允许自定义日志级别和实体.
允许包撕裂(?mangle) - 允许撕裂包中的任何信息
用户队列Userspace qu
euing -允许userspace可以对包
进行编程.
支持内置包转发 - 舍弃了IPMASQADM.
主要功能
状态包过滤(连接跟踪)
各种网络地址翻译
灵活、易扩展的急智机制
大量的增强型补丁包
Netfilter/iptables可以做什么?
建立Internet防火墙和基于状态的包过滤
用NAT和伪装(masquerading)共享上网
用NAT实现透明代理
和tc+iproute2配合使用可以实现QoS路由
用(mangling)修改IP包头的TOS字段来实现更复杂的功能
安装Iptables
下载
Iptables v1.2.2 (http://netfilte
7d065a5d1e7003a061bece79a88d903
r.samba.org/iptables-1.2.2.tar.bz2) md5sum
Linux kernel v2.4.5
/linux-2.4.5.tar.bz2)
(http://www.kernel.org/pub/l
inux/kernel/v2.4
安装提示
注意,在编译、安装ipt
"make patch-o-matic".
ables之前,不需要编译内核。
并且某些内核选项不可用,除非用
在/usr/src/linux目录中, 'make o
menuconfig')。
ldconfig' (在没有.config文件时,'make
在iptables包的解报目
录中, 'make && make install
'
打补丁,'make patch-o-matic',推荐只打你需要的补丁。
返回 /usr/src/linux目录, 'make
menuconfig' ,选择新的、可用的选项
完成正常的内核编译过
程(make dep; make clean; mak
e bzImage)
编译 - Iptales编译一般比较简单
'make && make instal
l' 将在缺省路径/usr/local中
做一个最小安装.
'make pending-patches' 将给标准
内核打上一些著名的漏洞补丁.
'make patch-o-matic'
将给标准内核打上一些增强功
能的补丁.
'make experimental && make insta
iptables-restore 二进制代码.
ll-experimental' 将创建 iptables-save和
如果你想修改安装路径,可以带参数
MANDIR=/usr/man' 进行编译。 (e.g. 'm
MANDIR=/usr/man install')
'BINDIR=/usr/sbin LIBDIR=/usr/lib
ake BINDIR=/usr/sbin LIBDIR=/usr/lib
补丁包 - 每个补丁都有新的功能,但几乎每个都有漏洞,因此最好不要全部都安装。
注意: 下面列出的是v1
命令列出补丁列表来.
.2.1a版本的,不是最新版本.
你可以用 'make patch-o-matic'
CONFIG_IP_NF_TARGET_
(`--to-dest 1.2.3.4-1.2.
BALANCE 选项, 类似DNAT:把负
3.7')
载均分到一段地址上。
CONFIG_IP_NF_TARGET_NETLINK, 替
标,把丢弃的包发往用户空间
代ipchains中的 -o 选项,通过增加一个NETLINK目
CONFIG_IP_NF_TARGET_SAME ,类似S
1.2.3.4-1.2.3.7'),对客户端的每个连接
NAT,利用一段地址(`--to-source
给相同的地址.
CONFIG_IP_NF_TARGET_
TTL ,允许用户修改IP包中的TT
L值。
CONFIG_IP_NF_MATCH_A
AH或者ESP包头中匹配一段S
H_ESP, 支持两个扩展匹配(`ah'
PI范围
and `esp'),允许在IPSec包中的
CONFIG_IP_NF_DROPTAB
丁有漏洞)
LE . 将要被丢弃的包将通过这
个表,来允许做日志记录,(此补
CONFIG_IP_NF_EGG: 连
接跟踪。Connection tracking
for eggdrop bot networks.
CONFIG_IP_NF_TARGET_
FTOS ,允许你任意设置TOS值。
从0x0-0xff
ftp-multi.patch 允许ftp连接跟踪
ip_nat_ftp模块中用 `ports='选项. 不
FXP(direct FTP 2 FTP transport).使用
和地址翻译到最多8个端口。在ip_conntrack_ftp和
然,将使用缺省21端口。另外,它还支持
模块载入参数`fxp=1`可以来支持FXP
ftp-pasv-fix.patch
实现状态类型防火墙功能
:可以在使用ip_conntrack_ftp
.o模块的情况下,在FTP服务器上
CONFIG_IP_NF_MATCH_I
PLIMIT 允许限制每个客户端(
每个IP)并发TCP连接的最大个数
例如:
#每个客户端最多允许2个telnet连接
iptables -p tcp -dport 23 -m ipl
imit --iplimit-above 2 -j REJECT
# you can also match
the other way around:
iptables -p tcp -dport 23 -m ipl
imit ! --iplimit-above 2 -j ACCEPT
# 每个C类地址允许的http连接的并发最大个数为16
iptables -p tcp -dpo
REJECT
rt 80 -m iplimit --iplimit-a
bove 16 --iplimit-mask 24 -j
#允许每个IP地址可同时发起4个HTTP连接
iptables -A INPUT -p
REJECT
tcp --syn --dport http -m i
plimit --iplimit-above 4 -j
#允许整个A类地址中每个地址的HTTP访问为4
iptables -A INPUT -p tcp --syn -
--iplimit-above 4 -j REJECT
-dport http -m iplimit --iplimit-mask 8
CONFIG_IP_NF_IRC: IR
表(dropped-table)和段偏
C支持模块,允许 DCC和NAT、连
移(seqoffset).
接跟踪一起工作。此补丁依赖丢弃
masquerade+fwmark.patch :一种复
MASQUERADE NAT target组合来用
杂的路由设置,依靠防火墙的标记来路由,和
nat+conntrack-hashsize.patch 设
(hashsize=xxx) hash表的大小,NAT的缺
置连接跟踪代码和NAT代码中的模块参数
省值为内存的
1/16384(对于大多数机器来说,比先前的缺省值64好多了).
CONFIG_IP_NF_POOL,
址是否在地址池中设置了位
提供了一种从IP地址段中的一个
。它也提供了一个目标池
位的位映射,它依赖于源或目的地
CONFIG_IP_NF_MATCH_PSD, 支持端口
UDP端口扫描. 它源自Solar Designer磗
扫描检测(PSDortScanDetection). 可以检测TCP和
scanlogd.
支持的选项:
--psd-weight-threshold
从同一主机发往不同目的端口的TCP/
UDP包的总的优先级,被用来作为端口扫描次序
--psd-delay-threshold
由同一主机发往不同目的端口的包的
的端口扫描子次序
延迟 (in hundredths of second) ,用来作为可能
--psd-lo-ports-weight
特权目的端口的优先级,即目标端口(<=1024)的优先级
--psd-hi-ports-weight
非特权目的端口的优先级(>1024).
举例:iptables -A INPUT -m psd -j DROP
CONFIG_IP_NF_MATCH_RPC,支持两个
(用来分别跟踪UDP和TCP的端口映射请求
的源地址已经发过端口映射请求,或者是
模块ip_conntrack_rpc_udp和ip_conntrack_rpc_tcp
),在iptabIe 中添加record_rpc(用来匹配是否包
一个新的发往端口映射的GET请求,以允许RPC过滤)
seqoffset.patch - 新的NAT中的 AP
ftp/irc)中的包重设大小和计算序列号的
I 函数. 此API函数隐藏了所有的协议翻译(例如:
细节问题
要求:至少内核 2.4.2以上!
dropped-table-patch
from netfilter patch-o-matic
CONFIG_IP_NF_NAT_SNM
SNMP-ALG中的“基本”条目
P_BASIC 基本的SNMP地址翻译支
;它通过修改SNMP有效载荷中的I
持. 如同RFC 2962中描述的,是
P地址来匹配IP层的地址翻译映射.
CONFIG_IP_NF_MATCH_STRING :允许
在整个包里匹配字符串.
iptables -A INPUT -m string --st
ring 'cmd.exe' -j QUEUE
tcp-window-tracking.patch :通过
包过滤“( 'Real Stateful TCP Packet
它包含新的支持已建立的连接控制的TCP
scaling).
Guido van Rooij的论文"IP过滤器中的实时状态TCP
Filtering in IP Filter'),实现了TCP连接跟踪.
连接跟踪. 并添加了窗口缩放支持(Window
CONFIG_IP_NF_MATCH_TTL option:允
许用户根据包的TTL值来匹配包.
CONFIG_IP_NF_TARGET_
有收到的ULOG消息库.
ULOG:支持更多高级的包日志记
录机制,目录libiptulog/ 下包含
更多信息:http://www.gnumonks.or
g/projects/ulogd
CONFIG_IP6_NF_TARGET_LOG :在ip6
tables中添加LOG target.
CONFIG_IP6_NF_TARGET
此处的 icmp-types与icmpv
_REJECT:在ip6tables中添加拒
6 types不同(更多消息请看:ip
绝目标( REJECT target). 请注意
6tables -j REJECT -h)
ipv6-ports.patch:ipv6 有IPv6的自己的端口匹配形式.
注意: 以上高亮显示的补丁并不表示你应该编译进你的内核中。仅表示我发现的有趣的功能。你可以把你感兴趣的补丁从目录patch-o-matic 中拷贝到usr/src/linux,并且运行 'patch -R -p1 < name_of_the_patch'.
下面是一篇转载的关于用IPTables实现字符串模式匹配 的文章
自1995年ipfwadm开始进入1.2.1的核
现了标准的tcp/ip包过滤功能,比如过滤
稳定的2.2.0核心中防火墙的实现被ipcha
片包控制,较好的网络地址翻译功能(NA
火墙包括核心级代码(通常是可加载核心
置的工具,比如/usr/bin/ipchains,这
要新的linux防火墙代码被引入,核心和
心,Linux的防火墙实现有很长的时间了。Ipfwadm实
源地址与目的地址以及端口过滤。早在1999年第一个
ins替代了,ipchains的新功能包括支持规则链,碎
T)以及其他一些有用的改进。我们需要明白Linux防
模块或者核心源程序的补丁)和用户级代码(一个配
是用来插入包规则到核心空间的)因此无论如何,只
用户空间的有关代码都要改写。
2001年2.4的核心完成
防火墙,基于任何TCP标记
NAT功能和透明代理功能,
Comparison of iptables A
了,iptables出现了。它引入了
和MAC地址的包过滤,更灵活的
通过速度限制实现DoS的阻止(
utomation Tools一文)。
很多重要的改进,比如基于状态的
配置和记录功能,强大而且简单的
更详细的资料请参看A
然而,最重要变化是引入了模块化的
过一个核心模块的设置实现的,该模块能
在附加的变化中,用户自定义编码功能已
值和包的到达时间进行判断,对自定义的
些目前都还不是iptable的一部分,但是
编写一个可加载的核心模块来创建核心级
Rusty Russell's Linux iptables HOWTO
架构方式。比如,ipchains和ipfwadm兼容模式是通
够在运行的核心中插入,以便提供相应的通讯功能。
经成为了可能,比如过滤一定范围的端口,根据TTL
协议进行状态监视,对随机的数据包进行监视等,这
在未来将被实现。很多很有趣的新模块已经完成了。
代码,通过用户级代码实现控制过滤器的行为。参见
本文主要关注字符串模式匹配的功能
究数据包的有效载荷。这是iptable技术
火墙的标准TCP/IP标志监视功能。传统的
理防火墙可以分别出应用层的协议比如te
和检查命令,但是应用代理防火墙带来了
层的数据包。同时我们需要为每一个要监
视源地址和目的地址,源端口和目的端口
。由于上述原因,包过滤防火墙通常比应
的安全控制而包过滤可以用于更高的带宽
,(显然,是通过模块实现的),该功能可以限制和研
的一个非常有意义的突破,它超越了传统的包过滤防
防火墙可以分为包过滤和应用代理两种类型,应用代
lnet,HTTP或者SMTP,能够监视这些协议的有效载荷
巨大的性能缺陷:当通过网络协议栈处理上层即应用
控的协议编写新的代理程序。包过滤防火墙通常只监
,TCP/IP标志等,而完全忽略了高层协议的有效载荷
用代理防火墙的速度快。应用代理提供了更加有力度
线路满足更高的吞吐量。
基于以上的情况,ipta
缺陷,这个功能同时非常清
得iptables工作在网络层(
议的有效载荷,而不必分析
bles的新增功能提供了跨越两种
晰的证明了新的模块化的架构较
OSI模型的第三层)不必工作在
应用层的通信结构。
防火墙类型的优势,避免了各自的
之老的ipchains的优势,它能够使
高层协议,但是却可以监视高层协
在2001年5月以前,还没有提出字符
力给iptables防火墙的工程:Hogwash。
iptable能够响应带有攻击信号的数据包
串模式匹配模块以前。有一个尝试添加内容监控的能
该工程结合了Snort IDS规则模式匹配引擎,以便于
。
现在我们提供了一个Step-By-Step的
视功能。标准的RH7.2提供了iptables 1.
匹配功能没有被包含在标准的发行版中,
指导,以便于在RedHat Linux上实现模式匹配的包监
2.3的版本以及1.2.4的可用RPM升级包。然而,模式
因为开发人员将它标记为试验。
如果你使用的是RH7.1-
够使用iptables 1.2.4的功
个例外:iptables-1.2.4的
的源码RPM包(通常被放在/
(比如www.kernel.org或者
7.2,你就已经使用了2.4的核心
能。通常推荐你从发行商那里下
字符串模式匹配补丁不能在2.4.
usr/src/linux-2.4.x的源码树
它的一个镜像)。
。你至少需要2.4.4的核心以便能
载最新的可用的核心。目前,有一
9的核心下工作。你应该安装核心
内)或者从别处下载的核心源程序
在本文中,将采用最新的2.4.16核心
7.2上,但是2.4.7的核心并不推荐使用,
SYN-cookie保护和iptables的保存/恢复
作为例子。测试也能运行在使用2.4.7核心的RedHat
因为2.4.7的核心有一些小的安全问题,比如
功能。
接下来需要从http://n
对压缩文件进行解压缩之后
半自动化的程序来完成这个
iptables补丁,但是这个补
例中iptables在/home/anto
:
etfilter.samba.org/iptables-
,需要对iptables进行配置,合
目的。首先,可能需要运行程序
丁没有被包含在kernel的发行版
n/iptables-1.2.4,核心源程序
1.2.4.tar.bz2下载iptables。当
并相关的核心源程序树。可以使用
以便包含已经考虑过的稳定的
内。从iptables的解压目录(在本
在/usr/src/linux-2.4.16)运行
make pending-patches KERNEL_DIR=
/usr/src/linux-2.4.16
这将开始运行交互式的补丁应用程序
丁是iptables的字符串匹配所必需的。对
够安全的使用iptables,则选择none。
,虽然你可以安全应用所有的补丁,但是没有一个补
任何你认为需要的补丁都回答y(yes)。如果你希望能
现在我们将准备应用试验部分的补丁,比如字符串模式匹配的支持。运行:
make patch-o-matic K
ERNEL_DIR=/usr/src/linux-2.4
.16
在这个交互式的过程中
丁,包括那些稳定的。
,回答y(yes)以便应用string.p
atch。程序将遍历所有的可用的补
Testing... string.pa
tch NOT APPLIED ( 2 missing
files)
The string patch:
Author: Emmanuel Roger
Status: Working, not with kernel 2.4.9
This patch adds CONFIG_IP_NF_MAT
CH_STRING which allows you to
match a string in a whole packet.
THIS PATCH DOES NOT WORK WITH KE
RNEL 2.4.9 !
Do you want to apply
this patch [N/y/t/f/q/?] y
其余的补丁也许也让你
补丁,请注意开发者给出的
你没有安装MAC过滤的补丁
非常感兴趣,不过它们与本文并
警告信息,其中包括了补丁的功
,因为最近发现这个补丁包含一
不相关。如果你选择安装任何别的
能(比如dropped表的补丁)确定
个漏洞。
现在我们开始编译用户空间程序和相关的Libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
然后我们安装它们(ip
r/local/lib/iptables)在
tables在/usr/local/user/sbin
root身份下执行以下内容:
,libraries在/us
make install KERNEL_
DIR=/usr/src/linux-2.4.16
紧接着我们配置和编译核心:
Now we are ready to compile the
user-space code and the libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
and then install the
libraries go into /usr/l
m (iptables program goes in
ocal/lib/iptables). As root:
/usr/local/user/sbin and
cd /usr/src/linux-2.4.16
可以使用任何的核心配
Internet上有大量的这方面
置方法。有关详细的配置核心的
的文档,比如kernel HOWTO等。
方法,可以查阅Internet资源,
以下简要介绍一下:
make xconfig
在GUI界面下,选择Netfilter配置选
持),如下图:
项,然后在Strings match support前选择m(模块支
然后执行通常的操作:
make dep;make bzIma
ge;make modules;make modul
es_install
现在按照你喜欢的方式
否支持模式匹配功能,在ro
安装核心,并重新启动。重新启
ot身份下执行:
动系统以后,测试一下iptables是
/usr/local/sbin/ipta
bles –m string –help
该命令将显示如下标准的iptables帮助信息:
STRING match v1.2.4 options:
--string [!] string Match a stri
ng in a packet
该功能允许你对匹配数据包的内容,
而确定我们确实可以获得数据包的内容。
我们可以通过netcat或者telnet来测试这一功能,从
运行:
iptables -A INPUT -m string --st
ring "test" -j LOG --log-level
info --log-prefix "TEST"
然后启动一个netcat的服务器:
nc -l -p 3456
然后连接该netcat服务器:
telnet localhost 3456
然后输入:
test
whatevertestdoes
这样将引起iptables产生一个简单的
你需要设置了记录信息的级别为info)
记录,我们在记录文件中将会看到如下的信息(当然
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:0
0:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=
2154 TOS=0x00 PREC=0x00 TTL=64
ID=42880 DF PROTO=TC
P SPT=3128 DPT=33018 WINDOW=
32767 RES=0x00 ACK PSH URGP=0
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:0
0:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1LEN=1
830 TOS=0x00 PREC=0x00 TTL=64
ID=17451 DF PROTO=TCP SPT=8000 D
PT=33017 WINDOW=32767 RES=0x00 ACK PSH URGP=0
在tcp/ip数据包中只要出现test字符
。正如Filtering packets based on str
linuxguru.net的sysctl内找到。它能够
记录文件记录大量的对cmd.exe的请求,
常是记录文件存放的分区)不够大,那么
端口的请求或者使用记录限制功能,对这
串,以上的信息就会产生。这有什么好处呢?太多了
ing matching这篇文章所建议的那样,该文章可以在
用来阻止那些讨厌的IIS蠕虫造成得Unix web服务器
这些蠕虫将不再干扰你,但是如果你的/var分区(通
这一功能将有一定的帮助。只要静静地丢弃蠕虫对80
些信息进行记录,丢弃这些包的操作如下:
iptables -I INPUT -j DROP -p tcp
-s 0.0.0.0/0 -m string --string "cmd.exe"
每小时只记录一条这样的信息:
iptables -I INPUT -j LOG -p tcp
limit
-s 0.0.0.0/0 -m string --string "cmd.exe" -m
--limit 1/hour
Bill Steams(Mason firewall buil
换网络IDS Snort的规则成为iptables字
含了大约1200种信号and appears to be
database suitable for instant deploy
式。http://www.strearns.org/snort2ip
你可以找到shell脚本以便将标准的Snort
于Linux下针对mountd的攻击和bind的攻
ding script的作者)提供了一个极好的建议----转
符串模式匹配的规则。Snort的攻击信号数据库中包
the biggest publicly available attack
ment。在iptables上使用现成的信号是合理的一种方
tables 是Bill Stearm提供的试验性的软件。在这里
规则转换为iptables的规则。下面是一个将snort关
击转化为iptables的规则的例子:
Snort 规则:
1. alert udp $EXTERNAL_NET any -> $HOME_NET 518
(msg:"EXPLOIT ntalkd
x86 linux overflow";
content:"|0103 0000
000 0 0001 0002 02e8|";
reference:bugtraq,210; classtype
:attempted-admin; sid:313; rev:2;)
2. alert tcp $EXTERNAL_NET any -> $HOME_NET 53
(msg:"EXPLOIT named tsig infoleak";
content: "|AB CD 09
61|";
80 00 00 00 01 00 00 00 00 0
0 00 01 00 01 20 20 20 20 02
reference:cve,CAN-20
00-0010; reference:bugtraq,2
302; reference:arachnids,482;
classtype:attempted-
admin; sid:303; rev:3;)
3. alert udp $EXTERNAL_NET any -> $HOME_NET 635
(msg:"EXPLOIT x86 linux mountd o
verflow";
content:"|5eb0 0289 06fe c889 46
04 b006 8946|";
reference:cve,CVE-19
99-0002; classtype:attempted
-admin; sid:315; rev:1;)
转化的iptables规则:
1. iptables -A SnortRules -p udp
-s $EXTERNAL_NET -d $HOME_NET --dport 518 -m
string --string " è
" -j LOG --log-prefix "SID31
3 " # "EXPLOIT ntalkd x86
linux overflow" bugtraq,210 classtype:
attempted-admin sid:313
2. iptables -A Snort
Rules -p tcp -s $EXTERNAL_NE
T -d $HOME_NET --dport 53 -m
string --string "&la
quo;Í .a" -j LOG --lo
g-prefix "
SID303 " # "EXPLOIT named tsig i
nfoleak" cve,CAN-2000-0010 bugtraq,2302
arachnids,482 classtype:attempte
d-admin sid:303
3. iptables -A SnortRules -p udp
-s $EXTERNAL_NET -d $HOME_NET --dport 635 -m
string --string "^° ‰ þ&
cve-CVE-1999-0002
Egrave;‰F ° ‰F" -j LOG --log-prefix "
" # "EXPLOIT x86 linux mountd ov
erflow" classtype:attempted-admin sid:315
显而易见,上面的转化使用了针对漏
有些规则不便于转化主要是因为在桢的控
洞所使用的缓冲区溢出字符串作为捕获攻击的方式,
制方面snort比iptables要强大一点。
总之,iptables的字符串模式匹配功
过滤又无法保护的网络服务(如WWW服务
如果将它布置在组织的网关上)和单个的
iptables的字符串模式匹配功能还能够帮
的内容。
能能够被用来保护那些开放了易受攻击的而一般的包
,mail服务,DNS服务,FTP服务等)的组织的网络(
主机(使iptables成为主机的一部分),另外,
助实现强制安全策略,即通过关键字来阻止访问非法
配置内核
以下为和Netfilter相
http://www.linuxdoc.org/
关的内核配置. 如何配置内核的
HOWTO/Kernel-HOWTO.html.
详细信息可以参看
推荐 (non-netfilter
它们可以在运行时允许/禁
related) - 这些选项可以在Lin
止
ux内核中实现不同的网络功能,但
CONFIG_PROC_FS - 允许虚拟 /proc 文件系统
CONFIG_INET_ECN - 支
持TCP 直接拥塞通知(Explicit
Congestion Notification (ECN))
CONFIG_SYN_COOKIES -
SYN cookies保护,可以用来保
护不受syn洪水攻击 (synfloods)
CONFIG_IP_ADVANCED_ROUTER - 允许
以下选项 (别的未列在此)
CONFIG_IP_ROUTE_VERBOSE - 允许详细的路由监控
CONFIG_IP_ROUTE_LARGE_TABLES -
改进的路由区域中的路由性能到超过64条实体
要求 - Kernel v2.4.x (推荐v2.4.5)
CONFIG_PACKET - 同packet socket
CONFIG_NETFILTER -
允许以下的所有的与netfilter
相关的选项
Netfilter 相关- 星号表示推荐
CONFIG_IP_NF_CONNTRACK*
CONFIG_IP_NF_FTP*
CONFIG_IP_NF_QUEUE
CONFIG_IP_NF_IPTABLES*
CONFIG_IP_NF_MATCH_LIMIT*
CONFIG_IP_NF_MATCH_MAC
CONFIG_IP_NF_MATCH_MARK
CONFIG_IP_NF_MATCH_MULTIPORT*
CONFIG_IP_NF_MATCH_TOS
CONFIG_IP_NF_MATCH_TCPMSS
CONFIG_IP_NF_MATCH_STATE*
CONFIG_IP_NF_MATCH_UNCLEAN*
CONFIG_IP_NF_MATCH_OWNER
CONFIG_IP_NF_FILTER*
CONFIG_IP_NF_TARGET_REJECT*
CONFIG_IP_NF_TARGET_MIRROR
CONFIG_IP_NF_NAT*
CONFIG_IP_NF_NAT_NEEDED*
CONFIG_IP_NF_TARGET_MASQUERADE*
CONFIG_IP_NF_TARGET_REDIRECT
CONFIG_IP_NF_NAT_FTP*
CONFIG_IP_NF_MANGLE*
CONFIG_IP_NF_TARGET_TOS
CONFIG_IP_NF_TARGET_MARK
CONFIG_IP_NF_TARGET_LOG*
CONFIG_IP_NF_TARGET_TCPMSS
CONFIG_IP_NF_COMPAT_IPCHAINS
CONFIG_IP_NF_COMPAT_IPFWADM
举例- 以上编译iptables中,只有在
或'patch-o-matic')
给内核打上相应补丁后(可通过'pending-patches'
CONFIG_IP_NF_DROPTABLE
CONFIG_IP_NF_EGG
CONFIG_IP_NF_IRC
CONFIG_IP_NF_MATCH_AH_ESP
CONFIG_IP_NF_MATCH_IPLIMIT
CONFIG_IP_NF_MATCH_LENGTH
CONFIG_IP_NF_MATCH_PSD
CONFIG_IP_NF_MATCH_RPC
CONFIG_IP_NF_MATCH_TTL
CONFIG_IP_NF_NAT_SNMP_BASIC
CONFIG_IP_NF_POOL
CONFIG_IP_NF_TALK
CONFIG_IP_NF_TARGET_BALANCE
CONFIG_IP_NF_TARGET_FTOS
CONFIG_IP_NF_TARGET_NETLINK
CONFIG_IP_NF_TARGET_SAME
CONFIG_IP_NF_TARGET_TTL
CONFIG_IP_NF_TARGET_ULOG
CONFIG_IP6_NF_TARGET_LOG
CONFIG_IP6_NF_TARGET_REJECT
配置& 语法
约定
eth0 - 与Internet网的连接接口
eth1 - 内网接口
ip_address_of_eth0 - eth0的IP地址
ip_address_of_eth1 - eth1的IP地址
表、链和规则(Tables, chains, and rules)
当用Iptables来构造防火墙规则时,认清表、链和规则的区别很重要。
表提供特定的功能. 缺省表是filter
丁).
, nat, 和mangle (除非你打了实验性的drop 表的补
链是包传播的路径. 不同的表包含了
个包通过用户链中没有匹配,它将返回调
由此链的缺省方针来确定是丢弃或接受
不同的内置链. 用户自定义链能指向内置链. 如果一
用的链。如果一个包通过内置链中没有匹配,那么将
规则就是在链中用来实现某个特定匹配
包传播
在实施规则之前,必须知道包是如何在Netfilter的表和链中传播的
可在以下连接中看到有
/ods.dyndns.org/ipt_flow
关Netfilter中包的传播过程的
.html.
更多细节,http://ods.dyndns.org/ipt_flow.html
链的语法
创建新的链
iptables -N name_of_chain
删除空链 - 仅对自定义链
iptables -X name_of_chain*
*如果省略name_of_chain,将删除所有的自定义链
改变内置链的缺省方针Change the default policy
iptables -P name_of_
chain name_of_policy*
*丢弃或接受
列出链的规则
iptables -L name_of_chain
清空链中的规则
iptables -F name_of_chain*
*如果省略name_of_chain,它将清空所有的链
将链中所有的规则的包和字节计数器归零
iptables -Z name_of_chain
规则的语法
典型的Iptables规则将指定:
A table (-t table_na
me). 省略情况下,为filter表.
另外的内置表是nat和mangle表.
A rule action 链中的规则动作有:
面跟表中链名
添加(-A) , 删除(-D) 或替换(-R) 或插入(-I),后
filter表中的内置规则:INPUT, FORWARD 和OUTPUT
nat表中的内置规则:P
REROUTING, POSTROUTING 和OUT
PUT
mangle表中的内置规则:PREROUTING 和OUTPUT
What to match - 可用的匹配(此列表不全):
!反符号,表示相反的意思
-p (协议: TCP, UDP, ICMP, 也可用
数字- 见/etc/protocols)
-s (源地址)
-d (目的地址)
-i (入站的接口)
-o (出站的接口- 注意此说明发送包的接口)
--fragment (当源、目的端口无法区
的 ICMP类型)
别时,将试图去匹配第二个和以后的碎片包,或者包
--dport (目的端口)
--sport (源端口) 要么用数字,用
一组端口
么用/etc/services文件中的名字。可以用m:n来表示
--port (特殊的指定值的源和目的端口)
--mark (nfmark value)
--tcp-flags (允许基于匹配的TCP
志;第二个表示哪些标志是1(其他则为0
标记) 此选项有两个参数:第一个表示要检查哪些标
)
如: iptables -A INPUT --protoco
l tcp --tcp-flags ALL SYN,ACK -j DENY
表示ALL(SYN,ACK,FIN,RST,URG,PSH'
匹配。
)的标志都要被检查,但是只有设置了SYN和ACK的才
--syn (等同 --tcp-flags SYN,RST,ACK SYN)
--tcp-option (检测TC
P头中TCP项的数字值 - 如果TCP
报头不全则丢弃)
TCP标记的一个解释
有时候只允许一个单向的TCP连接。
外部访问你内部的WWW服务器。朴素的方
需要一个双向的交流。解决的方法是只需
这些包,我们可以达到上面的目的。
例如,你只需要访问外部的WWW的服务器,而不允许
法是阻塞所有从你的服务器发出的包,但是TCP连接
要阻塞请求连接的包。这些包叫做SYN包。通过阻塞
--state (用来匹配特定状态下的数据包(由连接跟踪子系统来决定状态))
NEW - 发起新的连接
ESTABLISHED - 属于某个已经建立的连接的数据包
RELATED - 一个包与某
数据连接
个连接有关,但是不属于这个连
接。例如一个ICMP错误消息或FTP
INVALID - 不匹配于任何连接,通常这些包会被drop
例子:
iptables -A state_chk -m state -
state_chk链中添加一条规则,接受所有
-state ESTABLISHED,RELATED -j ACCEPT - 在
的TCP回应包
iptables -A state_chk -m state -
中添加一条规则,接受所有从非eth0接口
-state NEW -i ! eth0 -j ACCEPT - 在state_chk链
来的连接请求包
--mac-source (源MAC地址) 例如:-
-mac-source 00:60:08:91:CC:B7
-m unclean (实际上装
提供随机的安全检查
载一个模块,尝试匹配不寻常的
或不健全的包 - 处于实验阶段)
--tos (用来匹配IP包头TOS字段的值)
--ttl (包里的ttl值)
一般的速率限制
--limit (匹配速率限
制 - 可以按秒、分、时、日来
给),缺省值是3/hour
--limit-burst (达到速率限制的最
大的爆发数目(阀值)),缺省值是5。
(maximum burst numbe
r before the imposing the se
t rate limit)
例如?/span>?sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
说明:对不管来自哪里的ip碎片都进
条件是100个ip碎片
行限制,允许每秒通过100个ip碎片,该限制触发的
例如: /sbin/iptables -A FORWARD
-j ACCEPT
-p icmp -m limit --limit 1/s --limit-burst 10
说明:对不管来自哪里的icmp包都进
10个包
行限制,允许每秒通过一个包,该限制触发的条件是
例如: iptables -A INPUT -p icmp
-m limit --limit 6/m --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP
然后从另一部主机上ping这部主机,就会发生如下的现象:
首先我们可以看到前四
一个正常的回应。这是因为
数是每分钟6个,也即每10
个包都是正常的,只是从第
。
个包的回应都很正常,然后从第
我们设定了单位时间(在这里是
秒钟一个;其次我们又设定了事
五个包开始,限制规则开始生效
五个包开始,我们每10秒可以收到
每分钟)内允许通过的数据包的个
件触发阀值为5,所以我们的前四
,故只能每10秒收到一个正常回应
假设我们停止ping,30秒后又开始ping,这时的现象是:
前两个包是正常的,从第三个包开始丢包,这是因为在这里我的允许一个包通过的周期是10秒,如果在一个周期内系统没有收到符合条件的包,系统的触发值就会恢复1,所以假如我们30秒内没有符合条件的包通过,系统的触发值就会恢复到3,假如5个周期内都没有符合条件的包通过,系统都触发值就会完全恢复? /span>?/span>
基于IP的速率限制(TCP) - experiemental
--iplimit-above - 允许按照IP地址来限制并发的TCP连接数
所有者匹配(Owner matching section)
--uid-owner userid (匹配由特定的用户进程所产生的包)
--gid-owner groupid (匹配由特定的用户组进程产生的包)
--pid-owner processid (匹配由特定的进程产生的包)
--sid-owner sessionid (匹配由特定的会话组进程产生的包)
端口扫描检测 - experimental
--psd-weight-threshold (极限threshold)
--psd-delay-threshold (延迟delay)
--psd-lo-ports-weight (优先级weight)
--psd-hi-ports-weight (优先级weight)
对于SNAT,还有一个特殊的匹配
--to-source [-][:port-port] 仅在nat表中的POSTROUTING链中使用
可指定单一源地址或一地址范围,端
口范围(仅在指定协议-p tcp or -p udp)。
对于DNAT,还有一个特殊的匹配
--to-destination [-][:port-port] 仅在nat表中的PREROUTING链和OUTPUT链中使用
iptables -t nat -A PREROUTING -j
--dport 80 -i eth1
DNAT --to-destination 1.2.3.4:8080 -p tcp
对于MASQUERADE,还有一个特殊的匹配
--to-ports [-] 仅在nat表中的POSTROUTING链中使用
对于REDIRECT,还有一个特殊的匹配
--to-ports [-] 仅在nat表中的PREROUTING链和OUTPUT链中使用
iptables -t nat -A PREROUTING -j
--dport 80
REDIRECT --to-port 3128 -i eth1 -p tcp
如果匹配包的目的地 . 可能的目标有:
ACCEPT - 接受此报
DROP - 丢弃此报,并且不做记录
REJECT -丢弃此包并发送错误信息给发送者
这个模块基本等同于DROP,但是有一
unreachable”。注意以下情况不发送:
点不同。发送方将送出一个ICMP报文:“port
被过滤的包本身是一个ICMP差错控制或未知报文;
第二块及以后的分片
最近已经送出了许多ICMP差错控制报文到那个目标
LOG - 用syslogd记录此报并继续传播
ULOG - 把包发往一个用户日志进程(experimental)
MIRROR - 将包的源/目的IP地址互换
并重发包(experimental)
QUEUE - 将包发往用户进程的队列中 - 如果没有匹配,最终包将被丢弃
QUENE是一个特殊的目标。他将包放到用户空间等待处理。需要两个额外的部件:
1 队列处理器(处理包在内核和用户空间的流通)
2 用户空间的应用程序(接受包、操作包)
标准的队列处理器模块ip_queue。
下面是一个例子:
# modprobe iptable_filter
# modprobe ip_queue
# iptables -A OUTPUT -p icmp -j QUEUE
有了这条规则,本地产生的外出ICMP
的应用程序。如果没有用户空间的应用程
包将流到ip_queue模块,然后他再将包送到用户空间
序等待这个包,DROP。
怎么写用户空间的应用程序呢?用li
CVS中的testsuide工具里。
bipq API。他是和iptables一起发布的。程序例子在
ip_queue的状态可以通过下面的命令查看:
/proc/net/ip_queue
队列的最大长度可以用下面的命令来控制:
/proc/sys/net/ipv4/ip_queue_maxlen
缺省值是1024。
RETURN - 返回先前的调用的链;RETURN相当于到达chain的末尾。
对于一个内建的chain来说,执行相
应的策略。对于自定义的,返回前一条chain
Name_of_a_custom cha
in - 用户定义, 一般都小写,
但大写也可
mangle表提供了修改数据报各个字段的值的方法,这些在QoS中是很有用的
MARK
设置nfmark字段的值。
报的标记(可以是无符号长
ipqmpd (运行在用户空间的
我们可以修改nfmark字段的值。
整数范围内的任何值)。该标记
队列分捡器守护进程)将该数据
nfmark仅仅是一个用户定义的数据
值用于基于策略的路由,通知
报排队给哪个哪个进程等信息。
例: iptables -t mang
le -A PREROUTING -j MARK --s
et-mark 0x0a -p tcp
TOS
设置数据报的IP头的TO
常有用处的。
S字段值。若希望适用基于TOS的
数据报调度及路由,这个功能是非
例: iptables -t mangle -A PREROU
TING -j TOS --set-tos 0x10 -p tcp --dport ssh
举例: iptables -t ma
55.255.255.255 -i eth0 -
ngle -A PREROUTING -m state
j DROP
--state NEW -d 2
(此命令能够添加一条规则到mangle
接口的目的地址为255.255.255.255的新
表的PREROUTING链,装载state 模块, 匹配发往eth0
连接,丢弃这些包并不记录)
下面是一个简单的IP伪装应用的Iptables规则(没有提供对外服务)
Bootstrapping Iptables
插入连接跟踪模块 (仅当没有编译进内核的情况下).
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp (如果你想用FTP)
设置缺省策略 - 设置内置链的缺省动作.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
阻塞所有的新连接 除
.
非连接是由内网(受保护的网络
)发起的,此例中eth0接口接外网
iptables -N state_chk - 在缺省的
filter表中创建用户链state_chk
iptables -A state_ch
state_chk链中添加一条规
k -m state --state ESTABLISH
则,接受所有的TCP回应包
ED,RELATED -j ACCEPT - 在
iptables -A state_chk -m state -
中添加一条规则,接受所有从非eth0接口
-state NEW -i ! eth0 -j ACCEPT - 在state_chk链
来的连接请求包
iptables -A state_ch
k -j DROP - 在state_chk链中
添加一条规则,其余的包丢弃
从INPUT和FORWARD链跳到 state_chk 链
iptables -A INPUT -j
state_chk - 在INPUT链中添加
一条规则,跳到state_chk链
iptables -A FORWARD -j state_chk
- 在FORWARD链中添加一条规则,跳到state_chk链
伪装连接 - 仅当你需要与Internet连接.
允许IP转发 - 如果你要卸载Iptables规则,记得禁止IP转发.
echo "1" > /proc/sys/net/ipv4/ip_forward
装载NAT模块 - 仅当你已把它们当做模块编译了
modprobe iptable_nat
modprobe ip_nat_ftp (仅当你需要用FTP时)
允许IP伪装 - 当eth0为动态地址时
(SNAT)
用以下命令. 对于静态IP, 推荐使用源地址翻译
iptables -t nat -A POSTROUTING -
o eth0 -j MASQUERADE
(iptables -t nat -A POSTROUTING
-o eth0 -j SNAT --to ip_address_of_eth0)
允许源地址翻译(SNAT) - 仅当eth0有静态IP地址
iptables -t nat -A P
OSTROUTING -o eth0 -j SNAT -
-to ip_address_of_eth0
端口转发
Netfilter中端口转发是由Iptables
要ipmasqadmin来实现). 仅当你需要在不
和转向(redirecting)不同.
来实现的. 你不再需要别的工具 (而在Ipchains中需
同机器之间做通信转发时才需要端口转发。请注意这
Netfilter下做端口转发分两步骤.
目的地址翻译(Destination NAT the
目的端口)
packets) (修改IP包头的目的IP地址和TC/UDP头的
iptables -t nat -A PREROUTING -i
--dport original_port_number -j DNAT
ress:destination_port_number
eth0 -p protocol -d ip_address_of_eth0
--to destination_ip_add
转发经过翻译的包(For
ward the natted packets) (允
许转发翻译过的包)
iptables -A FORWARD
--dport destination_port
-i eth0 -o eth1 -p protocol
_number -j ACCEPT
-d destination_ip_address
注意端口转发也要求允
许IP转发和IP伪装或SNAT(返回
的包需要修改源IP地址).
地址翻译(NAT Network Address Translation)
由于经常需要做IP伪装和对外开放内
所谓的地址翻译一般来讲就是将内网地址
SNAT)和Destination NAT(DNAT)。源N
网的某些服务,因此这里把地址翻译单独拿出来讲。
翻译为外网地址,NAT有两种类型:Source NAT(
AT是指改变包的源地
址。很明显,这是在路
址,是在路由之前做。端口
由之后做。IP伪装是源NAT的特
转
例。目的NAT是指改变包的目的地
发是DNAT的特例。在ip
Netfilter/Iptables本身就
chains中,端口转发需要其他的
可解决!
工具,如:ipmasqadm等,而现在
NAT表中包括3个链(ch
、OUTPUT(用于本地产生的
ain):PREROUTING(用于目的N
包的目的
AT)、POSTROUTING(用于源NAT)
NAT)。下面给出两个典型应用
源NAT(SNAT)
iptables -t nat -A P
OSTROUTING -s 192.168.1.0/24
-o eth0 -j SNAT --to 1.2.3.4
(可指定端口范围 --to
1.2.3.4:1-1023 或地址范围 -
-to 1.2.3.4-1.2.3.6)
IP伪装(SNAT的特例)
iptables -t nat -A POSTROUTING -
o ppp0 -j MASQUERADE
目的NAT(DNAT)
iptables -t nat -A PREROUTING -i
1.2.3.4:3128
eth1 -s 192.168.1.0/24 -j DNAT --to
端口重定向(DNAT的特例) ,可用来和代理服务器联合起来做“透明代理”
iptables -t nat -A PREROUTING -i
REDIRECT --to-ports 3128
eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j
Squid需要做的相应设置,在squid.conf中设置
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
对于squid 2.4版本,还需要一个附加设置
httpd_accel_single_host off
分片处理(Fragment)
当一个包在传输过程中
片,分成很多小的分片发出
的检查(IP + TCP/UDP/ICM
则是不可能的。 因而,让
任何区别,但是第二个以及
TCP --sport www将不会匹
也不会匹配任何分片(除了
以后的分片。通常是让第二
个分片没有通过,他的分片
由于大于所经过的网络的最大传
。在另一端再进行重组。关于分
P),但是后续的分片只有IP,
我们看看过滤规则怎么处理分片
以后的分片将由于缺少信息而不
配任何分片(除了第一个分片)
第一个)。 但是可以使用-f 选
个和以后的分片通过,因为过滤
最终将不会重组。但是要小心大
输单元(包的长度太大),将会分
段的问题的是第一个分片可以很好
没有上一层的信息。这对于过滤规
。第一个分片跟普通的包处理没有
会与规则匹配。例如: 规则-p
。同样规则-p TCP --sport ! www
项来描述规则,以适用于第二个和
规则适用于第一个分片,如果第一
量的分片会崩掉你的网络或机器。
例如,下面的规则将会drop所有到192.168.1.1的分片:
# iptables -A OUTPUT -f -d 192.1
68.1.1 -j DROP
iptables的可扩展性
iptables是可以扩展的,这就意味着
内核和iptables工具都可以扩展以提供新的特性。
内核扩展位于内核的模
模块。
块子目录,例如/lib/modules/2
.3.15/net。需要你手工加入这些
Iptables程序扩展位于
目录/usr/local/lib/iptables/
。
为了获得扩展的帮助,用选项(-p、-m、-j)来装载他并且后跟-h,
例如: # iptables -p tcp --help
iptables与ipchains的区别
·iptables的缺省
别放置对目的地址是本机以
链的名称从小写换成大写,并且
及本机发出的数据包的过虑规则
意义不再相同:INPUT和OUTPUT分
。
·-i选项现在只代表输入网络接口,输入网络接口则使用-o选项。
·TCP和UDP端口现在需要用--so
destination-port/--dport)选项拼写出
它们分别是载入TCP和UDP扩展的。
urce-port或--sport(或--
来并且必须置于"-p tcp"或"-p udp"选项之后,因为
·以前TCP的"-y"
标志现在改为"--syn",并且必
须置于"-p tcp"之后。
·原来的DENY目标最后改为了DROP。
·可以在列表显示单个链的同时将其清空。
·可以在清空内建链的同时将策略计数器清零。
·列表显示链时可显示计数器的当前瞬时值。
·REJECT和LOG现在变成了扩展目标,即意味着它们成为独立的内核模块。
·链名可以长达31个字符。
·MASQ现在改为MASQUERADE,并
了所使用的语法
且使用不同的语法。REDIRECT保留原名称,但也改变
总结(rc files and such)
好了,现在你有了一个
基本的选项. 首先把所有的
iptables-restore.
基本的防火墙, 你可能希望它们
规则写到rc shell脚本中.然后
能在系统启动时就起作用. 有两个
使用命令 iptables-save 和
你可以在系统网络初始化完成之后立即启动rc中的防火墙设置.
Iptables 帮助
目标的简要说明
iptables -j name_of_TARGET --help
匹配的简要说明
iptables -m name_of_match --help
列出ICMP消息类型
iptables -p icmp --help
以下是 'iptables -h'的简单输出文
iptables 8.
本. 列出的选项不全. 要更多的细节,可以看mn
iptables v1.2.2
Usage: iptables -[AD
C] chain rule-specification
[options]
iptables -[RI
] chain rulenum rule-specifi
cation [options]
iptables -D chain rulenum
[options]
iptables -[LFZ] [chain] [
options]
iptables -[NX] chain
iptables -E old-chain-nam
e new-chain-name
iptables -P chain target
[options]
iptables -h (
print this help information)
Commands:
Either long or short options are
allowed.
--append -A chain
Append to chain
--delete -D chain
Delete matching rule from chain
--delete -D chain rulenum
Delete rule rule
num (1 = first) from chain
--insert -I chain [rulenum]
Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
--list -L [chai
n] List the rules i
n a chain or all chains
--flush -F [chai
n] Delete all rules
in chain or all chains
--zero -Z [chai
n] Zero counters in
chain or all chains
--check -C chain
Test this packet
on chain
--new -N chain
Create a new user-defined chain
--delete-chain
-X [chai
n] Delete a user-de
fined chain
--policy -P chain target
Change policy on chain to target
--rename-chain
-E old-chain new-chain
Change chain nam
e, (moving any references)
Options:
--proto -p [!] proto
protocol: by number or name, eg. `tcp'
--source -s [!] address[/mask]
source specification
--destination -d [!] address[/mask]
destination spec
ification
--in-interface -i [!] input name[+]
network interface name ([+] for wildcard)
--jump -j target
target for rule (may load target extension)
--match -m match
extended match (may load extension)
--numeric -n
numeric output of addresses and ports
--out-interface -o [!] output name[+]
network interface name ([+] for wildcard)
--table -t table
table to manipulate (default: `filter')
--verbose -v
verbose mode
--line-numbers
print line numbe
rs when listing
--exact -x
expand numbers (
display exact values)
[!] --fragment -f
match second or further fragments only
--modprobe= try to in
sert modules using this command
--set-counters PKT
S BYTES set the counter
during insert/append
[!] --version -V
print package ve
rsion.
IP概况
注意: 此处仅是讨论了和防火墙有关
的一些IP内容,欲知更多细节请查Resources .
IP (网间互连协议Internet Protocol)
IP协议的分层位于物理
或NetBEUI..
层之上(非 OSI体系).其他的同
样位于物理层之上的协议有 ARP
TCP (传输控制协议Tra
nsmission Control Protocol)
TCP 控制了包的传输.这以为着它在
意味着不是实在的连接
通信双方之间建立了一个“虚拟”的连接,“虚拟”
三次握手Three-way Handshake
一个虚拟连接的建立是通过三次握手来实现的
1. (B) --> [SYN] --> (A)
假如服务器A和客户机B
记的包,告诉A请求建立连
通讯. 当A要和B通信时,B首先
接.
向A发一个SYN (Synchronize) 标
注意: 一个 SYN包就是
重要,只有当A受到B发来的
墙丢弃所有的发往外网接口
仅SYN标记设为1的TCP包(参见TC
SYN包,才可建立连接,除此之
的SYN包,那么你将不能让外部
P包头Resources). 认识到这点很
外别无他法。因此,如果你的防火
任何主机主动建立连接。
2. (B) <-- [SYN/ACK] <--(A)
接着,A收到后会发一个对SYN包的确
继续握手操作.
认包(SYN/ACK)回去,表示对第一个SYN包的确认,并
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.
3. (B) --> [ACK] --> (A)
B收到SYN/ACK 包,B发一个确认包(AC
TCP连接完成
K),通知A连接已建立。至此,三次握手完成,一个
Note: ACK包就是仅ACK 标记设为1的
后,TCP连接的每个包都会设置ACK位
TCP包. 需要注意的是当三此握手完成、连接建立以
这就是为何连接跟踪很重要的原因了
属于一个已经建立的连接.一般的包过滤(
主意). 而当状态型防火墙收到此种包时
则丢弃该包
. 没有连接跟踪,防火墙将无法判断收到的ACK包是否
Ipchains)收到ACK包时,会让它通过(这绝对不是个好
,它会先在连接表中查找是否属于哪个已建连接,否
四次握手Four-way Handshake
四次握手用来关闭已建立的TCP连接
1. (B) --> ACK/FIN --> (A)
2. (B) <-- ACK <-- (A)
3. (B) <-- ACK/FIN <-- (A)
4. (B) --> ACK --> (A)
注意: 由于TCP连接是
和FIN 标记设为1)通常被认
标记. 没有ACK标记而仅有F
双向连接, 因此关闭连接需要在
为是FIN(终结)包.然而, 由于连
IN标记的包不是合法的包,并且
两个方向上做。ACK/FIN 包(ACK
接还没有关闭, FIN包总是打上ACK
通常被认为是恶意的
连接复位Resetting a connection
四次握手不是关闭TCP
端口或主机不可达),RST (R
, 可以只发送RST包(即不带
连接的唯一方法. 有时,如果主
eset)包将被发送. 注意在,由
ACK标记). 但在正常的TCP连接
机需要尽快关闭连接(或连接超时,
于RST包不是TCP连接中的必须部分
中RST包可以带ACK确认标记
请注意RST包是可以不要收到方确认的?
无效的TCP标记Invalid TCP Flags
到目前为止,你已经看
URG (Urgent)标记.
到了 SYN, ACK, FIN, 和RST 标
记. 另外,还有PSH (Push) 和
最常见的非法组合是SYN/FIN 包. 注
FIN和RST标记一起出现. 这也是一个恶意
意:由于 SYN包是用来初始化连接的, 它不可能和
攻击.
由于现在大多数防火墙
SYN/FIN/RST, SYN/FIN/RST
了。
已知 SYN/FIN 包, 别的一些组
/PSH。很明显,当网络中出现这
合,例如SYN/FIN/PSH,
种包时,很你的网络肯定受到攻击
别的已知的非法包有FIN (无ACK标记
现是为了关闭一个TCP连接,那么正常的F
标记的包(URG,ACK,PSH,RST,SYN,FIN都为
)和"NULL"包。如同早先讨论的,由于ACK/FIN包的出
IN包总是带有 ACK 标记。"NULL"包就是没有任何TCP
0)。
到目前为止,正常的网络活动下,TC
合的TCP包。当你发现这些不正常的包时
P协议栈不可能产生带有上面提到的任何一种标记组
,肯定有人对你的网络不怀好意。
UDP (用户数据包协议User Datagram Protocol)
TCP是面向连接的,而UDP是非连接的
对丢包的处理是在应用层来完成的。(or
协议。UDP没有对接受进行确认的标记和确认机制。
accidental arrival).
此处需要重点注意的事
个UDP复位包。由于UDP是非
。因此如果你的防火墙丢弃
情是:在正常情况下,当UDP包
面向连接的, 因此没有任何确认
UDP包,它会开放所有的UDP端口
到达一个关闭的端口时,会返回一
信息来确认包是否正确到达目的地
(?)。
由于Internet上正常情况下一些包将
UDP包将不会到达目的,它们将返回一个
被丢弃,甚至某些发往已关闭端口(非防火墙的)的
复位UDP包。
因为这个原因,UDP端口扫描总是不精确、不可靠的。
看起来大UDP包的碎片
攻击的例子,http://grc.c
是常见的DOS (Denial of Servi
om/dos/grcdos.htm ).
ce)攻击的常见形式 (这里有个DOS
ICMP (网间控制消息协议Internet C
ontrol Message Protocol)
如同名字一样, ICMP用来在主机/路
断信息(ping, traceroute - 注意目前un
息(网络/主机/端口 不可达 network/hos
址掩码address mask request, etc.),
由器之间传递控制信息的协议。 ICMP包可以包含诊
ix系统中的traceroute用UDP包而不是ICMP),错误信
t/port unreachable), 信息(时间戳timestamp, 地
或控制信息 (source quench, redirect, etc.) 。
你可以在http://www.iana.org/assi
gnments/icmp-parameters中找到ICMP包的类型。
尽管ICMP通常是无害的,还是有些类型的ICMP信息需要丢弃。
Redirect (5), Alternate Host Add
通讯。
ress (6), Router Advertisement (9) 能用来转发
Echo (8), Timestamp (13) and Add
起来,本地时间 和地址掩码。注意它们
被利用的,但它们泄露出的信息对攻击者
ress Mask Request (17) 能用来分别判断主机是否
是和返回的信息类别有关的。 它们自己本身是不能
是有用的。
ICMP消息有时也被用来
呵,有趣 ping of death)
作为DOS攻击的一部分(例如:洪
。
水ping flood ping,死 ping ?呵
包碎片注意A Note About Packet Fragmentation
如果一个包的大小超过
(Maximum Transmission Un
是正常的,它可以被利用来
了TCP的最大段长度MSS (Maximu
it),能够把此包发往目的的唯
做恶意的攻击。
m Segment Size) 或MTU
一方法是把此包分片。由于包分片
因为分片的包的第一个分片包含一个
测附加的包分片。典型的攻击Typical at
in which packet header is 典型的攻击
packet data in which packet header i
different destination IP (or port) t
DOS 攻击的一部分,它可以crash older
包头,若没有包分片的重组功能,包过滤器不可能检
tacks involve in overlapping the packet data
Typical attacks involve in overlapping the
snormal until is it overwritten with
hereby bypassing firewall rules。包分片能作为
IP stacks 或涨死CPU连接能力。
Netfilter/Iptables中
接攻击,可以把CPU资源耗
的连接跟踪代码能自动做分片重
光。
组。它仍有弱点,可能受到饱和连
Netfilter Automatic Rule Configu
rator(Netfilter/Iptables自动规则配置器)
注意: NARC,或别的什么防火墙,都
关于防火墙的简单介绍。
不能保证你的网络的绝对安全。请看本问开始部分的
安装NARC的系统要求:
- 系统内核必须2.4.x 以上 (http:/
/www.kernel.org/)
- iptables tools (http://netfilt
er.samba.org/)
- 一个可工作的编译器 (如果你想自己编译)
谁可适用此工具?
如果你想用Netfilter/
你达成目标。
Iptables 来做防火墙,但你又
对写脚本没有经验。NARC可以帮助
NARC是什么?
NARC是一个基于BSD license的免费
的Netfilter/Iptables防火墙包。
NARC试图简化用iptables工具配置防火墙(状态包过滤)的难度。
Narc 的功能不全)
安装简单
连接跟踪(碎片重组)
可自定义日志记录
TCP & UDP探测保护
非法的TCP报头过滤
FIN, NULL, ACK 扫描保护
ICMP消息过滤和速率限制
SYN包长度检测
普通速率限制(防止DoS攻击)
基于TCP连接数的速率限制
SYN洪水保护
Smurf攻击保护
IP地址欺骗过滤
支持DMZ(非军事区)
支持端口转发
哪里得到NARC?
NARC的项目主页http:/
v0.6.1http://www.knowpla
4a4b89ee3f0941).
/www.knowplace.org/netfilter
ce.org/dl/narc-0.6.1.tgz (ae
/narc.html. 目前版本为
9011d1de7daa155a
Netfilter/Iptables常见问题解答
Q: 为什么用'iptables -L',信息出来的非常慢?
A: 如果你没有用'-n'
'--numeric' 或'-n' 将显
显示行号,-n:数字化输出
开关,Iptables将逆向解析IP地
示数字化的地址和端口(如:'ip
,-v:显示每条规则匹配的包数
址,这将花费很多时间。使用
tables -L --line -nv').--line:
、字节数,并显示相应的接口。
Q:如何处理多播包multicast?
A: 由于多播包会击中N
包,最好丢弃它们
AT表, 但是目前连接跟踪(conne
ction tracking)还不能处理多播
iptables -t mangle -
I PREROUTING -j DROP -d 224.
0.0.0/8
Q:为什么会看到如此信
息:ip_conntrack: maximum li
mit of XXX entries exceeded?
A: 如果你在syslog中看到如此信息
足够的环境空间。此值的缺省值会根据你
8192, ...).
,可能是连接跟踪数据库(conntrack database)没有
的系统不同而有所不同。(如:64MB: 4096, 128MB:
你可以简单的增加跟踪
储空间。
连接的数目,但要知道,每一个
跟踪连接会吃掉350字节的内核存
例如:增加到8192,可以用以下命令:
echo "8192" > /proc/sys/net/ipv4/ip_conntrack_max
Q:我使用了ip_nat_ftp 和ip_conntr
口,如何办?
ack_ftp 模块,但我的FTP服务器跑的不是标准的端
A: 带参数'ports=#'装
'modprobe ip_nat_ftp por
载模块。例如,对于监听2121端
ts=2121'。如果需要指定多个端
口的FTP服务器,可用命令
口,可用逗号格开(no space)。
Q: 如果我把模块静态的编译进了内核,我如何用这些选项呢?
A: 不要把它们编译进内核。
Q: Netfilter/Iptable
s支持NetMeeting (H.323)吗 ?
A: 不支持。目前还没有人写连接跟
http://openh323proxy.sourceforge.net
踪模块来支持它。平时可用
/ 来在Netfilter下代理H.323连接。
Q: 我试图使用FTP安全补丁http://n
ity-fix/ftp-security2.patch; 为什么
etfilter.samba.org/secur
不能很好的起作用?
A: 这个问题仅发生在v2.4.3以前的
议用最新的内核版本。
内核中。在后来发布的内核中,此问题已经解决。建
Q: 什么是patch-o-matic 并且我如何使用它?
A: Rusty的patch-o-matic帮助你给
http://www.knowplace.org/netfilter/i
内核打上一些增强或实验性的功能。See
pt_compile.html for more details.
Q: Netfilter总是把日志记录显示在控制台上,我如何把它停止?
A: 有两个原因会导致
/dev/console'。如果没有
这个问题。首先,确认/etc/sys
,可以尝试用开关'-c 3'启动kl
log.conf中没有 'kern.*
ogd。
Q: 我总是看到ACK FIN日志记录如:
kernel: IN=eth0 OUT= MAC=#:#:#:#:#:#:#:#:#:#:#:#:08:00 SRC=#.#.#.# DST=#.#.#.# LEN=40 TOS=0x00 PREC=0x00 TTL=43 ID=37639 DF PROTO=TCP SPT=# DPT=# WINDOW=4288 RES=0x00 ACK FIN URGP=0
有什么东西不对吗?
A: Well, yes and no. This is a k
dropping the conntrack entry for a s
isn't exactly clear if it's Netfilte
is doing this wrong. If you want to
along with the error log to the netf
error logs). Either way, this is har
nown 'bug' in which Netfilter appears to be
pecific connection too early. However, it
r that has this wrong, or the server/client
help, please send packet dumps (tcpdump)
ilter mailing list (DO NOT just send the
mless beyond filling up your logs.
Q: 我用了一些不干净
核到2.4.6以上时出现的
的补丁,为什么看起来它丢弃了
一些有效包?这好象是从我升级内
A: It's not called e
samba.org/pipermail/netf
always broken, but becau
anything.
xperimental for no reason. S
ilter/2001-August/014748.htm
se it was never actually cal
ee http://lists.
l. The UNCLEAN match was
led, it didn't seem to break
Q: 我如何列出 NAT/ma
squeraded 连接('ipchains -L
-M')?
A: 使用 'cat /proc/net/ip_conntrack'.
Q: 当我使用 'cat /proc/net/ip_co
显示之前总是挂起一会?
nntrack'来显示连接跟踪信息时,为什么在全部信息
A: /proc文件系统可以
且可能不会经常发生。
作为读-写锁被ip_conntrack同
时访问。这可能是个短暂的现象并
Q: 如何列出所有可用的表?
A: cat /proc/net/ip_tables_names.
Q: 我如何列出 NAT/ma
squeraded 连接('ipchains -L
-M')?
A: 使用 'cat /proc/net/ip_conntrack'.
Q: 我如何列出 NAT/ma
squeraded 连接('ipchains -L
-M')?
A: 使用 'cat /proc/net/ip_conntrack'.
资源
ip_conntrack_ftp.c中的安全漏洞 (http://netfilter.samba.org/security-fix/index.html) - 此弱点仅在(<) to 2.4.4版本中存在。
Netfilter 工程(http:
//netfilter.samba.org/) - ne
tfilter/iptables project home
Step-by-step Iptable
ops/linux/iptables-tutor
s tutorial (http://www.Boing
ial/) by Oskar Andreasson
World.com/worksh
Linux 2.4 packet filtering HOWTO
.org/unreliable-guides/packet-filter
(http://netfilter.samba
ing-HOWTO/index.html)
Linux 2.4 NAT HOWTO (http://netf
le-guides/NAT-HOWTO/index.html)
ilter.samba.org/unreliab
Iptables packet trav
erse diagram (http://ods.dyn
dns.org/ipt_flow.html)
Iptables connection
edu/~jns/security/iptabl
tracking explained (http://w
es/iptables_conntrack.html)
ww.cs.princeton.
Linux Networking-con
liable-guides/networking
cepts HOWTO (http://netfilte
-concepts-HOWTO/index.html)
r.samba.org/unre
RFC 1340 (http://andrew2.andrew.
numbers such as IP protocol number o
cmu.edu/rfc/rfc1340.html) - contains assigned
r well known port numbers
ICMP type-code summary (http://w
ww.iana.org/assignments/icmp-parameters)
Netfilter mailing-list archive (
com/cgi-bin/get/netfilter-current.ht
SecurePoint
http://msgs.securepoint.
ml) - searchable web interface provided by
Linux kernel howto http://www.li
nuxdoc.org/HOWTO/Kernel-HOWTO.html
ulogd project http:/
/www.gnumonks.org/gnumonks/p
rojects/project_details?p_id=1
The HoneyNet Project http://proj
ect.honeynet.org/ - know your enemies well
CERT?Coordination Center vulnera
ert.org/nav/index_red.html
bility news http://www.c
Understanding IP addressing http
l
://www.3com.com/solutions/en_US/ncs/501302.htm
Abnormal IP packets
les/abnormal1.html
http://www.securityfocus.com
/focus/ids/artic
TCP/IP refresher htt
p://www.cs.wright.edu/~pmate
ti/Courses/499/TCPIP/
An Internet Encyclopedia http://
packetderm.cotse.com/CIE/Topics/index.htm
SYN cookies ftp://koobera.math.u
ic.edu/syncookies.html
TCP window size http
tcp_windows.html
://www.ncsa.uiuc.edu/People/
vwelch/net_perf/
Linux 2.4 Advanced Routing & Tra
ffic Control http://www.ds9a.nl/2.4Routing/
Netfilter log format http://logi
.cc/linux/netfilter-log-format.php3
Netfilter log analyz
er http://logi.cc/linux/Netf
ilterLogAnalyzer.php3
--------------------------------
------------------------
------------------------
Glossary
bastion host - A heavily secured host.
host - Any computer that is conn
ected to a network.
ICMP - Internet Control Message
Protocol (RFC 792)
IP - Internet Protocol (RFC 791)
IP body - contains t
he actual data in an IP pack
et
IP packet - an IP pa
cket is made up of an IP hea
der and an IP body
IP header - an IP header contain
from RFC 791)
s meta-data about the IP body (diagram stolen
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| I
HL |Type of Service|
Total Length |
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
| Id
entification |Flags|
Fragment Offset |
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Pro
tocol | Header Checksum |
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
|
Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Des
tination Address |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Network Address Translation (NAT
IP address or destination IP address
) - A process that modifies either the source
of an IP packet.
packet - A unit of d
ata exchange between hosts.
server - a host that
accept new connections)
will provide a network serv
ice to other hosts (i.e.
TCP - Transmission Control Proto
col (RFC 793)
TCP handshake - a th
must follow (stolen diag
give you credit or take
ree step process that every
ram - don't remember where.
it down).
(successful) TCP connection
Email me and I'll be glad to
TCP header - a TCP header contai
stolen from RFC 793) *slightly modif
ns meta-data about the TCP body (diagram
ied to add ECN and CWR.
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
| S
ource Port |
Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ack
nowledgment Number |
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A
|P|R|S|F| |
| Offset|Res
rved|W|C|R|C|S|S|Y|I|
Window |
| | |R|N|G|K
|H|T|N|N| |
+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+
|
Checksum |
Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Options
| Padding |
+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
TCP/IP - even though
actually a TCP tunnel ov
commonly spoken as if it's
er the IP layer |
|