iptables的启动和关闭【转载】
原文网址: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规划集,可以运行以下命令:
- iptables --list
下面是没有定义规划时iptables的样子:
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- 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与没有定义规则前已经有很大不同,如下所示:
- [root@workstation root]# iptables --list
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- RH-Lokkit-0-50-INPUT all -- anywhere anywhere
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- RH-Lokkit-0-50-INPUT all -- anywhere anywhere
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- ......
现实中一般不使用这个GUI工具,因为它的功能有限,也不够透明。相比较而言,SuSE 9.0中相应的配置工具要好得多,它可以在GUI下对防火墙进行更加细化的配置(比如增加了IP转发和伪装等功能的配置)。尽管这样,一般还是自己来增加和删除规则。
图2 SuSE 9.0中YaST配置工具中的防火墙设置
3.增加规则
本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:
- # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP
也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令稍有不同:
- # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
注意这里的A选项,如前所述,使用它说明是给现有的链添加规则。
4.删除规则
网络上的恶意攻击者总是在变化的,因此需要不断改变IP。假设一个网上攻击者转移到新的IP地址,而其老的IP地址被分配给一些清白的用户,那么这时这些用户的数据包将无法通过你的网络。这种情况下,可以使用带-D选项的命令来删除现有的规则:
- # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
5.缺省的策略
创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人,最基本的原则是“先拒绝所有的数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:
- # iptables -P INPUT DROP
- # iptables -P FORWARD DROP
- # iptables -P OUTPUT ACCEPT
这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。很多时候需要接收外部信息,则可使用以下命令:
- # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
6.SYN的使用
不能关闭所有端口,也不能只指定某些端口处于打开状态,那么怎样才能设置一个有效的规则,既可以允许普通用户正常通过,又可以阻止恶意攻击者访问网络呢?
刚开始使用iptables的人可以充分利用syn标识来阻止那些未经授权的访问。iptables只检测数据包的报头,事实上,除 iptables以外,很多其它有用的数据包分析都是基于报头的。比如,在进行Web冲浪时,一个请求从你的PC发送至其它地方的Web服务器上,该服务 器会响应请求并发回一个数据包,同时得到你系统上的一个临时端口。与响应请求不同的是,服务器并不关心所传送的内容。可以利用这种特点来设置规则,让它阻 止所有没有经过你系统授权的TCP连接:
- # 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表中添加一些链:
- # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- # iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- # iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
这显示了有状态的数据包检测的价值。请注意,这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许,而所有来自局域网内流向外的数据包则都允许通过。第一条规则让所有流出的信息看起来都是来自防火墙机器的,而并不会显示出防火墙后面还有一个局域网。
下面的命令为FORWARD和POSTROUTING链设置缺省的策略,在使用伪装时,有一个缺省的POSTROUTING DROP策略非常重要,否则就可能有心怀恶意的用户突破网关后伪装自己的身份。
- # iptables -t filter -P FORWARD DROP
- # iptables -t nat -P POSTROUTING DROP
下面的命令为拨号连接设置,它可以动态地分配IP地址:
- # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
9.运行服务器时的情况
有时也会把服务器放置在防火墙后面,这时iptables就需要知道从哪儿通过数据包,设置如下所示:
- # iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80
- # iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25
10.规则的保存
到现在为止,所有的例子都是在命令行中进行的。在测试新的规则时,这是一种很好的方式,但一旦测试结果令人满意,就可以将它们保存为脚本。可以使用 iptables-save 命令来实现:
- $ iptables-save > iptables-script
信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统,都可以使用iptables-restore命令将规则集从该脚本文件恢复到信息包过滤表。恢复命令如下所示:
- $ iptables-restore iptables-script
如果愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化Shell脚本中。
下面的例子并不是一个完整的脚本,它只是描述了如何使用变量及提供了一些附加的规则样例。
- #!/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的启动和关闭【转载】的更多相关文章
- 转载:Linux下启动和关闭Weblogic(管理服务器+被管服务器)
转载自:http://www.cnblogs.com/nick-huang/p/3834134.html 感谢! Weblogic的管理服务器和被管服务器的启动.关闭,偶尔会用到,却又不常用,导致需 ...
- 转载:oracle RAC集群启动和关闭
http://www.cnblogs.com/yhfssp/p/8184761.html oracle 11G RAC集群启动和关闭: 1.停止数据库 $srvctl stop database –d ...
- linux下启动和关闭weblogic(转载)
在weblogic定义的域中可以找到如下命令: /[youHome]/domains/[yourDomain]/startWebLogic.sh /[youHome]/domains/[yourDom ...
- Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.
背景: 测试部署NetCore 项目到linux 系统时,窗口显示项目部署成功:但是本机无法访问(linux 在虚拟机上[ centos 7.6] ); 如下图↓ 能够相互ping 通,(Xshe ...
- C# 仿金山毒霸启动和关闭淡入淡出效果
原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02 03 #region 私有方法 04 [DllImportAttribute("user32.dl ...
- oracle_深刻理解数据库的启动和关闭
Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能. 一.启动和关闭Oracle数据库 对于大多数Oracle DBA来说,启动和 ...
- 监听Web容器启动与关闭
在Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 要监听web ...
- centos 6 与 centos 7 服务开机启动、关闭设置的方法
简单说明下 centos 6 与 centos 7 服务开机启动.关闭设置的方法: centos 6 :使用chkconfig命令即可. 我们以apache服务为例: #chkconfig --add ...
- Lunx下 怎样启动和关闭oracle数据库
1.因为oracle运行在Linux系统下,首先,要连接Linux系统 2.切换到oracle安装用户下. 我的是 ora12. 3.运行oracle的环境变量, 以便输入相关命令. 4.进入orac ...
随机推荐
- 020_自己编写的wordcount程序在hadoop上面运行,不使用插件hadoop-eclipse-plugin-1.2.1.jar
1.Eclipse中无插件运行MP程序 1)在Eclipse中编写MapReduce程序 2)打包成jar包 3)使用FTP工具,上传jar到hadoop 集群环境 4)运行 2.具体步骤 说明:该程 ...
- 0802 DRF 视图
昨日回顾: 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFiel ...
- Model FEP 快易播看板推播系统
主要特色: 低成本,快速导入 透过Wi-Fi 方式推播,现场架设容易 采Web Browser 介面登入操作,简单快速 模组化版面设定,弹性调整资料呈现方式 可整合多种连线方式与外部资料库沟通 可自行 ...
- Cocos2d-x项目移植到WP8系列之七:中文显示乱码
原文链接:http://www.cnblogs.com/zouzf/p/3984628.html C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成 ...
- Oracle基本概念
1. 数据库和实例 什么是数据库,其实很简单,数据库就是存储数据的一种媒介.比如常用的文件就是一种,在Oracle10g中,数据的存储有好几种.第一种是文件形 式,也就是在你的磁盘中创建一批文件,然后 ...
- centos7 下安装eclipse
1 在下面路径下载 eclipse-jee-neon-2-linux-gtk-x86_64.tar.gzhttp://eclipse.stu.edu.tw/technology/epp/downloa ...
- 添加nginx服务到service的过程
Linux命令service - 系统服务管理(转) 用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等. ...
- GDKOI2017游记
去年的GDKOI在寒假(虽然我没参加),但由于一些机♂缘♂巧♂合♂,比赛时间变成了开学之后的第一周,于是直接导致了当我的同学们在认真学习的同时,我在广州无所事事地和同学谈♂笑♂风♂生♂.(太好了,可以 ...
- poj 2116 Death to Binary? 模拟
Death to Binary? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1707 Accepted: 529 D ...
- 如何在windows上部署war包到tomcat服务器
一. 什么是war包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将很多文件组合成一个压缩文件.war专用在web方面,一个war包可以理解为一个web项 ...