运维工具之iptables命令

发布时间:2024年01月16日

运维工具之iptables命令

1.iptables防火墙介绍

? iptables其实并不是真正的防火墙,我们可以理解成一个客户端代理,用户通过 IPTables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才 是真正的防火墙,这个框架的名称叫做 netfilter .

? netfilter 位于内核空间,IPTables其实是一个命令行工具,位于用户空间,我 们用这个工具操作真正的框架。netfilter/iptables 组成Linux平台下的包过滤防火墙,与 大多数的Linux软件一样,这个包过滤防火墙是免费的,完成封包过滤,封包重定向和 网络地址转换(NAT)等功能。

? iptbales是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。 当一条网络连接试图在你的系统中建立时,IPTables会查找对应的匹配规则。如果找 不到,IPTbales将对其采取默许操作。 iptables 是 Linux 防火墙系统的重要组成部分,iptables 的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者由该设备转发、路由时,都可以使用 iptables 进行控制。

? iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中
在这里插入图片描述

1.1 iptables基础

? 规则(rules)其实就是网络管理员预定义的条件,规则一般定义为"如果数据包头符合这样的条件,就按照规定处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址,目的地址,传输协议(如TCP,UDP,ICMP等)和服务类型(如HTTP,FTP,SMTP等)。当数据包和规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加,修改和删除这些规则。

1.2 iptables和netfilter的关系

? iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构

[root@localhost ~]# which iptables
/usr/sbin/iptables

1.3 iptables中的表和链

1.3.1 iptables中的表

? iptables中的规则表用于容纳多个规则链。规则表默认是允许通过状态,因此规则表中的规则链需要设置禁止的规则用来限制规则表,从而达到数据包过滤的效果。 反之,如果规则表禁止状态,则规则链需要设置被允许的规则。iptables根据防火墙规则的作用对表进行划分
在这里插入图片描述
规则表的执行顺序是raw>mangle>nat>filter
在这里插入图片描述

1.3.2 iptables中的规则链

iptables中定义了很多规则链,且每种规则链的作用各不同
在这里插入图片描述

规则链也存在执行顺序的概念:

  • 入站顺序:PREROUTING>INPUT
  • 出站顺序:OUTPUT>POSTROUTING
  • 转发顺序:PREROUTING>FORWARD>POSTROUTING
1.3.3 iptables规则中数据包的控制类型
  • ACCEPT:允许数据包通过
  • DROP:直接将数据包丢弃,不给出任何提示
  • REJECT:拒绝将数据包丢弃,必要时给出提示
  • LOG:记录日志信息,然后转发给下一跳规则继续匹配
  • DNAT:目的地址转换
  • SNAT:源地址转换
  • MASQUERADE:地址欺骗
  • REDIRECT:重定向
1.3.4 iptables中需要注意的事项
  • 若未指定匹配规则表,则默认使用filter表

  • 若未指定规则链,则指表内所有的规则链

  • 规则链内的规则一旦匹配就停止,若未匹配成功则按照练的默认策略执行

1.4 iptables传输数据包的过程

1.4.1 PREROUTING链
# 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包源IP,目的IP判断是否需要转发
1.4.2 INPUT链
# 如果数据包就是进入本机的,他就会进入INPUT链。数据包到达了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出
1.4.3 FORWARD链
# 如果数据包是要转发出去的,且内核允许转发,数据包就会经过FORWARD链,然后到达POSTROUTING链输出

在这里插入图片描述

了解内核转发

# 开启内核转发
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
# 保持开机自启
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# cat /etc/sysctl.conf 
net.ipv4.ip_forward = 1 #0为关闭,1为开启
[root@localhost ~]#

2.iptable基本语法

2.1 iptables 参数介绍

iptables 命令的基本语法格式如下:

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数的含义为:

  • -t:指定需要维护的防火墙规则表filter,nat,mangle或者raw,默认为filter
  • COMMAND:子命令,定义对规则的管理
  • chain:指明链表
  • CRETIRIA:匹配参数
  • ACTION:触发动作

