RHEL5.4配置iptables防火墙

2024-03-25 06:08

本文主要是介绍RHEL5.4配置iptables防火墙,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                      RHCE学习笔记

 

关于linux下面配置iptables防火墙的讨论,

 

Iptablesnetfilter模块关系

linux下面的防火墙并不是一个服务,而是一个加载到内核中的模块。这个模块就是netfilter模块(网络过滤模块),我们使用iptables工具来管理这个netfilter模块。

 

Iptables的模式

Enabled     默认拒绝所有

Disabled    默认允许所有

我们可以通过system-config-securitylevel这条命令通过图形界面修改,

这里可以选择enabled模式和disabled模式。

 

关于netfilter表和netfilter

这张图就很清楚的显示了netfilter表和netfilter链。

Filter table里面有三条链:

INPUT                 目的地是访问防火墙本身的数据包

OUTPUT             源地址是防火墙出去的数据包

FORWARD         数据包的源地址和目的地址都不是防火墙的数据包

Nat table里面也有三条链:

OUTPUT              数据包在出网关之前被丢给代理服务器

PREROUTING     做目的NAT转换(路由判断之前)

POSTROUTING  做源NAT转换(路由判断之后)

Mangle talbe里面有五条链:

INPUT

OUTPUT

FORWARD

PREROUTING

POSTROUTING

 

关于iptables数据包的流程

这张图就显示了整个iptables防火墙在工作时候的数据包流程。

 

关于iptables的访问控制规则

当数据包要经过iptables防火墙,首先读取第一条策略,如果第一条策略匹配,则执行,不在读取下面的策略。如果第一条策略没有匹配,则读取第二条策略,如果匹配到第二条策略,则执行,不在读取下面的策略。如果数据包没有匹配到任何策略,则匹配默认策略。默认策略是允许或者拒绝可以由用户自己定义。

 

关于iptables的匹配规则

-s   192.168.0.0/24

源地址为192.168.0.0/24的网段

-d   192.168.0.10

目的地址为192.168.0.10的主机

-i   eth0

eht0进来的数据包

-o   eth0

eth0出去的数据包

‘!’  192.168.0.10

反向选择

-p  tcp  --dport  80

协议的类型,目标端口是80

-p  udp  --sport  53

协议类型,源端口是53

 

关于iptables的规则目标

DROP          拒绝

ACCEPT     允许

LOG            日志,匹配到这条策略后,还是会继续往下面读取策略。

REJECT      拒绝,但是会给用户回应的信息。

 

关于iptables基本链操作

Iptables  -L

查看iptables table(默认显示filter table)

Iptables  -nL

IP地址的方式显示

Iptables  -L  --line-numbers

显示策略条目的行号

Iptables  -vL

查看iptables table(显示更具体的信息)

Iptables   -A

追加iptables的策略条目(默认会追加策略的最后面)

Iptables   -I

插入iptables的策略条目(默认插入到策略的最前面)

Iptables   -I   INPUT  2

插入成iptables策略条目的第二条策略

Iptables   -D  INPUT  2

删除iptables策略条目的第二条策略

Iptables   -F

清空所有的策略,但是不会清空链的默认策略。

Iptables   -Z

清空计数器

Iptables   -N

添加用户自定义链

Iptables   -X

清空用户自定义链

 

关于iptables的默认的链策略

Iptables  -P   INPUT      DROP

改变INPUT链的默认策略,拒绝只可以用DROP,不可以用REJECT(这条策略最后被执行)

Iptables  -P   OUTPUT    DROP

改变OUTPUT链的默认策略

Iptables  -P   FORWARD  DROP

改变FORWARD链的默认策略

 

下面我们来做试验,写几个简单的策略。

[root@localhost ~]#

[root@localhost ~]# lftp 192.168.0.254

lftp 192.168.0.254:~> ls

drwxrwxrwx   23 0        0            4096 Mar 25 07:29 pub

lftp 192.168.0.254:/> cd pub/

lftp 192.168.0.254:/pub>

可以看到,现在我们的192.168.0.10这台主机访问服务器上面的ftp服务是没有问题的,现在我们写个策略拒绝这台主机访问。

[root@server1 ~]#

[root@server1 ~]# iptables -t filter -A INPUT -s 192.168.0.10 -p tcp --dport 21 -j REJECT

[root@server1 ~]#

[root@server1~]# iptables -nL

