RHEL5.7下iptables防火墙配置

iptables是与最新的 2.6.x 版本Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。iptables 的一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。另外,iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案,并且其性能不输于一些专业的硬件防火墙。  
iptables的管理命令介绍 
在iptables防火墙中,它所有功能都是通过命令的形式实现的,因此iptables命令格式非常重要。iptables命令的操作对象包括: 
规则表(table):由规则链的集合组成,不同的规则表用于实现不同的功能 
规则链(chain):由规则的集合组成,保存在规则表中;不同规则链代表了不同的数据包流向。 
规则(rule):用于对防火墙策略进行设置,流经某个数据链的数据将按照先后顺序进行过滤。 
一条完整的iptables命令由以下几个部分组成: 
iptables [-t 表名] <命令> [链名] [规则号] [规则] [-j 目标] 
-t选项用于指定所使用的表,iptables防火墙默认有filter、nat和mangle这3张表,也可以是用户自定义的表。表中包含了分布在各个位置的链,iptables命令所管理的规则就是存在于各种链中的。该选项不是必需的,如果未指定一个具体的表,则默认使用的是filter表。 
命令选项是必须要有的,它告诉iptables要做什么事情,是添加规则、修改规则还是删除规则。有些命令选项后面要指定具体的链名称,而有些可以省略,此时,是对所有的链进行操作。还有一些命令要指定规则号。具体的命令选项名称及其与后续选项的搭配形式如下所示。 
针对规则链<命令>的操作有: 
-L 列出链中所有的规则 
-F 清除链中的所有规则 
-P 设置链的默认动作(ACCEPT/REJECT/DROP) 
-Z 计数器清零 
-N 定义一个新的规则链 
-X 删除定义的规则链
 
针对规则<命令>的操作有: 
-A 追加一个规则 
-I 插入一个规矩 
-D 删除一个规则 
-R 在指定的链中用新的规则置换掉某一规则号的旧规则 
查询iptables防火墙的状态(列出所有规则) 
iptables –L 

image

 
由上图可知,iptables设有三个[链名],即input、forward和output,默认规则均为accept放行,我们可以分别通过这三个规则链调用不同的策略。 
以上是有关iptables命令格式中有关命令和规则链选项部分的解释。iptables命令格式中的规则部分由很多选项构成,主要指定一些IP数据包的特征。例如,上一层的协议名称、源IP地址、目的IP地址、进出的网络接口名称等,下面列出构成[规则号] [规则]的常见选项。 
-p <协议类型>:指定上一层协议,可以是icmp、tcp、udp和all。 
-s <IP地址/掩码>:指定源IP地址或子网。 
-d <IP地址/掩码>:指定目的IP地址或子网。 
-i <网络接口>:指定数据包进入的网络接口名称。 
-o <网络接口>:指定数据包出去的网络接口名称。
 
注意:上述选项可以进行组合,每一种选项后面的参数前可以加"!",表示取反。 
对于-p选项来说,确定了协议名称后,还可以有进一步的子选项,以指定更细的数据包特征。常见的子选项如下所示。 
-p tcp --sport <port>:指定TCP数据包的源端口。 
-p tcp --dport <port>:指定TCP数据包的��的端口。 
-p tcp --syn:具有SYN标志的TCP数据包,该数据包要发起一个新的TCP连接。 
-p udp --sport <port>:指定UDP数据包的源端口。 
-p udp --dport <port>:指定UDP数据包的目的端口。 
-p icmp --icmp-type <type>:指定icmp数据包的类型,可以是echo-reply、echo-request等。
 
上述选项中,port可以是单个端口号,也可以是以port1:port2表示的端口范围。每一选项后的参数可以加"!",表示取反。 
最后,iptables命令中的-j选项可以对满足规则的数据包执行指定的操作,其后的[-j 目标]可以是以下内容: 
-j ACCEPT:将与规则匹配的数据包放行,并且该数据包将不再与其他规则匹配,而是跳向下一条链继续处理。 
-j REJECT:拒绝所匹配的数据包,并向该数据包的发送者回复一个ICMP错误通知。该处理动作完成后,数据包将不再与其他规则匹配,而且也不跳向下一条链。 
-j DROP:丢弃所匹配的数据包,不回复错误通知。该处理动作完成后,数据包将不再与其他规则匹配,而且也不跳向下一条链。 
-j LOG:将与规则匹配的数据包的相关信息记录在日志(/var/log/message)中,并继续与其他规则匹配。
 
