使用iptables规则,禁止外部服务器访问本地服务器中容器部署的redis

文章描述了如何通过iptables的mangle表设置规则,阻止外部对运行在Docker中的Redis服务的6379端口的访问,以确保数据安全。通过添加IPPREROUTING规则,对来自ens33网卡的TCP流量在目标端口为6379的数据包进行DROP操作,从而仅允许服务器内部访问。
摘要由CSDN通过智能技术生成

背景:
我的服务器上使用docker部署了redis,但是redis暴露了6379端口,同时redis未设置密码,有数据泄露风险。为此,我需要在服务器上添加iptables规则,禁止其他用户访问我的redis,只允许我服务器上的程序或容器访问redis的6379端口。

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS          PORTS                                       NAMES
c47698614b64   redis:7.0.4   "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
4103d0cf15c8   nginx         "/docker-entrypoint.…"   13 minutes ago   Up 13 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp       nginx
[root@localhost ~]# 

查看本地服务器网卡:

[root@localhost ~]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c5:07:03 brd ff:ff:ff:ff:ff:ff
    inet 11.0.1.11/24 brd 11.0.1.255 scope global noprefixroute dynamic ens33
       valid_lft 5284214sec preferred_lft 5284214sec
    inet6 fe80::55ea:6184:f0d5:bfc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:3c:b4:fa:4c brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:3cff:feb4:fa4c/64 scope link 
       valid_lft forever preferred_lft forever
7: veth9c397c3@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 4a:ea:ac:0f:9d:9e brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::48ea:acff:fe0f:9d9e/64 scope link 
       valid_lft forever preferred_lft forever
11: vethbcee86e@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 82:44:a0:94:22:2b brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::8044:a0ff:fe94:222b/64 scope link 
       valid_lft forever preferred_lft forever

上面可以看出,我的11.0.1.11所在的网卡为ens33。
从上面的背景部分,我们可以看出当前的需求:只允许服务器内部访问,不允许外部访问,也就是凡是通过11.0.1.11这块网卡过来的请求全都拒绝掉。
需求搞明白了,下面开始分析如何操作。

首先要搞明白的是iptables底层的“四表五链”,默认的是filter表,我们的docker的规则是不可以放在这里的,使用iptables -t raw -L 、iptables -t nat -L和iptables -t mangle -L可以看到nat表和mangle表都有很多规则,而raw表是空的;需要注意的是nat表不能配置DROP规则,全是ACCEPT规则。所以我们的docker的访问规则就放在mangle表里。

综上所述,我们要使用的表是mangle,要禁止访问的端口是6379,要禁止的网卡是ens33,那么操作命令如下:

iptables -t mangle -I PREROUTING -p tcp --dport 6379 -i ens33 -j DROP
service iptables save

然后可以测试一下:
使用客户机telnet 11.0.1.11 6379是不通的,在nginx容器内测试redis容器的6379端口是通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dustin.Hoffman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值