设置和配置防火墙

设置和配置防火墙

我是新手。我发现了以下设置防火墙的规则(摘自《Linux 工作原理》一书)

iptables -P INPUT DROP   # the default policy
iptables -A INPUT -s 127.0.0.1 -j ACCEPT     
iptables -A INPUT -p tcp '!' --syn -j ACCEPT   # accepting incoming 
connections from everywhere except those initiating a connection hence syn

到目前为止一切顺利(或看起来如此)。当我尝试添加 DNS 规则时,问题就出现了,以下是我尝试过的方法,但似乎没有成功(一次一个):

INPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -s 127.0.1.1 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -j ACCEPT

期望结果: 防止任何从外部初始化连接(ssh,icmtp,...),启用 DNS 查找和 Web 浏览(curl,wget,telnet...),我认为在本地运行 Web 服务器或数据库服务器无关紧要...

任何帮助,将不胜感激。

答案1

我建议您创建一些输入规则,允许所有已建立和相关的流量,例如:

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

您还应该始终允许您的环回设备:

# 允许环回接口执行任何操作。
$IPTABLES -A 输入 -i lo -j 接受
$IPTABLES -A 输出 -o lo -j 接受

如果你的默认输出策略是接受,那么大多数问题应该会消失。否则你还应该添加:

$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

并打开 HTTP(s)、DNS、ICMP 或任何您需要的端口。

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

https://en.wikibooks.org/wiki/Communication_Networks/IP_Tables

答案2

允许建立会话 我们可以允许已建立的会话接收流量:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

如果上面这行代码不起作用,那么你可能使用的是劣质 VPS,其提供商没有提供该扩展,在这种情况下,可以使用劣质版本作为最后的手段:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许特定端口上的传入流量

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT

阻断交通

sudo iptables -A INPUT -j DROP

通过编辑 iptables 启用环回:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

记录不需要的流量:

sudo iptables -I INPUT 4 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

确认更改已成功完成:

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere

使用iptables -L -v以获取更多详细信息:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
    0     0 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
    0     0 DROP       all  --  any    any     anywhere             anywhere

清空 iptables:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

保存 iptables

如果你现在重启机器,你的 iptables 配置就会消失。不过,你不必每次重启时都输入这些配置,而是可以保存配置并让它自动启动。

将防火墙规则保存到文件中

sudo sh -c "iptables-save > /etc/iptables.rules"

脚本 /etc/network/if-pre-up.d/iptablesload 将包含:

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

并且 /etc/network/if-post-down.d/iptablessave 将包含:

#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
   iptables-restore < /etc/iptables.downrules
fi
exit 0

然后确保赋予两个脚本执行权限:

sudo chmod +x /etc/network/if-post-down.d/iptablessave
sudo chmod +x /etc/network/if-pre-up.d/iptablesload

来源

相关内容