Centos中iptables配置

1. 准备工作

1.1 靶机准备

  • 一台Centos8作为防火墙
  • 一台win7作为内网机
  • 一台win2008作为DMZ服务器
  • 一台win2003作为外网服务器

注意:

  • Centos8需要3个网络适配器,所有也得配置三个IP
  • win2008和win2003是要配置共享文件,远程连接和IIS
  • 共享文件只需新建共享文件夹就可以了
  • 远程连接需要安装telnet客户端和服务端,同时在services.msc中需要找到telnet 自启动

1.2 安装iptables-services

首先:Centos8先桥接模式下载iptables-services

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#关闭防火墙
systemctl stop firewalld

#安装或更新服务
yum install iptables-services

#启动iptables
systemctl enable iptables

#打开iptables
systemctl start iptables

#规则策略保存
service iptables save

#重启iptables服务(强调)
service iptables restart

#执行完毕之后/etc/syscofig/iptables文件就有了

1.2 IP准备

1
2
3
4
5
6
7
8
9
10
11
12
Centos8:
enss33: #vm0
192.168.37.200
255.255.255.0

enss37: #vm1
10.37.0.200
255.255.255.0

enss38: #vm2
20.37.0.200
255.255.255.0
1
2
3
4
win7:           #vm0
192.168.37.2
255.255.255.0
192.168.37.200
1
2
3
4
win2008:        #vm1
10.37.0.2
255.255.255.0
10.37.0.200
1
2
3
4
win2003:        #vm2
20.37.0.2
255.255.255.0
20.37.0.200

1.3 IP地址配置

方法一

1.3.1.1 查看网卡名字
1
2
3
4
5
6
7
8
#查看网卡

[sculptor@localhost ~]$ nmcli d
DEVICE TYPE STATE CONNECTION
virbr0 bridge 连接(外部) virbr0
ens33 ethernet 已断开 --
lo loopback 未托管 --
virbr0-nic tun 未托管 --
1.3.1.2 编辑网卡配置

根据上面的查看可以知道现在可以使用的网卡名字是 ens33
所以其配置网卡配置文件是 /etc/sysconfig/network-scripts/ifcfg-ens33

1
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=dhcp 注释掉,添加 BOOTPROTO=static
开机启动时激活网卡设备ONBOOT 修改为yes

1
ONBOOT=yes 

然后再最后添加

1
2
3
4
5
IPADDR=192.168.37.200
NETMASK=255.255.255.0
GATEWAY=192.168.37.1
DNS1=114.114.114.114
DNS2=8.8.8.8

最后就是 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=e500d1ea-d0ae-47a9-9c42-ca8cb1c55f9a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.37.200
NETMASK=255.255.255.0
GATEWAY=192.168.37.1
DNS1=114.114.114
DNS2=8.8.8.8
1.3.1.3 重启网卡(使修改的网卡配置文件立即生效)
1
2
3
ifup ens33
或者
nmcli c reload

centos 设置临时IP地址并立即生效
临时ip

1
2
ifconfg 网卡名 ip 网关
ifconfg ens33 192.168.8.129 255.255.255.0

方法二

找到Centos8右上角网络->添加有线设置

1.4 iptables默认允许规则

1.4.1 通过ftp,telnet,ping

允许所有网段可以文件共享和远程控制

1
2
3
4
5
iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 21 -j ACCEPT
iptables -t filter -A FORWARD -s 10.37.0.0/24 -p tcp --dport 21 -j ACCEPT
iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 21 -j ACCEPT

#默认是可以ping通的,所以这个是不用配置的
1
2
3
iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 23 -j ACCEPT
iptables -t filter -A FORWARD -s 10.37.0.0/24 -p tcp --dport 23 -j ACCEPT
iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 23 -j ACCEPT
1
2
3
iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -s 10.37.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 80 -j ACCEPT
1
2
3
4
5
#保存规则配置
service iptables save

#重启动iptables
service iptables restart
1
2
3
//最后发现只要保存重启后,默认允许一切规则
//无语了。。。
//所以不需要上面的配置

2. 实验

2.1 NAT转换

2.1.1 目的

实验目的:使用iptables命令配置防火墙,将内部IP地址映射到外部服务器,实现局域网主机通过内部IP地址(192.168.37.200)来访问外网服务器(20.37.0.2)。

实验原理:通过配置nat表的PREROUTING和POSTROUTING链实现地址映射

2.1.2 规则配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
su root
//清空防火墙nat表
iptables –t nat -F
iptables –t nat -X
iptables –t nat -Z

//查看nat表已经清空
iptables –t nat -L --line-numbers

//开启数据包转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

//查看转发功能
cat /proc/sys/net/ipv4/ip_forward

//必须保证/etc/sysctl.conf文件中net.ipv4.ip_forward的值为1
vim /etc/sysctl.conf

//源地址192.168.37.200:80映射到目的地址20.37.0.2:80
iptables -t nat -A PREROUTING -d 192.168.37.200 -p tcp --dport 80 -j DNAT --to-destination 20.37.0.2:80

//
iptables -t nat -A POSTROUTING -s 20.37.0.2 -p tcp --sport 80 -j SNAT --to-source 192.168.37.200

iptables -t nat -L -n --line-numbers

#保存,重启
service iptables save
service iptables restart

2.2 iptables实现按网段访问网络资源

2.2.1 目的

