原文网址:http://os.51cto.com/art/201103/249049.htm

iptables启动关闭:

1.启动和关闭iptables

下面将正式使用iptables来创建防火墙。启动和关闭iptables的方法取决于所使用的Linux发行版,可以先查看所使用Linux版本的文档。

一般情况下,iptables已经包含在Linux发行版中,运行iptables --version来查看系统是否安装了iptables。在Red Hat 9.0中,安装的版本是iptables v1.2.7a。如果系统没有安装iptables,则可以从netfilter官网下载。

2.查看规则集

上面仅对iptables的用法做了一个简单介绍,使用中可以运行man iptables来查看所有命令和选项的完整介绍,或者运行iptables -help来查看一个快速帮助。要查看系统中现有的iptables规划集,可以运行以下命令:

  1. iptables --list

下面是没有定义规划时iptables的样子:

  1. Chain INPUT (policy ACCEPT)
  2. target prot opt source destination
  3. Chain FORWARD (policy ACCEPT)
  4. target prot opt source destination
  5. Chain OUTPUT (policy ACCEPT)
  6. target prot opt source destination

如上例所示,每一个数据包都要通过三个内建的链(INPUT、OUTPUT和FORWARD)中的一个。

filter是最常用的表,在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包,不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。

图1 Red Hat 9.0中安全设置的GUI工具

在Red Hat 9.0中,提供一个GUI程序来让用户对系统的安装级别进行简单的配置。该工具的启动方法是:主选单→系统设置→安全工具(如图1所示)。在此将安全级别 设为“高级”,并选择使用默认的防火墙规则。点击确定后,再用iptables -list显示,发现iptables与没有定义规则前已经有很大不同,如下所示:

 

  1.  [root@workstation root]# iptables --list
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. RH-Lokkit-0-50-INPUT all -- anywhere anywhere
  5. Chain FORWARD (policy ACCEPT)
  6. target prot opt source destination
  7. RH-Lokkit-0-50-INPUT all -- anywhere anywhere
  8. Chain OUTPUT (policy ACCEPT)
  9. target prot opt source destination
  10. ......

现实中一般不使用这个GUI工具,因为它的功能有限,也不够透明。相比较而言,SuSE 9.0中相应的配置工具要好得多,它可以在GUI下对防火墙进行更加细化的配置(比如增加了IP转发和伪装等功能的配置)。尽管这样,一般还是自己来增加和删除规则。

图2 SuSE 9.0中YaST配置工具中的防火墙设置

3.增加规则

本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:

  1. # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP

也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令稍有不同:

  1. # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP

注意这里的A选项,如前所述,使用它说明是给现有的链添加规则。

4.删除规则

网络上的恶意攻击者总是在变化的,因此需要不断改变IP。假设一个网上攻击者转移到新的IP地址,而其老的IP地址被分配给一些清白的用户,那么这时这些用户的数据包将无法通过你的网络。这种情况下,可以使用带-D选项的命令来删除现有的规则:

  1. # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP

5.缺省的策略

创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人,最基本的原则是“先拒绝所有的数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:

  1. # iptables -P INPUT DROP
  2. # iptables -P FORWARD DROP
  3. # iptables -P OUTPUT ACCEPT

这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。很多时候需要接收外部信息,则可使用以下命令:

  1. # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT

6.SYN的使用

不能关闭所有端口,也不能只指定某些端口处于打开状态,那么怎样才能设置一个有效的规则,既可以允许普通用户正常通过,又可以阻止恶意攻击者访问网络呢?

刚开始使用iptables的人可以充分利用syn标识来阻止那些未经授权的访问。iptables只检测数据包的报头,事实上,除 iptables以外,很多其它有用的数据包分析都是基于报头的。比如,在进行Web冲浪时,一个请求从你的PC发送至其它地方的Web服务器上,该服务 器会响应请求并发回一个数据包,同时得到你系统上的一个临时端口。与响应请求不同的是,服务器并不关心所传送的内容。可以利用这种特点来设置规则,让它阻 止所有没有经过你系统授权的TCP连接:

  1. # iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP

