Iptables,允许常用端口,阻止其余端口

Iptables,允许常用端口,阻止其余端口

我想允许人们连接到端口 22、80 和 443。此外,我希望能够从我的服务器执行 DNS 查找。

这是我正在尝试的:

iptables -A INPUT -m tcp -p tcp --dport 1 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 1 -j ACCEPT

iptables -A INPUT -m tcp -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 53 -j ACCEPT

iptables -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 80 -j ACCEPT

iptables -A INPUT -m tcp -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 443 -j ACCEPT

iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m udp -p udp --dport 22 -j ACCEPT

iptables -A INPUT -m tcp -p tcp -j REJECT
iptables -A INPUT -m udp -p udp -j REJECT

iptables -A OUTPUT -m tcp -p tcp -j ACCEPT
iptables -A OUTPUT -m udp -p udp -j ACCEPT

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:tcpmux
ACCEPT     udp  --  anywhere             anywhere             udp dpt:1
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     udp  --  anywhere             anywhere             udp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     udp  --  anywhere             anywhere             udp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp
ACCEPT     udp  --  anywhere             anywhere             udp

如果我省略这几行:

iptables -A INPUT -m tcp -p tcp -j REJECT
iptables -A INPUT -m udp -p udp -j REJECT

我可以 ping 出去,但默认情况下我并没有关闭所有端口,而这正是我的目的。为什么 INPUT 规则会影响我执行主机名查找的能力(例如从我的服务器“ping google.com”?)

答案1

您需要再次允许相关流量(即:回复您的传出 DNS 流量)。此外,您可能希望使用默认丢弃而不是特定的拒绝所有规则来节省一些空间。

iptables -A 输入 -p tcp -m 多端口 --dports 22,80,443 -j 接受

iptables -A INPUT -m 状态 --状态 RELATED,ESTABLISHED -j ACCEPT

iptables -P 输入删除

您的 OUTPUT 链规则不需要,因为链上目前有一个默认的 ACCEPT,并且端口 53 规则也不需要,因为您没有托管DNS 服务器,仅使用一个,因此流量通过 OUTPUT 链离开,而不是 INPUT 链。

答案2

正如解释的那样这里,您应该允许 ESTABLISHED/RELATED 连接的传入流量,因此只需在开头添加以下规则:

iptables -A INPUT -m 状态 --状态 ESTABLISHED,RELATED -j ACCEPT

相关内容