Chain INPUT (policy ACCEPT)

target        prot  opt   source                 destination        

REJECT   tcp    --   192.168.0.10         0.0.0.0/0           tcp dpt:21 reject-with icmp-port-unreachable

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

[root@server1~]#

OK,这条简单的策略就写成功了。

现在我们来测试下,

[root@server1 ~]#

[root@server1 ~]# ssh 192.168.0.10

root@192.168.0.10's password:

Last login: Thu Mar 25 21:52:37 2010 from ftp.example.com

[root@localhost ~]# lftp 192.168.0.254

lftp 192.168.0.254:~> ls

`ls' at 0 [Delaying before reconnect:30]

刚才写的那条策略就生效了。现在192.168.0.10就不可以访问服务器ftp服务了。

 

刚才使用的INPUT链,现在我们使用OUTPUT链,

现在我们拒绝服务器ssh192.168.0.20上面,

[root@server1 ~]# ssh 192.168.0.10

root@192.168.0.10's password:

Last login: Thu Mar 25 22:04:53 2010 from server1.example.com

[root@localhost ~]#

现在我们是可以ssh192.168.0.10这台主机上面去的。

[root@server1 ~]#

[root@server1 ~]# iptables -t filter -A OUTPUT -d 192.168.0.10 -p tcp --dport 22 -j REJECT

[root@server1 ~]#

[root@server1 ~]# iptables -nL

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        

REJECT     tcp   --   0.0.0.0/0            192.168.0.10        tcp dpt:22 reject-with icmp-port-unreachable

[root@server1 ~]#

OK,这条策略就写完成了。

现在我们再来测试下,

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.10

ssh: connect to host 192.168.0.10 port 22: Connection refused

[root@localhost ~]#

OK,现在就连接被拒绝了,说明刚才那条策略生效了。

 

现在还有个特殊的策略,

#iptables  -A  INPUT  -j  DROP/ REJECT

这个策略我们一般写在最后面,所有没有匹配到的用户全部拒绝。

这条策略会有一个副作用,就是服务器自己反而会访问不到自己。

现在我们来测试下,

首先来访问下自己的ftp服务,

[root@server1 ~]#

[root@server1 ~]# lftp localhost

lftp 192.168.0.254:~> ls

drwxrwxrwx   23 0        0            4096 Mar 25 07:29 pub

lftp 192.168.0.254:/> cd pub/

lftp 192.168.0.254:/pub>

OK,现在访问是没有问题的。

现在我们来加上刚才的那条策略。

[root@server1 ~]#

[root@server1 ~]# iptables -A INPUT -j REJECT

[root@server1 ~]#

[root@server1 ~]#

[root@server1 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target        prot  opt  source                destination         

REJECT     all   --   anywhere             anywhere            reject-with icmp-port-unreachable

 

Chain  FORWARD  (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

[root@server1 ~]#

添加策略就完成了,现在我们再来访问下本地ftp服务,

[root@server1 ~]#

[root@server1 ~]# lftp localhost

lftp 192.168.0.254:~> ls

可以看到,现在就访问不了。

ls' at 0 [Connecting...]

这个是因为没有开启本地回环,所以必须写条策略开启本地回环。

[root@server1 ~]#

[root@server1 ~]# iptables -I INPUT -i lo -j ACCEPT

[root@server1 ~]#

[root@server1 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target         prot  opt   source                destination        

ACCEPT    all    --    anywhere             anywhere           

REJECT     all     --    anywhere             anywhere            reject-with icmp-port-unreachable

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

[root@server1 ~]#

现在我们插入了一条策略,再来测试下现在能否访问本地的ftp服务。

[root@server1 ~]#

[root@server1 ~]# lftp localhost

lftp localhost:~> ls

drwxrwxrwx   23 0        0            4096 Mar 25 07:29 pub

lftp localhost:/> cd pub/

lftp localhost:/pub>

OK,当我们允许了本地回环访问,现在就可以访问本地的ftp服务了。

默认的链策略也会有这个副作用。

 

写完iptables策略以后,重启计算机这些策略就都不会生效了。

可以使用这条命令,

#service  iptables  save

[root@localhost ~]#

[root@localhost ~]# service iptables save

Saving firewall rules to /etc/sysconfig/iptables:          [  OK  ]

[root@localhost ~]#

敲完这条命令以后,系统会将iptables的策略自动写入到/etc/sysconfig/iptables

 

我们只是对数据包的源地址和目的地址进行过滤。下面我们对数据包的状态进行过滤。这个叫做链接跟踪。

在使用状态过滤的时候,我们必须先加载相应的模块,

Modprobe  ip_conntrack_ftp 

Modprobe  ip_conntrack_tftp

Modprobe  ip_nat_ftp

Modprobe  ip_nat_tftp

关于数据包的状态

NEW                     第一次发起连接请求的数据包状态

ESTABLISHED    已经建立三次握手的数据包状态

RELATED            发送出去得到回应的数据包状态

INVALID             无效的数据包状态

关于连接跟踪的示例:

Iptables  -A    INPUT  -m  state  --state  ESTABLISHEDRELATED  -j  ACCEPT

Iptables  -A    INPUT  -m  state  --state  NEW  -p  tcp  --dport  25  -j  ACCEPT

Iptables   -A   INPUT  -m  state  --state  NEW  -j  DROP

现在我们以FTP为例,测试下,

正常情况下面,现在我们是可以访问服务器上面的ftp服务的,

[root@localhost ~]#

[root@localhost ~]# lftp 192.168.0.254

lftp 192.168.0.254:~> ls

drwxrwxrwx   23 0        0            4096 Mar 25 07:29 pub

lftp 192.168.0.254:/>

可以看到,现在访问的确没有问题的,

现在我们来写几条策略,

[root@server1 ~]#

[root@server1 ~]# iptables -A INPUT -s 192.168.0.10 -p tcp --dport 21 -j ACCEPT

[root@server1 ~]#

[root@server1 ~]# iptables -A INPUT -j REJECT

[root@server1 ~]#

[root@server1 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target         prot   opt  source                  destination        

ACCEPT    tcp   --   192.168.0.10         anywhere            tcp dpt:ftp

REJECT     all     --    anywhere               anywhere            reject-with icmp-port-unreachable

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

[root@server1 ~]#

现在我们再到192.168.0.10上面去测试下,

[root@localhost ~]#

[root@localhost ~]# lftp 192.168.0.254

lftp 192.168.0.254:~> ls

`ls' at 0 [Delaying before reconnect: 20] 

