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 是我打字速度太快,还是网速很慢?……
还是不要用云输入法了吧,毕竟与网速之类有关,不如直接安装的好…..呼呼
@久酷: 嗯,打算单独装个输入法
看来你已经开始上手了,云输入还不成熟,还是直接安装输入法吧
@ZWWOOOOO: 嗯,还是单独的输入法好。
不错,很强
@淘宝网首页: 呵呵,Linux折腾起来确实有意思。
似乎这种方法不是很明智.
1.iptables写完规则后用 /sbin/iptables save 就可以保存的,不必如此麻烦.iptables也是一个服务.
chkconfig iptables on . 这样,iptables就会每次都起来.
2.直接将脚本放到 /etc/init.d 是不会开机随之启动的吧.需要做软链接的吧,或者用chkconfig –add
PS:当然你用的是Ubuntu,我的方法是redhat系的,难道有差别?
@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
Hi,Timothy.
Sorry,我发现我在留言中有个地方写错了,RH系保存iptables规则是#service iptables save.
关于/etc/init.d .RH系需要做软链接到指定运行级别的目录.chkconfig就是做这个工作.
另外我查了下debian系下iptables,原来其中一种比较好的方式就是你blog提到的.
看来RH系和Debian系还是有一点小差别的.
PS:对你的blog内容比较感兴趣,做个友链吧,done.
感觉是有些区别的,有些命令Redhat有,但是debian没有。不过我也只是个Linux初学者,以前一直被Windows毒太久。有空多交流,链接回头我加上。