- 浏览: 84502 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
zhtch_123:
hold_on 写道zhtch_123 写道可以,使用apk的 ...
Android插件式开发(一) -
hold_on:
zhtch_123 写道可以,使用apk的静默安装那还是要安装 ...
Android插件式开发(一) -
zhtch_123:
可以,使用apk的静默安装
Android插件式开发(一) -
hold_on:
xingzhe321655 写道这个思路不错,但是每安装一个插 ...
Android插件式开发(一) -
zhtch_123:
很久没有用了,现在要用了,来复习一下。不论ssh怎么更新版本, ...
SSH 架构
iptables配置指令详解
用iptables -ADC 来指定链的规则,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX 指定链
iptables -P chain target[options]
指定链的默认目标
iptables -E old-chain-name new-chain-name
-E 旧的链名 新的链名
用新的链名取代旧的链名
说明
Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。
可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。
TARGETS
防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过], DROP[删除], QUEUE[排队], 或者 RETURN[返回]。
ACCEPT 表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配,到前一个链的规则重新开始。如果到达了一个内建的链(的末端),或者遇到内建链的规则是RETURN,包的命运将由链准则指定的目标决定。
TABLES
当前有三个表(哪个表是当前表取决于内核配置选项和当前模块)。
-t table
这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块,这时若模块没有加载,(系统)将尝试(为该表)加载适合的模块。这些表如下:filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWORD(处理通过的包)和OUTPUT(处理本地生成的包)。nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。mangle 这个表用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。
OPTIONS
这些可被iptables识别的选项可以区分不同的种类。
COMMANDS
这些选项指定执行明确的动作:若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了。
-A -append
在所选择的链末添加一条或更多规则。当源(地址)或者/与 目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。
-D -delete
从所选链中删除一条或更多规则。这条命令可以有两种方法:可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。
-R -replace
从选中的链中取代一条规则。如果源(地址)或者/与 目的(地址)被转换为多地址,该命令会失败。规则序号从1开始。
-I -insert
根据给出的规则序号向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会被插入链的头部。这也是不指定规则序号时的默认方式。
-L -list
显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。
-F -flush
清空所选链。这等于把所有规则一个个的删除。
--Z -zero
把所有链的包及字节的计数器清空。它可以和 -L配合使用,在清空前察看计数器,请参见前文。
-N -new-chain
根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。
-X -delete-chain
删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链。
-P -policy
设置链的目标规则。
-E -rename-chain
根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标。
-h Help.
帮助。给出当前命令语法非常简短的说明。
PARAMETERS
参数
以下参数构成规则详述,如用于add、delete、replace、append 和 check命令。
-p -protocal [!]protocol
规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用。
-s -source [!] address[/mask]
指定源地址,可以是主机名、网络名和清楚的IP地址。mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志 --src 是这个选项的简写。
-d --destination [!] address[/mask]
指定目标地址,要获取详细说明请参见 -s标志的说明。标志 --dst 是这个选项的简写。
-j --jump target
-j 目标跳转
指定规则的目标;也就是说,如果包匹配应当做什么。目标可以是用户自定义链(不是这条规则所在的),某个会立即决定包的命运的专用内建目标,或者一个扩展(参见下面的EXTENSIONS)。如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。
-i -in-interface [!] [name]
i -进入的(网络)接口 [!][名称]
这是包经由该接口接收的可选的入口名称,包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口。
-o --out-interface [!][name]
-o --输出接口[名称]
这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配所有任意接口。
[!] -f, --fragment
[!] -f --分片
这意味着在分片的包中,规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口(或者是ICMP类型的),这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前,表示相反的意思。
OTHER OPTIONS
其他选项
还可以指定下列附加选项:
-v --verbose
-v --详细
详细输出。这个选项让list命令显示接口地址、规则选项(如果有)和TOS(Type of Service)掩码。包和字节计数器也将被显示,分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍(不过请参看-x标志改变它),对于添加,插入,删除和替换命令,这会使一个或多个规则的相关详细信息被打印。
-n --numeric
-n --数字
数字输出。IP地址和端口会以数字的形式打印。默认情况下,程序试显示主机名、网络名或者服务(只要可用)。
-x -exact
-x -精确
扩展数字。显示包和字节计数器的精确值,代替用K,M,G表示的约数。这个选项仅能用于 -L 命令。
--line-numbers
当列表显示规则时,在每个规则的前面加上行号,与该规则在链中的位置相对应。
MATCH EXTENSIONS
对应的扩展
iptables能够使用一些与模块匹配的扩展包。以下就是含于基本包内的扩展包,而且他们大多数都可以通过在前面加上!来表示相反的意思。
tcp
当 --protocol tcp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载。它提供以下选项:
--source-port [!] [port[:port]]
源端口或端口范围指定。这可以是服务名或端口号。使用格式端口:端口也可以指定包含的(端口)范围。如果首端口号被忽略,默认是"0",如果末端口号被忽略,默认是"65535",如果第二个端口号大于第一个,那么它们会被交换。这个选项可以使用 --sport的别名。
--destionation-port [!] [port:[port]]
目标端口或端口范围指定。这个选项可以使用 --dport别名来代替。
--tcp-flags [!] mask comp
匹配指定的TCP标记。第一个参数是我们要检查的标记,一个用逗号分开的列表,第二个参数是用逗号分开的标记表,是必须被设置的。标记如下:SYN ACK FIN RST URG PSH ALL NONE。因此这条命令:iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN标记被设置而ACK、FIN和RST标记没有设置的包。
[!] --syn
只匹配那些设置了SYN位而清除了ACK和FIN位的TCP包。这些包用于TCP连接初始化时发出请求;例如,大量的这种包进入一个接口发生堵塞时会阻止进入的TCP连接,而出去的TCP连接不会受到影响。这等于 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"标记,表示相反的意思。
--tcp-option [!] number
匹配设置了TCP选项的。
udp
当protocol udp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载,它提供以下选项:
--source-port [!] [port:[port]]
源端口或端口范围指定。详见 TCP扩展的--source-port选项说明。
--destination-port [!] [port:[port]]
目标端口或端口范围指定。详见 TCP扩展的--destination-port选项说明。
icmp
当protocol icmp被指定,且其他匹配的扩展未被指定时,该扩展被装载。它提供以下选项:
--icmp-type [!] typename
这个选项允许指定ICMP类型,可以是一个数值型的ICMP类型,或者是某个由命令iptables -p icmp -h所显示的ICMP类型名。
mac
--mac-source [!] address
匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。
limit
这个模块匹配标志用一个标记桶过滤器一一定速度进行匹配,它和LOG目标结合使用来给出有限的登陆数.当达到这个极限值时,使用这个扩展包的规则将进行匹配.(除非使用了"!"标记)
--limit rate
最大平均匹配速率:可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位,默认是3/hour。
--limit-burst number
待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5
multiport
这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。
--source-port [port[, port]]
如果源端口是其中一个给定端口则匹配
--destination-port [port[, port]]
如果目标端口是其中一个给定端口则匹配
--port [port[, port]]
若源端口和目的端口相等并与某个给定端口相等,则匹配。
mark
这个模块和与netfilter过滤器标记字段匹配(就可以在下面设置为使用MARK标记)。
--mark value [/mask]
匹配那些无符号标记值的包(如果指定mask,在比较之前会给掩码加上逻辑的标记)。
owner
此模块试为本地生成包匹配包创建者的不同特征。只能用于OUTPUT链,而且即使这样一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配。
--uid-owner userid
如果给出有效的user id,那么匹配它的进程产生的包。
--gid-owner groupid
如果给出有效的group id,那么匹配它的进程产生的包。
--sid-owner seessionid
根据给出的会话组匹配该进程产生的包。
state
此模块,当与连接跟踪结合使用时,允许访问包的连接跟踪状态。
--state state
这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。
unclean
此模块没有可选项,不过它试着匹配那些奇怪的、不常见的包。处在实验中。
tos
此模块匹配IP包首部的8位tos(服务类型)字段(也就是说,包含在优先位中)。
--tos tos
这个参数可以是一个标准名称,(用iptables -m tos -h 察看该列表),或者数值。
TARGET EXTENSIONS
iptables可以使用扩展目标模块:以下都包含在标准版中。
LOG
为匹配的包开启内核记录。当在规则中设置了这一选项后,linux内核会通过printk()打印一些关于全部匹配包的信息(诸如IP包头字段等)。
--log-level level
记录级别(数字或参看 syslog.conf(5))。
--log-prefix prefix
在纪录信息前加上特定的前缀:最多14个字母长,用来和记录中其他信息区别。
--log-tcp-sequence
记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。
--log-tcp-options
记录来自TCP包头部的选项。
--log-ip-options
记录来自IP包头部的选项。
MARK
用来设置包的netfilter标记值。只适用于mangle表。
--set-mark mark
REJECT
作为对匹配的包的响应,返回一个错误的包:其他情况下和DROP相同。
此目标只适用于INPUT、FORWARD和OUTPUT链,和调用这些链的用户自定义链。这几个选项控制返回的错误包的特性:
--reject-with type
Type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited,该类型会返回相应的ICMP错误信息(默认是port-unreachable)。选项 echo-reply也是允许的;它只能用于指定ICMP ping包的规则中,生成ping的回应。最后,选项tcp-reset可以用于在INPUT链中,或自INPUT链调用的规则,只匹配TCP协议:将回应一个TCP RST包。
TOS
用来设置IP包的首部八位tos。只能用于mangle表。
--set-tos tos
你可以使用一个数值型的TOS 值,或者用iptables -j TOS -h 来查看有效TOS名列表。
MIRROR
这是一个试验示范目标,可用于转换IP首部字段中的源地址和目标地址,再传送该包,并只适用于INPUT、FORWARD和OUTPUT链,以及只调用它们的用户自定义链。
SNAT
这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查,它包含选项:
--to-source <ipaddr>[-<ipaddr>][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,源端口中512以下的(端口)会被安置为其他的512以下的端口;512到1024之间的端口会被安置为1024以下的,其他端口会被安置为1024或以上。如果可能,端口不会被修改。
--to-destiontion <ipaddr>[-<ipaddr>][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,目标端口不会被修改。
MASQUERADE
只用于nat表的POSTROUTING链。只能用于动态获取IP(拨号)连接:如果你拥有静态IP地址,你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像,当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址(以后所有建立的连接都将关闭)。它有一个选项:
--to-ports <port>[-port>]
指定使用的源端口范围,覆盖默认的SNAT源地址选择(见上面)。这个选项只适用于指定了-p tcp或者-p udp的规则。
REDIRECT
只适用于nat表的PREROUTING和OUTPUT链,和只调用它们的用户自定义链。它修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址127.0.0.1)。它包含一个选项:
--to-ports <port>[<port>]
指定使用的目的端口或端口范围:不指定的话,目标端口不会被修改。只能用于指定了-p tcp 或 -p udp的规则。
DIAGNOSTICS
诊断
不同的错误信息会打印成标准错误:退出代码0表示正确。类似于不对的或者滥用的命令行参数错误会返回错误代码2,其他错误返回代码为1。
BUGS
臭虫
Check is not implemented (yet).
检查还未完成。
COMPATIBILITY WITH IPCHAINS
与ipchains的兼容性
iptables和Rusty Russell的ipchains非常相似。主要区别是INPUT 链只用于进入本地主机的包,而OUTPUT只用于自本地主机生成的包。因此每个包只经过三个链的一个;以前转发的包会经过所有三个链。其他主要区别是 -i 引用进入接口;-o引用输出接口,两者都适用于进入FORWARD链的包。当和可选扩展模块一起使用默认过滤器表时,iptables是一个纯粹的包过滤器。这能大大减少以前对IP伪装和包过滤结合使用的混淆,所以以下选项作了不同的处理:
-j MASQ
-M -S
-M -L
在iptables中有几个不同的链。
---------------------------
iptables 是建立在 netfilter 架构基础上的一个包过滤管理工具,最主要的作用是用来做防火墙或透明代理。Iptables 从 ipchains 发展而来,它的功能更为强大。Iptables 提供以下三种功能:包过滤、NAT(网络地址转换)和通用的 pre-route packet mangling。包过滤:用来过滤包,但是不修改包的内容。Iptables 在包过滤方面相对于 ipchians 的主要优点是速度更快,使用更方便。NAT:NAT 可以分为源地址 NAT 和目的地址 NAT。
Iptables 可以追加、插入或删除包过滤规则。实际上真正执行这些过虑规则的是 netfilter 及其相关模块(如 iptables 模块和 nat 模块)。Netfilter 是 Linux 核心中一个通用架构,它提供了一系列的 “表”(tables),每个表由若干 “链”(chains)组成,而每条链中可以有一条或数条 “规则”(rule)组成。
系统缺省的表为 “filter”,该表中包含了 INPUT、FORWARD 和 OUTPUT 3 个链。
每一条链中可以有一条或数条规则,每一条规则都是这样定义的:如果数据包头符合这样的条件,就这样处理这个数据包。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包。
? table,chain,rule
iptables 可以操纵3 个表:filter 表,nat 表,mangle 表。
NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对 filter 表操作。
Rule 规则:过滤规则,端口转发规则等,例如:禁止任何机器 ping 我们的服务器,可以在服务器上设置一条规则:
iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP
从 –s 开始即是一条规则,-j 前面是规则的条件,-j 开始是规则的行为(目的)。整条命令解释为,在filter 表中的 INPUT 规则链中插入一条规则,所有源地址不为 127.0.0.1 的 icmp 包都被抛弃。
Chain 规则链:由一系列规则组成,每个包顺序经过 chain 中的每一条规则。chain 又分为系统 chain和用户创建的 chain。下面先叙述系统 chain。
filter 表的系统 chain: INPUT,FORWAD,OUTPUT
nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT
mangle 表的系统 chain: PREROUTING,OUTPUT
每条系统 chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。
所有的 table 和 chain 开机时都为空,设置 iptables 的方法就是在合适的 table 和系统 chain 中添相应的规则。
--------------------------------------------------------------
IPTABLES 语法:
表: iptables从其使用的三个表(filter、nat、mangle)而得名, 对包过滤只使用 filter 表, filter还是默认表,无需显示说明.
操作命令: 即添加、删除、更新等。
链:对于包过滤可以针对filter表中的INPUT、OUTPUT、FORWARD链,也可以操作用户自定义的链。
规则匹配器:可以指定各种规则匹配,如IP地址、端口、包类型等。
目标动作:当规则匹配一个包时,真正要执行的任务,常用的有:
ACCEPT 允许包通过
DROP 丢弃包
一些扩展的目标还有:
REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知
LOG 包有关信息记录到日志
TOS 改写包的TOS值
为使FORWARD规则能够生效,可使用下面2种方法的某种:
[root@rhlinux root]# vi /proc/sys/net/ipv4/ip_forward
[root@rhlinux root]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@rhlinux root]# vi /etc/sysconfig/network
[root@rhlinux root]# echo "FORWARD_IPV4=true" > /etc/sysconfig/network
--------------------------------------------------------
iptables语法可以简化为下面的形式:
iptables [-t table] CMD [chain] [rule-matcher] [-j target]
--------------------------------------------------------
常用操作命令:
-A 或 -append 在所选链尾加入一条或多条规则
-D 或 -delete 在所选链尾部删除一条或者多条规则
-R 或 -replace 在所选链中替换一条匹配规则
-I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部.
-L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.
-F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.
-N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.
-X 或 -delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链.
-P 或 -policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使规则链中的最后一条规则,用-L显示时它在第一行显示.
-C 或 -check 检查给定的包是否与指定链的规则相匹配.
-Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零.
-h 显示帮助信息.
-------------------------------------------------------------
常用匹配规则器:
-p , [!] protocol 指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议外的所有协议.
-s [!] address[/mask] 指定源地址或者地址范围.
-sport [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-d [!] address[/mask] 指定目的地址或者地址范围.
-dport [!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-icmp-type [!] typename 指定匹配规则的ICMP信息类型(可以使用 iptables -p icmp -h 查看有效的ICMP类型名)
-i [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可以使用"!"来匹配捕食指定接口来的包.参数interface是接口名,如 eth0, eht1, ppp0等,指定一个目前不存在的接口是完全合法的,规则直到接口工作时才起作用,折中指定对于PPP等类似连接是非常有用的."+"表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD和PREROUTING链是合法的.
-o [!] interface name[+] 匹配规则的对外网络接口,该选项只针对于OUTPUT,FORWARD,POSTROUTING链是合法的.
[!] --syn 仅仅匹配设置了SYN位, 清除了ACK, FIN位的TCP包. 这些包表示请求初始化的TCP连接.阻止从接口来的这样的包将会阻止外来的TCP连接请求.但输出的TCP连接请求将不受影响.这个参数仅仅当协议类型设置为了TCP才能使用. 此参数可以使用"!"标志匹配已存在的返回包,一般用于限制网络流量,即只允许已有的,向外发送的连接所返回的包.
----------------------------------------------------------
如何制定永久规则集:
/etc/sysconfig/iptables 文件是 iptables 守护进程调用的默认规则集文件.
可以使用以下命令保存执行过的IPTABLES命令:
/sbin/iptables-save > /etc/sysconfig/iptables
要恢复原来的规则库,可以使用:
/sbin/iptables-restore < /etc/sysconfig/iptables
iptables命令和route等命令一样,重启之后就会恢复,所以:
[root@rhlinux root]# service iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
令一种方法是 /etc/rc.d/init.d/iptables 是IPTABLES的启动脚本,所以:
[root@rhlinux root]# /etc/rc.d/init.d/iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
以上几种方法只使用某种即可.
若要自定义脚本,可直接使用iptables命令编写一个规则脚本,并在启动时执行:
例如若规则使用脚本文件名/etc/fw/rule, 则可以在/etc/rc.d/rc.local中加入以下代码:
if [-x /etc/fw/rule]; then /etc/fw/sule; fi;
这样每次启动都执行该规则脚本,如果用这种方法,建议NTSYSV中停止IPTABLES.
----------------------------------------------------------
实例:
链基本操作:
[root@rh34 root]# iptables -L -n
(列出表/链中的所有规则,包过滤防火墙默认使用的是filter表,因此使用此命令将列出filter表中所有内容,-n参数可加快显示速度,也可不加-n参数。)
[root@rh34 root]# iptables -F
(清除预设表filter中所有规则链中的规则)
[root@rh34 root]# iptables -X
(清除预设表filter中使用者自定义链中的规则)
[root@rh34 root]# iptables -Z
(将指定链规则中的所有包字节计数器清零)
------------------------------------------------------------
设置链的默认策略,默认允许所有,或者丢弃所有:
[root@rh34 root]# iptables -P INPUT ACCEPT
[root@rh34 root]# iptables -P OUTPUT ACCEPT
[root@rh34 root]# iptables -P FORWARD ACCEPT
(以上我们在不同方向设置默认允许策略,若丢弃则应是DROP,严格意义上防火墙应该是DROP然后再允许特定)
---------------------------------------------------------------
向链中添加规则,下面的例子是开放指定网络接口(信任接口时比较实用):
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT
--------------------------------------------------------------
使用用户自定义链:
[root@rh34 root]# iptables -N brus
(创建一个用户自定义名叫brus的链)
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
(在此链中设置了一条规则)
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus
(向默认的INPUT链添加一条规则,使所有包都由brus自定义链处理)
----------------------------------------------------------------
基本匹配规则实例:
匹配协议:
iptables -A INPUT -p tcp
(指定匹配协议为TCP)
iptables -A INPUT -p ! tcp
(指定匹配TCP以外的协议)
匹配地址:
iptables -A INPUT -s 192.168.1.1
(匹配主机)
iptables -A INPUT -s 192.168.1.0/24
(匹配网络)
iptables -A FORWARD -s ! 192.168.1.1
(匹配以外的主机)
iptables -A FORWARD -s ! 192.168.1.0/24
(匹配以外的网络)
匹配接口:
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
(匹配某个指定的接口)
iptables -A FORWARD -o ppp+
(匹配所有类型为ppp的接口)
匹配端口:
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
(匹配单一指定源端口)
iptables -A INPUT -p ucp --dport 53
(匹配单一指定目的端口)
iptables -A INPUT -p ucp --dport ! 53
(指定端口以外)
iptables -A INPUT -p tcp --dport 22:80
(指定端口范围,这里我们实现的是22到80端口)
---------------------------------------------------------------------------------
指定IP碎片的处理:
[root@rh34 root]# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
----------------------------------------------------------------------------------
设置扩展的规测匹配:
(希望获得匹配的简要说明,可使用: iptables -m name_of_match --help)
多端口匹配扩展:
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
(匹配多个源端口)
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
(匹配多个目的端口)
iptables -A INPUT -p tcp -m multiport --port 22,53,80
(匹配多个端口,无论是源还是目的端口)
-----------------------------------------------------------------------------
TCP匹配扩展:
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
(表示SYN、ACK、FIN的标志都要被检查,但是只有设置了SYN的才匹配)
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK
(表示ALL:SYN、ACK、FIN、RST、URG、PSH的标志都被检查,但是只有设置了SYN和ACK的才匹配)
iptables -p tcp --syn
(选项--syn是以上的一种特殊情况,相当于“--tcp-flags SYN,RST,ACK SYN”的简写)
--------------------------------------------------------------------------------
limit速率匹配扩展:
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour
(表示限制每小时允许通过300个数据包)
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10
(--limit-burst指定触发时间的值(默认为5),用来比对瞬间大量数据包的数量。)
(上面的例子用来比对一次同时涌入的数据包是否超过十个,超过此上限的包将直接被丢弃)
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3
(假设均匀通过,平均每分钟3个,那么触发值burst保持为3。如果每分钟通过的包的数目小于3,那么触发值busrt将在每个周期(若每分钟允许通过3个,则周期数为20秒)后加1,但最大值为3。每分钟要通过的包数量如果超过3,那么触发值busrt将减掉超出的数值,例如第二分钟有4个包,那么触发值变为2,同时4个包都可以通过,第三分钟有6个包,则只能通过5个,触发值busrt变为0。之后,每分钟如果包数量小于等于3个,则触发值busrt将加1,如果每分钟包数大于3,触发值busrt将逐渐减少,最终维持为0)
(即每分钟允许的最大包数量等于限制速率(本例中为3)加上当前的触发值busrt数。任何情况下,都可以保证3个包通过,触发值busrt相当于是允许额外的包数量)
---------------------------------------------------------------------------------
基于状态的匹配扩展(连接跟踪):
每个网络连接包括以下信息:源和目的地址、源和目的端口号,称为套接字对(cocket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些叫做状态(stateful)。能够监测每个连接状态的防火墙叫做状态宝过滤防火墙,除了能完成普通包过滤防火墙的功能外,还在自己的内存中维护一个跟踪连接状态的表,所以拥有更大的安全性。
其命令格式如下:
iptables -m state --state [!] state [,state,state,state]
state表示一个用逗号隔开的的列表,用来指定的连接状态可以有以下4种:
NEW:该包想要开始一个连接(重新连接或将连接重定向)。
RELATED:该包属于某个已经建立的连接所建立的新连接。例如FTP的数据传输连接和控制连接之间就是RELATED关系。
ESTABLISHED:该包属于某个已经建立的连接。
INVALID:该包不匹配于任何连接,通常这些包会被DROP。
例如:
[root@redhatlinux9 root]# iptables -A INPUT -m state --state RELATED,ESTABLISHED
(匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包)
[root@redhatlinux9 root]# iptables -A INPUT -m state --state NEW -i ! eth0
(匹配所有从非eth0接口来的连接请求包)
下面是一个被动(Passive)FTP连接模式的典型连接跟踪
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
[root@redhatlinux9 root]# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
下面是一个主动(Active)FTP连接模式的典型连接跟踪
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------------------------------------
日志记录:
格式为: -j LOG --log-level 7 --log-prefix "......"
[root@redhatlinux9 root]# iptables -A FORWARD -m tcp -p tcp -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -m icmp -p icmp -f -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"
[root@redhatlinux9 root]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"
--------------------------------------------------------------------------------------
如果你的IPTABLES基础知识还不了解,建议先去看看。
我们来配置一个filter表的防火墙
1、查看本机关于IPTABLES的设置情况
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么规则都没有.
2、清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
[root@tp ~]# iptables -F 清除预设表filter中的所有规则链的规则
[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则
我们在来看一下
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧。
3、设定预设规则
[root@tp ~]# iptables -p INPUT DROP
[root@tp ~]# iptables -p OUTPUT ACCEPT
[root@tp ~]# iptables -p FORWARD DROP
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
怎么办,去本机操作呗!
4、添加规则.
首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
为了能采用远程SSH登陆,我们要开启22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.
其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
如果做了WEB服务器,开启80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你还做了其他的服务器,需要开启哪个端口,照写就行了.
上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP
允许icmp包通过,也就是允许ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
允许loopback!(不然会导致DNS无法正常关闭等问题)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.
减少不安全的端口连接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加
允许SSH登陆一样.照着写就行了.
下面写一下更加细致的规则,就是限制到某台机器
如:我们只允许192.168.0.3的机器进行SSH连接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
或采用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样写 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的规则连接也一样这么设置.
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.
开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制。
配置一个NAT表放火墙
1、查看本机关于NAT的设置情况
[root@tp rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章
当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的
如果你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
2、添加规则
添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),
添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
防止外网用内网IP欺骗
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
这样写范围太大了,我们可以更精确的定义.
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
最后:
drop非法连接
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
别忘了保存,不行就写一部保存一次。你可以一边保存,一边做实验,看看是否达到你的要求,
----------------------------------------------
tcp_wrapper的原理
Telnet、SSH、FTP、POP和SMTP等很多网络服务都会用到TCP Wrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件。
基本处理过程
当系统接收到一个外来服务请求的时候 ,先由TCP Wrapper处理这个请求
TCP Wrapper根据这个请求所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper 将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求的处理。
如果外部还有防火墙,当然要先通过防火墙
tcp_wrapper是基于主机与服务的
使用简单的配置文件来设置访问限制 /etc/hosts.allow /etc/hosts.deny
配置一旦被改变,立刻生效
tcp_wrapper的配置
访问控制判断顺序: 访问是否被明确许可 否则,访问是否被明确禁止 如果都没有,默认许可
通常tcp_wrapper没有配置,就是第三条,如果都没有,默认许可的
配置文件 许可用:/etc/hosts.allow 禁止用:/etc/hosts.deny
基本语法 后台进程列表:客户端列表 [:参数(allow,deny)]
/etc/hosts.allow
vsftpd:192.168.0.
/etc/hosts.deny
vsftpd:ALL
格式是 后台进程: client描述
这里的后台进程需要解释下
后台进程列表应该是: 服务的可执行工具名( in.telnetd NO telnetd) 允许指定多项服务 允许使用ALL来匹配所有服务 允许可执行工具名后添加IP或主机名,如果本机有多个网络界面
客户端描述可以包含:
IP 地址(192.168.0.254 ) 域名或主机名(.example.com, www.wenhua.org ) 子网掩码(192.168.0.0/255.255.255.0 或192.168.0. ) 网络名(@mydomain )
client描述的高级语法
客户端描述通配符
ALL:所有
LOCAL:所有主机名中不包含.的主机
UNKNOWN:无法被解析的主机
KNOWN:可以双向解析的主机
PARANOID:正向解析成功但无法反向解析的主机
EXCEPT 可用于服务列表与客户端列表, 可以层层套用
/etc/hosts.deny
ALL:ALL EXCEPT 192.168.0.0/255.255.255.0 EXCEPT server1.example.com
现在我们测试下:
现在可以访问 vim /etc/hosts.deny
现在他要求我输入ID验证,但是我的匿名可以访问的,我正确输入ID以后,还是不可以访问
在允许里面明确允许
vim /etc/hosts.allow
又可以访问了
tcp_wrapper很简单,要服务的模块支持tcp_wrapper ,才可以使用tcp_wrapper
大家看吧,vsftpd的配置文件最后,明确配置tcp_wrappers=yes
vim /etc/vsftpd/vsftpd.conf
查看一个服务是否支持tcp_wrapper可以用一下命令
看某个服务的执行文件是否调用tcp——wrapper
ldd `which vsftpd` | grep wrap
如果这个命令有结果,也表明支持tcp_wrapper
strings `which vsftpd` | grep host
基于xinetd的服务都支持tcp_wrapper
如下sendmail就支持tcp_wrapper而postfix就不支持哈~
用iptables -ADC 来指定链的规则,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX 指定链
iptables -P chain target[options]
指定链的默认目标
iptables -E old-chain-name new-chain-name
-E 旧的链名 新的链名
用新的链名取代旧的链名
说明
Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。
可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。
TARGETS
防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过], DROP[删除], QUEUE[排队], 或者 RETURN[返回]。
ACCEPT 表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配,到前一个链的规则重新开始。如果到达了一个内建的链(的末端),或者遇到内建链的规则是RETURN,包的命运将由链准则指定的目标决定。
TABLES
当前有三个表(哪个表是当前表取决于内核配置选项和当前模块)。
-t table
这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块,这时若模块没有加载,(系统)将尝试(为该表)加载适合的模块。这些表如下:filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWORD(处理通过的包)和OUTPUT(处理本地生成的包)。nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。mangle 这个表用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。
OPTIONS
这些可被iptables识别的选项可以区分不同的种类。
COMMANDS
这些选项指定执行明确的动作:若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了。
-A -append
在所选择的链末添加一条或更多规则。当源(地址)或者/与 目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。
-D -delete
从所选链中删除一条或更多规则。这条命令可以有两种方法:可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。
-R -replace
从选中的链中取代一条规则。如果源(地址)或者/与 目的(地址)被转换为多地址,该命令会失败。规则序号从1开始。
-I -insert
根据给出的规则序号向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会被插入链的头部。这也是不指定规则序号时的默认方式。
-L -list
显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。
-F -flush
清空所选链。这等于把所有规则一个个的删除。
--Z -zero
把所有链的包及字节的计数器清空。它可以和 -L配合使用,在清空前察看计数器,请参见前文。
-N -new-chain
根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。
-X -delete-chain
删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链。
-P -policy
设置链的目标规则。
-E -rename-chain
根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标。
-h Help.
帮助。给出当前命令语法非常简短的说明。
PARAMETERS
参数
以下参数构成规则详述,如用于add、delete、replace、append 和 check命令。
-p -protocal [!]protocol
规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用。
-s -source [!] address[/mask]
指定源地址,可以是主机名、网络名和清楚的IP地址。mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志 --src 是这个选项的简写。
-d --destination [!] address[/mask]
指定目标地址,要获取详细说明请参见 -s标志的说明。标志 --dst 是这个选项的简写。
-j --jump target
-j 目标跳转
指定规则的目标;也就是说,如果包匹配应当做什么。目标可以是用户自定义链(不是这条规则所在的),某个会立即决定包的命运的专用内建目标,或者一个扩展(参见下面的EXTENSIONS)。如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。
-i -in-interface [!] [name]
i -进入的(网络)接口 [!][名称]
这是包经由该接口接收的可选的入口名称,包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口。
-o --out-interface [!][name]
-o --输出接口[名称]
这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配所有任意接口。
[!] -f, --fragment
[!] -f --分片
这意味着在分片的包中,规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口(或者是ICMP类型的),这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前,表示相反的意思。
OTHER OPTIONS
其他选项
还可以指定下列附加选项:
-v --verbose
-v --详细
详细输出。这个选项让list命令显示接口地址、规则选项(如果有)和TOS(Type of Service)掩码。包和字节计数器也将被显示,分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍(不过请参看-x标志改变它),对于添加,插入,删除和替换命令,这会使一个或多个规则的相关详细信息被打印。
-n --numeric
-n --数字
数字输出。IP地址和端口会以数字的形式打印。默认情况下,程序试显示主机名、网络名或者服务(只要可用)。
-x -exact
-x -精确
扩展数字。显示包和字节计数器的精确值,代替用K,M,G表示的约数。这个选项仅能用于 -L 命令。
--line-numbers
当列表显示规则时,在每个规则的前面加上行号,与该规则在链中的位置相对应。
MATCH EXTENSIONS
对应的扩展
iptables能够使用一些与模块匹配的扩展包。以下就是含于基本包内的扩展包,而且他们大多数都可以通过在前面加上!来表示相反的意思。
tcp
当 --protocol tcp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载。它提供以下选项:
--source-port [!] [port[:port]]
源端口或端口范围指定。这可以是服务名或端口号。使用格式端口:端口也可以指定包含的(端口)范围。如果首端口号被忽略,默认是"0",如果末端口号被忽略,默认是"65535",如果第二个端口号大于第一个,那么它们会被交换。这个选项可以使用 --sport的别名。
--destionation-port [!] [port:[port]]
目标端口或端口范围指定。这个选项可以使用 --dport别名来代替。
--tcp-flags [!] mask comp
匹配指定的TCP标记。第一个参数是我们要检查的标记,一个用逗号分开的列表,第二个参数是用逗号分开的标记表,是必须被设置的。标记如下:SYN ACK FIN RST URG PSH ALL NONE。因此这条命令:iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN标记被设置而ACK、FIN和RST标记没有设置的包。
[!] --syn
只匹配那些设置了SYN位而清除了ACK和FIN位的TCP包。这些包用于TCP连接初始化时发出请求;例如,大量的这种包进入一个接口发生堵塞时会阻止进入的TCP连接,而出去的TCP连接不会受到影响。这等于 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"标记,表示相反的意思。
--tcp-option [!] number
匹配设置了TCP选项的。
udp
当protocol udp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载,它提供以下选项:
--source-port [!] [port:[port]]
源端口或端口范围指定。详见 TCP扩展的--source-port选项说明。
--destination-port [!] [port:[port]]
目标端口或端口范围指定。详见 TCP扩展的--destination-port选项说明。
icmp
当protocol icmp被指定,且其他匹配的扩展未被指定时,该扩展被装载。它提供以下选项:
--icmp-type [!] typename
这个选项允许指定ICMP类型,可以是一个数值型的ICMP类型,或者是某个由命令iptables -p icmp -h所显示的ICMP类型名。
mac
--mac-source [!] address
匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。
limit
这个模块匹配标志用一个标记桶过滤器一一定速度进行匹配,它和LOG目标结合使用来给出有限的登陆数.当达到这个极限值时,使用这个扩展包的规则将进行匹配.(除非使用了"!"标记)
--limit rate
最大平均匹配速率:可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位,默认是3/hour。
--limit-burst number
待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5
multiport
这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。
--source-port [port[, port]]
如果源端口是其中一个给定端口则匹配
--destination-port [port[, port]]
如果目标端口是其中一个给定端口则匹配
--port [port[, port]]
若源端口和目的端口相等并与某个给定端口相等,则匹配。
mark
这个模块和与netfilter过滤器标记字段匹配(就可以在下面设置为使用MARK标记)。
--mark value [/mask]
匹配那些无符号标记值的包(如果指定mask,在比较之前会给掩码加上逻辑的标记)。
owner
此模块试为本地生成包匹配包创建者的不同特征。只能用于OUTPUT链,而且即使这样一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配。
--uid-owner userid
如果给出有效的user id,那么匹配它的进程产生的包。
--gid-owner groupid
如果给出有效的group id,那么匹配它的进程产生的包。
--sid-owner seessionid
根据给出的会话组匹配该进程产生的包。
state
此模块,当与连接跟踪结合使用时,允许访问包的连接跟踪状态。
--state state
这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。
unclean
此模块没有可选项,不过它试着匹配那些奇怪的、不常见的包。处在实验中。
tos
此模块匹配IP包首部的8位tos(服务类型)字段(也就是说,包含在优先位中)。
--tos tos
这个参数可以是一个标准名称,(用iptables -m tos -h 察看该列表),或者数值。
TARGET EXTENSIONS
iptables可以使用扩展目标模块:以下都包含在标准版中。
LOG
为匹配的包开启内核记录。当在规则中设置了这一选项后,linux内核会通过printk()打印一些关于全部匹配包的信息(诸如IP包头字段等)。
--log-level level
记录级别(数字或参看 syslog.conf(5))。
--log-prefix prefix
在纪录信息前加上特定的前缀:最多14个字母长,用来和记录中其他信息区别。
--log-tcp-sequence
记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。
--log-tcp-options
记录来自TCP包头部的选项。
--log-ip-options
记录来自IP包头部的选项。
MARK
用来设置包的netfilter标记值。只适用于mangle表。
--set-mark mark
REJECT
作为对匹配的包的响应,返回一个错误的包:其他情况下和DROP相同。
此目标只适用于INPUT、FORWARD和OUTPUT链,和调用这些链的用户自定义链。这几个选项控制返回的错误包的特性:
--reject-with type
Type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited,该类型会返回相应的ICMP错误信息(默认是port-unreachable)。选项 echo-reply也是允许的;它只能用于指定ICMP ping包的规则中,生成ping的回应。最后,选项tcp-reset可以用于在INPUT链中,或自INPUT链调用的规则,只匹配TCP协议:将回应一个TCP RST包。
TOS
用来设置IP包的首部八位tos。只能用于mangle表。
--set-tos tos
你可以使用一个数值型的TOS 值,或者用iptables -j TOS -h 来查看有效TOS名列表。
MIRROR
这是一个试验示范目标,可用于转换IP首部字段中的源地址和目标地址,再传送该包,并只适用于INPUT、FORWARD和OUTPUT链,以及只调用它们的用户自定义链。
SNAT
这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查,它包含选项:
--to-source <ipaddr>[-<ipaddr>][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,源端口中512以下的(端口)会被安置为其他的512以下的端口;512到1024之间的端口会被安置为1024以下的,其他端口会被安置为1024或以上。如果可能,端口不会被修改。
--to-destiontion <ipaddr>[-<ipaddr>][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,目标端口不会被修改。
MASQUERADE
只用于nat表的POSTROUTING链。只能用于动态获取IP(拨号)连接:如果你拥有静态IP地址,你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像,当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址(以后所有建立的连接都将关闭)。它有一个选项:
--to-ports <port>[-port>]
指定使用的源端口范围,覆盖默认的SNAT源地址选择(见上面)。这个选项只适用于指定了-p tcp或者-p udp的规则。
REDIRECT
只适用于nat表的PREROUTING和OUTPUT链,和只调用它们的用户自定义链。它修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址127.0.0.1)。它包含一个选项:
--to-ports <port>[<port>]
指定使用的目的端口或端口范围:不指定的话,目标端口不会被修改。只能用于指定了-p tcp 或 -p udp的规则。
DIAGNOSTICS
诊断
不同的错误信息会打印成标准错误:退出代码0表示正确。类似于不对的或者滥用的命令行参数错误会返回错误代码2,其他错误返回代码为1。
BUGS
臭虫
Check is not implemented (yet).
检查还未完成。
COMPATIBILITY WITH IPCHAINS
与ipchains的兼容性
iptables和Rusty Russell的ipchains非常相似。主要区别是INPUT 链只用于进入本地主机的包,而OUTPUT只用于自本地主机生成的包。因此每个包只经过三个链的一个;以前转发的包会经过所有三个链。其他主要区别是 -i 引用进入接口;-o引用输出接口,两者都适用于进入FORWARD链的包。当和可选扩展模块一起使用默认过滤器表时,iptables是一个纯粹的包过滤器。这能大大减少以前对IP伪装和包过滤结合使用的混淆,所以以下选项作了不同的处理:
-j MASQ
-M -S
-M -L
在iptables中有几个不同的链。
---------------------------
iptables 是建立在 netfilter 架构基础上的一个包过滤管理工具,最主要的作用是用来做防火墙或透明代理。Iptables 从 ipchains 发展而来,它的功能更为强大。Iptables 提供以下三种功能:包过滤、NAT(网络地址转换)和通用的 pre-route packet mangling。包过滤:用来过滤包,但是不修改包的内容。Iptables 在包过滤方面相对于 ipchians 的主要优点是速度更快,使用更方便。NAT:NAT 可以分为源地址 NAT 和目的地址 NAT。
Iptables 可以追加、插入或删除包过滤规则。实际上真正执行这些过虑规则的是 netfilter 及其相关模块(如 iptables 模块和 nat 模块)。Netfilter 是 Linux 核心中一个通用架构,它提供了一系列的 “表”(tables),每个表由若干 “链”(chains)组成,而每条链中可以有一条或数条 “规则”(rule)组成。
系统缺省的表为 “filter”,该表中包含了 INPUT、FORWARD 和 OUTPUT 3 个链。
每一条链中可以有一条或数条规则,每一条规则都是这样定义的:如果数据包头符合这样的条件,就这样处理这个数据包。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包。
? table,chain,rule
iptables 可以操纵3 个表:filter 表,nat 表,mangle 表。
NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对 filter 表操作。
Rule 规则:过滤规则,端口转发规则等,例如:禁止任何机器 ping 我们的服务器,可以在服务器上设置一条规则:
iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP
从 –s 开始即是一条规则,-j 前面是规则的条件,-j 开始是规则的行为(目的)。整条命令解释为,在filter 表中的 INPUT 规则链中插入一条规则,所有源地址不为 127.0.0.1 的 icmp 包都被抛弃。
Chain 规则链:由一系列规则组成,每个包顺序经过 chain 中的每一条规则。chain 又分为系统 chain和用户创建的 chain。下面先叙述系统 chain。
filter 表的系统 chain: INPUT,FORWAD,OUTPUT
nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT
mangle 表的系统 chain: PREROUTING,OUTPUT
每条系统 chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。
所有的 table 和 chain 开机时都为空,设置 iptables 的方法就是在合适的 table 和系统 chain 中添相应的规则。
--------------------------------------------------------------
IPTABLES 语法:
表: iptables从其使用的三个表(filter、nat、mangle)而得名, 对包过滤只使用 filter 表, filter还是默认表,无需显示说明.
操作命令: 即添加、删除、更新等。
链:对于包过滤可以针对filter表中的INPUT、OUTPUT、FORWARD链,也可以操作用户自定义的链。
规则匹配器:可以指定各种规则匹配,如IP地址、端口、包类型等。
目标动作:当规则匹配一个包时,真正要执行的任务,常用的有:
ACCEPT 允许包通过
DROP 丢弃包
一些扩展的目标还有:
REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知
LOG 包有关信息记录到日志
TOS 改写包的TOS值
为使FORWARD规则能够生效,可使用下面2种方法的某种:
[root@rhlinux root]# vi /proc/sys/net/ipv4/ip_forward
[root@rhlinux root]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@rhlinux root]# vi /etc/sysconfig/network
[root@rhlinux root]# echo "FORWARD_IPV4=true" > /etc/sysconfig/network
--------------------------------------------------------
iptables语法可以简化为下面的形式:
iptables [-t table] CMD [chain] [rule-matcher] [-j target]
--------------------------------------------------------
常用操作命令:
-A 或 -append 在所选链尾加入一条或多条规则
-D 或 -delete 在所选链尾部删除一条或者多条规则
-R 或 -replace 在所选链中替换一条匹配规则
-I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部.
-L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.
-F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.
-N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.
-X 或 -delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链.
-P 或 -policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使规则链中的最后一条规则,用-L显示时它在第一行显示.
-C 或 -check 检查给定的包是否与指定链的规则相匹配.
-Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零.
-h 显示帮助信息.
-------------------------------------------------------------
常用匹配规则器:
-p , [!] protocol 指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议外的所有协议.
-s [!] address[/mask] 指定源地址或者地址范围.
-sport [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-d [!] address[/mask] 指定目的地址或者地址范围.
-dport [!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-icmp-type [!] typename 指定匹配规则的ICMP信息类型(可以使用 iptables -p icmp -h 查看有效的ICMP类型名)
-i [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可以使用"!"来匹配捕食指定接口来的包.参数interface是接口名,如 eth0, eht1, ppp0等,指定一个目前不存在的接口是完全合法的,规则直到接口工作时才起作用,折中指定对于PPP等类似连接是非常有用的."+"表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD和PREROUTING链是合法的.
-o [!] interface name[+] 匹配规则的对外网络接口,该选项只针对于OUTPUT,FORWARD,POSTROUTING链是合法的.
[!] --syn 仅仅匹配设置了SYN位, 清除了ACK, FIN位的TCP包. 这些包表示请求初始化的TCP连接.阻止从接口来的这样的包将会阻止外来的TCP连接请求.但输出的TCP连接请求将不受影响.这个参数仅仅当协议类型设置为了TCP才能使用. 此参数可以使用"!"标志匹配已存在的返回包,一般用于限制网络流量,即只允许已有的,向外发送的连接所返回的包.
----------------------------------------------------------
如何制定永久规则集:
/etc/sysconfig/iptables 文件是 iptables 守护进程调用的默认规则集文件.
可以使用以下命令保存执行过的IPTABLES命令:
/sbin/iptables-save > /etc/sysconfig/iptables
要恢复原来的规则库,可以使用:
/sbin/iptables-restore < /etc/sysconfig/iptables
iptables命令和route等命令一样,重启之后就会恢复,所以:
[root@rhlinux root]# service iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
令一种方法是 /etc/rc.d/init.d/iptables 是IPTABLES的启动脚本,所以:
[root@rhlinux root]# /etc/rc.d/init.d/iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
以上几种方法只使用某种即可.
若要自定义脚本,可直接使用iptables命令编写一个规则脚本,并在启动时执行:
例如若规则使用脚本文件名/etc/fw/rule, 则可以在/etc/rc.d/rc.local中加入以下代码:
if [-x /etc/fw/rule]; then /etc/fw/sule; fi;
这样每次启动都执行该规则脚本,如果用这种方法,建议NTSYSV中停止IPTABLES.
----------------------------------------------------------
实例:
链基本操作:
[root@rh34 root]# iptables -L -n
(列出表/链中的所有规则,包过滤防火墙默认使用的是filter表,因此使用此命令将列出filter表中所有内容,-n参数可加快显示速度,也可不加-n参数。)
[root@rh34 root]# iptables -F
(清除预设表filter中所有规则链中的规则)
[root@rh34 root]# iptables -X
(清除预设表filter中使用者自定义链中的规则)
[root@rh34 root]# iptables -Z
(将指定链规则中的所有包字节计数器清零)
------------------------------------------------------------
设置链的默认策略,默认允许所有,或者丢弃所有:
[root@rh34 root]# iptables -P INPUT ACCEPT
[root@rh34 root]# iptables -P OUTPUT ACCEPT
[root@rh34 root]# iptables -P FORWARD ACCEPT
(以上我们在不同方向设置默认允许策略,若丢弃则应是DROP,严格意义上防火墙应该是DROP然后再允许特定)
---------------------------------------------------------------
向链中添加规则,下面的例子是开放指定网络接口(信任接口时比较实用):
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT
--------------------------------------------------------------
使用用户自定义链:
[root@rh34 root]# iptables -N brus
(创建一个用户自定义名叫brus的链)
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
(在此链中设置了一条规则)
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus
(向默认的INPUT链添加一条规则,使所有包都由brus自定义链处理)
----------------------------------------------------------------
基本匹配规则实例:
匹配协议:
iptables -A INPUT -p tcp
(指定匹配协议为TCP)
iptables -A INPUT -p ! tcp
(指定匹配TCP以外的协议)
匹配地址:
iptables -A INPUT -s 192.168.1.1
(匹配主机)
iptables -A INPUT -s 192.168.1.0/24
(匹配网络)
iptables -A FORWARD -s ! 192.168.1.1
(匹配以外的主机)
iptables -A FORWARD -s ! 192.168.1.0/24
(匹配以外的网络)
匹配接口:
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
(匹配某个指定的接口)
iptables -A FORWARD -o ppp+
(匹配所有类型为ppp的接口)
匹配端口:
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
(匹配单一指定源端口)
iptables -A INPUT -p ucp --dport 53
(匹配单一指定目的端口)
iptables -A INPUT -p ucp --dport ! 53
(指定端口以外)
iptables -A INPUT -p tcp --dport 22:80
(指定端口范围,这里我们实现的是22到80端口)
---------------------------------------------------------------------------------
指定IP碎片的处理:
[root@rh34 root]# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
----------------------------------------------------------------------------------
设置扩展的规测匹配:
(希望获得匹配的简要说明,可使用: iptables -m name_of_match --help)
多端口匹配扩展:
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
(匹配多个源端口)
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
(匹配多个目的端口)
iptables -A INPUT -p tcp -m multiport --port 22,53,80
(匹配多个端口,无论是源还是目的端口)
-----------------------------------------------------------------------------
TCP匹配扩展:
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
(表示SYN、ACK、FIN的标志都要被检查,但是只有设置了SYN的才匹配)
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK
(表示ALL:SYN、ACK、FIN、RST、URG、PSH的标志都被检查,但是只有设置了SYN和ACK的才匹配)
iptables -p tcp --syn
(选项--syn是以上的一种特殊情况,相当于“--tcp-flags SYN,RST,ACK SYN”的简写)
--------------------------------------------------------------------------------
limit速率匹配扩展:
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour
(表示限制每小时允许通过300个数据包)
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10
(--limit-burst指定触发时间的值(默认为5),用来比对瞬间大量数据包的数量。)
(上面的例子用来比对一次同时涌入的数据包是否超过十个,超过此上限的包将直接被丢弃)
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3
(假设均匀通过,平均每分钟3个,那么触发值burst保持为3。如果每分钟通过的包的数目小于3,那么触发值busrt将在每个周期(若每分钟允许通过3个,则周期数为20秒)后加1,但最大值为3。每分钟要通过的包数量如果超过3,那么触发值busrt将减掉超出的数值,例如第二分钟有4个包,那么触发值变为2,同时4个包都可以通过,第三分钟有6个包,则只能通过5个,触发值busrt变为0。之后,每分钟如果包数量小于等于3个,则触发值busrt将加1,如果每分钟包数大于3,触发值busrt将逐渐减少,最终维持为0)
(即每分钟允许的最大包数量等于限制速率(本例中为3)加上当前的触发值busrt数。任何情况下,都可以保证3个包通过,触发值busrt相当于是允许额外的包数量)
---------------------------------------------------------------------------------
基于状态的匹配扩展(连接跟踪):
每个网络连接包括以下信息:源和目的地址、源和目的端口号,称为套接字对(cocket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些叫做状态(stateful)。能够监测每个连接状态的防火墙叫做状态宝过滤防火墙,除了能完成普通包过滤防火墙的功能外,还在自己的内存中维护一个跟踪连接状态的表,所以拥有更大的安全性。
其命令格式如下:
iptables -m state --state [!] state [,state,state,state]
state表示一个用逗号隔开的的列表,用来指定的连接状态可以有以下4种:
NEW:该包想要开始一个连接(重新连接或将连接重定向)。
RELATED:该包属于某个已经建立的连接所建立的新连接。例如FTP的数据传输连接和控制连接之间就是RELATED关系。
ESTABLISHED:该包属于某个已经建立的连接。
INVALID:该包不匹配于任何连接,通常这些包会被DROP。
例如:
[root@redhatlinux9 root]# iptables -A INPUT -m state --state RELATED,ESTABLISHED
(匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包)
[root@redhatlinux9 root]# iptables -A INPUT -m state --state NEW -i ! eth0
(匹配所有从非eth0接口来的连接请求包)
下面是一个被动(Passive)FTP连接模式的典型连接跟踪
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
[root@redhatlinux9 root]# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
下面是一个主动(Active)FTP连接模式的典型连接跟踪
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------------------------------------
日志记录:
格式为: -j LOG --log-level 7 --log-prefix "......"
[root@redhatlinux9 root]# iptables -A FORWARD -m tcp -p tcp -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -m icmp -p icmp -f -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"
[root@redhatlinux9 root]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"
--------------------------------------------------------------------------------------
如果你的IPTABLES基础知识还不了解,建议先去看看。
我们来配置一个filter表的防火墙
1、查看本机关于IPTABLES的设置情况
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么规则都没有.
2、清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
[root@tp ~]# iptables -F 清除预设表filter中的所有规则链的规则
[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则
我们在来看一下
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧。
3、设定预设规则
[root@tp ~]# iptables -p INPUT DROP
[root@tp ~]# iptables -p OUTPUT ACCEPT
[root@tp ~]# iptables -p FORWARD DROP
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
怎么办,去本机操作呗!
4、添加规则.
首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
为了能采用远程SSH登陆,我们要开启22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.
其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
如果做了WEB服务器,开启80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你还做了其他的服务器,需要开启哪个端口,照写就行了.
上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP
允许icmp包通过,也就是允许ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
允许loopback!(不然会导致DNS无法正常关闭等问题)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.
减少不安全的端口连接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加
允许SSH登陆一样.照着写就行了.
下面写一下更加细致的规则,就是限制到某台机器
如:我们只允许192.168.0.3的机器进行SSH连接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
或采用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样写 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的规则连接也一样这么设置.
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.
开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制。
配置一个NAT表放火墙
1、查看本机关于NAT的设置情况
[root@tp rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章
当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的
如果你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
2、添加规则
添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),
添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
防止外网用内网IP欺骗
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
这样写范围太大了,我们可以更精确的定义.
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
最后:
drop非法连接
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
别忘了保存,不行就写一部保存一次。你可以一边保存,一边做实验,看看是否达到你的要求,
----------------------------------------------
tcp_wrapper的原理
Telnet、SSH、FTP、POP和SMTP等很多网络服务都会用到TCP Wrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件。
基本处理过程
当系统接收到一个外来服务请求的时候 ,先由TCP Wrapper处理这个请求
TCP Wrapper根据这个请求所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper 将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求的处理。
如果外部还有防火墙,当然要先通过防火墙
tcp_wrapper是基于主机与服务的
使用简单的配置文件来设置访问限制 /etc/hosts.allow /etc/hosts.deny
配置一旦被改变,立刻生效
tcp_wrapper的配置
访问控制判断顺序: 访问是否被明确许可 否则,访问是否被明确禁止 如果都没有,默认许可
通常tcp_wrapper没有配置,就是第三条,如果都没有,默认许可的
配置文件 许可用:/etc/hosts.allow 禁止用:/etc/hosts.deny
基本语法 后台进程列表:客户端列表 [:参数(allow,deny)]
/etc/hosts.allow
vsftpd:192.168.0.
/etc/hosts.deny
vsftpd:ALL
格式是 后台进程: client描述
这里的后台进程需要解释下
后台进程列表应该是: 服务的可执行工具名( in.telnetd NO telnetd) 允许指定多项服务 允许使用ALL来匹配所有服务 允许可执行工具名后添加IP或主机名,如果本机有多个网络界面
客户端描述可以包含:
IP 地址(192.168.0.254 ) 域名或主机名(.example.com, www.wenhua.org ) 子网掩码(192.168.0.0/255.255.255.0 或192.168.0. ) 网络名(@mydomain )
client描述的高级语法
客户端描述通配符
ALL:所有
LOCAL:所有主机名中不包含.的主机
UNKNOWN:无法被解析的主机
KNOWN:可以双向解析的主机
PARANOID:正向解析成功但无法反向解析的主机
EXCEPT 可用于服务列表与客户端列表, 可以层层套用
/etc/hosts.deny
ALL:ALL EXCEPT 192.168.0.0/255.255.255.0 EXCEPT server1.example.com
现在我们测试下:
现在可以访问 vim /etc/hosts.deny
现在他要求我输入ID验证,但是我的匿名可以访问的,我正确输入ID以后,还是不可以访问
在允许里面明确允许
vim /etc/hosts.allow
又可以访问了
tcp_wrapper很简单,要服务的模块支持tcp_wrapper ,才可以使用tcp_wrapper
大家看吧,vsftpd的配置文件最后,明确配置tcp_wrappers=yes
vim /etc/vsftpd/vsftpd.conf
查看一个服务是否支持tcp_wrapper可以用一下命令
看某个服务的执行文件是否调用tcp——wrapper
ldd `which vsftpd` | grep wrap
如果这个命令有结果,也表明支持tcp_wrapper
strings `which vsftpd` | grep host
基于xinetd的服务都支持tcp_wrapper
如下sendmail就支持tcp_wrapper而postfix就不支持哈~
发表评论
-
DWR详细配置
2012-07-12 09:36 999DWR是一种AJAX(Asynchronous JavaScr ... -
【转】大访问量系统的设计——高并发高流量网站架构
2012-07-02 16:19 781目录 1.网络层架构 1 ... -
CentOS6.2 安装Xdebug
2012-01-13 16:12 2165php调试环境安装 yum -y install php-de ... -
iptables配置样例
2012-01-12 13:39 814-A PREROUTING -p tcp -m tcp --d ... -
linux apache tomcat集群与apache和tomcat的整合
2011-05-27 17:48 1344linux apache tomcat集群与apache和to ...
相关推荐
linux下IPTABLES配置详解
linux下IPTABLES配置详解.docx
Linux操作系统下IPTables配置方法详解.doc
iptables手册详解,静态网页版,对netfile网络基础知识做全面介绍,详细讲解iptables命令以及应用场景。
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.[root@tp~]#iptables-F清除预设表filter中的所有规则链的规则[root@tp~]#iptables-X清除预设表filter中使用者自定...
防火墙,配置文件,iptables,详解防火墙配置文件iptables详解
Android 流量防火墙 Iptables 原理详解 Android 流量防火墙是一种基于 Iptables 的防火墙解决方案,旨在限制单个应用的联网状态。Iptables 是一个功能强大的 IP 信息包过滤系统,可以用于添加、编辑和删除规则,...
### iptables详解 #### 一、iptables简介 iptables是一款功能强大的网络管理工具,主要用于Linux操作系统中的数据包过滤和网络地址转换(NAT)。通过iptables,系统管理员能够灵活地定义网络策略,实现对进出网络...
iptables详解及举例,可以充分的了解linux防火墙的配置和维护。
### 二、iptables配置详解 iptables工作基于表、链和规则的概念。主要的表有FILTER、NAT、MANGLE和RAW,用于不同的数据包处理目的。 #### 1. 表(Table) - **FILTER**:用于包过滤,决定数据包是否被允许通过。 - ...
### iptables配置实例详解 #### 一、链的基本操作 **iptables** 是 Linux 系统中用于设置网络策略的重要工具之一,它可以帮助管理员控制进出系统的网络流量。以下是一些基本的链操作示例: 1. **清除所有的规则**...
### Linux iptables 配置详解 #### iptables基础概念 iptables是Linux系统中用于配置、维护和检查包过滤规则表的工具。它通过定义一系列的规则来决定如何处理网络数据包,例如允许或拒绝特定来源的数据包。iptables...
关于linux系统的iptables详解,介绍了关于linux里的防火墙配置详解,包括防火墙的查看,清除,以及预设添加防火墙规则。
### Centos离线安装iptables详解 #### 一、前言 在CentOS系统中,iptables是用于设置网络规则的重要工具之一。然而,在某些情况下,由于网络环境限制或安全考虑,我们可能无法通过在线方式安装iptables。本文将...
以下是对"Linux高级配置详解"这一主题的深入探讨: 1. **系统管理**: - **文件系统管理**:了解EXT2、EXT3、EXT4、XFS、Btrfs等文件系统的特性,并能进行挂载、卸载、检查和修复。 - **用户与组管理**:掌握`...
### Linux iptables防火墙配置详解 #### 一、iptables与Linux防火墙的演进 Linux系统自诞生以来,其防火墙功能经历了多个阶段的发展。在2.0版内核时代,包过滤机制由`ipfw`承担,配套的管理工具为`ipfwadm`;到了...
- **The iptables-restore and iptables-save(iptables-restore和iptables-save)**:分别用于从文件恢复iptables配置和保存当前iptables配置到文件。 通过以上介绍,我们不仅了解了iptables的基本概念和架构,还...