iptables 使用.docx

上传人:b****8 文档编号:27981917 上传时间:2023-07-07 格式:DOCX 页数:24 大小:27.26KB
下载 相关 举报
iptables 使用.docx_第1页
第1页 / 共24页
iptables 使用.docx_第2页
第2页 / 共24页
iptables 使用.docx_第3页
第3页 / 共24页
iptables 使用.docx_第4页
第4页 / 共24页
iptables 使用.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

iptables 使用.docx

《iptables 使用.docx》由会员分享,可在线阅读,更多相关《iptables 使用.docx(24页珍藏版)》请在冰豆网上搜索。

iptables 使用.docx

iptables使用

一、iptables:

从这里开始

删除现有规则

iptables-F

(OR)

iptables--flush

设置默认链策略

iptables的filter表中有三种链:

INPUT,FORWARD和OUTPUT。

默认的链策略是ACCEPT,你可以将它们设置成DROP。

iptables-PINPUTDROP

iptables-PFORWARDDROP

iptables-POUTPUTDROP

你需要明白,这样做会屏蔽所有输入、输出网卡的数据包,除非你明确指定哪些数据包可以通过网卡。

屏蔽指定的IP地址

以下规则将屏蔽BLOCK_THIS_IP所指定的IP地址访问本地主机:

BLOCK_THIS_IP="x.x.x.x"

iptables-AINPUT-ieth0-s"$BLOCK_THIS_IP"-jDROP

(或者仅屏蔽来自该IP的TCP数据包)

iptables-AINPUT-ieth0-ptcp-s"$BLOCK_THIS_IP"-jDROP

允许来自外部的ping测试

iptables-AINPUT-picmp--icmp-typeecho-request-jACCEPT

iptables-AOUTPUT-picmp--icmp-typeecho-reply-jACCEPT

允许从本机ping外部主机

iptables-AOUTPUT-picmp--icmp-typeecho-request-jACCEPT

iptables-AINPUT-picmp--icmp-typeecho-reply-jACCEPT

允许环回(loopback)访问

iptables-AINPUT-ilo-jACCEPT

iptables-AOUTPUT-olo-jACCEPT

二、iptables:

协议与端口设定

允许所有SSH连接请求

本规则允许所有来自外部的SSH连接请求,也就是说,只允许进入eth0接口,并且目的端口为22的数据包

iptables-AINPUT-ieth0-ptcp--dport22-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport22-mstate--stateESTABLISHED-jACCEPT

允许从本地发起的SSH连接

本规则和上述规则有所不同,本规则意在允许本机发起SSH连接,上面的规则与此正好相反。

iptables-AOUTPUT-oeth0-ptcp--dport22-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AINPUT-ieth0-ptcp--sport22-mstate--stateESTABLISHED-jACCEPT

仅允许来自指定网络的SSH连接请求

以下规则仅允许来自192.168.100.0/24的网络:

iptables-AINPUT-ieth0-ptcp-s192.168.100.0/24--dport22-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport22-mstate--stateESTABLISHED-jACCEPT

上例中,你也可以使用-s192.168.100.0/255.255.255.0作为网络地址。

当然使用上面的CIDR地址更容易让人明白。

仅允许从本地发起到指定网络的SSH连接请求

以下规则仅允许从本地主机连接到192.168.100.0/24的网络:

iptables-AOUTPUT-oeth0-ptcp-d192.168.100.0/24--dport22-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AINPUT-ieth0-ptcp--sport22-mstate--stateESTABLISHED-jACCEPT

允许HTTP/HTTPS连接请求

#1.允许HTTP连接:

80端口

iptables-AINPUT-ieth0-ptcp--dport80-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport80-mstate--stateESTABLISHED-jACCEPT

#2.允许HTTPS连接:

443端口

iptables-AINPUT-ieth0-ptcp--dport443-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport443-mstate--stateESTABLISHED-jACCEPT

允许从本地发起HTTPS连接

本规则可以允许用户从本地主机发起HTTPS连接,从而访问Internet。

iptables-AOUTPUT-oeth0-ptcp--dport443-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AINPUT-ieth0-ptcp--sport443-mstate--stateESTABLISHED-jACCEPT

类似的,你可以设置允许HTTP协议(80端口)。

-mmultiport:

指定多个端口

通过指定-mmultiport选项,可以在一条规则中同时允许SSH、HTTP、HTTPS连接:

iptables-AINPUT-ieth0-ptcp-mmultiport--dports22,80,443-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp-mmultiport--sports22,80,443-mstate--stateESTABLISHED-jACCEPT

允许出站DNS连接

iptables-AOUTPUT-pudp-oeth0--dport53-jACCEPT

iptables-AINPUT-pudp-ieth0--sport53-jACCEPT

允许NIS连接

如果你在使用NIS管理你的用户账户,你需要允许NIS连接。

即使你已允许SSH连接,你仍需允许NIS相关的ypbind连接,否则用户将无法登陆。

NIS端口是动态的,当ypbind启动的时候,它会自动分配端口。

