您的位置:首页 > 其它

iptables二层过滤机制详解

2011-07-07 14:45 369 查看
网上的访问通过tcp/ip封包来进入主机系统的。在linux中它一般要同过ip过滤机制来实现第一层防护,如果通过了这层防护还得通过下一关的检查,那就是TCP_Wrappers 的功能。

封包过滤( IP Filter ):

封包过滤是 linux 提供的第一道防火墙呦!但是不同的核心版本会有不一样的封包过滤机制!以 2.2.xx 为核心的 Linux 主要以 ipchains 作为过滤机制,至于目前新版的 2.4.xx 则以 iptables 为机制!OK!既然我们的 Red Hat 7.1, 7.2, 7.3 为 kernel 2.4.xx ,所以用 iptables 来进行 IP 抵挡的工作啦!那么由于 TCP 封包里头有 IP 及 port ,所以要抵挡来源 IP 或者是自身的 port ,自然就很容易来进行啦!您目前只要知道
iptables 可以经由 TCP 的封包表头资料来进行分析的工作(例如:符合规则的就通过,否则就把它丢弃,这样就防止不符合规则的人进入你的电脑)。

至于抵挡封包的工作则可以让 TCP_Wrappers 来进行

要常常去看 /var/log/messages 与 /var/log/secure 这两个档案!都是登陆记录等。

要做好主机的防护,第一步就是要建立完善的密码规则啦!因为这个东东常常是 cracker 尝试入侵的第一步!你必须要建立好主机的密码规则,可以尝试以 chattr 来将 /etc/passwd 及 /etc/shadow 做成不可变更的档案!较为安全啦!

做好安全的几个常见的工作

1.升级与修补套件漏洞、及移除危险套件:

2.每项系统服务的安全设定项目

3.TCP_Wrappers 的基础防火设定

4.iptables 的防火规则设定

5.主机资源侦测系统( MRTG )

6.登录档案分析系统:

iptables:

iptables 是 linux Kernel 2.4.xx 版本以上的主要 IP 过滤机制!他最大的功能就是可以过滤掉不要的 TCP 封包啦!当然功能还不止于此,他还可以用来进行 IP 伪装,以达成 NAT 的主机功能呢! iptables 的工作方向,必须要依规则的顺序来分析,底下我们简单的谈一谈 iptables 的几个概念吧:

有几个 tables :

跟之前版本的 ipchains 不同的地方是, iptables 可以自行定义一些 tables 的新规定!将可以让防火墙规则变的更为便于管理呢!基本上,原本的 iptable 至少有两个 table ,一个是 filter ( 预设的,没有填写 tables 时,就是 filter 这个 table 啦 ),一个则是相当重要的 nat table 。其中, filter 可以用来管理主机的安全,至于 nat 则是用来处理 NAT 的功能啦!

清除规则:

iptables 的订定方法其实很简单,就是使用指令列的方式来订定而已,他的基础语法在清除规则时,是这样的:

[root @test /root]# /sbin/iptables [-FXZ]

参数说明:

-F :清除所有的已订定的规则;

-X :杀掉所有使用者建立的 chain (应该说的是 tables )啰;

-Z :将所有的 chain 的计数与流量统计都归零

范例:

[root @test /root]# /sbin/iptables -F

[root @test /root]# /sbin/iptables -X

[root @test /root]# /sbin/iptables -Z

请注意,如果是在远程操作更改iptables规则的时候,最好把这3个指令写到一个脚本文件再由计划任务每隔10分钟执行一次,确保不会当规则不小心弄错时把所有用户和你都挡在门外!

 

定义政策( Policy ):

清除规则之后,再接下来就是要设定规则的政策啦!这个所谓的政策指的是『当你的封包不在你的规则之内时,则该封包的通过与否,以 Policy 的设定为准』,例如:你设定了十条规则,但有一个封包来的时候,这十条规则都不适用,这个时候此一封包就会依据 Policy 的规定为准,来决定是否可以通过防火墙啰。通常这个政策在 INPUT 方面可以定义的比较严格一点,而 FORWARD 与 OUTPUT 则可以订定的松一些!

[root @test /root]# /sbin/iptables [-t tables] [-P] [INPUT,OUTPUT,FORWARD| PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP]

参数说明:

-t   :定义 table !

