`
notfatboy
  • 浏览: 237514 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux iptables入门

 
阅读更多

本文有很大部分是节选自网友liweioop的一篇文章,在此表示感谢.

在学习iptables之前,我觉得很有必要弄清楚几个概念,否则的话就很难下手。首先我们要知道iptables是集成在系统内核中的防火墙,哇塞,这可是在内核中,不是我们通常在Windows下用的那种普通应用程序。

我们一般通过iptables命令来配置我们的iptable防火墙。通常的命令格式如下:

iptables [-t table] command [chain] [match][target]

e.g. iptables -t filter -A INPUT  -p tcp --sport 80 -j ACCEPT

                      |-table-|-command-|-------match--------|---target---|
 

iptables有以下几个名词需要搞懂:table, chain and target

table: 系统有一些默认的tables,也可以自己定义table。系统自带的tables包括filter, nat, mangle and raw。每个 table包含了一些系统自带的chains或者用户自建的chains。通常系统默认使用filter,这也是最常用的表。这个表中包含了INPUT, FORWARD and  OUTPUT chains。

chain:实际上就是表明是什么数据量(尤指是什么方向的),如INPUT chain实际上就是指从其他机器发往本机的数据。

target:target指的是要做什么操作。系统定义的target有ACCEPT, DROP, QUEUE and RETURN.另外还有一些扩展target,这些targets包括CHECKSUM, CLASSIFY, CLUSTERIP, LOG, REJECT 等等很多,具体大家可以在man中查看下。我觉得目前最常用的是ACCEPT, DROP和REJECT。DROP和REJECT的区别就是DROP直接丢包,而REJECT会返回一个错误数据。

 

命令行中的command实际上是要告诉程序做什么操作。如:

-A chain rule-specification 这个就是告诉程序要在指定的chain上加规则。

-F chain 是清除指定chain的规则。

 

下面主要节选自网友liweioop的文章,但是略有改动,原因是脚本中某些语句在我的Ubuntu上无法成功运行。

2、初始化工作

在shell提示符 # 下打入

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

以上每一个命令都有它确切的含义。一般设置你的iptables之前,首先要清除所有以前设置的规则,我们就把它叫做初始化好了。虽然很多情况下它什么也不做,但是保险起见,不妨小心一点吧! 如果你用的是redhat 或fedora,那么你有更简单的办法

service iptables stop



3、开始设置规则:

接下下开始设置你的规则了

iptables -P INPUT DROP

这一条命令将会为你构建一个非常“安全”的防火墙,我很难想象有哪个hacker能攻破这样的机器,因为它将所有从网络进入你机器的数据丢弃(drop)了。这当然是安全过头了,此时你的机器将相当于没有网络。如果你ping localhost,你就会发现屏幕一直停在那里,因为ping收不到任何回应。


4 、添加规则

接着上文继续输入命令:

iptables -A INPUT -i ! ppp0 -j ACCEPT

这条规则的意思是:接受所有的,来源不是网络接口ppp0的数据。

我们假设你有两个网络接口,eth0连接局域网,loop是回环网(localhost)。ppp0是一般的adsl上网的internet网络接口,如果你不是这种上网方式,那则有可能是eth1。在此我假设你是adsl上网,你的internet接口是ppp0

此时你即允许了局域网的访问,你也可以访问localhost

此时再输入命令 ping localhost,结果还会和刚才一样吗?

到此我们还不能访问www,也不能mail,接着看吧。



5、我想访问www

iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT

允许来自网络接口ppp0(internet接口),并且来源端口是80的数据进入你的计算机。
80端口正是www服务所使用的端口。

好了,现在可以看网页了。但是,你能看到吗?


如果你在浏览器的地址中输入www.baidu.com,能看到网页吗?

你得到的结果一定是:找不到主机www.baidu.com

但是,如果你再输入220.181.27.5,你仍然能够访问baidu的网页。

为什么?如果你了解dns的话就一定知道原因了。

因为如果你打入www.baidu.com,你的电脑无法取得www.baidu.com这个名称所能应的ip地址220.181.27.5。如果你确实记得这个ip,那么你仍然能够访问www,你当然可以只用ip来访问www,如果你想挑战你的记忆的话^ _ ^,当然,我们要打开DNS。


6、打开dns端口

打开你的dns端口,输入如下命令:

iptables -A INPUT -i ppp0 -p udp -sport 53 -j ACCEPT

这条命令的含义是,接受所有来自网络接口ppp0,upd协议的53端口的数据。53也就是著名的dns端口。

此时测试一下,你能通过主机名称访问www吗?你能通过ip访问www吗?

当然,都可以!



7、查看防火墙

 此时可以查看你的防火墙了

iptables -L

 如果你只想访问www,那么就可以到此为止,你将只能访问www了。 不过先别急,将上面讲的内容总结一下,写成一个脚本。



#!/bin/bash

# This is a script

# Edit by liwei

# establish static firewall

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --sport 53 -j ACCEPT



8、复杂吗?到此iptables可以按你的要求进行包过滤了。你可以再设定一些端口,允许你的机器访问这些端口。这样有可能,你不能访问QQ,也可能不能打网络游戏,是好是坏,还是要看你自己而定了。顺便说一下,QQ这个东西还真是不好控制,用户与服务器连接使用的好像是8888端口,而QQ上好友互发消息使用的又是udp的4444端口(具体是不是4444还不太清楚)。而且QQ还可以使用www的80端口进行登录并发消息,看来学无止境,你真的想把这个家伙控制住还不容易呢?还是进入我们的正题吧。

如果你的机器是服务器,怎么办?


9、如果不巧你的机器是服务器,并且要提供www服务。显然,以上的脚本就不能符合我们的要求了。但只要你撑握了规则,稍作修改同样也能很好的工作。在最后面加上一句

iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT

这一句也就是将自己机器上的80端口对外开放了,这样internet上的其他人就能访问你的www了。当然,你的www服务器得工作才行。如果你的机器同时是smtp和pop3服务器,同样的再加上两条语句,将--dport后面的80改成25和110就行了。如果你还有一个ftp服务器,呵呵,如果你要打开100个端口呢……

我们的工作好像是重复性的打入类似的语句,你可能自己也想到了,我可以用一个循环语句来完成,对,此处可以有效的利用shell脚本的功能,也让你体验到了shell脚本语言的威力。看下文:


10、用脚本简化你的工作,阅读下面的脚本

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall



# define const here

Open_ports="80 25 110 10" # 自己机器对外开放的端口

Allow_ports="53 80 20 21" # internet的数据可以进入自己机器的端口



#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP #we can use another method to instead it

iptables -A INPUT -i ! ppp0 -j ACCEPT



# define ruler so that some data can come in.

for Port in $Allow_ports ; do

iptables -A INPUT -i ppp0 -p tcp --sport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --sport $Port -j ACCEPT

done

for Port in $Open_ports ; do

iptables -A INPUT -i ppp0 -p tcp --dport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp --dport $Port -j ACCEPT

done



这个脚本有三个部分(最前面的一段是注释,不算在这三部分中)

第一部分是定义一些端口:访问你的机器"Open_ports"端口的数据,允许进入;来源是"Allow_ports"端口的数据,也能够进入。

第二部分是iptables的初始化,第三部分是对定义的端口具体的操作。

如果以后我们的要求发生了一些变化,比如,你给自己的机器加上了一个ftp服务器,那么只要在第一部分"Open_ports"的定义中,将ftp对应的20与21端口加上去就行了。呵呵,到此你也一定体会到了脚本功能的强大的伸缩性,但脚本的能力还远不止这些呢!



11、使你的防火墙更加完善

看上面的脚本init部分的倒数第二句

iptables -P INPUT DROP

这是给防火墙设置默认规则。当进入我们计算机的数据,不匹配我们的任何一个条件时,那么就由默认规则来处理这个数据----drop掉,不给发送方任何应答。

也就是说,如果你从internet另外的一台计算机上ping你的主机的话,ping会一直停在那里,没有回应。

如果黑客用namp工具对你的电脑进行端口扫描,那么它会提示黑客,你的计算机处于防火墙的保护之中。我可不想让黑客对我的计算机了解太多,怎么办,如果我们把drop改成其他的动作,或许能够骗过这位刚出道的黑客呢。

怎么改呢?将刚才的那一句( iptables -P INPUT DROP )去掉,在脚本的最后面加上

iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset

iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

这样就好多了,黑客虽然能扫描出我们所开放的端口,但是他却很难知道,我们的机器处在防火墙的保护之中。如果你只运行了ftp并且仅仅对局域网内部访问,他很难知道你是否运行了ftp。在此我们给不应该进入我们机器的数据,一个欺骗性的回答,而不是丢弃(drop)后就不再理会。这一个功能,在我们设计有状态的防火墙中(我这里讲的是静态的防火墙)特别有用。

你可以亲自操作一下,看一看修改前后用namp扫描得到的结果会有什么不同?



12、这个教程我想到此就结束了,其中有很多东西在这里没有提到,如ip伪装,端口转发,对数据包的记录功能。还有一个很重要的东西就是:iptables处理数据包的流程.在这里我想告诉你,你设置的过滤规则的顺序很重要,在此不宜详细介绍,因为这样一来,这个教程就会拘泥于细节。

iptables是复杂的,我在linuxsir上看过很多教程,它们往往多而全,反而让人望而生畏,希望我的这个教程,能够指导你入门。加油!

最后,我把完整的脚本写出来如下,你只要修改常量定义部分,就能表现出较大的伸缩性^_^

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall



# define const here

Open_ports="80 25 110 10" # 自己机器对外开放的端口

Allow_ports="53 80 20 21" # internet的数据可以进入自己机器的端口



#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

# The follow is comment , for make it better
# iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT



# define ruler so that some data can come in.

for Port in $Allow_ports ; do
ptables -A INPUT -i ppp0 -p tcp --sport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --sport $Port -j ACCEPT
done

for Port in $Open_ports ; do
iptables -A INPUT -i ppp0 -p tcp --dport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --dport $Port -j ACCEPT
done

# This is the last ruler , it can make you firewall better
iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable<!-- / message --><!-- sig -->

 

分享到:
评论

相关推荐

    Linux防火墙iptables入门教程

    几乎所有的Linux发行版都预装了iptables。在Ubuntu/Debian中更新/安装iptables的命令为: 代码如下:sudo apt-get install iptables现有的一些图形界面软件也可以替代iptables,如Firestarter。但iptables用起来并不...

    linux iptables 防火墙快速入门教程

    该演示ppt详细讲解了如何正确配置linux中iptables防火墙及附有一有实例讲解.让初学者更易掌握iptables的应用.

    LINUX防火墙iptables入门.docx

    Linux 防火墙iptables 入门 IPTABLES 是一个基于 Linux 的防火墙系统,它提供了一个灵活的防火墙解决方案,具有状态防火墙、规则控制、免费等优点。然而,它也存在一些缺点,如配置复杂、维护难。 IPTABLES 的功能...

    iptables 入门.doc

    iptables 入门.doc 这一节开始说明 iptables 的观念及用法 iptables 中的指令,均需区分大小写。 ipchains 和 iptables 在语法上的主要的差异,注意如下

    Linux从入门到精通(第2版)PPT-刘忆智课件

    本课件“Linux从入门到精通(第2版)PPT-刘忆智”旨在帮助初学者深入理解Linux系统,掌握其核心概念、基本操作和高级应用。以下是基于该课程内容可能涵盖的一些主要知识点: 1. **Linux历史与哲学**:了解Linux的起源...

    linux从入门到精通

    这本书“Linux从入门到精通”旨在帮助初学者快速掌握Linux的基础知识,并逐步深入到高级应用。让我们一起探索这个PDF电子书中可能涵盖的关键知识点。 1. **Linux起源与历史**:Linux的诞生源于1991年芬兰大学生...

    Linux从入门到精通.rar

    "Linux从入门到精通"这个资源显然是为了帮助初学者掌握这一强大的操作系统而设计的。下面将详细介绍Linux的基础知识、核心概念以及进阶技能,这些都是学习Linux所必要的。 一、Linux基础 1. 文件系统:Linux采用的...

    清华:linux从入门到精通

    11. **防火墙与安全**:介绍iptables防火墙规则,以及如何保护Linux系统的安全性。 12. **远程访问与服务器**:讲解SSH服务,以及如何设置和管理HTTP、FTP等服务器。 通过以上知识点的学习,读者将能够对Linux有...

    Linux从入门到精通

    ### Linux从入门到精通 #### 一、Linux简介与历史 - **定义**: Linux是一种免费使用的类UNIX操作系统,它最初由芬兰人林纳斯·托瓦兹(Linus Torvalds)于1991年开发。 - **发展历史**: 1991年,林纳斯在互联网上...

    《Linux从入门到精通》电子书CHM格式

    《Linux从入门到精通》是一本专为初学者设计的Linux教材,旨在帮助读者系统地理解和掌握Linux操作系统的基础知识及高级应用。这本书采用CHM( Compiled HTML Help)格式,是一种常见的电子书格式,便于读者在电脑上...

    LINUX从入门到精通教学.rar

    "LINUX从入门到精通教学.rar"这个压缩包文件显然旨在帮助初学者掌握Linux的基础知识和操作技巧。以下是一些主要的学习点: 1. **Linux简介**:Linux是一种自由和开放源码的操作系统,其内核由林纳斯·托瓦兹创建。...

    linux系统入门笔记

    Linux系统入门笔记主要涵盖Linux操作系统的基础知识,包括安装、常用命令、文件系统管理、用户权限、进程控制、网络配置等方面。下面将详细讲解这些知识点。 首先,Linux是一种免费且开源的操作系统,它基于Unix,...

    Linux从入门到精通 PDF资料 (个人觉得讲的非常好很全面)

    这份"Linux从入门到精通"的PDF资料,旨在帮助初学者系统地掌握Linux的基础知识,并逐步提升到高级应用水平。以下是对这份资料可能包含的一些核心知识点的详细说明: 1. **Linux历史与哲学**:首先会介绍Linux的起源...

    2005详细介绍Linux从入门到精通.rar_html_linux从入门到精通

    "Linux从入门到精通"这个主题涵盖了从安装Linux系统、理解基本命令行操作到高级系统管理的所有知识。在Red Hat方面,它是全球领先的开源解决方案提供商,其Red Hat Enterprise Linux(RHEL)是企业级服务器市场中的...

    linux入门教程PDF

    13. **安全与防火墙**:理解Linux的安全模型,如权限控制、SELinux、防火墙(`iptables`)等。 14. **远程访问与协作**:学会使用SSH进行远程登录,以及使用版本控制系统如Git进行协作开发。 15. **故障排查与资源...

    linux入门教程 linux入门教程

    12. **安全与防火墙**:了解Linux的安全机制,如sudo、chmod、chown,以及防火墙iptables的配置。 13. **远程访问与SSH**:掌握通过SSH进行远程登录和文件传输的方法,理解端口转发和密钥对认证。 14. **版本控制...

Global site tag (gtag.js) - Google Analytics