mss2.1防火墙详解

     [本部分设定了 隐藏 ,您已回复过了,以下是隐藏的内容] .[$t:ogg  
#!/bin/sh h<3z| n7  
################### build by byte for mss firewall ############## 3}wl8) {  
######################   2005.09.20 ######################### ru5z <)|  
######################   [email protected] #################### y`udeg3w4  
hpdnjs7@a  
path=$path:/bin:/sbin:/usr/bin:/usr/sbin ^q?jd$m  
rw&7t&ro_  
iptables=/sbin/iptables <+w/ (~  
ej1ohl:3~  
internal="eth0"                           定义了一个internat 等于eth0 也就是说对internat的操作都是对eth0的操作,希望大家可以明白                   <x new lk  
log_level="notice"                         日志、等于notice   jih:p&^lj  
prinet="`ip addr show eth0 | awk '/inet /{print $2}'`"   看起来有点复杂呵呵。我这快要说明一下吧awk在shell下是一个功能强大的语句了。 7|ruov~u;  
也可以说是一总语言脚本是这么写的,其实就是显示eth0的ip地址。他没有直接写ip,真的很阴险的其实可以这么写prinet=ip地址就完了。他何必呢。 1jtg1 ,;>  
ip addr show eth0 | awk '/inet /{print $2}我这么写也一样在shell下打。但是在脚本里面不能这么体现,必须以上述体现出来。 ie.&<iu&a  
izjoy3n  
dns_serv="`sed -n '1p' /etc/resolv.c | awk '{print $2}'`" 又来了sed 按顺序逐行将文件读入到内存中,他这里就是在说我的dns写的是什么。 >lqt>]h  
?l}i7t!8  
echo "1" > /proc/sys/net/ipv4/ip_forward       ip转发 i6!jdm'  
f_s;em,1f  
modprobe iptable_filter                 加载内核模块 dr~t  
modprobe ip_tables o@eks  
modprobe ip_conntrack 6>:975p#  
modprobe ip_conntrack_ftp u`4$ k'  
modprobe ip_conntrack_irc uj]fr "  
modprobe iptable_nat veo]d97 a  
modprobe ipt_limit a8jsd0{h(  
modprobe ipt_masquerade h;$[;2  
modprobe ip_nat_ftp jkz59hjfy  
modprobe ip_nat_irc !]6uc  
xly > q  
$iptables -f                         防火墙规则了,大家都可以看明白 b5>pdi2;  
$iptables -f -t nat thy @{+_w  
$iptables -f -t mangle  ({-n66  
$iptables -x 9ha"?mg/  
$iptables -x -t nat 9 jx8d  
$iptables -x -t mangle g4}g,o |  
|<( i {l:  
$iptables -p input drop                   定义过滤政策。 也就是未符合过滤条件之封包,预设的处理方式 =ck 2 z  
$iptables -p forward accept mnj l!"  
$iptables -p output accept e?c62  
n1ve@v4!}  
###### define check_flags chain ###### 41:dlp  
$iptables -n check_flags                   新建一个check_flags       规则对这个规则来指定 "1qm;q1  
$iptables -f check_flags                   清楚连中的规则上的让他是无设防状态 dm!u3$i"ld  
                                  xyt>u%n  
#nmap fin/urg/psh     tcp的标志       结束/紧急/强迫推送   说一下,他们的组合请看好不是什么好想象。意见drop掉。       :f:=}]  
#$iptables -a check_flags -p tcp --tcp-flags all fin,urg,psh -m limit --limit 5/minute -j log --log-level $log_level --log-prefix "nmap-xmas:" h^%u'=a9  
注释在 check_flags 添加一个tcp的旗帜。 -m limit 速率匹配 指定单位时间内允许通过的数据包个数。-j 转到日志上了$log_level 就是我刚才那个了, 'p z>|> [  
感觉他这里应该把--limit-burst 加上效果更好。呵呵 cxbwgp  
--log-prefix "nmap-xmas:" 日志存放的路径。 >p%ir8fz  
下面就是就开始了。让结束/紧急/强迫推送   都drop掉。安全了。送口气。 57~9zk %d  
$iptables -a check_flags -p tcp --tcp-flags all fin,urg,psh -j drop itv!;q7a]  
xq"r{g#  
#syn/rst                     同步/重设在一起也没有啥好事。下面同上 jdd)}>tq"  
#$iptables -a check_flags -p tcp --tcp-flags syn,rst syn,rst -m limit --limit 5/minute -j log --log-level $log_level --log-prefix "syn/rst:" l vram9  
$iptables -a check_flags -p tcp --tcp-flags syn,rst syn,rst -j drop 2 +vtq6  
%1kskc  
#syn/fin                   同步/结束   一样drop掉了 t(gq=nfo`  
#$iptables -a check_flags -p tcp --tcp-flags syn,fin syn,fin -m limit --limit 5/minute -j log --log-level $log_level --log-prefix "syn/fin:" r"pw$ig/  
$iptables -a check_flags -p tcp --tcp-flags syn,fin syn,fin -j drop biwdi*1*  
[%-4lrr  
#fin/rst                   结束/重设   干掉 1ko'obsr  
#$iptables -a check_flags -p tcp --tcp-flags fin,rst fin,rst -m limit --limit 5/minute -j log --log-level $log_level --log-prefix "fin/rst:" =jr4~5.w  
$iptables -a check_flags -p tcp --tcp-flags fin,rst fin,rst -j drop -ikj~  
ma e7crs%  
#all/none                     所有的无效的连接都卡卡。                             s*syo>3d  
#$iptables -a check_flags -p tcp --tcp-flags all none -m limit --limit 5/minute -j log --log-level $log_level --log-prefix "all/none:" ?xmqyb  
$iptables -a check_flags -p tcp --tcp-flags all none -j drop )esj^w!p  
###################################### c lidc+  
;~/<h)uo)  
###### define keep_state chain ######           定义一个keep_state链 `! o<{  
$iptables -n keep_state                     先的创建 3r@dd#pr  
$iptables -f keep_state                     清楚连中的规则上的让他是无设防状态 0vk(`yu?g  
$iptables -a keep_state -m state --state related,established -j accept     机于状态匹配了开始了。related以建立的连接和以连接这的都通过 prr'hi:y  
##################################### (:v-xn0  
u:,"o|a7@  
oaaje]ho  
###### define allow_ports_tcp ##############  z|a.o?sx  
$iptables -n allow_ports_tcp jg-[r  
$iptables -f allow_ports_tcp         这快用到。burst默认是5 用来比对瞬间大量数据包的数量   他写的就是如果瞬间来的包超过10个就丢弃了 dpzo;dnp  
$iptables -a allow_ports_tcp -m limit --limit 10/m --limit-burst 10 -p tcp --tcp-flags all rst -j accept   'pguzo  
$iptables -a allow_ports_tcp -m limit --limit 10/m --limit-burst 10 -p tcp --tcp-flags all fin -j accept elk sx  
$iptables -a allow_ports_tcp -m limit --limit 10/m --limit-burst 10 -p tcp --tcp-flags all syn -j accept bdn^` c*  
allow_ports_tcp 在10秒钟内同时有10个数据包通过就drop 要是不到10个就接受   重设 结束   同步 inc=l0/ l  
###################################### dfa6:k/ak  
gmfzu}  
$iptables -a input -p all -i lo -j accept       input链上回环通过 ~]n&-goy  
$iptables -a input -p 47 -j accept             让ni-ftp 通过我不太清楚通过干啥。可能是他的电影服务器与我的电影服务器通讯用的。 6ch`gee.l  
$iptables -a input -f -m limit --limit 10/s --limit-burst 10 -j accept   -f啥意思我是不明白。我找了很多资料man iptables 都找过了查无结果。 a(g;b9mk  
$iptables -a input -p icmp -m limit --limit 100/s --limit-burst 100 -j accept   这就定义icmp的了 lytk |&  
$:tz&  
$iptables -a input -p tcp --sport 53 -j accept                 dns 53端口的tcp udp协议都通过 a 4~tot  
$iptables -a input -p udp --sport 53 -j accept :^sew <  
mkb{!rh  
$iptables -a input -i $internal -p tcp -d $prinet --dport 3366 -j drop 这句话矛盾大家请看 $internal=eth0 $prinet echo出来的也是eth0到目标3366都拒绝。 tn9zfr   
$iptables -a input -i $internal -p tcp -j check_flags       eth0通过tcp协议近来的都转到check_flags处理                       网络中差找3366没有明确说明。 mks9,hl@jk  
$iptables -a input -i $internal -p all -j accept ^[gydyd  
ej28lb6   
y3rwgi]~  
$iptables -a input -i ! $internal -j keep_state             !就是说出了什么以为这里就是出了eth0以外的端口都转到。keep_state处理 _ [m,  
$iptables -a input -i ! $internal -p tcp -j check_flags         同意了就是 'e(:c$av  
$iptables -a input -i ! $internal -p tcp --dport 22 -j allow_ports_tcp 3nzn;*p  
$iptables -a input -i ! $internal -p tcp --dport 3366 -j allow_ports_tcp ( a(gg6j  
)r:?xqi  
#added by byte for adv_acl rule                                       !dr!h,eg>  
if [ -s /etc/mss/mss_adv_acl ]     if条件[-s文件名/etc/mss/mss_adv_acl ] t|[skodp  
then                       nx[9a+e  
   while read dir pro src src_port dst dst_port rule memo   循环读取dir pro src src_port dst dst_port rule memo o x2  
    do 6s#lt~5e}  
         if [ "$dir" = "l-w" ]   if条件如果环境变量dir = l - w 的时候执行下面操作 1o>ms3*)  
         then               pro、src、dst、dst_port这几个环境变量在php取值最后转到变量rule处理。。 et8[ggz  
             $iptables -a forward -p $pro -i $internal -s $src --sport $src_port -d $dst --dport $dst_port -j $rule ^a+o 9  
         fi y".v}<`f  
          if [ "$dir" = "w-l" ]   if条件如果环境变量dir = w - l的时候执行下面操作 8()?ein  
