iptables -I INPUT -p TCP -j ACCEPT
执行上述命令是否会增加 Centos 7 服务器的安全风险?如何回滚该命令?
以下命令可以回滚上述命令吗?
iptables -D INPUT -p TCP -j ACCEPT
这有什么作用呢?
答案1
好的,让我试着弄清楚......
这条规则是个好主意吗
iptables -I INPUT -p TCP -j ACCEPT
实际上意味着,你的机器将接受任何 TCP 连接,无论它来自哪里,也无论它去往哪个本地端口。不是这样做。仅根据您想提供服务,并且您希望向外界开放。例如,如果您正在运行一个 Web 服务器,并且希望任何外部人员都能够使用以下命令访问它,那么https
您可以发出类似
iptables -A INPUT -p TCP --dport https --syn -m conntrack --ctstate NEW -j ACCEPT
让我带你经历一下……
A input
意思是:将其添加到输入表中。注意:规则不是插入,而是附加到 INPUT 表。预计 INPUT 的默认策略是丢弃,在我们之前没有规则会无条件丢弃数据包。-p TCP
意思是:对于 TCP 协议--dport https
意思是:如果连接到我们的本地端口 443--syn
意思是:如果到达的数据包是 TCP 连接的第一个数据包,也就是说,有人实际上正在尝试建立真正的连接-m conntrack
意思是:一旦建立连接,就记住它,这样我们就可以允许任何到达并属于该连接的数据包--ctstate NEW
意思是:评估连接状态,如果连接是新的,则接受它(这比更复杂,--syn
但基本上使用相同的机制)-j ACCEPT
意思是:如果以上所有条件都满足,则接受数据包
为了使连接跟踪正常工作(-m conntrack
),您需要一个类似
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
可能作为 INPUT 表中的第一条规则。这允许任何已成功建立的连接的数据包通过防火墙。
你能用这种方式恢复吗
不可以。使用 iptables 时,如果想删除一条规则,则iptables -D chain
必须提供数字。您实际想要删除的规则必须提供数字。您可以通过向--line-numbers
iptables 提供数字来获取该数字,如下所示
iptables -vnL --line-numbers
可能会产生如下输出
Chain INPUT (policy DROP 11379 packets, 2225K bytes)
num pkts bytes target prot opt in out source destination
1 121M 340G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 552K 39M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
3 161 13182 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
5 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 12
6 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:113 flags:0x17/0x02 reject-with tcp-reset
7 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 15618 packets, 1630K bytes)
num pkts bytes target prot opt in out source destination
这數量列显示要传递给的数字iptables -D
。但不要忘记也传递链的名称。
记录在案:是的,这是我的设置,其中很多 docker 内容被剥离了:-)。