centos下iptables端口配置

by pxz


发布于: 2016-06-23 所属分类: linux 服务器 标签: centos iptables  313


<p><span style="color: #ff0000;">在配置之前, 大家需要特别特别特别注意的是, 因为服务器通常都是通过ssh进行管理的, 大家千万别误操作把ssh端口能禁了.</span></p> <p>对于一个php的网站服务器, 通常我们需要开启的端口是</p> <ol> <li>ssh端口 : tcp 22</li><li>http端口 : tcp 80</li><li>https端口 : tcp 443</li><li>ftp端口: tcp 21和20</li><li>mysql端口: tcp 3306</li><li>dns端口: udp 53</li></ol> <p>下面是配置方法:</p> <p><strong>1. 首先开启ssh的22端口, 这一步很重要,在把所有链的规则设为DROP之前,先把ssh的22端口设置成ACCEPT, 可以防止无法通过ssh访问服务器</strong></p> <pre><code>iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT </code></pre><p>注: 执行后可使用 <code>iptables -nL</code> 查看规则是否添加成功, 请确保是执行成功的.<br>添加成功后结果如下所示</p> <p><div style="background-color: rgba(0, 35, 30, 0.972549); font-family: Menlo; color: #d7e9c0;"><br>[root<a href="https://github.com/iZ94x7zbxcbZ" title="@iZ94x7zbxcbZ" class="at-link">@iZ94x7zbxcbZ</a> ~]# iptables -nL<br>Chain INPUT (policy ACCEPT)<br>target prot opt source destination<br>ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22</p> <p>Chain FORWARD (policy ACCEPT)<br>target prot opt source destination</p> <p>Chain OUTPUT (policy ACCEPT)<br>target prot opt source destination<br>ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:22<br></div><br><strong>2. 关闭所有规则以外的端口</strong></p> <pre><code>iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP </code></pre><p>这里把INPUT, OUTPUT, FORWARD 全部设为 DROP, 也就是白名单模式.<br>注: 因为上面第一步, 我们已经添加了 开启22端口的规则, 这里设置后, ssh还是正常连接的, 假如上一步没有开启, 这里还没执行完, 你就会跟服务器断开连接.</p> <p><strong>3. 开启内部所有端口访问</strong></p> <pre><code>iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT </code></pre><p>开启127.0.0.1所有端口的访问, 就不需要对内部的如mysql, redis, php-fpm等使用到的端口一一去打开</p> <p><strong>4. 开启http 80 端口</strong></p> <pre><code>iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT </code></pre><p>开启80端口方法和开启22端口方法一样, 只需要把端口号改下就行</p> <p><strong>5. 开启https的443 端口</strong></p> <pre><code>iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT </code></pre><p><strong>6. 如果有需要用到ftp, 开启ftp端口 20 和 21</strong></p> <pre><code>iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT </code></pre><p>这样设置完成之后,还不行,因为ftp还有一些数据传输的端口是随机的, 不同的ftp端口范围可能不一样, 假如我们ftp的端口范围配置为 30001 到 31000, 可以使用下面两行命令开启</p> <pre><code>iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT </code></pre><p><strong>7. 开启dns端口</strong></p> <pre><code>iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT </code></pre><p>没有开启dns端口时, 在服务器上,yum 安装软件等需要用到dns的地方, 都会报错, ping 作何域名都是无法ping通的<br>DNS端口对应的是53, 需要注意的是,dns端口使用的是udp协议</p> <p><strong>8. 开启80端口对处界的访问</strong><br>开启了dns后, 当我们使用 <code>host www.baidu.com</code> 命令测试, 能看到域名解析正常,<br>但是使用 <code>curl http://www.baidu.com</code> 访问时, 却还是无法访问的,<br>这是因为前面开启的80端口,开放的是外界对服务器的80端口的访问, 为了使服务器能访问互联网, 还必须开启80端口对外界的访问, 开启命令:</p> <pre><code>iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT </code></pre><p><strong>9. 开启mysql 3306端口对外界的访问, 解决无法连接啊里rds数据库的问题</strong></p> <pre><code>iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT </code></pre><p><strong>10. 解决yum安装软件的问题</strong><br>这个时候, 其它都正常, 但yum无法安装软件, 解决方法:</p> <pre><code>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -m tcp -m state --state NEW --dport 80 -j ACCEPT </code></pre><p><strong>11. 把上面的修改保存到文件</strong></p> <pre><code>/etc/init.d/iptables save </code></pre><p>这行命令实际上是把规则保存至 /etc/sysconfig/iptables<br>如果没有保存, 重启服务后, 上面的所有改动就丢失了</p>

发表评论

暂无评论

搜索
用户登陆