我有几个 ip 范围,我希望我的服务器能够连接和用户连接。其他一切都应该被阻止。
我应该如何使用 iptables 做到这一点?
我的操作系统是基于 Debian 的 linux 发行版。
我的系统管理员给了我一个包含 iptables 规则的文件。我输入什么命令来加载它?
我之前看过他做的,他在1行里做的!像...iptables > thefile.dat ??
我有一套看起来很奇怪且令人费解的规则,目前对我有用。有没有办法“导出”这些内容并将它们保存到文件中,以便以后可以在出现问题时恢复它们?
我在 Docker 容器内运行 MySQL 时遇到问题。我的测试映像是从以下 Dockerfile 构建的:
# See: https://index.docker.io/u/brice/mysql/
FROM ubuntu:12.10
MAINTAINER Joni Kahara <joni.kahara@async.fi>
# Because docker replaces /sbin/init: https://github.com/dotcloud/docker/issues/1024
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -s /bin/true /sbin/initctl
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install mysql-server
RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
RUN /usr/bin/mysqld_safe & \
sleep 10s && \
mysql -e "GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES;"
EXPOSE 3306
VOLUME ["/var/lib/mysql", "/var/log/mysql"]
CMD ["mysqld_safe"]
Run Code Online (Sandbox Code Playgroud)
从上面的文件构建图像后,我运行它:
docker run …Run Code Online (Sandbox Code Playgroud) 我需要将所有对端口 80 的请求转发到 8020。我用谷歌搜索了一下,得到:
iptables -t nat -I PREROUTING --source 0/0 --destination 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 8020
现在如果我必须撤消它,我该怎么做(除了重新启动系统)?
我遇到过这样的情况,客户端需要将一组不到 100 万个单独的 IP 地址(无子网)列入黑名单,并且网络性能是一个问题。虽然我猜想 IPTables 规则对性能的影响比路由小,但这只是猜想。
有没有人有任何确凿的证据或其他理由支持 IPTables 或空路由作为将长 IP 地址列表列入黑名单的解决方案?在这种情况下,一切都是自动化的,因此易用性并不是真正的问题。
经过一些测试和开发,这些选项似乎都不可行。似乎路由查找和 iptables 都通过规则集进行线性搜索,并且处理这么多规则花费的时间太长。在现代硬件上,将 100 万个项目放入 iptables 黑名单会使服务器减慢到每秒大约 2 打数据包。所以IPTables和空路由都出来了。
ipset,正如 Jimmy Hedman 所推荐的那样,会很棒,只是它不允许您在一组中跟踪超过 65536 个地址,因此除非有人有任何想法,否则我什至无法尝试使用它。
显然,阻止这么多 IP 的唯一解决方案是在应用程序层中进行索引查找。不是这样吗?
更多信息:
此实例中的用例是阻止 IP 地址的“已知违规者”列表访问 Web 服务器上的静态内容。FWIW,通过 Apache 进行阻塞Deny from同样缓慢(如果不是更慢),因为它也进行线性扫描。
仅供参考:最终的工作解决方案是将 apache 的 mod_rewrite 与 berkeley DB 映射结合使用来对黑名单进行查找。伯克利数据库的索引性质允许列表以 O(log N) 性能扩展。
这是一个建议的 关于理解和调试 Linux 系统上的软件防火墙的规范问题。
为了回应 EEAA 的回答和@Shog 的评论,我们需要一个合适的规范问答来结束关于 iptables 的常见的相对简单的问题。
什么是调试 Linux 软件防火墙问题的结构化方法,netfilter包过滤框架,通常被用户界面接口iptables引用?
有哪些常见的陷阱、反复出现的问题和简单或更模糊的事情,以检查偶尔的防火墙管理员可能会忽略或以其他方式从了解中受益?
即使您使用诸如UFW、FirewallD(又名firewall-cmd)、Shorewall或类似的工具,您也可以从没有这些工具提供的抽象层的情况下查看引擎盖中受益。
这个问题不是用于构建防火墙的方法:检查产品文档,例如为iptables Trips & Tricks贡献食谱或搜索标记的iptables ufw firewalld firewall-cmd问题以获取现有的常见且备受推崇的高分问答环节。
我需要将我的机器配置为仅允许进出 serverfault.com 的 HTTP 流量。所有其他网站、服务端口均无法访问。我想出了这些 iptables 规则:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
它不太好用:
在我放下一切之后,继续规则 3:
iptables -A 输出 -p tcp -d serverfault.com --dport 80 -j 接受
我收到此错误:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' …Run Code Online (Sandbox Code Playgroud) 有人告诉我这是可能的,但我在谷歌或手册页上找不到任何内容。
我需要在一定时间内禁止 IP,然后自动取消禁止。
目前我有一个设置,由于配置需要永远修复,我有一个只能通过 ipv4 访问的服务器。但是,我也有一台可以通过 ipv6 访问的服务器。我想知道是否可以使用 iptables 将某个端口上的 ipv6 流量从一台服务器转发到另一台使用 ipv4 流量的服务器。