防火墙iptables实战图文详解
·
网络规划

- 内部PC1位于内网区域,地址段为: 192.168.1.0/24,pc1地址为:192.168.1.1/24,网关地址为:192.168.1.254/24
- 服务器S1位于服务器区域,地址段为: 192.168.2.0/24,pc1地址为:192.168.2.1/24,网关地址为:192.168.2.254/24
- PC2位于互联网区域,模拟外部互联网,地址段为:10.0.0.0/8,pc2地址为:10.0.0.1/8
- Linux防火墙的三块网卡为别连接不同的网络区域,地址分别为 :ens33 192.168.1.254/24;ens34 10.0.0.100/8;ens35 192.168.2.254/24
要求:
- 内部网络中的pc1采用SNAT访问外部互联网,但是无法ping到内部网关。
- 内部网络服务器s1通过DNAT发布服务到互联网。
- 互联网主机pc2能够访问DMZ区域的服务器,但是不能够进行ping和ssh连接。
1.内部网络pc1配置
[root@localhost network-scripts]# ifconfig ens160 192.168.1.1/24
[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:8a:f9:02 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.1.1/24 brd 192.168.1.255 scope global ens160
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:04:99:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
[root@localhost network-scripts]# route add -net 0/0 gw 192.168.1.254 dev ens160
2.外部网络pc2配置
[root@localhost ~]# ifconfig ens160 10.0.0.1/8
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:28:43:ce brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 10.0.0.1/8 brd 10.255.255.255 scope global ens160
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:3c:88:b0 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
3.服务器配置
[root@localhost ~]# ifconfig ens160 192.168.2.1/24
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:89:2d:08 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.2.1/24 brd 192.168.2.255 scope global ens160
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:89:28:98 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
[root@localhost ~]# route add -net 0/0 gw 192.168.2.254 dev ens160
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.254 0.0.0.0 UG 0 0 0 ens160
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens160
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
#添加net.ipv4.ip_forward = 1
[root@localhost ~]# vim /etc/sysctl.conf
4.防火墙配置
#配置地址
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# ifconfig ens160 192.168.1.254/24
[root@localhost ~]# ifconfig ens192 10.0.0.100/8
[root@localhost ~]# ifconfig ens224 192.168.2.254/24
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:7e:e4:9e brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.1.254/24 brd 192.168.1.255 scope global ens160
valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:7e:e4:a8 brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 10.0.0.100/8 brd 10.255.255.255 scope global ens192
valid_lft forever preferred_lft forever
4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:7e:e4:b2 brd ff:ff:ff:ff:ff:ff
altname enp19s0
inet 192.168.2.254/24 brd 192.168.2.255 scope global ens224
valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:04:99:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
#配置网段转换
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
#pc1无法ping192.168.1.254
[root@localhost ~]# iptables -A INPUT -s 192.168.1.1 -d 192.168.1.254 -p icmp --icmp-type echo-request -j DROP
当设置pc1无法ping192.168.1.254结果为:
[root@localhost network-scripts]# ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
^C
--- 192.168.1.254 ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8235ms
#配置网段转换
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
结果:
[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=0.714 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=38.3 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=63 time=3.69 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3034ms
rtt min/avg/max/mdev = 0.714/14.227/38.279/17.050 ms
利用镜像安装nginx
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
Rocky-AppStream.repo Rocky-HighAvailability.repo Rocky-ResilientStorage.repo
Rocky-BaseOS.repo Rocky-Media.repo Rocky-RT.repo
Rocky-Debuginfo.repo Rocky-NFV.repo Rocky-Sources.repo
Rocky-Devel.repo Rocky-Plus.repo
Rocky-Extras.repo Rocky-PowerTools.repo
[root@localhost yum.repos.d]# mkdir backup
[root@localhost yum.repos.d]# mv Rocky-* backup/
[root@localhost yum.repos.d]# ls
backup
[root@localhost yum.repos.d]# mount /dev/sr0 /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@localhost yum.repos.d]# vim local.repo
[root@localhost yum.repos.d]# yum clean all
0 个文件已删除
[root@localhost yum.repos.d]# yum install -y nginx
local 6.1 MB/s | 9.1 MB 00:01
上次元数据过期检查:0:00:06 前,执行于 2025年06月04日 星期三 18时34分46秒。
依赖关系解决。
===============================================================================
软件包 架构 版本 仓库 大小
===============================================================================
安装:
nginx x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 local 566 k
[root@localhost yum.repos.d]# systemctl start nginx
[root@localhost yum.repos.d]# getenforce
Permissive
PC1访问PC2
[root@localhost yum.repos.d]# curl 10.0.0.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test Page for the Nginx HTTP Server on Rocky Linux</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
/*<![CDATA[*/
body {
background-color: #fff;
color: #000;
#把PC2地址公网地址转为私网地址192.168.2.1
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens192 -d 10.0.0.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1
测试:
[root@localhost yum.repos.d]# curl 10.0.0.100
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test Page for the Nginx HTTP Server on Rocky Linux</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
/*<![CDATA[*/
body {
background-color: #fff;
color: #000;
font-size: 0.9em;
更多推荐
所有评论(0)