浅谈linux网络防火墙

1️⃣ iptables/netfilter网络防火墙

  • 充当网关
  • 使用filter表的FORWARD链
  • 注意的问题:
    • 请求-响应报文均会经由FORWARD链,要注意规则的方向性
    • 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行

2️⃣ 实验:模拟网络防火墙实现内外网分离

▶ 环境搭配

  • 1号内网机器配置
ip route flush dev eth0
ipconfig eth0 192.168.39.14                       / 指定内网地址
ip route add 192.168.39.0/24 dev eth0             / 创建路由表
ip route add default via 192.168.39.39 dev eth0   / 网关指向防火墙机器
yum -y install httpd
systemctl start httpd
echo "welcome to lanserver" > /var/www/html/index.html

在这里插入图片描述

  • 配置2号防火墙机器
/ 查看路由转发是否开启
[root@centos7 ~]#sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0

/ 永久开启写入文件
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
/ 加载生效
[root@centos7 ~]#sysctl -p
net.ipv4.ip_forward = 1
  • 配置3号互联网机器
yum -y install vsftpd httpd
systemctl start vsftpd httpd
echo "weclome to netserver" > /var/www/html/index.html
vim /etc/sysconfig/netwerk-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO=static
DEFROUTE="yes"
NAME=eth0
DEVICE=eth0
ONBOOT="yes"
PREFIX=16
IPADDR=172.20.1.248
GATEWAY=172.20.1.247                 / 网关指向firewall
DNS1=180.76.76.76

/ 加载启用网卡配置
nmcli con reload
nmcli con up eth0

/ 测试是否访问内网机器
[root@netserver ~]#ping -c3 192.168.39.14
PING 192.168.39.14 (192.168.39.14) 56(84) bytes of data.
64 bytes from 192.168.39.14: icmp_seq=1 ttl=63 time=1.71 ms
64 bytes from 192.168.39.14: icmp_seq=2 ttl=63 time=5.63 ms
64 bytes from 192.168.39.14: icmp_seq=3 ttl=63 time=1.50 ms

--- 192.168.39.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.503/2.951/5.635/1.899 ms

▶ 开始配置防火墙规则

  • 允许内网(192.168.39.0/24)的主机访问外网(172.20.0.0/16)的ftp, ssh服务,但外网的主机不允许访问内网主机的所有服务
/ 加载ftp模块
lsmod | grep ftp
modprobe nf_conntrack_ftp

/ 定义要求所需要的规则
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.39.0/24 -p tcp --dport 21:22 -j ACCEPT
iptables -A FORWARD -j REJECT
  • 内网访问互联网ftp,ssh服务,均成功
    在这里插入图片描述

  • 外网访问内网任何服务,全部拒绝
    在这里插入图片描述

  • 增加外网访问内网的httpd服务,其他服务拒绝

/ 定义要求所需要的规则

iptables -I FORWARD 2 -p tcp --dport 80 -j ACCEPT

在这里插入图片描述

3️⃣ NAT表

▶1 NAT基本概念

  • NAT:network address translation
    支持链:PREROUTING,INPUT,OUTPUT,POSTROUTING
    请求报文:修改源/目标IP,由定义如何修改
    响应报文:修改源/目标IP,根据跟踪机制自动实现

  • SNAT:source NAT
    支持链:POSTROUTING, INPUT
    让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
    请求报文:修改源IP

  • DNAT:destination NAT
    支持链:PREROUTING, OUTPUT
    把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP
    请求报文:修改目标IP

  • PNAT:port NAT,端口和IP都进行修改,发生在多台本地网络主机的端口冲突时

▶2 SNAT配置:通过net表的target配置

  • SNAT:基于nat表的target,适用于固定的公网IP
  • SNAT选项:
    --to-source [ipaddr[-ipaddr]][:port[-port]]
    --random
  • MASQUERADE:动态IP,如拨号网络

🌐 实验:通过SNAT实现本地网络主机访问外网,而不会暴露本地网络主机IP

  • 当外网IP为固定IP时,就是防火墙连接互联网的地址
    iptables -t nat -A POSTROUTING -s 192.168.39.0/24 -j SNAT --to-source 172.20.1.247
  • 当外网IP为动态IP时
    iptables -t nat -A POSTROUTING -s 192.268.39.0/24 -j MASQUERADE
  • 内网访问外网httpd
    curl 172.20.1.248
    外网服务器httpd服务日志显示源地址为172.20.1.247,实现了SNAT功能
    在这里插入图片描述

▶3 DNAT配置:通过net表的target配置

  • DNAT:nat表的target,适用于端口映射
  • 格式:DNAT --to-destination [ipaddr[-ipaddr]][:port[-port]]

🌐 实验:实现本地网络主机通过外网的指定网址提供http服务

  • 环境搭配:
    外网指定IP:172.20.1.247,内网主机IP:192.168.39.14
    外网IP端口80指向内网主机的80端口,外网IP端口8080指向内网主机的8000端口
  • 配置内网主机多端口httpd服务
/ 创建目录生成访问页面
mkdir -p /data/website2
echo "welcome to LAN1" > /data/website1/index.html
echo "welcome to LAN2" > /data/website2/index.html
/ 编写配置文件
vim /etc/httpd/conf.d/test.conf
listen 8080
<virtualhost *:8080>
documentroot /data/website2/
<directory /data/website2>
allow from all                / httpd2.2的写法
</directory>
</virtualhost>

httpd -t
service httpd restart
  • 修改防火墙规则
/ 开放tcp 8080端口
iptables -I FORWARD 3 -p tcp --dport 8080 -j ACCEPT

/ 定义DNAT表
 iptables -t nat -A PREROUTING -d 172.20.1.247 -p tcp --dport 80 -j DNAT --to-destination 192.168.39.14:80
 iptables -t nat -A PREROUTING -d 172.20.1.247 -p tcp --dport 8080 -j DNAT --to-destination 192.168.39.14:8080
  • 外网主机访问内网不同的端口,打开不同的web网页
    在这里插入图片描述
  • 内网主机httpd的访问日志
    在这里插入图片描述

▶4 转发REDIRECT

  • REDIRECT,是NAT表的target,
  • 通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口
  • 可用于PREROUTING OUTPUT链
  • 格式:REDIRECT --to-ports port[-port]
  • 实验:实现将对主机80,8080端口的访问转发至主机的8081端口
/ 修改配置文件,增加一个8081端口主机
listen 8081
<virtualhost *:8081>
documentroot /data/website1/
<directory /data/website1>
allow from all              / 注意:我这里用的是httpd2.2版本
</directory>
</virtualhost>
/ 制作访问页面
echo "welcome to lanserver 8081" > /data/website1/index.html
service httpd restart

/ 定义要求所需要的防火墙策略,注意这个是内网主机的端口转发
iptables -t nat -A PREROUTING -d 192.168.39.14 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 8081
  • 外网访问测试
    在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值