iptables.sh防火墙脚本
#!/bin/bash
IPTABLES=/sbin/iptables
### www 网络设置:
### eth1 连接外网 ip 121.42.148.69 / 22
### eth0 连接内网 ip 10.251.26.11 / 21
### ssh 端口 22
### 对外服务端口 ftp 21 , rsync 873, nginx 80
### ---- 清空防火墙规则 默认只是 filter 表 ---- ###
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
### 清空其他两个表的防火墙规则 ###
### 因为下面用到了nat 表 做 nat 所以这里也要清 nat 表 ###
$IPTABLES -t nat -F
# $IPTABLES -t mangle -F
$IPTABLES -t nat -X
# $IPTABLES -t mangle -X
# $IPTABLES -t nat -P PREROUTING ACCEPT
# $IPTABLES -t nat -P POSTROUTING ACCEPT
# $IPTABLES -t nat -P OUTPUT ACCEPT
# $IPTABLES -t mangle -P PREROUTING ACCEPT
# $IPTABLES -t mangle -P OUTPUT ACCEPT
# ---------------------------------------------- #
### ---- 三个表的默认策略 ---- ###
### 默认策略 filter 表 默认规则为丢弃 DROP ###
### 默认策略 NAT 表 默认规则为接受 ACCEPT ###
### 默认策略 mangle 表 默认规则为接受 ACCEPT ###
### ---- filter 表策略 ---- ###
#### filter 表 默认策略 默认规则为丢弃 ####
#### 不指定表时,默认为 filter 表 ####
$IPTABLES -P INPUT DROP
### 以下两行尽量不要写,否则很容易屏蔽掉本地外出的流量 ###
#$IPTABLES -P OUTPUT DROP
#$IPTABLES -P FORWARD DROP
#### 基础的允许策略,包括本地lo,特定内网网卡 ####
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -i lo -j ACCEPT
$IPTABLES -A FORWARD -i lo -j ACCEPT
#### eth0 为内网网卡 ####
#$IPTABLES -A INPUT -i eth0 -j ACCEPT
#$IPTABLES -A OUTPUT -i eth0 -j ACCEPT
#$IPTABLES -A FORWARD -i eth0 -j ACCEPT
#### 对 eth1 的规则设置 ,eth1 连接互联网 ####
### 允许对外主动建立连接 ###
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
### 拒绝的ip ###
#$IPTABLES -A INPUT -s 180.97.106.161/32 -j DROP
#$IPTABLES -A INPUT -s 188.143.232.0/24 -j DROP
### 允许外部主动访问的端口 ###
# $IPTABLES -A INPUT -s 192.168.0.0/24 -j ACCEPT
$IPTABLES -A INPUT -s 0/0 -p TCP --dport 80 -j ACCEPT
$IPTABLES -A INPUT -s 0/0 -p TCP --dport 873 -j ACCEPT
#$IPTABLES -A INPUT -s 0/0 -p TCP --dport 8080 -j ACCEPT
$IPTABLES -A INPUT -s 0/0 -p TCP --dport 21 -j ACCEPT
$IPTABLES -A INPUT -s 0/0 -p TCP --dport 22 -j ACCEPT
### 只允许特定主机主动访问的端口 ###
#$IPTABLES -A INPUT -s 203.100.82.43/32 -p TCP --dport 21 -j ACCEPT
#
#$IPTABLES -A INPUT -s 203.100.82.43/32 -p TCP --dport 22 -j ACCEPT
#$IPTABLES -A INPUT -s 103.43.18.42/32 -p TCP --dport 22 -j ACCEPT
#$IPTABLES -A INPUT -s 42.96.169.23/32 -p TCP --dport 22 -j ACCEPT
#$IPTABLES -A INPUT -s 59.188.240.220/32 -p TCP --dport 22 -j ACCEPT
#
#### temp
#$IPTABLES -A INPUT -s 123.118.246.8/32 -p TCP --dport 22 -j ACCEPT
#$IPTABLES -A INPUT -s 203.100.82.43/32 -p TCP --dport 21 -j ACCEPT
#$IPTABLES -A INPUT -s 203.100.82.43/32 -p TCP --dport 873 -j ACCEPT
#$IPTABLES -A INPUT -s 203.100.82.43/32 -p TCP --dport 3306 -j ACCEPT
### 203.100.82.43 是完全开放的
#$IPTABLES -A INPUT -s 203.100.82.43/32 -j ACCEPT
### 除了 203.100.82.43 其余ip 对 3306 端口的访问全部拒绝 ###
$IPTABLES -A INPUT -p TCP --dport 3306 -j REJECT
#$IPTABLES -A INPUT -s 106.2.171.98/24 -p TCP --dport 873 -j ACCEPT
#$IPTABLES -A INPUT -s 192.168.0.0/24 -p TCP --dport -j ACCEPT
#### NAT 映射 ####
# ## 访问 mysql master 上的 mysql server , 地址是 10.10.10.101 ##
#
# $IPTABLES -t nat -A PREROUTING -s 106.2.171.98/32 --dst 115.182.68.176 -p tcp --dport 13306 -j DNAT --to-destination 10.10.10.101:3306
#
# $IPTABLES -t nat -A POSTROUTING --dst 10.10.10.101 -p tcp --dport 3306 -j SNAT --to-source 10.10.10.76
#
# ## 访问 mysql slave 上的 ssh , 地址是 10.10.10.102
#
# $IPTABLES -t nat -A PREROUTING -s 106.2.171.98/32 --dst 115.182.68.176 -p tcp --dport 13322 -j DNAT --to-destination 10.10.10.102:22
#
# $IPTABLES -t nat -A POSTROUTING --dst 10.10.10.102 -p tcp --dport 22 -j SNAT --to-source 10.10.10.76
#
# ## 访问 mysql master 上的 ssh , 地址是 10.10.10.101
#
# $IPTABLES -t nat -A PREROUTING -s 106.2.171.98/32 --dst 115.182.68.176 -p tcp --dport 13323 -j DNAT --to-destination 10.10.10.101:22
#
# $IPTABLES -t nat -A POSTROUTING --dst 10.10.10.101 -p tcp --dport 22 -j SNAT --to-source 10.10.10.76
# ######## 转发到win 的ssh ##########################
#$IPTABLES -t nat -A PREROUTING -s 203.100.82.43/32 --dst 118.186.246.223 -p tcp --dport 10058 -j DNAT --to-destination 10.0.0.224:22
#
#$IPTABLES -t nat -A POSTROUTING --dst 10.0.0.224 -p tcp --dport 22 -j SNAT --to-source 10.0.0.223
#
## ######## 转发到win 的SQLServer ##########################
#
#$IPTABLES -t nat -A PREROUTING -s 203.100.82.43/32 --dst 118.186.246.223 -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.224:1433
#
#$IPTABLES -t nat -A POSTROUTING --dst 10.0.0.224 -p tcp --dport 1433 -j SNAT --to-source 10.0.0.223
### 对下面地址的包,完全放行 ####
#$IPTABLES -A INPUT -s 203.100.82.43/32 -j ACCEPT
#$IPTABLES -A INPUT -s 103.43.18.42/32 -j ACCEPT
#$IPTABLES -A INPUT -s 115.182.68.177/32 -j ACCEPT
#$IPTABLES -A INPUT -s 59.188.253.204/32 -j ACCEPT
### 不允许外部访问的端口或阻止某些ip ###
# $IPTABLES -A INPUT -s 192.168.1.0/24 -j REJECT / DROP
### ICMP 规则 ###
$IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
### ftp 跟踪模块 的额外规则 ###
/sbin/modprobe ip_conntrack_ftp