因此,首先我们需要获取端口号,本例中使用的端口是853和850:

rpcinfo-p|grepypbind

然后,允许连接到111端口的请求数据包,以及ypbind使用到的端口:

iptables-AINPUT-ptcp--dport111-jACCEPT

iptables-AINPUT-pudp--dport111-jACCEPT

iptables-AINPUT-ptcp--dport853-jACCEPT

iptables-AINPUT-pudp--dport853-jACCEPT

iptables-AINPUT-ptcp--dport850-jACCEPT

iptables-AINPUT-pudp--dport850-jACCEPT

以上做法在你重启系统后将失效,因为ypbind会重新指派端口。

我们有两种解决方法:

1.为NIS使用静态IP地址

2.每次系统启动时调用脚本获得NIS相关端口,并根据上述iptables规则添加到filter表中去。

允许来自指定网络的rsync连接请求

你可能启用了rsync服务,但是又不想让rsync暴露在外,只希望能够从内部网络(192.168.101.0/24)访问即可:

iptables-AINPUT-ieth0-ptcp-s192.168.101.0/24--dport873-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport873-mstate--stateESTABLISHED-jACCEPT

允许来自指定网络的MySQL连接请求

你可能启用了MySQL服务,但只希望DBA与相关开发人员能够从内部网络(192.168.100.0/24)直接登录数据库:

iptables-AINPUT-ieth0-ptcp-s192.168.100.0/24--dport3306-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport3306-mstate--stateESTABLISHED-jACCEPT

允许Sendmail,Postfix邮件服务

邮件服务都使用了25端口,我们只需要允许来自25端口的连接请求即可。

iptables-AINPUT-ieth0-ptcp--dport25-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport25-mstate--stateESTABLISHED-jACCEPT

允许IMAP与IMAPS

#IMAP:

143

iptables-AINPUT-ieth0-ptcp--dport143-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport143-mstate--stateESTABLISHED-jACCEPT

#IMAPS:

993

iptables-AINPUT-ieth0-ptcp--dport993-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport993-mstate--stateESTABLISHED-jACCEPT

允许POP3与POP3S

#POP3:

110

iptables-AINPUT-ieth0-ptcp--dport110-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport110-mstate--stateESTABLISHED-jACCEPT

#POP3S:

995

iptables-AINPUT-ieth0-ptcp--dport995-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport995-mstate--stateESTABLISHED-jACCEPT

防止DoS攻击

iptables-AINPUT-ptcp--dport80-mlimit--limit25/minute--limit-burst100-jACCEPT

∙-mlimit:

 启用limit扩展

∙–limit25/minute:

 允许最多每分钟25个连接

∙–limit-burst100:

 当达到100个连接后,才启用上述25/minute限制

三、转发与NAT

允许路由

如果本地主机有两块网卡,一块连接内网(eth0),一块连接外网(eth1),那么可以使用下面的规则将eth0的数据路由到eht1:

iptables-AFORWARD-ieth0-oeth1-jACCEPT

DNAT与端口转发

以下规则将会把来自422端口的流量转发到22端口。

这意味着来自422端口的SSH连接请求与来自22端口的请求等效。

#1.启用DNAT转发

iptables-tnat-APREROUTING-ptcp-d192.168.102.37--dport422-jDNAT--to-destination192.168.102.37:

22

#2.允许连接到422端口的请求

iptables-AINPUT-ieth0-ptcp--dport422-mstate--stateNEW,ESTABLISHED-jACCEPT

iptables-AOUTPUT-oeth0-ptcp--sport422-mstate--stateESTABLISHED-jACCEPT

假设现在外网网关是xxx.xxx.xxx.xxx,那么如果我们希望把HTTP请求转发到内部的某一台计算机,应该怎么做呢?

iptables-tnat-APREROUTING-ptcp-ieth0-dxxx.xxx.xxx.xxx--dport8888-jDNAT--to192.168.0.2:

80

iptables-AFORWARD-ptcp-ieth0-d192.168.0.2--dport80-jACCEPT

当该数据包到达xxx.xxx.xxx.xxx后,需要将该数据包转发给192.168.0.2的80端口,事实上NAT所做的是修改该数据包的目的地址和目的端口号。

然后再将该数据包路由给对应的主机。

但是iptables会接受这样的需要路由的包么?

这就由FORWARD链决定。

我们通过第二条命令告诉iptables可以转发目的地址为192.168.0.2:

80的数据包。

再看一下上例中422端口转22端口,这是同一IP,因此不需要设置FORWARD链。

SNAT与MASQUERADE

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去:

iptables-tnat-APOSTROUTING-s10.8.0.0/24-oeth0-jsnat--to-source192.168.5.3

对于snat,不管是几个地址,必须明确的指定要snat的IP。

假如我们的计算机使用ADSL拨号方式上网,那么外网IP是动态的,这时候我们可以考虑使用MASQUERADE

iptables-tnat-APOSTROUTING-s10.8.0.0/255.255.255.0-oeth0-jMASQUERADE

负载平衡