iptables 命令常用的选项及各自的功能:

选 项    功 能
-A  添加防火墙规则
-D  删除防火墙规则
-I  插入防火墙规则
-F  清空防火墙规则
-L  列出添加防火墙规则
-R  替换防火墙规则
-Z  清空防火墙数据表统计信息
-P  设置链默认规则
-m 	设置扩展模块

iptables 命令常用匹配参数及各自的功能:

参 数               功 能
[!]-p            匹配协议,! 表示取反
[!]-s            匹配源地址
[!]-d            匹配目标地址
[!]-i            匹配入站网卡接口
[!]-o            匹配出站网卡接口
[!]--sport       匹配源端口
[!]--dport       匹配目标端口
[!]--src-range   匹配源地址范围
[!]--dst-range   匹配目标地址范围
[!]--limit       匹配数据表速率
[!]--mac-source  匹配源MAC地址
[!]--sports      匹配源端口
[!]--dports      匹配目标端口
[!]--stste       匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string      匹配应用层字串

iptables 命令触发动作及各自的功能:

触发动作      功 能
ACCEPT      允许数据包通过
DROP        丢弃数据包
REJECT      拒绝数据包通过
LOG         将数据包信息记录 syslog 曰志
DNAT        目标地址转换
SNAT        源地址转换
MASQUERADE  地址欺骗
REDIRECT    重定向

? 内核会按照顺序依次检查 iptables 防火墙规则,如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;如果所有的防火墙规则都未能匹配成功,则按照默认策略处理

  • 使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后
  • 使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则

2.2 iptables规则的查看与清除

2.1.1 查看规则
iptables -nvL

各参数的含义为:

  • -L:表示查看当前表的所有规则,默认查看的是filter表,如果要查看nat表,可以加上-t nat参数
  • -n:表示不对IP地址进行反查,加上这个参数显示速度将会加快
  • -v:表示输出详细信息,包含通过该规则的数据包数量,总字节数以及相应的网络接口
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT) #INPUT链默认是允许规则
target                      prot opt source                         destination
ACCEPT                      all -- anywhere                         anywhere            state
RELATED,ESTABLISHED
ACCEPT                      icmp -- anywhere                        anywhere
ACCEPT                      all -- anywhere                         anywhere
ACCEPT                      tcp -- anywhere                         anywhere            state NEW tcp dpt:ssh
REJECT                      all -- anywhere                         anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT) #FORWARD链默认是允许规则
target                      prot opt source                         destination
REJECT                      all -- anywhere                         anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT) #OUTPUT链默认是允许规则
target                      prot opt source                         destination

--chain:链
--policy:策略
--target:控制类型
--prot:协议
--opt:操作
--source:源IP地址
--destination:目的IP地址
2.1.2 添加规则
# 设置Input链的默认策略设置为拒绝(DROP)
[root@localhost ~]# iptables -P INPUT DROP #配置INPUT链默认拒绝数据包
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT #在INPUT链开头加入允许所有ICMP报文通过
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #在INPUT链开头加入允许所有TCP端口22的报文通过
[root@localhost ~]# iptables -A INPUT -j ACCEPT #在INPUT链结尾加入所有报文
通过(-t filter可以省略不写,默认是filter表)
[root@localhost ~]# iptables -L #查看防火墙规则
Chain INPUT (policy DROP) #INPUT链默认是允许规则
target                      prot opt source                         destination
ACCEPT                      all -- anywhere                         anywhere            state RELATED,ESTABLISHED
ACCEPT                      icmp -- anywhere                        anywhere        
ACCEPT     					tcp  --  anywhere             			anywhere            tcp dpt:ssh
ACCEPT                      all -- anywhere                         anywhere
ACCEPT                      tcp -- anywhere                         anywhere            state NEW tcp dpt:ssh
REJECT                      all -- anywhere                         anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT) #FORWARD链默认是允许规则
target                      prot opt source                         destination
REJECT                      all -- anywhere                         anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT) #OUTPUT链默认是允许规则
target                      prot opt source                         destination
2.1.3 修改规则
# 允许所有人可以通过tcp的22号端口远程连接,修改为仅允许192.168.65.0/24网段的用户远程连接
[root@localhost ~]# iptables -R INPUT 2-s 192.168.65.0/24 -j ACCEPT
[root@localhost ~]# iptables -L #查看防火墙规则
ACCEPT                      icmp -- anywhere                        anywhere        
ACCEPT     					tcp  --  192.168.65.0/24                anywhere            tcp dpt:ssh
2.1.4 删除规则
# 删除规则有两种方法,但都必须使用 -D 参数
[root@localhost ~]# iptables -D INPUT -p icmp -j ACCEPT

