我的是 centos6.5 ,, iptables 配置如下
filter
INPUT DROP [53:7426]
FORWARD ACCEPT [0:0]
OUTPUT ACCEPT [108:16569]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT
mysql 的 user 表中:
mysql> select host,user from user;
+-----------+-----------+
| host | user |
+-----------+-----------+
| % | turing |
| 127.0.0.1 | root |
| localhost | root |
+-----------+-----------+
然而事实情况是,当我打开 iptables , mysql 就连接超时,关闭 iptables 就可以正常连接。。。很奇怪。
1
jasontse 2016-04-03 10:56:04 +08:00 via iPad 1
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
2
j4fun 2016-04-03 12:33:16 +08:00
INPUT DROP [53:7426] 并不奇怪,你的 INPUT 默认是 drop
|
4
shiji 2016-04-03 12:52:00 +08:00
个人觉得一楼的没用,你当前已经开放 3306 ,不管什么 state 都会畅通无阻。
我觉得问题在你的 INPUT DROP [53:7426] 这一行。还没等后面的开门呢,这句就直接把数据包扔了。 所以改成这样应该就行了: filter INPUT ACCEPT [0:0] FORWARD ACCEPT [0:0] OUTPUT ACCEPT [108:16569] -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j DROP COMMIT ====================== 另一个方法: 把你所有的-A 改成-I -A 是 append ,规则往后插 -I 是 Insert , 规则往前插,这样不管之前有什么规则,你这条优先执行 |
5
shiji 2016-04-03 13:03:09 +08:00
另外以后的那句插进去也有好处。
主要体现在你 SSH 的时候更新 Iptables 不会不小心断开连接。 比如你不小心屏蔽了 tcp22 ,刷新了 iptables 之后你的 SSH 依旧会保持连接因为是之前创建的连接,属于 ESTABLISHED ,放行。但是你想再新开一个 SSH 就不行了,因为新的这个 State 属于 NEW ,数据包被扔~ |
7
raysonx 2016-04-03 14:40:08 +08:00
我觉得楼主的规则没有问题,楼主执行一下`iptables -L -n`看看?
有没有试过重启 iptables ? @Devin 个人也认为默认 DROP 不是个好习惯,什么时候手滑执行了`iptables -F`, SSH 连接直接跪。 |
8
Lentin 2016-04-03 14:50:41 +08:00
DROP 放在最后
|
9
phttc OP @shiji 22 和 3306 我是一起加进去的, 22 和 80 没问题的,我试过。唯独 3306 超时了。我根据 2 楼的加了那条以后就可以了。。。我猜想是 RELATED 这个状态,但是又无法说服自己。
|
10
phttc OP |
12
phycgp 2016-04-05 11:03:07 +08:00 via iPhone
|
13
phttc OP @phycgp 是的。后来我在折腾另外一个问题的时候找到了原因。如果光是这样配置 iptables ,会导致 yum , wget 之类的都会超时,也就是说,当服务器自己发起一些行为的时候,也会被防火墙给干了。解决的方式同样是加入-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 。来源于 http://www.server110.com/linux/201309/1858.html 不过他只说了解决方法,却没说原因
|
14
hzqim 2016-04-05 23:08:23 +08:00
@phttc 这位仁兄有解析 http://dallascao.com/cn/iptables-tutorial-for-newbies/
为毛要允许状态 ESTABLISHED 和 RELATED 的入站数据呢?因为你的服务器同时也是台电脑,还要从别的服务器下载东西。下载时,你的服务器先向别的服务器发出连接请求(new),别的服务器允许你连接,连接建立(ESTABLISHED)之后,就需要接受别的服务器发来的数据,对于你的服务器来讲属于 INPUT 。也就是说,如果没有 iptables -A INPUT -m state – state ESTABLISHED,RELATED -j ACCEPT 这句, wget curl 啥的就都不工作了。 数据是双向的,服务器的另一个身份是客户端。 |