实验目的:通过配置iptables防火墙来实现按网段访问ftp服务和telnet服务(ftp服务器和telnet服务器地址:10.37.0.2),具体要求是:

内网不可以访问DMZ区域ftp服务,但是可以访问telnet服务;

外网可访问DMZ区域ftp服务,但是不可以访问telnet服务。

(1) 192.168.37.0/24网段不可以访问ftp服务,20.37.0.2/24网段可以访问ftp服务。

(2) 192.168.37.0/24网段可以访问telnet服务,20.37.0.2/24网段不可以访问telnet服务。

实验原理:配置filter表中的FORWARD链

2.2.2 原始

按网段访问ftp服务器的实验步骤:

(1) 打开Windows 7的cmd,输入ftp 10.37.0.2,输入用户名ftp,密码123456,登录成功。

(2) 打开Windows server 2003的cmd,输入ftp 10.37.0.2,输入用户名ftp,密码123456,登录成功。

对于win7:

对于win2003:

按网段访问telnet服务器的实验步骤:

对于win7:

对于win2003:

2.2.3 规则配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#管理员登录
su root

//初始化
iptables -F
iptables -X
iptables -Z
iptables -L -n --line-numbers

#ftp配置
iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 21 -j DROP
iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 21 -j ACCEPT

#telnet配置
iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 23 -j ACCEPT
iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 23 -j DROP

#保存,重启
service iptables save
service iptables restart

2.2.4 实验结果

对于win7

无法访问ftp

可以telnet

对于win2003

可以ftp

无法telnet

2.3 配置iptables禁止网络服务

2.3.1 目的

实验目的:通过配置iptables防火墙来禁止某些网络服务

实现按网段访问ftp服务和telnet服务(ftp服务器和telnet服务器地址:10.37.0.2),具体要求是:

(1) 禁止任何主机ping 10.37.0.2,但允许主机10.37.0.2 ping其它主机

(2) 禁止任何主机访问ftp服务(ftp服务器地址:10.37.0.2)

实验原理:配置filter表中的FORWARD链

2.3.2 原始

  1. 打开Windows 7的cmd,输入ping 10.37.0.2,可以ping通10.37.0.2主机。

  2. 打开Windows server 2003的cmd,输入ping 10.37.0.2,可以ping通10.37.0.2主机。

  3. Windows server 2008可以访问一切

2.3.3 规则配置

  1. 在防火墙CentOS8的终端输入如下命令,清空防火墙规则。

    1
    2
    3
    4
    5
    #初始化
    iptables -F
    iptables -X
    iptables -Z
    iptables -L -n --line-numbers
  2. 配置防火墙,禁止访问icmp服务。在终端输入如下命令,在进入转发的数据包中,禁止源地址不是10.37.0.2的ping请求。

    1
    2
    3
    4
    5
    6
    #ping配置
    iptables -A FORWARD -p icmp --icmp-type 8 ! -s 10.37.0.2 -j DROP

    #ftp配置
    iptables -t filter -A FORWARD -s 192.168.37.0/24 -p tcp --dport 23 -j DROP
    iptables -t filter -A FORWARD -s 20.37.0.0/24 -p tcp --dport 23 -j DROP

  3. 保存,重启

    1
    2
    service iptables save
    service iptables restart

2.3.4 实验结果

  1. 在Windows 7的cmd上,输入ping 10.37.0.2,已经不能ftp和ping通10.37.0.2主机。

  2. 在Windows server 2003上,输入ping 10.37.0.2,也不能ftp和ping通10.37.0.2主机。

  3. 在10.37.0.2主机上输入ping 20.37.0.2和192.168.37.2,可以ping通。

2.4 使用脚本配置防火墙

在防火墙CentOS 8桌面新建firewall.sh,在终端输入命令vi firewall.sh

编辑脚本firewall.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#Remove any existing rules
iptables -F
iptables -X
iptables -Z

#setting for loopback interface
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

#setting default firewall policy
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -P INPUT DROP

#setting access rules
iptables -t filter -A INPUT -s 192.168.10.0/24 -p all -j ACCEPT

#http
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

#icmp
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

#others RELATED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT1
1
2
3
4
su root
vi firewall.sh
chmod 777 firewall.sh
./firewall.sh

1
2
3
4
5
6
1.完成输入后,在终端输入“ESC”“:wq”,退出编辑。(vi编辑器的使用可自学)
2.此时在终端输入命令./ firewall.sh执行脚本时提示权限不够,输入命令chmod +x firewall.sh为其添加权限。再执行脚本,则可执行成功。
3.在终端输入命令iptables -L -n --line-numbers查看防火墙规则,可以看到防火墙规则添加成功。
4.但此时添加的防火墙规则只存在于内存中,并没有写入iptables配置文件中。一旦重启就会消失。将添加的防火墙规则永久保存在配置文件中,在终端输入命令service iptables save。
5.在终端输入命令cat /etc/sysconfig/iptables,查看iptables配置文件。
6.可以看到此时的防火墙与“手动执行iptables命令配置防火墙”实验中配置防火墙一样。相比于手动配置防火墙,使用脚本配置防火墙更加方便和快捷,不用一条一条手动地添加规则。

注意:当电源错关

1
使用记事本打开*.VMX文件上加上一行代码disk.locking = "FALSE",重新启动该虚拟机。这种方法我并没有测试过,在此做一记录以备后用。