#有时需要删除的规则较长,删除时需要写一大串的代码,这样比较容易写错,这时可以先使用 -line-number 找出该条规则的行号,再通过行号删除规则
[root@localhost ~]# iptables -L -n --line-number
[root@localhost ~]# iptables -D INPUT 1

3.防火墙的备份与还原

? 默认的 iptables 防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都会丢失,所以对防火墙规则进行及时保存的操作是非常必要的。

? iptables 软件包提供了两个非常有用的工具,我们可以使用这两个工具处理大量的防火墙规则。这两个工具分别是 iptables-save 和 iptables-restore,使用该工具可以实现防火墙规则的保存与还原。这两个工具的最大优势是处理庞大的规则集时速度非常快。

? CentOS 7 系统中防火墙规则默认保存在 /etc/sysconfig/iptables 文件中,使用 iptables-save 将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。如果使用 iptables-save 将规则保存至其他位置,可以实现备份防火墙规则的作用。当防火墙规则需要做还原操作时,可以使用 iptables-restore 将备份文件直接导入当前防火墙规则

3.1 iptables-save命令

iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:

保存在默认文件夹中(保存防火墙规则):
[root@liangxu ~]# iptables-save > /etc/sysconfig/iptables
保存在其他位置(备份防火墙规则):
[root@liangxu ~]# iptables-save > 文件名称

直接执行 iptables-save 命令:显示出当前启用的所有规则

[root@localhost ~]# iptables-save 
……

“#”号开头的表示注释;
“*filter”表示所在的表;
“:链名默认策略”表示相应的链及默认策略,具体的规则部分省略了命令名“iptables”;
在末尾处“COMMIT”表示提交前面的规则设置。

备份到其他文件中。例如文件:text,如下所示

[root@localhost ~]# iptables-save > text

列出nat表的规则内容,命令如下:

[root@localhost ~]# iptables-save -t nat
3.2 iptables-restore命令

? iptables-restore 命令可以批量导入Linux防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。命令如下:

[root@localhost ~]# iptables-restore < 文件名称

? 注意,导入的文件必须是使用 iptables-save工具导出来的才可以。

? 先使用 iptables-restore 命令还原 text 文件,然后使用 iptables -t nat -nvL 命令查看清空的规则是否已经还原,如下所示:

[root@localhost ~]# iptables-restore < test 
[root@localhost ~]# iptables -t nat -nvL 
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

3.iptables的实际使用

3.1 防止黑客对SSH服务暴力破解

#配置只有指定IP地址段的用户可以连接本地的SSH服务。其他用户拒绝访问,可以有效防止黑客对SSH服务暴力破解
[root@localhost ~]# iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
#在INPUT链的头部加入只允许源IP时192.168.0.0/24的网段协议是TCP目的端口是22的数
据通过
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j DROP
#在INPUT链的末尾加入不允许所有IP地址网络协议是TCP目的端口是22的数据通过