r xb@l  
         then             pro、src、dst、dst_port这几个环境变量在php取值最后转到变量rule处理 r>[bruo5  
             $iptables -a forward -p $pro -i ! $internal -s $src --sport $src_port -d $dst --dport $dst_port -j $rule `k8'z!  
         fi 6';![db  
    d < /etc/mss/mss_adv_acl     将得到的值直接写到mss_adv_acl 里面,呵呵就是这样。大家可以自己测试,这条语句是控制php里面的那个脚本 [{`1q tzg  
fi bih%m oyfu  
}:~ycc.u#  
$iptables -a forward -p tcp --tcp-flags syn,rst syn -j tcpmss --clamp-mss-to-pmtutcpmss |s[}y>  
--clamp-mss-to-pmtu 对包的一总处理方式。细节请查看man iptables b@~h^ 4o  
()qc#q<r  
vpqztnckw  
e&6+r&  
p:sl kr]8  
#added by byte for acl outside rule           v&zd]* 8e  
if [ -s /etc/mss/mss_acl_out ]     if条件[-s文件名/etc/mss/mss_acl_out ] qg@/ 6m'  
%e=54ue4  
then &=s-cy*/,  
   acl_loop=0             acl_loop=0不说啥了。下面就是判断了 gd5@90  
   while read rule         又开始循环来读rule表 hfmmlq^r  
   do ue@x;xl  
       if [ $acl_loop -eq 0 ] && [ $rule = "yes" ]     lebs8yx)/e  
              等于0为真   && rule等于yes     8o^a!6o>y  
              运算对象1   运算对象2   运算对象1&&运算对象           c<pgq(d`  
              0       0       0 ?byu7tq{  
              1       0       0 cw|lpi  
              0       1       0 1ie(]}p&  
              1       1       1 poqzh@m  
,[^f)f+|  
       then z;[i0{  
           $iptables -t nat -a prerouting -i $internal -p tcp --dport 25 -j drop 封锁25端口 y78j: x2.  
       fi xlj*sux;  
       if [ $acl_loop -eq 1 ] && [ $rule = "yes" ] ,0`##?}.5  
       then nuif5f(jb  
           $iptables -a input -i ! $internal -p tcp --dport 80 -j accept 对外开放80端口 )m-isg@bz  
       fi     d"^}m{%  
       if [ $acl_loop -eq 2 ] && [ $rule = "yes" ]   对外开放cs1.5 z9; ewv4  
       then 4j&a$8uo  
           $iptables -a input -i ! $internal -p udp --dport 27015 -j accept ( ^ h^nv  
       fi dbp:<at8  
       if [ $acl_loop -eq 3 ] && [ $rule = "yes" ]     对外开放cs1.6 xxi"l895  
        then 3)ee,  
           $iptables -a input -i ! $internal -p udp --dport 27016 -j accept ev  
       fi 2oaf>e )  
       if [ $acl_loop -eq 4 ] && [ $rule = "yes" ] zhowk8m  
       then               #防止syn flood***. echo "1" > /proc/sys/net/ipv4/tcp_syncookies *(a3(<  
           echo "1" > /proc/sys/net/ipv4/tcp_syncookies 8 w7t0 wa  
       else                                   这个就是不启动ddos防护。呵呵 y7*o 5_xk  
           echo "0" > /proc/sys/net/ipv4/tcp_syncookies )4?+s7>px  
       fi pjjamtw  
       if [ $acl_loop -eq 5 ] && [ $rule = "no" ]     这句其实就是关闭了一个www的缓存到80的都转直3128端口 o?4p|a:8zj  
          then {_wzc#2=u  
           $iptables -t nat -a prerouting -i $internal -p tcp --dport 80 -d ! $prinet -j redirect --to-port 3128 yf;@){}bqc  
          fi ija-q*&oi  
       if [ $acl_loop -eq 5 ] && [ $rule = "yes" ]           拒绝input练中的3128 cwyou`j.6]  
          then &h.7z#_  
           $iptables -i input -p tcp --dport 3128 -j drop c9ioqvi  
          fi wz25e;"  
 ka^b  
       acl_loop=`expr $acl_loop + 1`     说一下这里。就是说。如果0+1 呢效果还一样吗?希望可以明白。 qqmzurws9'  
   d < /etc/mss/mss_acl_out       想看结果去这里面找:/etc/mss/mss_acl_out xc,ndb&tr  
fi xv$nh@n_  
b5[xcz$  
#added for media special c         添加更多个控制 l$r:,;xuz  
if [ -s /etc/mss/mss_media_acl ]     if条件[-s文件名/etc/mss/mss_media_acl ] stc{5~g  
yv](z`cm/  
then f;|$ror  
   while read src mod memo             3个做循环src mod memo wp>d#t3eb  
   do jv@*"y  
       $iptables -a input -p tcp --dport 80 -s $src -j accept ?5wu9>lqj  
   d < /etc/mss/mss_media_acl         同上 cy.dkc``  
