linux-iptables脚本可阻止除所需应用程序以外的所有Internet访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-iptables脚本可阻止除所需应用程序以外的所有Internet访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6706字,纯文字阅读大概需要10分钟。
内容图文
![linux-iptables脚本可阻止除所需应用程序以外的所有Internet访问](/upload/InfoBanner/zyjiaocheng/950/ef6ac3adf96644569b793ad758eae2e8.jpg)
背景:
我想拥有一个shell脚本,该脚本可以阻止所有进入我计算机的入站/出站流量,除非我决定要使用浏览器或其他一些应用程序,在这种情况下,我会召唤它,只有那些应用程序可以运行.
我研究过以前由聪明人制作的脚本(最后是到资源的链接),并花了一些时间自己学习使用iptables(仍然在这方面工作).
这是完成的工作的结果:
结果:
在运行Shell脚本之前,创建了一个名为internet的组:
须藤groupadd互联网
Shell脚本:
#!/bin/sh
#only allow apps run from "internet" group to run
# clear previous rules
sudo iptables -F
# accept packets for internet group
sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
sudo iptables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT
# also allow local connections
sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
# reject packets for other users
sudo iptables -A OUTPUT -j REJECT
# same process for IPv6:
sudo ip6tables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
sudo ip6tables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT
sudo ip6tables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
sudo ip6tables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
sudo ip6tables -A OUTPUT -j REJECT
这是我目前正在使用的Shell的另一部分,并非100%充满信心:
#DROPS ALL INPUT and FORWARD
sudo iptables -A INPUT -j DROP
sudo iptables -A FORWARD -j DROP
#ONLY ACCEPTS INPUT THAT WAS INITIATED BY SOME OUTPUT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#SAME REPEATED FOR IPv6
sudo ip6tables -A INPUT -j DROP
sudo ip6tables -A FORWARD -j DROP
sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
在执行完以上整个脚本之后,以下命令将打开一个属于Internet组的终端,因此该终端打开的任何应用程序(例如firefox)都可以访问Internet,而所有其他INPUT /输出将停止
sudo -g internet -s
题:
先前的逻辑顺序正确吗?目前,我正在测试所有功能,方法是安装网络监控软件(nethogs),测试每行代码并同时查看结果是否符合预期,但是我只是在2天前才开始学习iptables,因此,即使原始代码的来源是由经验丰富的编码人员完成的,我对将所有这些组合在一起以产生所需结果的能力也不是100%自信.感谢所有花时间阅读所有内容并参与讨论的人!
来源:
https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm
https://serverfault.com/questions/429400/iptables-rule-to-allow-all-outbound-locally-originating-traffic
附注:感谢@dirkt以前帮助我理解了iptables的许多基本概念,并回答了一些有关源代码的问题.
更新:
因此,在运行代码之后,似乎出了点问题.发生的情况如下.我运行shell脚本:
bash myscript
我收到2个错误,如下所示:
ip6tables v1.6.0: host/network
127.0.0.1
not found
Try `ip6tables -h’ or ‘ip6tables –help’ for more information.ip6tables v1.6.0: host/network
198.168.0.1
not found
Try `ip6tables -h’ or ‘ip6tables –help’ for more information.
但是其他一切运行良好,并且在执行sudo iptables -L时,我确实确认所有其他规则均已到位.之后,我尝试了以下方法:
>通过手动双击图标来运行Firefox.结果符合预期,立即出现服务器未找到错误,这是一个好兆头
>之后,我在终端中运行命令sudo -g internet -s,然后运行Firefox.现在…当我尝试加载网站时,它没有显示服务器未找到,但是它保持加载了很长一段时间.这使我相信可能是发送了输出响应,但输入被阻止了.
如果有人知道为什么会这样,我很想知道您的反馈!
解决方法:
I only started learning about iptables 2 days ago, so even though the sources of the original code is done by experienced coders, I am not 100% confident in my ability to put it all together to produced the desired result.
巧合的是,我正在同一时间寻找相同的解决方案,并看到了您的帖子.只需注册,希望对您和其他人有帮助.我仍在学习,欢迎提出建议和建议:)
对代码进行了一些更改.我需要打开所有端口到本地连接以使其正常工作.
还将192.168.0.1/24更改为192.168.0.0/16.此范围允许包含wifi / usb系绳.
# also allow local connections
#TODO. Use log to see which port are actually needed.
sudo iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
Is the previous logic in order?
更改此代码的顺序.
#ONLY ACCEPTS INPUT THAT WAS INITIATED BY SOME OUTPUT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#DROPS ALL INPUT and FORWARD
sudo iptables -A INPUT -j DROP
sudo iptables -A FORWARD -j DROP
还要将此代码添加到先前的代码之上.这些来自默认防火墙.最初它包含特定的接口.
sudo iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 67 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 67 -j ACCEPT
I get 2 errors as follows:
ip6tables v1.6.0: host/network 127.0.0.1 not found Try `ip6tables -h’ or ‘ip6tables –help’ for more information.
ip6tables v1.6.0: host/network 198.168.0.1 not found Try `ip6tables -h’ or ‘ip6tables –help’ for more information.
可能是因为您使用的是IP4地址.
将127.0.0.1更改为:: 1/128,并将198.168.0.1更改为fe80 :: / 10.
对于IPv6不能提供太多帮助.我不知道它是如何工作的,我也不认为我使用IPv6.完整的脚本:
#!/bin/sh #only allow apps run from "internet" group to run # clear previous rules sudo iptables -F # accept packets for internet group sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT sudo iptables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT #Some application need more port. Such as ping. sudo iptables -A OUTPUT -p icmp -m owner --gid-owner internet -j ACCEPT #Less secure. Open all port. #sudo iptables -A OUTPUT -m owner --gid-owner internet -j ACCEPT # also allow local connections #TODO. Use log to see which port are actually needed. sudo iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT sudo iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT # reject packets for other users sudo iptables -A OUTPUT -j REJECT #Taken from default rules. sudo iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp -m udp --dport 67 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 67 -j ACCEPT #ONLY ACCEPTS INPUT THAT WAS INITIATED BY SOME OUTPUT sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #DROPS ALL INPUT and FORWARD sudo iptables -A INPUT -j DROP sudo iptables -A FORWARD -j DROP #IPv6 Section # Flush ip6tables too sudo ip6tables -F # same process for IPv6: sudo ip6tables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT sudo ip6tables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT sudo ip6tables -A OUTPUT -d ::1/128 -j ACCEPT sudo ip6tables -A OUTPUT -d fe80::/10 -j ACCEPT sudo ip6tables -A OUTPUT -j REJECT sudo ip6tables -A INPUT -p udp -m udp --dport 53 -j ACCEPT sudo ip6tables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT sudo ip6tables -A INPUT -p udp -m udp --dport 67 -j ACCEPT sudo ip6tables -A INPUT -p tcp -m tcp --dport 67 -j ACCEPT sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo ip6tables -A INPUT -j DROP sudo ip6tables -A FORWARD -j DROP
内容总结
以上是互联网集市为您收集整理的linux-iptables脚本可阻止除所需应用程序以外的所有Internet访问全部内容,希望文章能够帮你解决linux-iptables脚本可阻止除所需应用程序以外的所有Internet访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。