可以看到,现在就访问不到服务器的ftp服务了。

因为我只开放了21号端口,而ftp服务的21号端口是用来传输命令通道的,现在客户端与服务器是建立不起三次握手的。

现在我们就只能够使用状态防火墙来允许建立三次握手。

使用状态防火墙首先要加载模块,

[root@server1 ~]#

[root@server1 ~]# modprobe ip_conntrack_ftp

[root@server1 ~]#

[root@server1 ~]# iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@server1 ~]#

[root@server1 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target        prot  opt  source                 destination        

ACCEPT   tcp   --   192.168.0.10        anywhere         tcp dpt:ftp

ACCEPT   all    --    anywhere              anywhere        state RELATED,

ESTABLISHED

REJECT    all   --    anywhere                anywhere    reject-with icmp-port-unreachable

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

[root@server1 ~]#

现在我们再到192.168.0.10上面去测试下,

[root@localhost ~]#

[root@localhost ~]# lftp 192.168.0.254

lftp 192.168.0.254:~> ls

drwxrwxrwx   23 0        0            4096 Mar 25 07:29 pub

lftp 192.168.0.254:/>

OK,现在就可以访问了,

这个就是状态防火墙的用法。

 

关于NAT(网络地址转换)

网络地址转换的类型:

目的地NAT(DNAT)  

PREROUTING链中进行设置,

NAT(SNATMASQUERADE)

POSTROUTING链中进行设置

 

DNAT示例:

INBOUND(进入)

Iptables  -t  nat  -A  PREROUTING  -p  tcp  --dport  80  -j  DNAT  --to-dest  192.168.0.10

OUTBOUD(输出,带有端口重定向)

Iptables  -t   nat   -A   OUTPUT  -p  tcp  --dport  80  -j  DNAT  --to--dest  192.168.0.100:3128

 

SNAT示例:

MASQUERADE(地址伪装)

Iptables  -t   nat   -A   POSTROUTING   -o   eth0   -j   MASQUERADE

SNAT

Iptables  -t   nat   -A   POSTROUTING   -j   SNAT  --to-source  1.2.3.45

 

关于linux下面简单iptables配置就是这么多了。

这篇关于RHEL5.4配置iptables防火墙的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/844066

相关文章

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求