linux防火墙.docx
- 文档编号:10536792
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:21
- 大小:24.52KB
linux防火墙.docx
《linux防火墙.docx》由会员分享,可在线阅读,更多相关《linux防火墙.docx(21页珍藏版)》请在冰豆网上搜索。
linux防火墙
代理/防火墙
1.iptables规则表
Filter(针对过滤系统):
INPUT、FORWARD、OUTPUT
NAT(针对地址转换系统):
PREROUTING、POSTROUTING、INPUT、OUTPUT
Mangle(针对策略路由和特殊应用):
OUTPUT、POSTROUTING
2.安装包
iptables-1.2.7a-2
3.配置防火墙
1)命令语法
Usge:
iptables[-ttable]-[ADC]chainrule-specification[options]
iptables[-ttable]-Ichain[rulenum]rule-specification[options]
iptables[-ttable]-Rchainrulenumrule-specification[options]
iptables[-ttable]-Dchainrulenum[options]
iptables[-ttable]-[LFZ][chain][options]
iptables[-ttable]-Nchain
iptables[-ttable]-X[chain]
iptables[-ttable]-Pchaintarget[options]
iptables[-ttable]-Eold-chain-namenew-chain-name
规则操作参数说明:
-A:
在所选择的链末添加一条或更多规则;
-D:
从所选链中删除一条或更多规则。
有两种方法:
把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则;
-R:
从选中的链中取代一条规则。
如果源地址或目的地址转换为多地址,该命令会失败。
规则序号从1开始;
-I:
根据给出的规则序号,向所选链中插入一条或更多规则。
所以,如果规则序号为1,规则会插入链的头部。
这也是不指定规则序号时的默认方式;
-L:
现实所选链的所有规则。
如果没有所选链,将显示所有链。
也可以和z选项一起用,这是链会自动列出和归零;
-F:
清空所选链。
这等于把所有规则一个个删除;
-Z:
把所有链的包以及字节的计数器清空;
-N:
根据给出的名称建立一个新的用户定义链。
这必须保证没有同名的链存在;
-X:
删除指定的用户自定义链。
这个链必须没有被引用,如果被引用,在删除之前必须删除或者替换与之有关的规则。
如果没有给出参数,这条命令将试着删除每个非内建的链;
-P:
设置链的目标规则;
-E:
根据用户给出的名字对指定链进行重名名;
规则定义参数说明:
-p[!
]protocol:
规则或者包检查(待查包)的协议。
指定协议可以是TCP、UDP、ICMP中的一个或者全部,也可以是数值,代表这些协议中的某一个。
当然也可以使用在/etc/protocols中定义的协议名。
在协议名前加上"!
"表示相反的规则。
数字0相当于所有all。
Protocolall会匹配所有协议,而且这是缺省时的选项。
在和check命令结合时,all可以不被使用;
-s[!
]address[/mask]:
指定源地址,可以是主机名、网络名和清楚地IP地址。
mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。
在指定地址前加上"!
"说明指定了相反的地址段。
标志--src是这个选项的简写;
-d[!
]address[/mask]:
指定目标地址,要获取详细说明请参见-s标志的说明。
标志--dst是这个选项的简写;
-jtarget:
指定规则的目标:
也就是说包匹配应当做什么。
目标可以为ACCEPT(通过)、DROP(删除)、RETURN(返回)、REDIRECT(重新指向)、SNAT(源地址转换)、DNAT(目标地址转换)、MASQUERADE(伪装)等,还可以是用户自定义链。
如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加;
-i[!
][name]:
待选的可接受包接口名称,包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。
当在接口名前使用"!
"说明后,指的是相反的名称,如果接口名后面加上"+",则所有以次接口名开头的接口都会被匹配。
如果这个选项被忽略,会假设为"+",那么将匹配任意接口;
-O[!
][NAME]:
这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。
其他设置同上。
2)匹配规则扩展选项:
tcp:
当指定-ptcp,且未指定其他匹配的扩展,则装载这些扩展。
--source-port[!
][port[:
port]]:
源端口或端口范围指定。
可以是服务名或端口号。
使用格式端口:
端口也可以指定包含的(端口)范围。
如果忽略首端口号,默认是0,如果忽略末端口号,默认是65535,如果第二个端口号大于第一个,则他们进行交换。
这个选项可以使用--sport的别名;
--destionation-port[!
][port:
[port]]:
目标端口或端口范围指定。
这个选项可以使用--dport别名来代替;
--tcp-flags[!
]maskcomp:
匹配指定的TCP标记。
第一个参数是要检查的标记,一个用逗号分开的列表,第二个参数是用逗号分开的标记表,是必须设置的。
标记如:
SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(送入)ALLNONE。
命令iptables-AFORWARD-ptcp--tcp-flagsSYN,ACK,FIN,RSTSYN只匹配那些设置了SYN标记而没有设置ACK、FIN和RST标记的包。
udp:
当指定-picmp且未指定其他匹配的扩展时,则装载这些扩展。
--icmp-type[!
]typename:
这个选项允许指定ICMP类型,可以是一个数值型的ICMP类型,或者是某个由命令"iptables-picmp-h"所显示的ICMP类型名。
mac:
--mac-source[!
]address:
匹配物理地址。
必须是XX:
XX:
XX:
XX:
XX这样的格式。
注意,他只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。
limit:
这个模块匹配标志用来对网络数据的通过速率进行标记,他和LOG目标结合使用,给出有限的登陆数。
当达到这个极限值时,使用这个扩展包的规则将进行匹配。
(除非使用了!
标记),他的扩展选项包括:
--limitrate:
最大平均匹配速率,可赋的值有"/second"、"/minute"、"/hour"或"/day"这样的单位,默认是"3/hour";
--limit-burstnumber:
待匹配包初始个数的最大值。
若前面指定的极限还没达到这个数值,则该数字加1。
默认值是5。
multiport:
这个模块匹配一组源端口或目标端口,最多可以指定15个端口。
只能和-ptcp或者-pudp连着使用:
--source-port[port[,port]]:
如果源端口是其中一个给定端口,则匹配;
--destination-port[port[,port]]:
如果目标端口是其中一个给定端口,则匹配;
--port[port[,port]]:
若源端口和目的端口相等并与某个给定端口相等,则匹配。
owner:
此扩展为本地生成包匹配包的创建者,只能用于OUTPUT链,而且,有一些包(如ICMPping应答)还可能没有所有者,因此永远不会匹配:
--uid-owneruserid:
如果给出有效的userid,那么匹配他的进程产生的包;
--gid-ownergroupid:
如果给出有效的groupid,那么匹配它的进程产生的包;
--sid-ownersessionid:
根据给出的会话组成匹配该进程产生的包。
REJECT:
作为对匹配的包的相应,返回一个错误的包,其他情况下和DROP相同。
此目标只适用于INPUT、FORWARD和OUTPUT链,以及调用这些链的用户自定义链。
这几个选项控制返回的错误包的特性:
--reject-withtype:
其中的type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-unreachable、icmp-porto-unreachable、icmp-net-prohibited或者icmp-host-prohibited,该类型会返回相应的ICMP错误信息(默认是port-unreachable)。
选项echo-reply也是允许的;它只能用于指定ICMPping包的规则中,生成ping的回应。
SNAT:
这个目标只适用于nat表的POSTROUTING链。
它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查:
--to-source[][:
port-port]:
可以指定一个单一的新IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-ptcp或者-pudp的规则里)。
如果未指定端口范围,源端口是512以下的端口惠被安排为其他的512以下的端口;512到1024之间的端口会被安排为1024以下的,其他端口会被安排为1024或以上。
如果可能,端口不会被修改;
--to-destiontion[][:
port-port]:
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-ptcp或者-pudp的规则里)。
如果未指定端口范围,目标端口不会被修改。
MASQUERADE:
只用于nat表的POSTROUTING链。
只能用于动态获取ip(拨号)连接:
如果拥有静态IP地址,要用SNAT。
伪装相当于给包发出时所经过接口的IP地址设置一个映像,当借口关闭时,连接会终止。
这是因为,当下一次拨号时,未必是相同的接口地址(以后所有建立的连接都将关闭)。
他有一个选项:
--to-ports[]:
指定使用的源端口范围,覆盖默认的SNAT源地址选择。
这个选项只适用于指定了-ptcp或者-pudp的规则。
REDIRECT:
只适用于nat表的PREROUTING和OUTPUT链,以及只调用他们的用户定义链。
他修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址127.0.0.1),包含一个选项:
--to-ports[]:
指定使用的目的端口或端口范围:
不指定的话,目标端口不会被修改。
只能用于指定了-ptcp或者-pudp的规则。
3)包过滤设置
举例:
假如有这样一个局域网,内部IP地址范围192.168.1.1-254,网关地址为192.168.1.1,绑定在eth0接口上,同时,网关具有外部Internet地址为10.25.0.7,绑定在eth1接口上,防火墙就位于网关上,通过它的设置,对流经防火墙的网络包进行过滤处理。
同时,在局域网内部有一台WWW服务器,他的内部地址为192.168.1.2,他被设置为可以接受外部的网络用户访问。
首先清空所有的规则链,并设置规则链的默认策略为DROP,即丢弃所有的网络数据包。
iptables-F
iptables-PINPUTDROP
iptables-POUTPUTDROP
iptables-PFORWARDDROP
新增用户者自定义规则链bad_tcp_packets、allowed和icmp_packets。
iptables-Nbad_tcp_packets
iptables-Nallowed
iptables-Nicmp_packets
下面定义bad_tcp_packets规则链的规则:
将要求重导向的网络连接记录起来,然后将报文丢弃(防止本地机器被其他主机作为入侵跳板,侵入别的主机):
iptables-Abad_tcp_packets-pTCP!
--syn-mstate--stateNEW-jLOG--log-levelINFO--log-prefix"Newnotsyn:
"
iptables-Abad_tcp_packets-pTCP!
--syn-mstate--stateNEW-jDROP
下面定义allowed规则链的规则:
允许要求连接的网络数据包或相应包进入,将其与网络数据包丢弃:
iptables-Aallowed-pTCP--syn-jACCEPT
iptables-Aallwoed-pTCP-mstate--stateESTABLLSHED,RELATED-JACCEPT
IPTABLES-Aallowed-pTCP-jDROP
下面定义icmp_packets规则链的规则:
允许ping网络数据包进入,将其余的网络数据包丢弃:
iptables-Aicmp_packets-pICMP-s0/0--icmp-type8-jACCEPT
iptables-Aicmp_packets-pICMP-s0/0--icmp-type11-jACCEPT
INPUT链,过滤要到达防火墙的网络数据包。
进入防火墙主机的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables-AINPUT-pTCP-jbad_tcp_packets
从WAN进入防火墙主机的ICMP网络数据包,必须先进行icmp_packets过滤,这是为了避免黑客传送不完整的IP网络数据包,系统会相应ICMP网络数据包,以通知对方,导致主机位置被侦测出来:
iptables-AINPUT-pICMP-ieth1-jicmp_packets
从LAN进入防火墙主机的全部单播和广播的网络数据包,均会放行:
iptables-AINPUT-pALL-ieth0-d192.168.1.1-jACCEPT
iptables-AINPUT-pALL-ieth0-d192.168.1.255-jACCEPT
从LAN进入防火墙主机的DHCP网络数据包,予以放行,只有当防火墙担任DHCP时才使用:
iptables-AINPUT-pUDP-ieth0--dport67--sport68-jACCEPT
从WAN进入防火墙主机的所有网络数据包,检查是否为响应网络数据包,若是则予以放行:
iptables-AINPUT-pALL-d10.25.0.7-mstate--stateESTABLISHED,RELATED-jACCEPT
限制过滤规则的检测频率为每分钟平均流量三个网络数据包(超过)上限的网络数据包将暂停检测,并将瞬间流量设定为一次最多处理三个网络数据包(超过上限的网络数据包将丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables-AINPUT-mlimit--limit3/minute--limit-burst3-jLOG--log-levelINFO--log-prefix"IPTINPUTpacketdIEd:
"
FORWAD链,过滤要通过防火墙的网络数据包
通过防火墙的TCP网络数据包必须先进行bad_tcp_pcakets过滤:
iptables-AFORWAD-PTCP-Jbad_tcp_packets
从LAN要到WAN的网络数据包均放行:
iptables-AFORWARD-ieth0-oeth1-jACCEPT
从WAN到LAN的网络数据包仅放行应答网络数据包:
iptables-AFORWARD-ieth1-oeth0-mstate--stateESTABLISHED,RELATED-jACCEPT
允许来自WAN的PING网络数据包,递送到局域网内的WWW服务器:
iptables-AFORWARD-pICMP-ieth1-oeth0-d192.168.1.2-jicmp_packets
允许来自WAN的HTTP,HTTPS网络数据包,递送到局域网的WEB服务器:
iptables-AFORWARD-pTCP-ieth1-oeth0-d192.168.1.2-mmultiport--dport80,443-jallowed
限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables-AFORWARD-mlimit--limit3/minute--limit-burst3-jLOG--log-levelDEBUG--log-prefix"IPTFORWARDpacketdIEd:
"
OUTPUT链,过滤从防火墙送出的网络数据包。
从防火墙送出的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables-AOUTPUT-pTCP-jbad_tcp_packets
对于过滤通过的TCP包和其他类型的包,均会放行:
iptables-AOUTPUT-pALL-s127.0.0.1-jACCEPT
iptables-AOUTPUT-pALL-s192.168.1.1-jACCEPT
iptables-AOUTPUT-pALL-s10.25.0.7-jACCEPT
限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables-AOUTPUT-mlimit--limit3/minute--limit-burst3-jLOG--log-levelDEBUG--log-prefix"IPTOUTPUTpacketdIEd:
"
4.NAT配置
1)目的NAT(DNAT)
DNAT在外部数据包进入防火墙后且路由之前进行,他把该数据包的目的地址改为内部局域网的地址,然后路由该数据包进入到局域网内部主机。
举例:
iptables-tnat-APREROUTING-ttcp-d10.25.0.7--dport80-ieth1-jDNAT--to192.168.1.2:
80
说明:
可以路由到达防火墙的访问80端口(即WWW服务器)的数据包的目的地址改为192.168.1.2。
2)源NAT(SNAT)
SNAT主要用来更改从防火墙发出的数据包的源地址,使得来自局域网的私有地址通过防火墙后,更改为防火墙具有的外部地址,以便数据接收方接收数据后,能够找到正确的回复地址。
举例:
iptables-tnat-APOSTROUTING-s192.168.1.0/24-oeth0-jSNAT--to10.25.0.7
说明:
更改所有来自192.168.1.0/24的数据包的源IP地址为10.25.0.7
注意:
系统在经过路由及过滤等处理后,直到数据包要送出时,才进行SNAT,有一种SANT的特殊情况是IP伪装,通常建议在用拨号上网时使用,也就是在合法IP地址不固定的情况下使用。
举例:
iptables-tnat-APOSTROUTING-oppp0-jMASQUERADE
说明:
这样可以保证局域网内部的用户能够所有通过拨号服务器连接到INTERNET。
Linux系统下使用Iptables构建静态防火墙
这篇文章向读者展示了如何一步一步建立静态防火墙来保护您的计算机,同时在每一步中,我力图向读者讲述清楚原理。
在这篇教程之后,你将能理解到防火墙内在过滤机制,同时也能自己动手建立符合自己要求的防火墙。
1、iptables介绍
iptables是复杂的,它集成到linux内核中。
用户通过iptables,可以对进出你的计算机的数据包进行过滤。
通过iptables指令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。
接下来,我将告诉你如何设置自己的规则,从现在就开始吧。
2、初始化工作
在shell提示符#下打入
1.iptables-F
2.
3.iptables-X
4.
5.iptables-tnat-F
6.
7.iptables-tnat-X
8.
以上每一个指令都有它确切的含义。
一般设置你的iptables之前,首先要清除所有以前设置的规则,我们就把它叫做初始化好了。
虽然很多情况下它什么也不做,但是保险起见,不妨小心一点吧!
要是你用的是redhat或fedora,那么你有更简单的办法
1.serviceiptablesstop
3、开始设置规则:
接下下开始设置你的规则了
1.iptables-PINPUTDROP
这一条指令将会为你架设一个非常“安全”的防火墙,我很难想象有哪个hacker能攻破这样的机器,因为它将所有从网络进入你机器的数据丢弃(drop)了。
这当然是安全过头了,此时你的机器将相当于没有网络。
要是你pinglocalhost,你就会发现屏幕一直停在那里,因为ping收不到任何回应。
4、添加规则
接着上文继续输入指令:
1.iptables-AINPUT-i!
ppp0-jACCEPT
这条规则的意思是:
接受所有的,来源不是网络接口ppp0的数据。
我们假定你有两个网络接口,eth0连接局域网,loop是回环网(localhost)。
ppp0是一般的adsl上网的internet网络接口,要是你不是这种上网方式,那则有可能是eth1。
在此我假定你是adsl上网,你的internet接口是ppp0
此时你即允许了局域网的访问,你也可以访问localhost
此时再输入指令pinglocalhost,结果还会和刚才一样吗?
到此我们还不能访问www,也不能mail,接着看吧。
5、我想访问www
1.iptables-AINPUT-ippp0-ptcp-sport80-jACC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 防火墙
![提示](https://static.bdocx.com/images/bang_tan.gif)