这里的-i指的是网卡,-p则是指协议,--syn则表示带有syn标识设置的TCP数据包。SYN用于初始化一个TCP连接,如果自己机器上没有运行任何服务器,别人也就不会向你发送SYN数据包。

7.有状态的数据包的检测

前边的例子把每一个数据包看成是独立的,而不是相互关联的,依靠的是数据包的头信息。iptables会检查数据包的源和目的IP地址、源和目的端 口、流入数据包的顺序号、TCP先后顺序的信息及头标记(SYN、ACK、FIN、RST等)的状态,即它会跟踪整个连接会话,从而使整个过滤过程是相互 关联的。

8.共享一个Internet连接

网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接,这个局域网可以是Linux和Windows系统组成的多系统局域网。假 设现在有一台机器,配有两个网卡,其中eth0为“公共”网卡,eth1为“私有”网卡,即eth0被分配了一个静态的、可路由的IP地址,而eth1被 分配了一个私有的、不能路由的IP,该IP是属于该局域网子网的。要实现上述功能,需要向nat和filter表中添加一些链:

  1. # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  2. # iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
  3. # iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT

这显示了有状态的数据包检测的价值。请注意,这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许,而所有来自局域网内流向外的数据包则都允许通过。第一条规则让所有流出的信息看起来都是来自防火墙机器的,而并不会显示出防火墙后面还有一个局域网。

下面的命令为FORWARD和POSTROUTING链设置缺省的策略,在使用伪装时,有一个缺省的POSTROUTING DROP策略非常重要,否则就可能有心怀恶意的用户突破网关后伪装自己的身份。

  1. # iptables -t filter -P FORWARD DROP
  2. # iptables -t nat -P POSTROUTING DROP

下面的命令为拨号连接设置,它可以动态地分配IP地址:

  1. # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

9.运行服务器时的情况

有时也会把服务器放置在防火墙后面,这时iptables就需要知道从哪儿通过数据包,设置如下所示:

  1. # iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80
  2. # iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25

10.规则的保存

到现在为止,所有的例子都是在命令行中进行的。在测试新的规则时,这是一种很好的方式,但一旦测试结果令人满意,就可以将它们保存为脚本。可以使用 iptables-save 命令来实现:

  1. $ iptables-save > iptables-script

信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统,都可以使用iptables-restore命令将规则集从该脚本文件恢复到信息包过滤表。恢复命令如下所示:

  1. $ iptables-restore iptables-script

如果愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化Shell脚本中。

下面的例子并不是一个完整的脚本,它只是描述了如何使用变量及提供了一些附加的规则样例。

    1. #!/bin/sh

      #为变量赋值

      IPTABLES=/sbin/iptables

      LAN_NET="192.168.1.0/24"

      IFACE= "eth0"

      LO_IFACE="lo"

      LO_IP="127.0.0.1"

      #加载所需的内核

      /sbin/modprobe ip_conntrack

      /sbin/modprobe iptable_nat

      #缺省情况下,IP转发都处于不可用状态,将其设置为可用状态:

      echo "1" > /proc/sys/net/ipv4/ip_forward

      #使IP的动态分配功能可用

      echo "1" > /proc/sys/net/ipv4/ip_dynaddr

      #每次重启这个脚本时,最好清除以前所设的规则

      $IPTABLES -P INPUT DROP

      $IPTABLES -F INPUT

      $IPTABLES -P OUTPUT ACCEPT

      $IPTABLES -F OUTPUT

      $IPTABLES -P FORWARD DROP

      $IPTABLES -F FORWARD

      $IPTABLES -F -t nat

      #只允许在LAN中使用SSH连接

      $IPTABLES -A INPUT -s LAN_NET -p tcp --destination-port ssh -j ACCEPT

      #允许loopback!

      $IPTABLES -A INPUT -i lo -p all -j ACCEPT

      $IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

      #丢弃那些流入的宣称是来自本地机器的数据包

      #丢弃那些流出的不是出自本地机的数据包

      $IPTABLES -A INPUT -i $IFACE -s $LAN_NET -j DROP

      $IPTABLES -A OUTPUT -o $IFACE -s ! $LAN_NET -j DROP

      #限制一些流出的信息

