Chinaunix首页 | 论坛 | 博客
  • 博客访问: 790355
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: LINUX

2015-02-27 17:25:46

       iptables 是linux下一款强大的防火墙,在不考虑效率的情况下,功能强大到足可以替代大多数硬件防火墙,但是强大的防火墙如果应用 不当,可能挡住的可不光是那些潜在的攻击,还有可能是你自己哦。这个带来的危害对于普通的个人PC来说可能无关紧要,但是想象一下,如果这是一台服务器, 一旦发生这样的情况,不光是影院正常的服务,还需要到现场去恢复,这会给你带来多少损失呢?

  所以我想说的是,当你敲入每一个iptables 相关命令的时候都要万分小心。

  1.应用每一个规则到 DROP target时,都要仔细检查规则,应用之前要考虑他给你带来的影响。

  2.在redhat中我们可以使用service iptables stop来关闭防火墙,但是在有些版本如ubuntu中这个命令却不起作 用,大家可能在网上搜索到不少文章告诉你用iptables -F这个命令来关闭防火墙,但是使用这个命令前,千万记得用iptables -L查看一下 你的系统中所有链的默认target,iptables -F这个命令只是清除所有规则,只不会真正关闭iptables.想象一下,如果你的链默认 target是DROP,本来你有规则来允许一些特定的端口,但一旦应用iptables -L ,清除了所有规则以后,默认的target就会阻止任何 访问,当然包括远程ssh管理服务器的你。

  所以我建议的关闭防火墙命令是

  iptables -P INPUT ACCEPT

  iptables -P FORWARD ACCEPT

  iptables -P OUTPUT ACCEPT

  iptables -F

  总之,当你要在你的服务器上做任何变更时,最好有一个测试环境做过充分的测试再应用到你的服务器。除此之外,要用好iptables,那就要理 解iptables的运行原理,知道对于每一个数据包iptables是怎么样来处理的。这样才能准确地书写规则,避免带来不必要的麻烦。

基础知识

Linux系统内核内建了netfilter防火墙机制。Netfilter(数据包过滤机制),所谓的数据包过滤,就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决该连接为放行或阻挡的机制。Netfilter提供了iptables这个程序来作为防火墙数据包过滤的命令。Netfilter是内建的,效率非常高。

我们可以通过iptables命令来设置netfilter的过滤机制。

iptables里有3张表:

> Filter(过滤器),进入Linux本机的数据包有关,是默认的表。
> NAT(地址转换),与Linux本机无关,主要与Linux主机后的局域网内计算机相关。
> Mangle(破坏者),这个表格主要是与特殊的数据包的路由标志有关(通常不用涉及到这个表的修改,对这个表的修改破坏性很大,慎改之)。

每张表里都还有多条链:

Filter:INPUT, OUTPUT, FORWARD
NAT:PREROUTING, POSTROUTING, OUTPUT
Mangle:PREROUTING, OUTPUT, INPUT, FORWARD

当一个数据包转给Netfilter后,Netfilter会按上面的流程依次比对每一张表。如果数据包符合表中所述,则进行相应的处理。

iptables命令的使用

基本格式:iptables [-t table] -CMD chain CRETIRIA -j ACTION

-t table:3张表中的其中一种filter, nat, mangle,如果没有指定,默认是filter。
CMD:操作命令。查看、添加、替换、删除等。
chain:链。指定是对表中的哪条链进行操作,如filter表中的INPUT链。
CRETIRIA:匹配模式。对要过滤的数据包进行描述
ACTION:操作。接受、拒绝、丢弃等。


从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙

(1) 重启后永久性生效:

  开启:chkconfig iptables on

  关闭:chkconfig iptables off 
       禁止防火墙在系统启动时启动 /sbin/chkconfig --level 2345 iptables off 

(2) 即时生效,重启后失效:
       service 方式

  开启:service iptables start

  关闭:service iptables stop

  需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
       iptables方式
       查看防火墙状态:
       /etc/init.d/iptables status
       暂时关闭防火墙:
       /etc/init.d/iptables stop
       重启iptables:
       /etc/init.d/iptables restart

(3)在开启了防火墙时,做如下设置,开启相关端口
       方式1:

  修改/etc/sysconfig/iptables 文件,在系统原始配置的:RH-Firewall-1-INPUT规则链增加类似这样的行, 添加以下内容:

  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
       如果发现原有-j REJECT一类的语句,上面两句要放在它的前面
       方式2:
       执行命令
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

       -I 链名 [规则号码] 插入一条规则

       --dport 目的端口

       -p 协议

       -j ACCEPT 允许封包通过而不拦截
       -j DROP 不允许封包通过

(4)最后:

  在根用户下输入setup,进入一个图形界面,选择Firewall configuration,进入下一界面,选择Security Level为Disabled,保存。重启即可。

  ======================================================

  fedora下

  /etc/init.d/iptables stop

  =======================================================

  ubuntu下:

  由于UBUNTU没有相关的直接命令

  请用如下命令

  iptables -P INPUT ACCEPT

  iptables -P OUTPUT ACCEPT

  暂时开放所有端口

  Ubuntu上没有关闭iptables的命令

  =======================================================


参考:http://my.oschina.net/hevakelcj/blog/313212#OSC_h2_2



阅读(745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~