举例: 

RHEL5.7下iptables防火墙配置


在配置iptables之前,首先查询iptabels软件包有没有安装(默认已安装) 
rpm -q iptables 
iptables服务启动脚本/etc/rc.d/init.d/iptables 
配置文件位置 /etc/sysconfig/iptables-config 
策略文件位置 /etc/sysconfig/iptables (默认文件不存在) 
iptables命令即时生效,但是不保存的话重启后就会消失,保存命令: 
iptables-save &gt; /etc/sysconfig/iptables 
将命令保存在iptables策略文件中,重启后可立即应用。也可以使用以下命令进行保存: 
service iptables save 
将iptables-save命令保存的防火墙策略恢复到当前系统中 
iptables-restore 
开启iptables防火墙 
service iptables start 
基于单个服务器的iptables防火墙配置 
基于单个服务器防火墙的配置主要包括回环口的处理、状态检测以及协议和端口的处理。 
例如一个普通的web服务器的典型防护配置: 
iptables -A INPUT -i lo -j ACCEPT   \\允许访问服务器的lo回环口 
iptables -A INPUT -p tcp -m multiport --port 22,80 -j ACCEPT   \\开放服务器的22和80端口 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   \\状态检测,允许建立连接和相关连接 
iptables -P INPUT DROP  \\不匹配以上条件的数据包全部丢弃 
这里涉及到iptables防火墙的一些 [扩展规则],iptables软件包提供了一套扩展的规则选项。使用时需要通过-m选项指定模块的名称,再使用该模块提供的选项。下面列出几个模块名称和其中的选项,大部分的选项也可以通过"!"取反。 
-m multiport --sports <port, port, …>  
功能:指定数据包的多个源端口,也可以以port1:port2的形式指定一个端口范围。 
-m multiport --dports <port, port, …> 
功能:指定数据包的多个目的端口,也可以以port1:port2的形式指定一个端口范围。 
-m multiport --ports <port, port, …> 
功能:指定数据包的多个端口,包括源端口和目的端口,也可以以port1:port2的形式指定一个端口范围。 
-m state --state <state> 
功能:指定满足某一种状态的数据包,state可以是INVALID、ESTABLISHED、NEW和RELATED等,也可以是它们的组合,用","分隔。 
-m connlimit  --connlimit-above <n> 
功能:用于限制客户端到一台主机的TCP并发连接总数,n是一个数值。 
-m  mac  --mac-source  <address> 
功能:指定数据包的源MAC地址。 
现在我们在虚拟机环境下进行测试,仍然引用之前那个静态路由的环境 

RHEL5.7下iptables防火墙配置


RHEL-B上输入刚才的4条命令 
iptables -A INPUT -i lo -j ACCEPT  
iptables -A INPUT -p tcp -m multiport --port 22,80 -j ACCEPT   
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   
iptables -P INPUT DROP  
查看INPUT规则: 

RHEL-B上开启vsftpd和httpd服务(分别为21端口和80端口) 
service httpd start 
service vsftpd start
 
RHEL-A上使用命令测试,发现都是成功的 
telnet 192.168.20.1 80 
telnet 192.168.20.1 22
 
使用ftp命令去连接 
ftp 192.168.20.1 
发现许久连接不上,说明ftp的21端口没有开启。当然如果去ping的话,也是失败的。这意味着iptables防火墙的命令生效,只开放了ssh和http服务。 
保存刚才的iptables策略,即会生成/etc/sysconfig/iptables文件 
service iptables save 
 

image

 
这样一个简单的基于主机的iptables防火墙就配置成功了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/23162.html