因为日常管理中经常要限制IP访问,于是写了个iptables的配置脚本,这样就不用换一台机器配置一个了,一个脚本搞定

 

首先是iptables的基本命令:

iptables [-t表名] <-A| I |D |R > 链名[规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网][--sport 源端口号] [-d 目标IP地址 | 目标子网][--dport 目标端口号] <-j 动作>

<-A| I |D |R > 含义
加入(append) 一个新规则到一个链 (-A)的最后。
在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
在链内某个位置删除(delete) 一条规则 (-D)。
在链内某个位置替换(replace) 一条规则 (-R)。

如封一个IP段:
iptables -I INPUT 1 -s 58.87.64.0/18 -j DROP
查看规则:
iptables -L

 

好了,大体上就这么多,看脚本:


#!/bin/bash

IPT
=/sbin/iptables

IP_TRUSTED
=211.69.102.0/255.255.255.0

###WEB=80
SSH=22
VNC
=5901
#,5801
#
##MYSQL=3306

# Delete Any Existing Chains In Filter Table
$IPT -F -t filter
$IPT -X -t filter
$IPT -Z -t filter

# Setting Default Policies, just accept output, drop any other
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

# Every host can connect this server s tcp port 20,21,80
#
## $IPT -t filter -A INPUT -p tcp -m multiport --destination-port $FTPDATA,$FTP,$WEB -j ACCEPT

# Setting SSH just trusted ip can connect it
$IPT -t filter -A INPUT -s $IP_TRUSTED -p tcp -m multiport --destination-port $SSH,$VNC -j ACCEPT


# This server can ping other host
$IPT -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# Just trusted ip can ping this server
$IPT -t filter -A INPUT -s $IP_TRUSTED -p icmp -j ACCEPT


# Setting Input, this server can connect other server s tcp port 20,21,22,80,3306
#
add TCP port to this one!!!
$IPT -t filter -A INPUT -p tcp -m multiport --source-port 20,21,22,80,3306 -j ACCEPT

# Setting Input, this server can connect other server s udp port 53
#
add UDP port to this one!!!
$IPT -t filter -A INPUT -p udp -m multiport --source-port 53 -j ACCEPT

# localhost
$IPT -I INPUT -i lo -j ACCEPT

 

这个脚本默认只开了SSH的22和VNC的5901,如有需要,可以修改这个地方(比如开80端口):

# Setting SSH just trusted ip can connect it
$IPT -t filter -A INPUT -s $IP_TRUSTED -p tcp -m multiport --destination-port $SSH,$VNC,80 -j ACCEPT

 

然后用 set_iptables.sh 脚本设置后,使用 service iptables save 导出规则到 /etc/sysconfig/iptables
或者用 iptables-save > /etc/sysconfig/iptables