我的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
为什么会发生?
OUTPUT规则不起作用,因为客户端计算机上的目标端口是随机的
要正确解决这个问题,你可以插入像下面这样的规则:
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
你可以通过指定一个–sport (源端口)来允许它,或者允许RELATED和ESTABLISHEDstream量,只要你有一个工作conntrack模块(默认情况下应该加载)