3.2 不允许任何用户访问本机的3306端口

[root@localhost ~]# iptables -I INPUT -p tcp --dport 3306 -j DROP
#在INPUT链的末尾加入不允许所有IP地址网络协议是TCP目的端口是3306的数据通过
[root@localhost ~]# iptables -I INPUT -p udp --dport 3306 -j DROP
#在INPUT链的末尾加入不允许所有IP地址网络协议是UDP目的端口是3306的数据通过

3.3 防止ICMP类型的主机发现

[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
#禁止ICMP类型数据包发送进入该主机
[root@localhost ~]# iptables -I OUTPUT -p icmp -j REJECT
#禁止ICMP类型数据包从该主机发出
C:\Users\admin>ping 192.168.80.134
正在 Ping 192.168.80.134 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
192.168.80.134 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失)

3.4 禁止主机用户访问百度

[root@localhost ~]#iptables -I FORWARD -d www.baidu.com -j DROP
#禁止从主机转发访问www.baidu.com的数据报文

3.5 使用iptables封禁IP

3.5.1 封禁单个IP
[root@localhost ~]# iptables -I INPUT -s 192.168.65.7 -j DROP #-I 指插入表第一列
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  192.168.65.7         anywhere            
………………
3.5.2 解封单个IP
[root@localhost ~]# iptables -D INPUT -s 192.168.65.7 -j DROP
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

…………
3.5.3 封禁IP段
`1.封IP段: 从123.0.0.1到123.255.255.254的命令
[root@localhost ~]# iptables -I INPUT -s 123.0.0.0/8 -j DROP

`2.封IP段:从123.168.0.0到123.168.255.254的命令
[root@localhost ~]# iptables -I INPUT -s 123.168.0.0/16 -j DROP

`3.封IP段:从123.168.65.0到123.168.65.254的命令
[root@localhost ~]# iptables -I INPUT -s 123.128.65.0/24 -j DROP
3.5.3解封IP段
`1.解IP段: 从123.0.0.1到123.255.255.254的命令
[root@localhost ~]# iptables -D INPUT -s 123.0.0.0/8 -j DROP

`2.解IP段:从123.168.0.0到123.168.255.254的命令
[root@localhost ~]# iptables -D INPUT -s 123.168.0.0/16 -j DROP

`3.解IP段:从123.168.65.0到123.168.65.254的命令
[root@localhost ~]# iptables -D INPUT -s 123.128.65.0/24 -j DROP

4.iptables进行网络地址转换

? iptables具有NAT功能,可以将内网地址和外网地址进行转换,从而完成内外网 通信。网络地址转换分为源地址转换和目的地址转换两种.

4.1 源地址转换(SNAT)

? SNAT是指在数据包从网卡发出去的时候,把数据包中的源地址替换成可访问公 网的IP地址,当数据报文发送至对端主机后,对端主机认为源IP是公网的IP地址,从 而进行正常的响应.

4.1.1 SNAT的工作原理

在这里插入图片描述

实现一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。

在这里插入图片描述