可以利用iptables的-mnth扩展,及其参数(–counter0–every3–packetx),进行DNAT路由设置(-APREROUTING-jDNAT–to-destination),从而将负载平均分配给3台服务器:

iptables-APREROUTING-ieth0-ptcp--dport443-mstate--stateNEW-mnth--counter0--every3--packet0-jDNAT--to-destination192.168.1.101:

443

iptables-APREROUTING-ieth0-ptcp--dport443-mstate--stateNEW-mnth--counter0--every3--packet1-jDNAT--to-destination192.168.1.102:

443

iptables-APREROUTING-ieth0-ptcp--dport443-mstate--stateNEW-mnth--counter0--every3--packet2-jDNAT--to-destination192.168.1.103:

443

自定义的链

记录丢弃的数据包

#1.新建名为LOGGING的链

iptables-NLOGGING

#2.将所有来自INPUT链中的数据包跳转到LOGGING链中

iptables-AINPUT-jLOGGING

#3.指定自定义的日志前缀"IPTablesPacketDropped:

"

iptables-ALOGGING-mlimit--limit2/min-jLOG--log-prefix"IPTablesPacketDropped:

"--log-level7

#4.丢弃这些数据包

iptables-ALOGGING-jDROP

References:

[1] 25MostFrequentlyUsedLinuxIPTablesRulesExamples

[2] iptables:

SNAT,DNAT,MASQUERADE的联系与区别

一、iptables的表与链

iptables具有Filter,NAT,Mangle,Raw四种内建表:

1.Filter表

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

∙INPUT链 –处理来自外部的数据。

∙OUTPUT链 –处理向外发送的数据。

∙FORWARD链 –将数据转发到本机的其他网卡设备上。

2.NAT表

NAT表有三种内建链:

∙PREROUTING链 –处理刚到达本机并在路由转发前的数据包。

它会转换数据包中的目标IP地址(destinationipaddress),通常用于DNAT(destinationNAT)。

∙POSTROUTING链 –处理即将离开本机的数据包。

它会转换数据包中的源IP地址(sourceipaddress),通常用于SNAT(sourceNAT)。

∙OUTPUT链 –处理本机产生的数据包。

3.Mangle表

Mangle表用于指定如何处理数据包。

它能改变TCP头中的QoS位。

Mangle表具有5个内建链:

∙PREROUTING

∙OUTPUT

∙FORWARD

∙INPUT

∙POSTROUTING

4.Raw表

Raw表用于处理异常,它具有2个内建链:

∙PREROUTINGchain

∙OUTPUTchain

5.小结

下图展示了iptables的三个内建表:

图:

IPTables内建表

二、IPTABLES规则(Rules)

牢记以下三点式理解iptables规则的关键:

∙Rules包括一个条件和一个目标(target)

∙如果满足条件,就执行目标(target)中的规则或者特定值。

∙如果不满足条件,就判断下一条Rules。

目标值(TargetValues)

下面是你可以在target里指定的特殊值:

∙ACCEPT –允许防火墙接收数据包

∙DROP –防火墙丢弃包

∙QUEUE –防火墙将数据包移交到用户空间

∙RETURN –防火墙停止执行当前链中的后续Rules,并返回到调用链(thecallingchain)中。

如果你执行iptables--list你将看到防火墙上的可用规则。

下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input链,forward链,output链。

#iptables-tfilter--list

ChainINPUT(policyACCEPT)

targetprotoptsourcedestination

ChainFORWARD(policyACCEPT)

targetprotoptsourcedestination

ChainOUTPUT(policyACCEPT)

targetprotoptsourcedestination

查看mangle表:

#iptables-tmangle--list

查看NAT表:

#iptables-tnat--list

查看RAW表:

#iptables-traw--list

/!

\注意:

如果不指定-t选项,就只会显示默认的filter表。

因此,以下两种命令形式是一个意思:

#iptables-tfilter--list

(or)

#iptables--list

以下例子表明在filter表的input链,forward链,output链中存在规则:

#iptables--list

ChainINPUT(policyACCEPT)

numtargetprotoptsourcedestination

1RH-Firewall-1-INPUTall--0.0.0.0/00.0.0.0/0

ChainFORWARD(policyACCEPT)

numtargetprotoptsourcedestination

1RH-Firewall-1-INPUTall--0.0.0.0/00.0.0.0/0

ChainOUTPUT(policyACCEPT)

numtargetprotoptsourcedestination

ChainRH-Firewall-1-INPUT(2references)

numtargetprotoptsourcedestination

1ACCEPTall--0.0.0.0/00.0.0.0/0

2ACCEPTicmp--0.0.0.0/00.0.0.0/0icmptype255

3ACCEPTesp--0.0.0.0/00.0.0.0/0

4ACCEPTah--0.0.0.0/00.0.0.0/0

5ACCEPTudp--0.0.0.0/0224.0.0.251udpdpt:

5353

6ACCEPTudp--0.0.0.0/00.0.0.0/0udpdpt:

631

7ACCEPTtcp--0.0.0.0/00.0.0.0/0tcp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1