我的 iptables 规则有些问题。在我的本地主机上运行 MySQL 服务器 - 在 3306 端口上。
我写了一些规则:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 3306 -m tcp -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m tcp -j ACCEPT
但
IP OUTPUT drop: IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=3306 DPT=38124 WINDOW=43690 RES=0x00 ACK SYN URGP=0
还有我的锁链
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:57261 state NEW,ESTABLISHED
ACCEPT tcp -- xx.xxx.xxx.xx 0.0.0.0/0 tcp spt:2049 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED
ACCEPT tcp -- xx.xxx.xxx.xx 0.0.0.0/0 tcp spt:443 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 tcp
ACCEPT udp -- xx.xxx.xxx.xx 0.0.0.0/0 udp spt:53 state ESTABLISHED
ACCEPT tcp -- xx.xxx.xxx.xx 0.0.0.0/0 tcp spt:53 state ESTABLISHED
LOG all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 12/min burst 5 LOG flags 0 level 4 prefix "IP INPUT drop: "
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:57261 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 xx.xxx.xxx.xx tcp dpt:2049 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 xx.xxx.xxx.xx tcp dpt:443 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:3306 tcp
ACCEPT udp -- 0.0.0.0/0 xx.xxx.xxx.xx udp dpt:53 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 xx.xxx.xxx.xx tcp dpt:53 state NEW,ESTABLISHED
LOG all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 12/min burst 5 LOG flags 0 level 4 prefix "IP OUTPUT drop: "
DROP all -- 0.0.0.0/0 0.0.0.0/0
为什么会这样?
答案1
这输出规则不起作用,因为客户端计算机上的目标端口是随机的
为了正确解决该问题,您可以插入如下规则:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 3306 -m tcp -j ACCEPT
和
iptables -A OUTPUT -p tcp --sport 3306 -m tcp -j ACCEPT
或者
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
您可以通过指定- 运动 (源端口)或允许有关的和已确立的流量,前提是你有一个可用的 conntrack 模块(默认情况下应该加载)