LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1116|回复: 6

一台公网的服务器的防火墙(iptables)究竟需要怎么处理才安全

[复制链接]
发表于 2005-10-11 11:50:44 | 显示全部楼层 |阅读模式
我对防火墙一些具体的设置不是很明白,假如我有一台服务器,真实的服务器,放在电信idc里,提供www,ftp服务而已,我在配置防火墙时,我是这么做的:

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "Start FireWall for this server..."

/sbin/iptables -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

/sbin/modprobe ip_conntrack_ftp

/sbin/iptables -A INPUT -i lo -p all -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -p all -j ACCEPT

/sbin/iptables -A OUTPUT -o eth1 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -i eth1 --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT

/sbin/iptables -A INPUT -i eth1 -p udp -j ACCEPT

/sbin/iptables -A INPUT -p icmp -i eth1 -m limit --limit 1/s --limit-burst 10 -j
ACCEPT

#对不管来自哪里的ip碎片都进行限制,允许每秒通过100个ip碎片,该限制触发的条件是100个ip碎片
/sbin/iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

但是我总觉得这样太简单了吧,还要设置哪些内容了,请各位指点。
发表于 2005-10-11 19:11:42 | 显示全部楼层
我觉得还应该对一些伪装包进行处理和对nmap扫描的处理
/sbin/iptables -A INPUT -p tcp !--syn -m state --state NEW -j LOG --log-prefix"NEW not syn"
/sbin/iptables -A INPUT -p tcp !--syn -m state --state NEW -j REJECT --reject-with tcp-reset
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-11 20:36:22 | 显示全部楼层
谢谢,我明白一些了,应该还有其他的吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-17 20:47:14 | 显示全部楼层
就这么简单吗?各位给个意见
回复 支持 反对

使用道具 举报

发表于 2005-10-20 01:24:36 | 显示全部楼层
我的服是这样处理的:
开放你所要开放的服务的端口,其它全封掉
阻止一些扫描工具的扫描(对强力扫描工具不是很有用)
基本就这些了,但有几点要说明:
1 尽量启用ssh, 这个ssh要支持key,这样别人就算知道你的root密码也没有用,他得不到你的key.
2 如果开放邮件服务,哪邮件用户不要是实用户.
3 ftp服务不要开,用sftp,就是putty工具包中的一个工具一样可以完成ftp上传功能.
回复 支持 反对

使用道具 举报

发表于 2005-10-20 09:49:48 | 显示全部楼层
放心一般IDC有防火墙,
我的服务器策略巨松,也没出过事.不用太担心的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-26 11:53:48 | 显示全部楼层
谢谢各位兄弟,我再修改了一下,大家看看如何?
不过有个问题,我的ftp连上一段时间后,没用,然后再传东西上去,提示断开(不是超时断开)。我是使用proftpd+mysql,一直查不到原因,不知是bug,还是防火墙有问题。
新的防火墙如下:

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "Start FireWall for this server..."

/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

/sbin/modprobe ip_conntrack_ftp

#drop all invalid incoming packets.
/sbin/iptables -A INPUT -m state --state INVALID -j DROP

#accept all input from the loopback device.
/sbin/iptables -A INPUT -i lo -p all -j ACCEPT

/sbin/iptables -A OUTPUT -o lo -p all -j ACCEPT

/sbin/iptables -A OUTPUT -o eth1 -j ACCEPT

#Accept ftp
/sbin/iptables -A INPUT -p tcp -i eth1 --dport 21 -j ACCEPT

#accept traffic from all other interfaces only if it's already established
#or related to an existing connection
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Accept ssh
/sbin/iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT

#This is allow visit ssh from this ips,but it does not work.
#/sbin/iptables -A INPUT -p tcp -s 213.85.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 213.5.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 212.79.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 53.57.0.0 --dport 22 -i eth1-j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 66.154.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 277.160.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 51.61.0.0 --dport 22 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 211.76.0.0 --dport 22 -i eth1 -j ACCEPT


/sbin/iptables -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -i eth1 --dport 443 -j ACCEPT

/sbin/iptables -A INPUT -i eth1 -p udp -j ACCEPT

/sbin/iptables -A INPUT -p icmp -i eth1 -m limit --limit 1/s --limit-burst 10 -j ACCEPT

#对不管来自哪里的ip碎片都进行限制,允许每秒通过100个ip碎片,该限制触发的条件是100个ip碎片
/sbin/iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

#SYN
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW not syn"
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j REJECT --reject-with tcp-reset

#drop port scan
# NMAP FIN/URG/PSH
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# Xmas Tree
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP

# Another Xmas Tree
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

# Null Scan(possibly)
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP

# SYN/RST
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# SYN/FIN -- Scan(possibly)
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

sleep 2

echo "Firewall start success!"

上面有个地方我本想只允许几个网段的ip能访问ssh,不过好象不行,查了语法好象没错。

作为基本的防护,这样应该差不多了吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表