我正在寻找一种方法来阻止我的 Linux 上的所有互联网输入/输出(少数选定的应用程序除外),并且我发现了以下使用 iptables 命令的脚本:
在运行脚本之前,会创建一个名为“internet”的组 (
sudo groupadd internet
)。
#!/bin/sh
# Firewall apps - 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
# 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 -p tcp -j REJECT
# open a shell with internet access
sudo -g internet -s
来源: https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm
唯一的问题是它似乎对我不起作用。运行脚本后,我使用同一终端通过键入 来调用 Firefox firefox
,浏览器将打开,但无法访问互联网。我得到的只是找不到服务器。在运行脚本之前,互联网访问良好。
问题:为什么我会遇到这个问题?我了解正在执行的代码,但我无法弄清楚为什么 Firefox 浏览器无法获得连接。
答案1
一般来说,在标准 Centos/RHEL 6 版本中发现的基本上允许传出流量但限制 SSH 传入流量的内容是:
在/etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [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 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
答案2
首先,清理系统上可能正在运行的所有规则
iptables -X
iptables -F
iptables -Z
然后,建立默认策略
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
允许一切本地化
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -i lo -j ACCEPT
然后开始开放服务[端口]
例如,上网冲浪。
iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -m multiport --sports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
另一条规则遵循相同的方案规则。
如果您发现任何错误,英语不是我的主要语言。