iptables 开头几行火车z开头是什么意思思

它山之石可以攻玉详情请访问:
字号:大 中 小
&&& * 1 Iptables基础 如何在Ubuntu Server版上实施iptables&&&&&&&&&
o 1.1 基本命令&&&&&&&&& o 1.2 允许建立会话&&&&&&&&& o 1.3 在指定端口上允许入站流量&&&&&&&&&
o 1.4 阻断流量&&&&&&&&& o 1.5 编辑iptables&&&&&&&&& o 1.6 日志记录&&&&&&&&&
o 1.7 保存iptables&&&&&&&&& o 1.8 配置启动时自动加载规则&&&&&&&&& o 1.9 提示&&&&&&&&&&&&&&&
+ 1.9.1 如果你在一个已有规则上手动编辑iptables&&&&&&&&&&&&&&& + 1.9.2
使用iptables-save/restore来测试规则&&&&&&&&&&&&&&& + 1.9.3 更详细的日志记录&&&&&&&&&&&&&&&
+ 1.9.4 禁用防火墙 &&&&&&&&& o 1.10 通过GUI界面程序简单配置&&&&&&&&& o 1.11
更多信息&&&&&&&&& o 1.12 致谢 目录[隐藏]&&& * 1
Iptables基础 如何在Ubuntu Server版上实施iptables&&&&&&&&& o 1.1 基本命令&&&&&&&&&
o 1.2 允许建立会话&&&&&&&&& o 1.3 在指定端口上允许入站流量&&&&&&&&& o 1.4 阻断流量&&&&&&&&&
o 1.5 编辑 iptables&&&&&&&&& o 1.6 日志记录&&&&&&&&& o 1.7 保存
iptables&&&&&&&&& o 1.8 配置启动时自动加载规则&&&&&&&&& o 1.9 提示&&&&&&&&&&&&&&&
+ 1.9.1 如果你要在一个规则基础上手动编辑iptables&&&&&&&&&&&&&&& + 1.9.2
用iptables-save/restore来测试规则&&&&&&&&&&&&&&& + 1.9.3 更详细的日志&&&&&&&&&&&&&&&
+ 1.9.4 禁用防火墙&&&&&&&&& o 1.10 轻松配置通过 GUI&&&&&&&&& o 1.11 更多信息&&&&&&&&&
o 1.12 致谢[编辑] Iptables基础 如何在Ubuntu Server版上实施iptablesiptables
是一个安装在Ubuntu
Server上的默认防火墙。在正常的ubuntu安装过程中,iptables是被安装上了的,但是它默认允许所有的流量(不管防火墙是否是无效的)。关
于iptables有价值的信息很多,但是大多都描述的很复杂。如果你想做些基本的配置,下面的 How To 很适合你。[编辑] 基本命令键
入:# iptables -L列出您当前iptables中在规则。如果您是刚刚建立您的服务器,那么可能此时还没有
任何规则,而且您应该看到如下:Chain INPUT (policy ACCEPT)target&&&& prot
opt source&&&&&&&&&&&&&& destinationChain FORWARD (policy
ACCEPT)target&&&& prot opt source&&&&&&&&&&&&&& destinationChain
OUTPUT (policy ACCEPT)target&&&& prot opt source&&&&&&&&&&&&&&
destination[编辑] 允许建立会话我们可以允许建立会话来接受流量:# iptables
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT[编辑]
在指定端口上允许入站流量阻断所有流量您也可以启动系统,但是您可能正在通过SSH工作,所有在您阻断其他流量前有必要允许SSH流
量。为了在22端口号(默认的SSH端口)上的允许流量入站,您可以告诉iptables允许您的网卡接受所有的目的端口为22的TCP
流量。# iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT特
别的,这将向表中追加(-A)INPUT规则,允许目的端口号为SSH的所有流量进入接口(-i)
eth0,以便iptables完成跳转(-j)或动作:ACCEPT让我们核对下这些规则:(这里仅显示了少数行,您应该看到更多)#
iptables -LChain INPUT (policy ACCEPT)target&&&& prot opt
source&&&&&&&&&&&&&& destinationACCEPT&&&& all& --&
anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& state RELATED,ESTABLISHEDACCEPT&&&&
tcp& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:ssh现
在,让我们允许所有的web流量# iptables -A INPUT -p tcp -i eth0 --dport 80 -j
ACCEPT检查我们现有的规则# iptables -LChain INPUT (policy
ACCEPT)target&&&& prot opt source&&&&&&&&&&&&&& destinationACCEPT&&&&
all& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& state
RELATED,ESTABLISHEDACCEPT&&&& tcp& --& anywhere&&&&&&&&&&&&
anywhere&&&&&&&&&&& tcp dpt:sshACCEPT&&&& tcp& --&
anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:www我们已经指定SSH和
web端口为允许通过的TCP流量,但是因为我们还没阻断任何流量,所以到目前为止所有的流量仍然可以进入。[编辑] 阻断流量一
旦一条规则对一个包进行了匹配,其他规则不再对这个包有效。因为我们的规则首先允许SSH和WEB流量,所以只要我们阻断所有流量的规则紧跟其後,我们依
然能接受我们感兴趣的流量。我们要做的仅仅是把阻断所有流量的规则放在最後,所以我们需要再次用到它。# iptables -A
INPUT -j DROP# iptables -LChain INPUT (policy ACCEPT)target&&&&
prot opt source&&&&&&&&&&&&&& destinationACCEPT&&&& all& --&
anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& state RELATED,ESTABLISHEDACCEPT&&&&
tcp& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:sshACCEPT&&&&
tcp& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:wwwDROP&&&&&&
all& --& anywhere&&&&&&&&&&&& anywhere因为我们刚才没有指定一个接口或一个协议,所以除了
web和ssh流量外其他任何流量都会被阻断。[编辑] 编辑 iptables到目前为止我们设置过程中唯一
的问题是回环端口(loopbakc)也被阻断了。我们本可以通过指定 -i eth0
来仅仅丢弃eth0上的数据包,但我们也可以为回环端口(loopback)添加一条规则。如果我们追加这条规则,这将太晚了----因为所有的流量已经
被丢弃。我们必须插入这条跪着到第4行。# iptables -I INPUT 4 -i lo -j ACCEPT#
iptables -LChain INPUT (policy ACCEPT)target&&&& prot opt
source&&&&&&&&&&&&&& destinationACCEPT&&&& all& --&
anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& state RELATED,ESTABLISHEDACCEPT&&&&
tcp& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:sshACCEPT&&&&
tcp& --& anywhere&&&&&&&&&&&& anywhere&&&&&&&&&&& tcp dpt:wwwACCEPT&&&&
all& --& anywhere&&&&&&&&&&&& anywhereDROP&&&&&& all& --&
anywhere&&&&&&&&&&&& anywhere最後2行看起来几乎一样,因此我们可以让iptables列的更详细些。#
iptables -L -v[编辑] 日志记录在上面的例子中,所有的流量都不会被记录。如果您愿意在syslog
中记录被丢弃的包, 下面将是最快捷的方式:# iptables -I INPUT 5 -m limit --limit
5/min -j LOG --log-prefix "iptables denied: " --log-level 7看 提示
段获得更多关于logging的ideas.[编辑] 保存 iptables如果您现在要重新启动机器的话,
您的iptables配置将会消失。为了不用每次重新启动时敲入这些命令,您可以保存你的配置,让它在系统启动时自动启动。你可以通过iptables-
save 和iptables-restore命令来保存配置。[编辑] 配置启动时自动加载规则保存您的防火
墙股则到一个文件# iptables-save & /etc/iptables.up.rules接着修改
/etc/network/interfaces 脚本自动应用这些规则(末行是添加的)auto eth0iface
eth0 inet dhcppre-up iptables-restore & /etc/iptables.up.rules你
也可以准备一组规则冰并自动应用它auto eth0iface eth0 inet dhcppre-up
iptables-restore & /etc/iptables.up.rulespost-down
iptables-restore & /etc/iptables.down.rules[编辑] 提示[编辑]
如果你要在一个规则基础上手动编辑iptables下面的步骤复习了怎样建立你的防火墙规则,并假定它们相对固定(而且对于大多数人来说
它们也应该是)。但是如果你要做许多研究工作,你也许想要你的iptables在你每次重启时保存一次。你可以在
/etc/network/interfaces 里添加像下面的一行:pre-up iptables-restore &
/etc/iptables.up.rulespost-down iptables-save &
/etc/iptables.up.rules"post-down iptables-save &
/etc/iptables.up.rules" 此行将保存规则用于下次启动时使用。[编辑]
用iptables-save/restore来测试规则如果你超出了这个指南来编辑iptables,你可能想利用iptables-
save和iptables-restore来编辑和测试你的规则。你可以通过使用你喜爱的文本编辑器(此处为gedit)来打开这些规则文件来完成编
辑。# iptables-save & /etc/iptables.test.rules# gedit
/etc/iptables.test.rules你会得到一个如下类似的文件(下面是紧接上的例子文件):#
Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006*filter:INPUT
ACCEPT [368:102354]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT
[74]-A INPUT -m state --state RELATED,ESTABLISHED -j
ACCEPT-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT-A
INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT-A INPUT -i lo -j
ACCEPT-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables
denied: " --log-level 7-A INPUT -j DROPCOMMIT# Completed on
Sun Apr 23 06:19:53 2006注意到这些都是减去iptables命令的iptables语句。随意编辑这些命令、
完成後保存它们。然後简单的测试下:# iptables-restore &
/etc/iptables.test.rules测试完毕後,如果你还没添加iptables-save命令 到
/etc/network/interfaces 里面,记得不要丢失了你的更改:# iptables-save &
/etc/iptables.up.rules[编辑] 更详细的日志为了在你的syslog中获得更多细节,你可能想创建一个
额外的链。下面是个很简短的例子---我的 /etc/iptables.up.rules
,它将展示我是如何设置iptables记录到syslog中的:# Generated by iptables-save
v1.3.1 on Sun Apr 23 05:32:09 2006*filter:INPUT ACCEPT
[273:55355]:FORWARD ACCEPT [0:0]:LOGNDROP - [0:0]:OUTPUT
ACCEPT [52]-A INPUT -m state --state RELATED,ESTABLISHED
-j ACCEPT-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT-A
INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT-A INPUT -i lo -j
ACCEPT-A INPUT -j LOGNDROP-A LOGNDROP -p tcp -m limit --limit
5/min -j LOG --log-prefix "Denied TCP: " --log-level 7-A LOGNDROP -p
udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: "
--log-level 7-A LOGNDROP -p icmp -m limit --limit 5/min -j LOG
--log-prefix "Denied ICMP: " --log-level 7-A LOGNDROP -j DROPCOMMIT#
Completed on Sun Apr 23 05:32:09 2006请注意 一个名为
LOGNDROP的链在文件顶部。而且,INPUT链底部标准的DROP被替换成了LOGNDROP,同时添加了协议描述so it makes
sense looking at the log。最後我们在LOGNDROP链尾部丢弃了这些流量。下面的行告诉我们发生了什么:&&&
* --limit 设置记录相同规则到syslog中的次数&&& * --log-prefix "Denied..."
添加一个前缀使得在syslog中查找更easy&&& * --log-level 7 设置syslog的消息级别 (see man
syslog for more detail, but you can probably leave this) [编辑]
禁用防火墙如果您要临时禁用防火墙,您可以通过下面的命令清空所偶的规则:# iptables -F[编
辑] 轻松配置通过 GUI新手可以利用 Firetarter(一个gui工具)---仓库中的可用软件(新立德或apt-get
获得)来配置她或他的iptables规则,而需要命令行知识。请查看指南,尽管......
配置很简单,但是对于高级用户来说可能远远不能满足。然而它对于大多数的家庭用户来说是足够的......
。(我)建议您使用firestarter在策略表中将出站配置为 “限制”,而将您需要的连接类型(如用于http的80、https的443,msn
chat的1683等等)加入白名单。您也可以通过它查看进出您计算机的活动连接......
。防火墙会一直保持下去一旦通过向导配置完毕。拨号用户必须在向导中指定它在拨号时自动启动。firestarter主页:
http://www./ (再次, 仓库源中可用, 不需要编译) 指南:
http://www./docs/tutorial.php个人笔记:不幸运的是,它没有阻断(或询问
用户)特定应用/程序的选项......。因此,我的理解是一旦启用了80端口(例如,用于访问网页),那么任何程序都可以通过80端口连接任何服务器、
做任何它想做的事......
function open_phone(e) {
var context = document.title.replace(/%/g, '%');
var url = document.location.
open("/ishare.do?m=t&u=" + encodeURIComponent(url) + "&t=" + encodeURIComponent(context) + "&sid=70cd6ed4a0");
!觉得精彩就顶一下,顶的多了,文章将出现在更重要的位置上。
大 名:&&[]&&[注册成为和讯用户]
(不填写则显示为匿名者)
(您的网址,可以不填)
请根据下图中的字符输入验证码:
(您的评论将有可能审核后才能发表)
已成功添加“”到
请不要超过6个字防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。
对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。
二:iptables 的历史以及工作原理
1.iptables的发展:
iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)
& & 作者一共在内核空间中选择了5个位置,
& & 1.内核空间中:从一个网络接口进来,到另一个网络接口去的
& & 2.数据包从内核流入用户空间的
& & 3.数据包从用户空间流出的
& & 4.进入/离开本机的外网接口
& & 5.进入/离开本机的内网接口
2.iptables的工作机制
从上面的发展我们知道了作者选择了5个位置,来作为控制的地方,但是你有没有发现,其实前三个位置已经基本上能将路径彻底封锁了,但是为什么已经在进出的口设置了关卡之后还要在内部卡呢? 由于数据包尚未进行路由决策,还不知道数据要走向哪里,所以在进出口是没办法实现数据过滤的。所以要在内核空间里设置转发的关卡,进入用户空间的关卡,从用户空间出去的关卡。那么,既然他们没什么用,那我们为什么还要放置他们呢?因为我们在做NAT和DNAT的时候,目标地址转换必须在路由之前转换。所以我们必须在外网而后内网的接口处进行设置关卡。 & & & &
&这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
& & & & 这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。 & & &&
3.防火墙的策略
防火墙策略一般分为两种,一种叫&通&策略,一种叫&堵&策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了&表&这个定义,来定义、区分各种不同的工作功能和处理方式。
我们现在用的比较多个功能有3个:
1.filter 定义允许或者不允许的
2.nat 定义地址转换的&
& & & & & & & & 3.mangle功能:修改报文原数据
我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。&
iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
三.规则的写法:
&iptables定义规则的方式比较复杂:
&格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
&-t table :3个filter nat mangle
&COMMAND:定义如何对规则进行管理
&chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
&CRETIRIA:指定匹配标准
&-j ACTION :指定如何进行处理
&比如:不允许172.16.0.0/24的进行访问。
&iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
&当然你如果想拒绝的更彻底:
&iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT
&iptables -L -n -v #查看定义规则的详细信息
四:详解COMMAND:
1.链管理命令(这都是立即生效的)
-P :设置默认策略的(设定默认门是关着的还是开着的)
默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT) &默认是关的/默认是开的
iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
& & & & -F: FLASH,清空规则链的(注意每个链的管理权限)
& & iptables -t nat -F PREROUTING
& & iptables -t nat -F 清空nat表的所有链
& & & & -N:NEW 支持用户新建一个链
& & & & & & iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
& & & & -X: 用于删除用户自定义的空链
& & & & & & 使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
& & & & -E:用来Rename chain主要是用来给用户自定义的链重命名
& & & & & & -E oldname newname
& & & & &-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
& & & & & & iptables -Z :清空
2.规则管理命令
& & & & &-A:追加,在当前链的最后新增一个规则
& & & & &-I num : 插入,把当前规则插入为第几条。
& & & & & & -I 3 :插入为第三条
& & & & &-R num:Replays替换/修改第几条规则
& & & & & & 格式:iptables -R 3 &&&&
& & & & &-D num:删除,明确指定删除第几条规则
3.查看管理命令 &-L&
&附加子命令
&-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
&-v:显示详细信息
&-vvv :越多越详细
&-x:在计数器上显示精确值,不做单位换算
&--line-numbers : 显示规则的行号
&-t nat:显示所有的关卡的信息
五:详解匹配标准
1.通用匹配:源地址目标地址的匹配
&-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个&!&表示除了哪个IP之外
&-d:表示匹配目标地址
&-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
&-i eth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
&-o eth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上
2.扩展匹配
2.1隐含扩展:对协议的扩展
& & -p tcp :TCP协议的扩展。一般有三种扩展
--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21 &或者 --dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
& &&对于它,一般要跟两个参数:
1.检查的标志位
2.必须为1的标志位
--tcpflags syn,ack,fin,rst syn & = & &--syn
表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
& & -p udp:UDP协议的扩展
& & & & --dport
& & & & --sport
& & -p icmp:icmp数据报文的扩展
& & & & --icmp-type:
echo-request(请求回显),一般用8 来表示
所以 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)一般用0来表示
& & & & & & & & &&
2.2显式扩展(-m)
& & &扩展各种模块
& & & -m multiport:表示启用多端口扩展
& & & 之后我们就可以启用比如 --dports 21,23,80
& & & & & & & & &&
六:详解-j ACTION
&常用的ACTION:
&DROP:悄悄丢弃
一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
&REJECT:明示拒绝
&ACCEPT:接受
custom_chain:转向一个自定义的链
&MASQUERADE:源地址伪装
&REDIRECT:重定向:主要用于实现端口重定向
&MARK:打防火墙标记的
&RETURN:返回
在自定义链执行完毕后使用返回,来返回原规则链。
& & &只要是来自于172.16.0.0/16网段的都允许访问我本机的172.16.100.1的SSHD服务
& & &分析:首先肯定是在允许表中定义的。因为不需要做NAT地址转换之类的,然后查看我们SSHD服务,在22号端口上,处理机制是接受,对于这个表,需要有一来一回两个规则,如果我们允许也好,拒绝也好,对于访问本机服务,我们最好是定义在INPUT链上,而OUTPUT再予以定义就好。(会话的初始端先定义),所以加规则就是:
& & &定义进来的: iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT
& & &定义出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
& & &将默认策略改成DROP:
&&iptables -P INPUT DROP
&&iptables -P OUTPUT DROP
&&iptables -P FORWARD DROP
七:状态检测:
是一种显式扩展,用于检测会话之间的连接关系的,有了检测我们可以实现会话间功能的扩展
& & & & 什么是状态检测?对于整个TCP协议来讲,它是一个有连接的协议,三次握手中,第一次握手,我们就叫NEW连接,而从第二次握手以后的,ack都为1,这是正常的数据传输,和tcp的第二次第三次握手,叫做已建立的连接(ESTABLISHED),还有一种状态,比较诡异的,比如:SYN=1 ACK=1 RST=1,对于这种我们无法识别的,我们都称之为INVALID无法识别的。还有第四种,FTP这种古老的拥有的特征,每个端口都是独立的,21号和20号端口都是一去一回,他们之间是有关系的,这种关系我们称之为RELATED。
所以我们的状态一共有四种:
& & & & NEW
& & & & ESTABLISHED
& & & & RELATED
& & & & INVALID
所以我们对于刚才的练习题,可以增加状态检测。比如进来的只允许状态为NEW和ESTABLISHED的进来,出去只允许ESTABLISHED的状态出去,这就可以将比较常见的反弹式木马有很好的控制机制。
对于练习题的扩展:
进来的拒绝出去的允许,进来的只允许ESTABLISHED进来,出去只允许ESTABLISHED出去。默认规则都使用拒绝
iptables -L -n --line-number &:查看之前的规则位于第几行
& & 改写INPUT
& & & & iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
& & & & iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT
& & 此时如果想再放行一个80端口如何放行呢?
& & & & iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
& & & & iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j ACCEPT
假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?
分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来
在出去的端口上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
在进来的端口上:iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
小扩展:对于127.0.0.1比较特殊,我们需要明确定义它
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
八:SNAT和DNAT的实现
由于我们现在IP地址十分紧俏,已经分配完了,这就导致我们必须要进行地址转换,来节约我们仅剩的一点IP资源。那么通过iptables如何实现NAT的地址转换呢?
1.SNAT基于原地址的转换
基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能。
所以我们在iptables中就要定义到底如何转换:
定义的样式:
比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1
这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.
那么,如果172.16.100.1不是固定的怎么办?
我们都知道当我们使用联通或者电信上网的时候,一般它都会在每次你开机的时候随机生成一个外网的IP,意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):它可以实现自动寻找到外网地址,而自动将其改为正确的外网地址。所以,我们就需要这样设置:
& & & & &iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
& & & & &这里要注意:地址伪装并不适用于所有的地方。
2.DNAT目标地址转换
对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上。
& & 如何做目标地址转换呢?:
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2
& & & & 目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上
九:控制规则的存放以及开启
注意:你所定义的所有内容,当你重启的时候都会失效,要想我们能够生效,需要使用一个命令将它保存起来
1.service iptables save 命令
它会保存在/etc/sysconfig/iptables这个文件中
& & 2.iptables-save 命令
iptables-save & /etc/sysconfig/iptables
& & 3.iptables-restore 命令
开机的时候,它会自动加载/etc/sysconfig/iptabels
如果开机不能加载或者没有加载,而你想让一个自己写的配置文件(假设为iptables.2)手动生效的话:
iptables-restore & /etc/sysconfig/iptables.2
则完成了将iptables中定义的规则手动生效
& & & & &Iptables是一个非常重要的工具,它是每一个防火墙上几乎必备的设置,也是我们在做大型网络的时候,为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解,同时,我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候,尽量能结合着各种各样的项目,实验来完成,这样对你加深iptables的配置,以及各种技巧有非常大的帮助。
附加iptables比较好的文章:
转载来自 :&http://blog.chinaunix.net/uid--id-3279216.html
可参考书籍 :&Linux Network Administrator's Guide, 2nd Edition.
阅读(...) 评论()

我要回帖

更多关于 股票xr开头是什么意思 的文章

 

随机推荐