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

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo