zeb*_*aut 7 debian iptables nat
我试图弄清楚 NAT 和 iptables 是如何工作的。当我处于学习它的反复试验阶段时,我发现了两个有点矛盾的方法。
一种方法是使用脚本iptables
一个接一个地调用规则。该脚本似乎被命名和存储,以便它在系统启动期间尽早执行,我认为一个问题可能是其他脚本可能会在它之后调用并撤消其意图。我什至认为我在使用备份(00-firewall-old)保存并重命名原始脚本(00-firewall)时偶然做了一次。Howto 的示例脚本是:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)
另一个 howto不使用脚本,而是使用定义了一些过滤规则的文件。它看起来像这样:
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Run Code Online (Sandbox Code Playgroud)
两种设置iptables的方式各有什么优缺点?非常感谢背景信息,因为我对整个事情还很陌生。例如,我不知道谁在从后者的 howto 中读取文件,以及它是如何处理的。我的感觉告诉我第二个 howto 建议了一个更好的解决方案,但究竟为什么呢?
我过去使用过这两种技术。这些天,我倾向于两者的混合。
如果您的规则集有五个或六个简单的规则,那么任何一种方法都可以。当你有大的规则集时,事情开始变得有趣:大型安装,你的防火墙盒做了一些路由,等等。
请记住,无论您如何加载规则集,您都可以用脚射击自己。:)
你制作一个 bash 脚本、一个 Perl 脚本、一个 Python 脚本——见鬼,为所有关心的人写一个 Lisp 或Befunge程序!在脚本中,您可以创建所需的所有 Netfilter 规则。
优点:
iptables
(这可能受到我的前几个防火墙设置早于iptables-save
以及 Netfilter的事实的影响——但那是另一回事了)缺点:
将您的规则添加到规则集文件,然后使用iptables-restore
加载它(或仅使用 保存您现有的规则集iptables-save
)。这是 Debian 默认所做的。
优点:
iptables-restore
是一个 C 程序,与 shell 脚本相比,它的速度非常快。即使在体面的机器上,差异也很明显,但在更普通的硬件上,它的速度要快几个数量级。iptables
)只能在filter
桌面上运行,您可能会忘记您可以使用其他工具(其中可能包含有害规则)。这样,您就可以看到所有表。缺点:
我已经在我丰富的空闲时间开发了一段时间。我计划使用我现在拥有的相同的基于脚本的设置,但是一旦规则集被加载,它就会保存它,iptables-save
然后缓存它以备后用。您可以拥有一个具有所有优点的动态规则集,但它可以非常快速地加载,例如,防火墙框重新启动。
归档时间: |
|
查看次数: |
12415 次 |
最近记录: |