2011-02-17
周海汉 2011.2.17
机房安全是必须考虑的事情。一些服务器设备必须暴露公网IP,很容易遭到攻击。配置硬件或软件防火墙,只开放可以访问的端口,拒绝其他不合法的IP的请求,包括端口扫描。甚至拒绝ping。将大大提升服务器的安全。 本脚本配置iptables,只允许北京和香港远程访问香港的服务器。但会开放web端口给任何IP访问。可以做出更严格的限制,只允许某几个IP访问。这样,规避大部分的随意的攻击。 本脚本缺省拒绝所有连接,这是必须小心的。如果用iptables -F来清空所有iptables的规则,可能导致远程无法访问服务器,必须先修改缺省规则为ACCEPT所有。所以有一种替代方法,在规则末尾增加一条drop任何包的规则。这样清除规则后,不会导致无法访问。 centos 5.2调试通过。
#!/bin/bash
# 2010.10.14 modified by zhouhh
### 1.允许内网192.168.0.0,通过内网卡的所有协议
### 2.允许北京电信、网通、电信通和香港26段共4个子网通过外网访问ssh端口,允许所有ping本机
### 3.允许任何地址,通过任何网口访问本机web端口
### 4.开放所有UDP端口
if [ $UID != 0 ]; then
echo "must be root to run this script!"
exit
fi
### 定义子网变量
BJ_DXT=218.249.75.128/26
BJ_DX=219.141.178.96/28
BJ_CNC=123.127.24.128/25
HK_26=210.211.26.0/24
NET_LAN=192.168.1.0/24
### 定义本地IP
IP_LAN=192.168.1.
IP_WAN=210.211.26.
### 定义服务端口
ssh_port=60000
web_port=80
sip_port=5060
### 定义网络接口
ETH_LAN=eth0
ETH_WAN=eth1
### 定义程序及路径变量
ipt=/sbin/iptables
### 具体规则
echo "[+]Flushing all rules..."
iptables --flush
service iptables stop
echo "[+]Set default policy..."
#缺省拒绝所有接入
$ipt -P INPUT DROP
$ipt -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -N TCP_ERR
$ipt -I INPUT 2 -j TCP_ERR
echo "[+]Creating rules for web port..."
$ipt -A INPUT -p tcp --dport $web_port -m state --state NEW -j ACCEPT
echo "[+] accept all UDP ports..."
$ipt -A INPUT -p udp -j ACCEPT
### 允许北京和香港ping本机,其他拒绝
# ping 不限制,zhouhh comment
# echo "[+]Creating icmp rules..."
# $ipt -A INPUT -i $ETH_WAN -s $BJ-DXT -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $BJ-DX -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $BJ-CNC -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -s $HK-26 -p icmp --cmp-type 8 -j ACCEPT
# $ipt -A INPUT -i $ETH_WAN -p icmp -j DROP
$ipt -A INPUT -p icmp -j ACCEPT
### 允许内网所有IP通信
echo "[+]Permit lan all..."
$ipt -A INPUT -i $NET_LAN -s $NET_LAN -j ACCEPT
$ipt -A INPUT -i lo -j ACCEPT
### 其他规则start
### 其他规则end
### 拒绝错误的TCP包
echo "[+]Creating TCP rules for new chain TCP_ERR..."
$ipt -I TCP_ERR 1 -p tcp --tcp-flags ALL ALL -j DROP
$ipt -I TCP_ERR 2 -p tcp --tcp-flags ALL NONE -j DROP
$ipt -I TCP_ERR 3 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$ipt -I TCP_ERR 4 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$ipt -I TCP_ERR 5 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG -m limit --limit 1/s --log-prefix "bad package"
$ipt -I TCP_ERR 6 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$ipt -I TCP_ERR 7 -p tcp ! --syn -m state --state NEW -j DROP
### 允许北京和香港访问ssh端口
echo "[+]Creating ssh rules..."
$ipt -A INPUT -i $ETH_WAN -s $BJ_DXT -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $BJ_DX -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $BJ_CNC -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
$ipt -A INPUT -i $ETH_WAN -s $HK_25 -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT
### 保存配置让规则随系统启动
service iptables save
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源
FEATURED TAGS
css
vc6
http
automake
linux
make
makefile
voip
乱码
awk
flash
vista
vi
vim
javascript
pietty
putty
ssh
posix
subversion
svn
windows
删除
编译
多线程
wxwidgets
ie
ubuntu
开源
c
python
bash
备份
性能
scp
汉字
log
ruby
中文
bug
msn
nginx
php
shell
wordpress
mqueue
android
eclipse
java
mac
ios
html5
js
mysql
protobuf
apache
hadoop
install
iocp
twisted
centos
mapreduce
hbase
thrift
tutorial
hive
erlang
lucene
hdfs
sqoop
utf8
filter
草原
yarn
ganglia
恢复
scrapy
django
fsimage
flume
tail
flume-ng
mining
scala
go
kafka
gradle
cassandra
baas
spring
postgres
maven
mybatis
mongodb
https
nodejs
镜像
心理学
机器学习
Keras
theano
anaconda
docker
spark
akka-http
json
群论
区块链
加密
抽象代数
离散对数
同余
欧拉函数
扩展欧几里德算法
ES6
node-inspect
debug
win10
vscode
挖矿