一般我们只需要开启 22, 53, 80, 443 这三个常见的对外开放端口,可以使用如下命令

  • 清空 iptables 默认规则
iptables -F
  • 允许 22 端口进入和返回
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
  • 允许 53 端口,一般作为 DNS 服务使用
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
  • 允许本机访问本机
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
  • 允许所有 IP 访问 80 和 443 端口,一般作为 http 和 https 用途
iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
  • 保存配置
iptables-save > /etc/sysconfig/iptables
  • 重新加载 iptables
iptables -L

也可以自己手工写,这里附一个我常用的

  • 打开配置文件

Centos

vi /etc/sysconfig/iptables

Ubuntu 14.04

vi /etc/iptables.rules
vi /etc/iptables.up.rules
  • 填写
-A INPUT -p udp -m state --state NEW -m udp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  • 对于Ubuntu,还要以下步骤:
iptables-restore < /etc/iptables.up.rules #使防火墙规则生效

创建文件,添加以下内容,使防火墙开机启动

vi /etc/network/if-pre-up.d/iptables #
#!/bin/bash
iptables-restore < /etc/iptables.up.rules
chmod +x /etc/network/if-pre-up.d/iptables #添加执行权限

Ubuntu部分参考自阿布博客