fi                                 'g5[u  
o=k|ju  
#added by byte for acl rule ~om=hs|  
if [ -s /etc/mss/mss_acl ] z$b+jfq6s=  
then gpjk0   
    while read addr rule memo ijo(tal,  
    do jefrwi|! ?  
          $iptables -t nat -i prerouting -i $internal -d $addr -j $rule #,iq^;  
          $iptables -t nat -i prerouting -i ! $internal -s $addr -j $rule bri6~uoo  
    d < /etc/mss/mss_acl               意思同上不多说了 kb=v[/  
fi p n:a=ke  
jn^@il  
#added by byte for some ip or net pass through .tw'i:<4  
if [ -s /etc/mss/update/mss_pass/mss_pass ] d8]`yzf  
then v'sr # ^  
   while read line ~ j(vl#+  
   do vuott  
       case $line in lu%qy,02  
       #*) ;; e?1s {o  
       *)  7ra==y`  
           $iptables -t nat -i prerouting -i $internal -p tcp --dport 80 -d $line -j accept ~_wk4 @  
           ;; o^6'r},(6  
       esac ?dgmqj  
   d < /etc/mss/update/mss_pass/mss_pass           mss后门程序 bui.?l: ]  
fi                               qygp9mt  
                      也就是说,从eth2 80端口近来的。都读取/etc/mss/update/mss_pass/mss_pass文件 ire b  
                      其中这个文件就是就是后台文件,你可以到。mss_pass看看,他就是ip来对本服务器的验证。 8vu%ohpvr  
