Linux防火墙实际指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux内核集成的IP信息包过滤系统。html
查看Linux内核版本linux
Netfilter/Iptables 信息包过滤系统能够当成一个总体,netfilter是内核的模块实现,iptables是对上层操做工具。web
Netfilter是Linux核心中的一个通用架构,工做于内核空间,而且支持一下方式对数据包进行分类:浏览器
源IP地址
目标IP地址
使用接口
使用协议
端口号
链接状态
其提供了一系列的表(tables),每一个表由若干个链(chains)组成,每条链能够由一条或若干条规则(rules)组成,其规则由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。安全
chain的本质是Netfilter定义的不一样过滤点。总共定义了5个过滤点:INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG;服务器
Table的本质是Netfilter定义的不一样功能的划分;网络
filter用于执行基本过滤;架构
nat是对数据IP进行修改;app
mangle是对数据包进行高级修改;ssh
不一样的Table只能用于特定的Chain,Iptables 是一个管理内核包过滤的工具,能够用来配置核心包过滤表格中的规则,运行于用户空间。
Linux防火墙在企业应用中很是有用,举例以下:
综述,Iptables有两种应用模式:主机防火墙,NAT路由器。
规则(rules)是管理员预约义的条件,规则通常的定义为“若是数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工做就是添加、修改和删除这些规则。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中能够有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否知足规则所定义的条件。若是知足,系统就会根据该条规则所定义的方法处理该数据包;不然iptables将继续检查下一条规则,若是该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
每一个链上都有默认的规则。
PREROUTING:数据包进入本机,进入路由器以前。能够用于目标地址转换(DNAT)。
INPUT:经过路由表后目的地为本机。
FORWARDING:经过路由表后,目的地不为本机。能够用于转发数据。
OUTPUT:由本机产生,向外转发。
POSTROUTIONG:经过路由表后,发送到网卡接口以前。能够用于转发数据(SNAT,MASQUERADE)
表(tables)提供特定的功能,iptables有4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。表中的规则写在链上。
filter表
主要用于数据报文过滤。该表根据系统管理员预约义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。filter表是默认的表,若是没有指定哪一个表,iptables 就默认使用filter表来执行全部命令,filter表包含了INPUT链,RORWARD链,OUTPUT链。在filter表中只能容许对数据包进行接受,丢弃的操做,而没法对数据包进行更改。
nat表
主要用于网络地址转换NAT,该表能够实现一对一,一对多,多对多等NAT工做(SNAT,DNAT,PNAT),iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链,POSTROUTING链,OUTPUT链。nat规则表拥有 prerouting 和 postrouting 两个规则链,主要功能为进行一对1、一对多、多对多等网址转换工做(SNAT,DNAT),因为转换的特性,需进行目的地网址转换的数据包,就不须要进行来源网址转换,反之亦然,所以为了提高改写封包的效率,在防火墙运做时,每一个封包只会通过这个规则表一次。若是咱们把数据包过滤的规则定义在这个数据表里,将会形成没法对同一包进行屡次比对,所以这个规则表除了做网址转换外,请不要作其它用途。
mangle表
主要用做功能修改数据报文的属性。好比TCP报文的6个标志位。在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)。mangle表主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)。
raw表
只使用在PREROUTING链和OUTPUT链上,优先级最高,能够对收到的数据包在链接跟踪前进行处理。一但用户使用了RAW表,在某个链上RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即再也不作地址转换和数据包的连接跟踪处理了。
规则表之间的优先顺序:raw > mangle > nat > filter
Linux防火墙的原理主要是对数据包的控制,看下图(如下图片均来自互联网):netfilter五条链相互关系,即iptables数据包转发流程图。
基本步骤以下(此部分文字以及上图摘自:http://www.ha97.com/4093.html):
1. 数据包到达网络接口,好比 eth0。 2. 进入 raw 表的 PREROUTING 链,这个链的做用是赶在链接跟踪以前处理数据包。 3. 若是进行了链接跟踪,在此处理。 4. 进入 mangle 表的 PREROUTING 链,在此能够修改数据包,好比 TOS 等。 5. 进入 nat 表的 PREROUTING 链,能够在此作DNAT,但不要作过滤。 6. 决定路由,看是交给本地主机仍是转发给其它主机。 到了这里咱们就得分两种不一样的状况进行讨论了,一种状况就是数据包要转发给其它主机,这时候它会依次通过: 7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定以后,在进行最后的路由决定以前,咱们仍然能够对数据包进行某些修改。 8. 进入 filter 表的 FORWARD 链,在这里咱们能够对全部转发的数据包进行过滤。须要注意的是:通过这里的数据包是转发的,方向是双向的。 9. 进入 mangle 表的 POSTROUTING 链,到这里已经作完了全部的路由决定,但数据包仍然在本地主机,咱们还能够进行某些修改。 10. 进入 nat 表的 POSTROUTING 链,在这里通常都是用来作 SNAT ,不要在这里进行过滤。 11. 进入出去的网络接口。完毕。 另外一种状况是,数据包就是发给本地主机的,那么它会依次穿过: 7. 进入 mangle 表的 INPUT 链,这里是在路由以后,交由本地主机以前,咱们也能够进行一些相应的修改。 8. 进入 filter 表的 INPUT 链,在这里咱们能够对流入的全部数据包进行过滤,不管它来自哪一个网络接口。 9. 交给本地主机的应用程序进行处理。 10. 处理完毕后进行路由决定,看该往那里发出。 11. 进入 raw 表的 OUTPUT 链,这里是在链接跟踪处理本地的数据包以前。 12. 链接跟踪对本地的数据包进行处理。 13. 进入 mangle 表的 OUTPUT 链,在这里咱们能够修改数据包,但不要作过滤。 14. 进入 nat 表的 OUTPUT 链,能够对防火墙本身发出的数据作 NAT 。 15. 再次进行路由决定。 16. 进入 filter 表的 OUTPUT 链,能够对本地出去的数据包进行过滤。 17. 进入 mangle 表的 POSTROUTING 链,同上一种状况的第9步。注意,这里不光对通过防火墙的数据包进行处理,还对防火墙本身产生的数据包进行处理。 18. 进入 nat 表的 POSTROUTING 链,同上一种状况的第10步。 19. 进入出去的网络接口。完毕。
iptables执行规则时,是从规则表中从上至下顺序执行的。
若没遇到匹配的规则,就一条一条往下匹配;
若彻底没有匹配的规则,则执行该链上的默认规则;
若遇到匹配的规则,则执行规则,执行后根据本规则的动做(accept,reject,log,drop等),决定下一步执行的状况,后续执行通常有三种状况:
透过这种机制所带来的好处是,能够进行复杂、多重的封包过滤,简单的说,iptables能够进行纵横交错式的过滤(tables)而非链状过滤(chains)。
包的状态依据IP所包含的协议不一样而不一样,但在内核外部,也就是用户空间里,只有4种 状态:NEW,ESTABLISHED,RELATED 和INVALID。它们主要是和状态匹配一块儿使用。
数据包在用户空间的状态:
这些状态能够一块儿使用,以便匹配数据包。这可使防火墙很是强壮和有效。
iptables的实验请尽可能在虚拟机或非远程的系统中操做,避免不当心的误操做可能致使ssh没法使用。通常来说,iptables防火墙已经内置于CentOS 6及其余Linux版本中,并且iptables服务默认都是启动的。 iptables应用于IPv4, 若是要用IPv6,须要使用ip6tables。
iptables和ip6_tables、arp_tables一同都是建构在Xtables的架构下,这个方案让系统管理员定义“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。每个“表”都和不一样的数据包处理有关、决定数据包是否能够穿越的是“链”、而一条“规则”在键里面则能够决定是否送往下一条链(或其它的动做),这个处理能够在嵌套的结构里面重复使用。每个网络数据包从抵达到离开该计算机至少会通过一个链(亦即转送或本机路由)。
查看有没有安装iptables:rpm -qa | grep iptables
若机器上安装了man命令。则使用man iptables查看iptables的帮助文档。
service iptables start
#或
/etc/init.d/iptables start
service iptables stop
#或
/etc/init.d/iptables stop
#启动时开启
chkconfig iptables on
#启动时关闭
chkconfig iptables off
在终端运行 setup,选择 firewall 回车。
按Tab键切换到Enablede项,而后按空格键选择。而后再按Tab键切换到OK,按空格键或回车键选择。按Tab键切换到quit,退出setup。
iptables [-t table] command [match] [target/jump]
-t table
用来指明使用的表,有三种选项: filter,nat,mangle。若未指定,则默认使用filter表。
command
指定iptables 对咱们提交的规则要作什么样的操做。命令都都须要以chain做为参数。
-P (--policy) 定义默认策略。 -L (--list) 查看规则列表。 -A (--append) 在规则列表的最后增长规则。 -I (--insert) 在指定的位置插入规则。 -D (--delete) 从规则列表中删除规则。 -R (--replace) 替换规则列表中的某条规则。 -F (--flush) 清楚指定的规则。 -Z (--zero) 将指定链(如未指定,则认为是全部链)的全部计数器归零。 -X (--delete-chain) 删除指定用户自定义链。
command 选项
-v, --verbose(详细的)
可用此选项的命令:--list, --append, --insert, --delete, --replace
说明:该选项使输出更详细,常与--list 连用。与--list连用时,输出中包括网络接口的地址、规则的选项、TOS掩码、 字节和包计数器,其中计数器是以K、M、G(这里用的是10的幂而不是2的幂)为单位的。若-v 和--append、--insert、--delete 或--replace连用,iptables会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等。
-x, --exact(精确的)
可用此选项的命令:--list
说明:使--list输出中的计数器显示准确的数值,而不用K、M、G等估值。
-n, --numeric(数值)
可用此选项的命令:--list
说明:使输出中的IP地址和端口以数值的形式显示,而不是默认的名字,好比主机名、网络名、程序名等。
--line-numbers
可用此选项的命令:--list
说明:该选项的做用是显示出每条规则在相应链中的序号。对插入新规则颇有用。
-c, --set-counters
可用此选项的命令:--insert, --append, --replace
说明:在建立或更改规则时设置计数器,语法以下:--set-counters 20 4000,意思是让内核把包计数器设为20,把字节计数器设为4000。
--modprobe
可用此选项的命令:All
说明:此选项告诉iptables探测并装载要使用的模块。这是很是有用的一个选项,若modprobe命令不在搜索路径中,就要用到了。有了这个选项, 在装载模块时,即便有一个须要用到的模块没装载上,iptables也知道要去搜索。
matches 匹配
匹配选项指定数据包与规则匹配所具备的特征,包括源地址,目的地址,传输协议和端口号,以下所示:
[-i|o 网卡名称]
说明: -i --in-interface 网络接口名 指定数据包从哪一个网络接口进入。 -o --out-interface 网络接口名 指定数据包从哪一个网络接口输出。
[-p 协议类型]
-p ---proto 协议类型 指定数据包匹配的协议,如TCP、UDP和ICMP等
[-s 源IP地址|源子网]
-s --source 源地址或子网 指定数据包匹配的源地址
[--sport 源端口号]
--sport 源端口号 指定数据包匹配的源端口号
[-d 目标IP地址|目标子网]
-s --source 目标地址或子网 指定数据包匹配的目标地址
[--dport 目标端口号]
--dport 目的端口号 指定数据包匹配的目的端口号
[-m 模块]
-m --match 匹配的模块 指定数据包规则所使用的过滤模块
Targets/Jumps
target/jump决定符合条件的包到何处去,语法是--jump target或-j target。
target能够被细分为两类,Target和Jump。
target指定要对包作的操做,好比DROP和ACCEPT。不一样的target有不一样的结果。一些target会使包中止前进,也就是再也不继续比较当前链中的其余规则或父链中的其余规则。而另一些target在对包作完操做以后,包还会继续和其余的规则比较,如LOG,ULOG和TOS。它们会对包进行记录,而后让包经过,以便匹配这条链中的其余规则。有了这样的target,就能够对同一个包既改变它的TTL又改变它的TOS。有些target必需要有准确的参数(如TOS须要肯定的数值),有些就不是必须的,但若是咱们想指定也能够(如日志的前缀,假装使用的端口,等等)。
经常使用Target简述
ACCEPT
当包知足了指定的匹配条件,就会被ACCEPT,容许包前往下一个目的地。不会再去匹配当前链中的其余规则或同一个表内的其余规则,但包还要经过其余表中的链,可能会被DROP。
DROP
当信息包与具备DROP目标的规则彻底匹配时,会阻塞该信息包,而且不对它作进一步处理。该目标被指定为-j DROP。
若包符合条件,该target就会将target丢掉,也就是说包的生命到此结束,效果就是包被阻塞了。
在某些状况下,这个target会引发意外的结果,由于它不会向发送者返回任何信 息,也不会向路由器返回信息,这就可能会使链接的另外一方的sockets因苦等回音而亡:) 解决这个问题的较 好的办法是使用REJECT target,(译者注:由于它在丢弃包的同时还会向发送者返 回一个错误信息,这样另外一方就能正常结束),尤为是在阻止端口扫描工具得到更多的信息时,能够隐蔽被 过滤掉的端口等等(译者注:由于扫描工具扫描一个端口时,若是没有返回信息,通常会认为端口未打开或 被防火墙等设备过滤掉了)。还要注意若是包在子链中被DROP了,那么它在主链里也不会再继续前进,无论 是在当前的表仍是在其余表里。总之,包死翘翘了。
REJECT
REJECT和DROP基本同样,区别在于它除了阻塞包以外, 还向发送者返回错误信息。target还只能用在INPUT、FORWARD、OUTPUT和它们的子链里,并且包含 REJECT的链也只能被它们调用,不然不能发挥做用。它只有一个选项,是用来控制 返回的错误信息的种类的。虽然有不少种类,但若是你有TCP/IP方面的基础知识,就很容易理解它们。
拦阻该数据包,并返回数据包通知对方,能够返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动做后,将再也不比对其它规则,直接中断过滤程序。 范例以下:
iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply
RETURN
在规则中设置的RETURN目标让与该规则匹配的信息包中止遍历包含该规则的链。若是链是如INPUT之类的主链,则使用该链的默认策略处理信息包。它被指定为-jump RETURN。
结束在目前规则链中的过滤程序,返回主规则链继续过滤,若是把自订规则炼当作是一个子程序,那么这个动做,就至关于提前结束子程序并返回到主程序中。
REDIRECT
将封包从新导向到另外一个端口(PNAT),进行完此处理动做后,将会继续比对其它规则。这个功能能够用来实做透明代理或用来保护web服务器。
例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081
LOG
将数据包相关信息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动做后,将会继续比对其它规则。
例如:
iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"
MASQUERADE
改写封包来源IP为防火墙的IP,能够指定port 对应的范围,进行完此处理动做后,直接跳往下一个规则链(mangle:postrouting)。这个功能与 SNAT 略有不一样,当进行IP 假装时,不需指定要假装成哪一个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 一般是由 ISP 公司的 DHCP服务器指派的,这个时候 MASQUERADE 特别有用。
例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000
SNAT
改写封包来源 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将直接跳往下一个规则炼(mangle:postrouting)。
例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200
DNAT
改写数据包包目的地 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。
例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100
MIRROR
镜像数据包,也就是未来源 IP与目的地IP对调后,将数据包返回,进行完此处理动做后,将会中断过滤程序。
QUEUE
中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,能够进行其它应用,例如:计算联机费用.......等。
MARK
将封包标上某个代号,以便提供做为后续过滤的条件判断依据,进行完此处理动做后,将会继续比对其它规则。
例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
iptables做为Linux的基础服务,默认启动。
查看iptables服务的状态
命令:service iptables status
重启iptables状态
命令:service iptables restart
使用iptables命令只能使规则临时生效。
若是须要永久生效,则要保存.写入到/etc/sysconfig/iptables文件里.
/etc/rc.d/init.d/iptables save
iptables规则文件保存在/etc/sysconfig/iptables中。
写入后记得把防火墙重起一下,才能起做用。
无论你在安装linux时是否启动了防火墙,若是你想配置属于本身的防火墙,那就清除如今filter的全部规则.
iptables -F #清除预设表filter中的全部规则链的规则。 iptables -X #清除预设表filter中使用者自定链中的规则。 iptables –Z #数据包计数器归零。
例:查看本机关于IPTABLES的设置状况:iptables -L -n
默认显示filter表的状况,因此显示了INPUT,FORWARD,OUTPUT链上的规则情形。
例:查看nat表上的规则:iptables -t nat -L
设置默认策略:关闭filter表的INPUT链、FORWARD链,开启OUTPUT链。
iptables -P INPUT DROP
iptables –P OUTPUT ACCEPT
iptables –P FORWARD DROP
远程SSH登录。容许tcp协议,开启22端口。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
若把OUTPUT设置成DROP,则须要使用以下规则:
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
WEB服务器,开启80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
若OUTPUT设置成DROP的话,则须要使用以下规则,其余同理。
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
邮件服务器端口配置
smtp: iptables -A FORWARD -p tcp --dport 25 -j ACCEPT #pop3: iptables -A FORWARD -p tcp --dport 110 -j ACCEPT iptables -A FORWARD -p udp --dport 110 -j ACCEPT #imap: iptables -A FORWARD -p tcp --dport 143 -j ACCEPT iptables -A FORWARD -p udp --dport 143 -j ACCEPT imaps: iptables -A FORWARD -p tcp --dport 993 -j ACCEPT iptables -A FORWARD -p udp --dport 993 -j ACCEPT pop3s: iptables -A FORWARD -p tcp --dport 995 -j ACCEPT iptables -A FORWARD -p udp --dport 995 -j ACCEPT
FTP服务器,开启21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
DNS服务器,开启53端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
容许ping,即容许icmp包经过
iptables -A INPUT -p icmp -j ACCEPT #若INPUT设置成DROP
iptables -A OUTPUT -p icmp -j ACCEPT #若OUTPUT设置成DROP
容许loopback,通常系统都须要容许回环。不然可能致使一些问题。如DNS没法正常关闭。
IPTABLES -A INPUT -i lo -p all -j ACCEPT
若把OUTPUT设置成DROP,则须要使用以下规则:
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
减小不安全的端口链接
iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通讯,阻塞这些端口可以有效地减小网络上可能被感染的机器和它们的远程主服务器进行独立通讯的机会。
sshd的端口为22,若系统直接开放22端口,那么Internet上全部主机均可以链接Linux,这样不安全。更好的方法是,仅容许某个范围的IP或某个指定ip,且某范围的端口的主机能够链接主机,其余IP所有拒绝:
iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j DROP
说明:1024:65535 表示端口范围是1024至65535,包括两端的端口在内。
以上作法保证了必定的安全性。但因为非法的数据包会被阻塞,所以某些端口扫描工具会提示“该计算机处于防火墙保护状态“,这也是不安全的。要欺骗这些工具,可使用以下规则:
iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j REJECT –reject-with tcp-reset
这样的规则,当非法链接服务器时,会发出tcp-reset的请求,这个封包会要求对方关闭链接。这样,服务器会更加安全。
只容许192.168.0.3的机器进行SSH链接
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。
要记得把 /etc/sysconfig/iptables 里的这一行删了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
这一行表示全部地址均可以登录。
或采用命令方式:
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
说明: 192.168.0.1/24 24的意思就是说子网掩码中表示网络的二进制位数是24位。 即: 11111111.11111111.11111111.00000000 也就是24个1。变成十进制就是:255.255.255.0 子网掩码的意义 把IP(192.168.0.1)转换为二进制数,即:11000000.10101000.00000000.00000001 将IP和子网掩码作与运算得:11000000.10101000.00000000.00000000 再变成十进制数得:192.168.0.0 这个就是192.168.0.1这个IP所属的网络地址,也能够说192.168.0.1在192.168.0.0这个网段内。
技巧:!表示not。 例:!192.168.0.3 表示除了192.168.0.3的ip地址 其余的规则链接也同样这么设置.
例:某Linux系统,做为ADSL上网的代理服务器,同时运行WWW服务,有两个网络接口,eth0链接局域网,ppp0是ADSL上网的Internet网络接口,添加以下规则。
容许局域网内192.168.60.24/24的全部主机访问代理服务器,除了192.168.60.3这台主机:
iptables –A INPUT –i eth0 –s 192.168.60.3 –j DROP
iptables –A INPUT –i eth0 –s 192.168.0/24 –j ACCEPT
注意:两个规则的顺序不能反。
例:让Linux代理服务器接受全部的来源不是网络接口ppp0的数据,即仅容许了局域网的访问,局域网的全部主机不能访问Internet
iptables –A input –i !ppp0 –j ACCEPT
容许全部已经创建的和相关的链接
iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
DROP非法链接
iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP iptables-A FORWARD -m state --state INVALID -j DROP
丢弃坏的TCP包
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,容许每秒100个
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,容许每秒1个包,限制触发条件是10个包.
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
如图显示外网映射原理:
清除nat表中的规则
iptables -F -t nat iptables -X -t nat iptables -Z -t nat
例:将代理服务器80端口重定向到8009端口,设置规则以下:
iptable –t nat –A PREROUTING –p tcp –dport 80 –j REDIRECT –to-ports 8009
例:内网机器对外发布WEB网站
内网WEB服务器IP地址为192.168.0.3,当公网客户端访问服务器时,防火墙将请求映射到内网的192.168.0.3的80端口
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80
例:禁止与211.101.46.253的全部链接
iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
例:禁用FTP端口
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
只禁用211.101.46.253地址的FTP链接,其余链接还能够.如web(80端口)链接。
iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
http://www.cnblogs.com/shijiaqi1066/p/3812510.html
http://www.ha97.com/4093.html