Linux使用iptables实现内网隔断与外网控制

前言

笔者在内网部署了一台linux服务器,因是直接连接的路由器,不好搭建单独的内网,同时该服务器有存在重要资料,为保证网络环境的安全,故想切断该服务器与外网的连接,查阅网上资料,加上自己的实践与整理,经过不断的重启和配置及踩坑,最终得以实现,分享与需要的朋友。

1.先添加 22端口允许通行,否则会连不上 ssh,

添加input记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT
添加output记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

2.保存规则文件

Ubuntu默认没有iptables配置文件,需通过 iptables-save > /etc/network/iptables.up.rules 生成

iptables-save > /etc/network/iptables.up.rules

因为linux重启后规则就会失效,后面重启后需要使用 iptables-apply 进行重载文件 或者执行 iptables-restore < /etc/network/iptables.up.rules 重置规则

3.添加允许的规则

因OUTPUT 拒绝出站,会把被动出站请求响应断掉,所以需要开启允许内网段的被动出站

# 接受192.168的被动出站,否则请求无法返回
iptables -A OUTPUT -s 192.168.0.0/16 -j ACCEPT
# 根据实际情况来配置
iptables -A OUTPUT -s 172.18.0.0/16 -j ACCEPT

4.限制其他外网的访问

执行前确保已经允许ssh入站和出站,否则将会无法连接主机,切记切记

iptables -A OUTPUT -d 0.0.0.0/0 -j DROP

后期若想允许某个规则可出站,则直接配置在该条前面即可

保存规则

iptables-save > /etc/network/iptables.up.rules

最后配置文件如下

*filter
:INPUT ACCEPT [1207:87648]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -d 192.168.0.0/16 -j ACCEPT
-A OUTPUT -d 172.18.0.0/16 -j ACCEPT
-A OUTPUT -j DROP

注意 要先配置允许的,然后才配置拒绝的,否则允许的规则将不生效

5.配置重启执行加载规则

因为linux重启后,所有规则将会消失,所有需要linux启动的时候执行以一下 iptables-restore < /etc/network/iptables.up.rules

可以 /etc/rc.local中增加 该命令,重启的系统会执行一遍,ubuntu系统可能没有rc.local,需要添加,可自行百度添加,笔者这里不做重点赘述。

6.测试效果

ping 内网

# ping 192.168.2.193
PING 192.168.2.193 (192.168.2.193) 56(84) bytes of data.
64 bytes from 192.168.2.193: icmp_seq=1 ttl=128 time=2.62 ms
64 bytes from 192.168.2.193: icmp_seq=2 ttl=128 time=2.48 ms
64 bytes from 192.168.2.193: icmp_seq=3 ttl=128 time=2.36 ms

ping外网

ping 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

以上即可完成内网访问外网的控制和隔绝


版权声明:本文为kelenwait原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。