4.1.2 SNAT转换前提条件
  • 局域网各主机己正确设置IP地址、子网掩码、默认网关地址

  • Linux网关开启IP路由转发

    [root@localhost ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • SNAT转换:固定的公网IP地址

    #配置SNAT策略,实现SNAT功能,将所有192.168.80.0/24这个网段的源IP改为
    192.168.0.111
    [root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 192.168.0.111
    -- -s:可以指定单个IP地址
    -- -o:指定出站网卡
    -- --to-source:外网IP或地址池
    [root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 192.168.0.111-192.168.0.122
    

利用实验来验证SNAT源地址转换的作用

①实验准备:

  • 局域网网段为:192.168.80.0/24
  • 设置外网网段为:192.168.0.0/24
    在这里插入图片描述

②实验步骤:

Ⅰ配置局域网机器的iptables功能

[root@localhost ~]# iptables -F -t nat #清空指定表的规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o
ens160 -j SNAT --to-source 192.168.0.111 #配置NAT表的POSTROUTING链规则
[root@localhost ~]# iptables -L -t nat #查看指定表的规则

Ⅱ.配置网关服务器

[root@client2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发功能

Ⅲ.配置Web服务器

#下载安装httpd服务器
[root@Server ~]# yum -y install httpd
[root@server ~]# firewall-cmd --permanent --add-service=http #防火墙放行http流量
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]#

Ⅳ.对外网主机80端口抓包,此时内网主机访问外网web时,成功隐藏了内网主机的ip, 而用网关外网ip来做访问报文的源地址和响应报文的目标地址

#外网主机下载Tcpdump工具进行网络流量抓包
[root@localhost ~]# yum -y install tcpdump.x86_64
[root@localhost ~]# yum -y install libpcap
#内网机器访问外网服务器
[root@localhost ~]# curl 192.168.0.112
#对外网服务器的ens160接口进行指定协议和端口的抓包
[root@server ~]# tcpdump -i ens160 -nn tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144
bytes
07:34:16.215925 IP 192.168.0.108.1684 > 192.168.0.112.80: Flags [S], seq
1361455181, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK],
length 0
07:34:16.216134 IP 192.168.0.112.80 > 192.168.0.108.1684: Flags [R.],
seq 0, ack 1361455182, win 0, length 0
07:34:16.716185 IP 192.168.0.108.1684 > 192.168.0.112.80: Flags [S], seq
1361455181, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK],
length 0
07:34:16.716374 IP 192.168.0.112.80 > 192.168.0.108.1684: Flags [R.],
seq 0, ack 1, win 0, length 0
07:34:17.218806 IP 192.168.0.108.1684 > 192.168.0.112.80: Flags [S], seq
1361455181, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK],
length 0
........

Ⅴ.对网关内网接口抓包,是直接内网ip发包给外网ip

[root@localhost ~]# tcpdump -i ens160 -nn tcp port 80
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144bytes
07:53:20.020348 IP 192.168.80.134.59868 > 192.168.0.112.80: Flags [S],seq 589541098, win 29200, options [mss 1460,sackOK,TS val 2237827899 ecr0,nop,wscale 7], length 0
07:53:21.074566 IP 192.168.80.134.59868 > 192.168.0.112.80: Flags [S],seq 589541098, win 29200, options [mss 1460,sackOK,TS val 2237828954 ecr 0,nop,wscale 7], length 0
07:53:22.035860 IP 192.168.0.112.80 > 192.168.80.134.59868: Flags [R.],seq 1036074530, ack 589541099, win 64240, length 0

③实验心得

? SANT的优点是可以使得多台局域网内的主机都通过一个公网IP进行正常的网页 访问,解决了IP资源匮乏的问题。同时,由于其源IP地址进行了转换,从而加强了网 络的安全性.

4.2 目的地址转换(DNAT)

? DNAT是指数据包从网卡发送出去的时候修改数据报文中的目的IP为某公司内网 中私有IP使用的技术

4.2.1 DNAT的工作原理:

在这里插入图片描述

4.2.2 DNAT转换前提条件:
  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发

利用实验来验证DNAT目的地址转化的作用

实验步骤:

①发布内网的Web服务

[root@localhost ~]# iptables -t nat -A PREROUTING -i ens160 -d 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11
[root@localhost ~]# iptables -L -t nat
-- -s:可以指定单个IP地址或IP地址段
-- -i:指定入站网卡
-- --to-destination:内网IP或地址池
-- --dport :指定入站的网络端口

②发布时修改目标端口

#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
[root@localhost ~]#iptables-t nat -A PREROUTING -i ens33 -d 192.168.0.112 -p tcp--dport 250-jDNAT --to 192.168.80.11:22
[root@localhost ~]# iptables -L -t nat

