vps中的iptables规则设置范例

490 views 二月 26, 10 by Timothy

忙乎了一两天,俺的VPS算是上线了,基于Ubuntu Linux的,512MB内存,20G硬盘,1TB月流量,赠送2个IP,还不错。不过,现在还没有把博客迁移过去的打算,此VPS仅作为练手而用,只是建了一些ssh账号,供自己和同事跨栏用,还简单的搭建了基于Nginx+MySql+PHP+FastCGI的WordPress环境,并成功拉过来俺的一位同事在上面安了个blog,嘿嘿。
提到VPS,最重要的还是安全,毕竟你的系统是直接面向公网,如果不加强防范,很容易成为别人手里的肉鸡。Linux中的iptables,用过的同学都知道,是一个基于Linux内核的防火墙,功能比较强大,下面是iptable的一些常用的规则设置:

1
2
3
4
5
6
7
8
9
10
11
12
        /sbin/iptables -P INPUT DROP              #禁止掉服务器所有入口请求,后面的规则只允许部分常用的服务端口
        /sbin/iptables -P OUTPUT ACCEPT          #允许服务器访问出口请求
        /sbin/iptables -A INPUT -i lo -j ACCEPT    #允许本地接口访问
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP #禁止ping,因为ping是基于icmp协议的
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT    #允许部分常用端口入口请求访问
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT  #允许所有已经连接端口请求
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP              #DROP掉所有失效或者新的请求

可以把上述脚本保存起来,执行,然后用命令/sbin/iptables -L -n查看规则是否生效

把上述脚本再完善一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:~/bin
export PATH
 
case "$1" in
start)
        echo -n "Staring to write your Iptbales:..."
        /sbin/iptables -P INPUT DROP
        /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP
        echo "Ok"
 
;;
stop)
        echo -n "Cleaning your Iptables:..."
        /sbin/iptables -F
        /sbin/iptables -X
        /sbin/iptables -Z
	/sbin/iptables -P INPUT ACCEPT
	/sbin/iptables -P OUTPUT ACCEPT
        echo "Ok"
;;
restart)
        echo -n "Cleaning your Iptables:..."
        /sbin/iptables -F
        /sbin/iptables -X
        /sbin/iptables -Z
        echo "Ok"
        echo -n "Staring to write your Iptbales:..."
        /sbin/iptables -P INPUT DROP
        /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT       
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP
        echo "Ok"
;;
*)
        echo "Usage: $0          {start|stop|restart}"
esac
 
exit 0

这样,我们就可以用start/stop/restart的参数来启用、禁止iptables防护了,很方便。另外,可以把此脚本放入/etc/init.d,让它像系统服务一样,在VPS启动的时候自动运行。

PS:
1.此脚本参考自网上,并作了部分修改
2.搜狗云输入法,也有郁闷的时候,在写文章的时候,候选词半天不出来,很卡,囧rz 是我打字速度太快,还是网速很慢?……



你可能也对下列文章感兴趣

Add your comment

10 Responses to "vps中的iptables规则设置范例"

  1. 久酷 CHINA Mozilla Firefox Windows 说:

    还是不要用云输入法了吧,毕竟与网速之类有关,不如直接安装的好…..呼呼

  2. zwwooooo CHINA Mozilla Firefox Windows 说:

    看来你已经开始上手了,云输入还不成熟,还是直接安装输入法吧

  3. Blinux AUSTRALIA Google Chrome Windows 说:

    似乎这种方法不是很明智.
    1.iptables写完规则后用 /sbin/iptables save 就可以保存的,不必如此麻烦.iptables也是一个服务.
    chkconfig iptables on . 这样,iptables就会每次都起来.
    2.直接将脚本放到 /etc/init.d 是不会开机随之启动的吧.需要做软链接的吧,或者用chkconfig –add

    PS:当然你用的是Ubuntu,我的方法是redhat系的,难道有差别?

    • Timothy CHINA Mozilla Firefox Windows 说:

      @Blinux: 好像是有点差别,Ubuntu中我用apt-get install装的iptables,系统好像没有把它作为一个服务来安装。 /sbin/iptables save 会提示无效的参数。
      刚把VPS重启了一次,用/sbin/iptables -L -n 命令,发现iptables的规则确实生效了,说明脚本放/etc/init.d确实被执行了

      root@vps:/home/timothy# /sbin/iptables -L -n
      Chain INPUT (policy DROP)
      target prot opt source destination
      ACCEPT all — 0.0.0.0/0 0.0.0.0/0
      ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
      ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
      ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
      ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
      ACCEPT all — 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
      DROP all — 0.0.0.0/0 0.0.0.0/0 state INVALID,NEW

  4. Blinux AUSTRALIA Internet Explorer Windows 说:

    Hi,Timothy.
    Sorry,我发现我在留言中有个地方写错了,RH系保存iptables规则是#service iptables save.
    关于/etc/init.d .RH系需要做软链接到指定运行级别的目录.chkconfig就是做这个工作.
    另外我查了下debian系下iptables,原来其中一种比较好的方式就是你blog提到的.
    看来RH系和Debian系还是有一点小差别的.
    PS:对你的blog内容比较感兴趣,做个友链吧,done.

    • Timothy CHINA Blackberry 说:

      感觉是有些区别的,有些命令Redhat有,但是debian没有。不过我也只是个Linux初学者,以前一直被Windows毒太久。有空多交流,链接回头我加上。


Leave a Reply

(Ctrl+Enter)