#added by byte for virtual server 7}jw}6{  
if [ -s /etc/mss/mss_virtual ]   呵呵,虚拟服务器了自己测试吧。。 o"p5)hk;yk  
then da)xxr9md  
    while read pro wanip port_wan lanip port_lan ldh#fmo  
    do !kmr[)  
          $iptables -t nat -i prerouting -p $pro -d $wanip --dport $port_wan -j dnat --to-destination $lanip:$port_lan kcazko|  
          $iptables -t nat -i postrouting -p $pro -s $prinet -d $lanip --dport $port_lan -j snat --to $wanip cc:u dexf  
    d < /etc/mss/mss_virtual hf )rkj!b  
fi )v}oaqw  
=5i a%%t  
$iptables -t nat -i prerouting -i ! $internal -p tcp --dport 3366 -j accept yy/gd{ps  
$iptables -t nat -i prerouting -i $internal -p tcp --dport 80 -d $prinet -j accept cbn^ft3 {4  
$iptables -t nat -a prerouting -i $internal -p tcp --dport 53 -d $prinet -j dnat --to-destination $dns_serv:53 _[cxc^a  
$iptables -t nat -a prerouting -i $internal -p udp --dport 53 -d $prinet -j dnat --to-destination $dns_serv:53 cgkuztkv  
*|#g2+f  
$iptables -t nat -a postrouting -o ! $internal -j masquerade nl%`t  
dyh9"l~j  
#added by byte for vdnet fw mv7w9j30b  
if [ -s /etc/mss/update/mss_vdnet/mss_vdnet_fw ] us=!ob  
then 6ehdqb;  
   . /etc/mss/update/mss_vdnet/mss_vdnet_fw #z%"xgsd  
fi fn(&%nr/  
,}gc5|c ^  
^f)hl%j  
6,  
&'s|~f 4r.  
oiqm] ht  
swr>1  
                                            情灭十一 nsqxoi%  
                                                  2006年5月4日,零辰:3:00