5.实验——iptables配置实践

5.1 实验介绍:

第一部分:模拟Linux系统为局域网中某服务器,通过编写脚本localsafe.sh加固
本机安全性
第二部分:模拟Linux系统主机为本地网络中的防火墙,通过对该系统编写脚本networksaft.sh加固本地网络,实现本地FTP服务器,Web服务器。E-mali服务
器的安全性

5.2 实验目的:

  • 了解iptables的基本功能
  • 掌握iptables的防火墙配置方法

5.3 实验环境

  • Centos 7
  • Redhat 8

5.4 实验步骤

步骤1:

? 设置Redhat 8作为Web服务器,现在需要配置该Web服务器能被客户端访问,并 配置它能被安全的SSH远程控制,且配置可以SNMP安全纳管。该脚本通过配置 INPUT表默认为拒绝,并配置只允许接收的数据报文从而形成白名单机制的安全原则.

[root@localhost ~]#vim localsafe.sh
#!/bin/bash
iptables -F #清除所有规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允许调用localhost的应用访问
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#允许接收任意IP地址发送ICMP的echo类型报文
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允许接收任意IP地址访问TCP的80和443端口(允许访问Web服务器)
iptables -A INPUT -p udp -s 192.168.0.7 --dport 22 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.7 --dport 161 -j ACCEPT
#只允许IP地址为192.168.0.7的主机连接TCP的22端口(TCP)和UDP的161端口(SNMP)
iptables -A INPUT -j DROP
#INPUT链默认为数据包丢弃
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
#允许建立ESTBELISHED状态的数据包发出
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP
#OUTPUT链默认设置为拒绝,即禁止主机主动发出外部连接,这个可以有效防止反弹shell攻击
#FORWARD链默认为数据包丢第
iptables -L -n --line-numbers

步骤2:

? 为localsafe.sh脚本赋予执行权限,然后执行脚本

[root@localhost ~]# vim localsafe.sh
[root@localhost ~]# ./localsafe.sh

步骤3:

? Linux服务器模拟配置网络防火墙,该组网中所有的服务器用到的IP均为公网IP, 且有三个服务器:Web服务器(220.128.15.10),FTP服务器(220.128.15.11),Email服务器(220.128.15.12).内网IP地址网段为192.168.1.0/24.配置Linux防火墙允 许内网访问三个服务器,不允许其他公网IP访问。禁止Internet用户ping防火墙的eth0 接口
在这里插入图片描述

为了满足上述要求,编写脚本networksafe.sh

root@client2 ~]# vim networksafe.sh
[root@client2 ~]# cat networksafe.sh
#!/bin/bash
iptables -F #清空规则链
iptables -P INPUT DROP #配置INPUT链默认拒绝数据包
iptables -P FORWARD DROP #配置FORWARD链默认拒绝数据包
iptables -P OUTPUT DROP #配置OUTPUT链默认拒绝数据包
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.10 --dport 80  -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.10 --dport 443 -j ACCEPT
#配置允许源IP192.168.1.0/24网段的Web服务器的数据包通过防火墙
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.11 --dport 21  -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.11 --dport 20  -j ACCEPT
#配置允许源IP192.168.1.0/24网段的FTP服务器的数据包通过防火墙
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.12 --dport 25  -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 220.128.15.12 --dport 110 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.1.0/24 -d 220.128.15.12 --dport 161 -j ACCEPT
#配置允许源IP192.168.1.0/24网段的E-mail服务器的数据包通过防火墙
iptables -A INPUT -i eth0 -p icmp -j DROP
#配置拒绝接口eth0的icmp流量
echo 1 > /proc/sys/net/ipv4/ip_forward
#开启路由转发
[root@client2 ~]# chmod +x networksafe.sh
[root@client2 ~]# ./networksafe.sh
//执行结果省略
文章来源:https://blog.csdn.net/m0_60981735/article/details/135631246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。