tables :table 的名称,例如 nat 啰!

-P   :定义政策( Policy )。

INPUT :封包为输入主机的方向;

OUTPUT :封包为输出主机的方向;

FORWARD:封包为不进入主机而向外再传输出去的方向;

PREROUTING :在进入路由之前进行的工作;

OUTPUT   :封包为输出主机的方向;

POSTROUTING:在进入路由之后进行的工作。

范例:

[root @test /root]# /sbin/iptables -P INPUT ACCEPT

[root @test /root]# /sbin/iptables -P OUTPUT ACCEPT

[root @test /root]# /sbin/iptables -P FORWARD ACCEPT

[root @test /root]# /sbin/iptables -t nat -P PREROUTING ACCEPT

[root @test /root]# /sbin/iptables -t nat -P OUTPUT ACCEPT

[root @test /root]# /sbin/iptables -t nat -P POSTROUTING ACCEPT

将预设的政策都定义为接受啰!

 

增加、插入规则:

接下来则要定义规则啦!我们底下先完全以主机的角度来观察!可以这样来设定啦!

[root @test /root]# /sbin/iptables [-AI] [INPUT,OUTPUT,FORWARD] [-io interface] [-p TCP,UDP] [-s IP/network] [--sport ports] [-d IP/network] [--dport ports] -j [ACCEPT,DROP]

参数说明:

-A   :新增加一条规则,该规则增加在最后面一行;

-I   :在第一条规则加入;

INPUT :封包为输入主机的方向;

OUTPUT :封包为输出主机的方向;

FORWARD:封包为不进入主机而向外再传输出去的方向;

-i    :流入的网卡接口

-o    :流出的网卡接口

interface :网络卡接口,例如 ppp0, eth0, eth1....

-p :请注意,这是小写呦!封包的协议啦!

TCP :封包为 TCP 协议的封包;

UDP :封包为 UDP 协议的封包;

-s :来源封包的 IP 或者是 Network ( 网域 );

--sport:来源封包的 port 号码;

-d :目标主机的 IP 或者是 Network ( 网域 );

--dport:目标主机的 port 号码;

-j   :动作,可以接底下的动作;

ACCEPT :接受该封包

DROP  :丢弃封包

REJECT :退回封包

范例:

[root @test /root]# /sbin/iptables -A INPUT -i lo -j ACCEPT

所有的来自 lo 这个接口的封包,都予以接受

[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.0.1 -j ACCEPT

来自 192.168.0.1 这个 IP 的封包都予以接受

[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.1.0/24 -j ACCEPT

来自 192.168.1.0 这个 C Class 的网域的任何一部计算机,就予以接受!

[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.1.25 -j DROP

来自 192.168.1.25 的 IP 的封包,就直接全部给他丢弃!

[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP --dport 21 -j DROP

只要想要进来 21 这个 port 的封包,就把他丢弃!

[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.0.24 --dport 22 -j ACCEPT

来自 192.168.0.24 的主机,想要到我的 port 22 时,就予以接受!

请注意:防火墙的规则是『一行一行依序来检查的,若符合任何一条规则,则予以动作(接受或丢弃),否则继续往下检查到最后一条』上

TCP_Wrappers:

这个 TCP_Wrappers 实在是很简单的一个设定工作,因为他只要设定 /etc/hosts.allow 及 /etc/hosts.deny 就可以啦!基本上,他是经由 /usr/sbin/tcpd 这个程序来进行 TCP 的检验工作!而检验的方式则是以 /etc/hosts.allow 及 /etc/hosts.deny 来设定的啦!检验的流程是先以 /etc/hosts.allow 这个档案,检验完之后,在到 /etc/hosts.deny 去搜寻!好了,那么 hosts.allow 要怎样设定呢?

<服务名称> : :

特别注意, network 可以使用 192.168.0.0/255.255.255.0 ,但不可使用 192.168.0.0/24 !

[root @test /root]# vi /etc/hosts.allow

in.telnetd: 127.0.0.1 : allow

in.ftpd: 127.0.0.1 : allow

本机的 127.0.0.1 开放 telnet 及 ftp 哩!

[root @test /root]# vi /etc/hosts.deny

in.telnetd: 192.168.2.3 : deny

将 192.168.2.3 的 telnet 服务关掉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: