Ubuntu中iptables配置

iptables配置

1. 准备工具

  • Ubuntu18.04:作为防火墙
  • win2003:作为外部服务器
  • win7:作为客户机

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
#开启
sudo modprobe ip_tables

#帮助
iptables -h
-V 版本
-t 查看表(默认只要filter)
-t filter/simpleware1 在表filter中新建链simpleware1
-L xxx 查看链和链的规则(表filter默认的只有INPUT,OUTPUT,FORWARD)
-N xxx 建新链(删除filter表的xxx)
-X xxx删除链(删除filter表的xxx)(默认删除表filter中所有自定义的链)
-P 修改某条链的默认规则
-P INPUT DROP 将表filter中的链INPUT的默认规则改为DROP
-p udp/tcp 指定协议
--dport 80/8080 指定端口
-j 选项指定规则的目标
-j DROP 禁止某条规则
-n 使用数字形式(numeric)显示输出结果
-n --line-numbers 查看规则序列号
-i 插入一条或多条规则
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-F INPUT 清空表中某链上的所有规则
-F 不指明链名时,删除表filter中所有链上的规则
-Z 将所有表的所有链的字节和数据包计数器清零
-E 重命名用户定义的链,不改变链本身
! 禁止
1
2
#查看iptables的表名,默认filter
sudo cat /proc/net/ip_tables_names

3. 网络地址转换(NAT)

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

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

3.1 修改防火墙IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//查看当下IP,可以看到是ens33接口
ifconfig -a

//配置接口文件
sudo vim /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
addresses: [192.168.37.200/24]
dhcp4: no
gateway4: 192.168.37.1
nameservers :
addresses: [8.8.8.8]
version: 2

//应用
sudo netplan apply

3.2 防火墙开启http服务

1
2
3
4
5
6
7
8
9
//安装apache
sudo apt-get install apache2

//查看目录配置文件
cd /etc/apache2
ls

//重启apache2
sudo /etc/init.d/apache2 restart

3.3 配置iptables

编辑文件 /etc/iptables.rules

1
vi /etc/iptables.rules
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Firewall configuration written by system-config-firewall
# # Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

加载规则

1
iptables-restore < /etc/iptables.rules

查看规则

1
sudo iptables -L -n

3.4 开启iptables

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
30
31
32
33
34
//开启
sudo modprobe ip_tables

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

//保存配置的防火墙规则
iptables-save > /etc/iptables.rules

//查看配置的防火墙规则。
cat /etc/iptables.rules

4. 按网段访问网络资源

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

(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链

4.1 按网段访问ftp服务器

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

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

(3) 在防火墙CentOS 6.5的终端输入如下命令,清空防火墙规则。

1
2
3
4
5
su root
iptables -F
iptables -X
iptables -Z
iptables -L -n --line-number

(4) 配置防火墙,按网段访问ftp服务。

在终端输入如下命令,在转发的数据包中,如果源地址为192.168.X.0/24,目标端口为21,则将该数据包丢弃,同时允许源地址为20.X.0.0/24,目标端口为21的数据包通过,这一条防火墙规则可加可不加。

1
2
3
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

(5) 在终端输入如下命令,将添加的规则保存到iptables配置文件中,重启防火墙,查看防火墙规则。

1
2
3
4
5
iptables-save > /etc/iptables.rules

/etc/init.d/iptables restart

cat /etc/iptables.rules

(6) 此时在Windows 7的cmd上,输入ftp 10.37.0.2,已经不能连接ftp服务了。

但在Windows server 2003的cmd上,输入ftp 10.37.0.2,可以继续连接ftp服务。

4.2 按网段访问telnet服务器