iptables的启动和关闭【转载】的更多相关文章

  1. 转载:Linux下启动和关闭Weblogic(管理服务器+被管服务器)

    转载自:http://www.cnblogs.com/nick-huang/p/3834134.html  感谢! Weblogic的管理服务器和被管服务器的启动.关闭,偶尔会用到,却又不常用,导致需 ...

  2. 转载:oracle RAC集群启动和关闭

    http://www.cnblogs.com/yhfssp/p/8184761.html oracle 11G RAC集群启动和关闭: 1.停止数据库 $srvctl stop database –d ...

  3. linux下启动和关闭weblogic(转载)

    在weblogic定义的域中可以找到如下命令: /[youHome]/domains/[yourDomain]/startWebLogic.sh /[youHome]/domains/[yourDom ...

  4. Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.

    背景: 测试部署NetCore 项目到linux 系统时,窗口显示项目部署成功:但是本机无法访问(linux 在虚拟机上[ centos 7.6] );  如下图↓ 能够相互ping  通,(Xshe ...

  5. C# 仿金山毒霸启动和关闭淡入淡出效果

    原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02   03 #region 私有方法 04 [DllImportAttribute("user32.dl ...

  6. oracle_深刻理解数据库的启动和关闭

    Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能. 一.启动和关闭Oracle数据库 对于大多数Oracle DBA来说,启动和 ...

  7. 监听Web容器启动与关闭

    在Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 要监听web ...

  8. centos 6 与 centos 7 服务开机启动、关闭设置的方法

    简单说明下 centos 6 与 centos 7 服务开机启动.关闭设置的方法: centos 6 :使用chkconfig命令即可. 我们以apache服务为例: #chkconfig --add ...

  9. Lunx下 怎样启动和关闭oracle数据库

    1.因为oracle运行在Linux系统下,首先,要连接Linux系统 2.切换到oracle安装用户下. 我的是 ora12. 3.运行oracle的环境变量, 以便输入相关命令. 4.进入orac ...

随机推荐

  1. api token

    具体实现如下: 1. api请求客户端想服务器端一次发送用用户认证信息(用户名和密码),服务器端请求到改请求后,验证用户信息是否正确. 如果正确:则返回一个唯一不重复的字符串(一般为UUID),然后在 ...

  2. linux下从源代码安装git的问题(install from source)

    安装环境:centos7.2 安装依赖包: yum install -y gcc .el7..x86_64 openssl-devel.x86_64 yum install -y curl.x86_6 ...

  3. window7 3G/4G拨号操作

    Win7系统Modem拨号操作指导:https://wenku.baidu.com/view/bb855b1dc77da26925c5b0e1.html 拨号上网设置APN,拨号号码,帐号和密码:ht ...

  4. volatile笔记

    总结自:https://www.cnblogs.com/dolphin0520/p/3920373.html 了解volatile之前得明白什么是原子性.可见性.有序性及指令重排序,详见:https: ...

  5. 使用concurrent.futures和ProcessPoolExecutor来替代线程和进程

    concurrent.futures和ProcessPoolExecutor这两个类实现的借口分别在不同的线程或进程中执行可调用的对象,这两个类在内部维护者一个工作线程或进程池,以及要执行的队列,这两 ...

  6. JAVAWeb学习总结(3)

    JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  7. Java 访问修饰符总结

    Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口. Java语言采用访问控制修饰符来封装类及类的方法和属性的访问权限,从而向使用者暴露接口.隐藏细节. Java访问控制分为 ...

  8. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...

  9. MongoDB快速入门(五)- Where子句

    RDBMS Where子句等效于MongoDB 查询文档在一些条件的基础上,可以使用下面的操作 操作 语法 示例 RDBMS等效语句 Equality {<key>:<value&g ...

  10. Ubuntu或Linux搭建网站环境常见问题详解

    本屌丝常见的问题已经全部记录如下,如大家有其他问题欢迎随时跟我进行交流. 1.无法进行软件源安装  提示信息:Package has no installation candidate 具体信息如下: ...