爱爽爽

Linux基础命令学习笔记

上一篇 / 下一篇  2007-09-14 21:35:33 / 天气: 阴雨 / 心情: 平静 / 个人分类:Linux

一.认识LINUX桌面环境
l0T,g,k|5`01.按ALT+F1  可以打开LUNIX图形截面的终端
ft-r6a'y3V9[{&i0系统工具---—》终端 也可以打开终端
a%GF*J"o,P:M0和WINDOWS下的CMD一样DOIT博客AEXB%@@0E
命令格式是 [运行当前服务器的权限@主机名 终端所在目录]# :后面输入要执行的命令
-^{3]2H)l,_0例如: [ROOT@FRADFIRE ROOT]#: EXIT   退出DOIT博客4q"IK0YN:}3n
或者ALT+F2 可以打开SHELL-KONSOLE SHELL模拟程序 比终端有更多的优点(输入EXIT就可以关闭他)DOIT博客3V%HD~J*Q&`0f
运行程序-->输入KONSOLE  在点击运行DOIT博客3e.VFc&Yzbx8UC.d
CTRL+ALT+F7可切换到图形界面
f.uf!i G7~0rn-Lv02.配置网络
;d7l5No#p0嘿嘿..远程桌面连接也可以连到对方的LUNIX桌面
*[ iGB*FO.SU6Wf0打开:系统设置--网络--
:s1a0O,X tG0设备--ETHO 为第一快网卡
QDfy&jA)ajn0ETH1为第2快网卡
Bq a `0JD03.在LUNIX下如何连网DOIT博客7Nr?}%W+r
系统工具---互连网配置向导---XDSL连接方式--前进---配置完毕--应用
i4djhe0以太网连接 (主要针对句与网)
r0l*Xs3r0在配制文件中将我们设置好的连接激活就可以上网了
!g9K {!C+r K0*************************
1POxZg0二. LUNXI常用的命令(在字符界面操作)DOIT博客3G9bWY?6a;d
1.IS 显示目录下的文件和文件名 和CMD下的DIR 差不多
!B5IXl%J&F0 IS -L  列出文件是显示文件的属性DOIT博客pQ){'E9Det1V`
IS -A 显示目录下的所有文件DOIT博客E;TJB0} ri
以.A.TXT 带.显示的文件都是隐藏文件
jPnT2g!uQ0IS -R 列出文件下的所有子文件
"aO@ERs8^0命令组合 IS -AR
4Y[&Z;@ Z's R MCC0CLEAR 清屏
kg,[8s'My+YY0SHIFT +PAGEUP /PAGEDOWN 实现翻页DOIT博客3Fo J$y^j)[Y3X1G
CD 切换目录DOIT博客lH}*}p~xqEZ3v
CD /HOME 切换到HOME目录DOIT博客#^ z3r"m r,DU6~:o1p6]
CD .. 返回到根目录(不是主目录) 跟目录在主目录上一级DOIT博客VTaPV$q
直接CD 就进入到注目路(ROOT)
aM w5?*KT0PWD 查询当前目录的绝对路径
vzjS#B uU[X } Bb0CD /A/B/C
M E/@W EnI$?8N0进入到 A/B/C 目录下DOIT博客+[p-K^Q \o
CD ~回到上一级目录
T OX~6i E4C0MKDIR /ROOT/AAA   新件了一个AAA目录(用绝对路径创建,也可以用
\%wMN/VzuT0相对路径创建 MKDIR BBB
#A0f a-ooA+_0RMDIR /A/B/CC  删除绝对路径下的CC目录,也可以 相对路径
H)p;b%nd W'FQ0MV 文件名 路径/新的文件名        移动文件到新的目录DOIT博客8~8V#Lr$_P%n
CP /ROOT/A  B  把A COPY 成BDOIT博客-L \d(T(oxX
RM -F A 不提示直接删除A文件DOIT博客ukS ~"M1b7{~,m$I
MTOOLS 列出所有可以使用的命令DOIT博客~ t}%r#{8^,c^A7C
MORE 1.TXT 阅读1.TXT 文件DOIT博客2M?,w V Ax
Q 键退出DOIT博客 O;vmz Y-~.|
CAT 文件名 也可以阅读这个文件DOIT博客c-qc~j:x)b
VI 文件名  编辑文件
p3oeFjP'J7QO0ESC SHIFT:Q!强行退出VI 编辑器DOIT博客N%nROgn@
CHMOD 777(8进制文件表示属性) 文件名   修改文件的权限
-Jb%Jt*j'uO%y0LL  ==LS -L  两个命令相同    可读权限为1 其他的为0DOIT博客 nR@#fW$EC-M
CHOWN 用户名 文件名 修改文件的主人
qOY S7Q L5|2`X0CHGRP 用户名  文件名 修改文件的叔祖DOIT博客 E5iE+N.|+[
ROOT 的权限 非常大所有的事情都可以作到
i@!N-lB"Ub0FILE 文件名    显示文件的类型
(y\ L k~\0/ETC/PASSWORD 文件不是一个密码文件是也个存储用户信息的文件DOIT博客7{ clU7LJB
文件组合 SI -AR;MORE
i v7U?F0MKDIR -P AAA/BBB/C/D 依次创建字目录
F~1MZy9o]0RM -RF 目录名      无条件删除目录 不做提示DOIT博客,OcNY\8w4r
/DEV 目录下一般保存万纬的文件DOIT博客7BV;T#ws#s2G
/ETC 目录下存放一些配置文件DOIT博客)BOmy7BQ j.Ej
*startx 命令就可以进入图形界面
dw&C(d p3r U8n4A$q0reboot 重启
3M`r;RZ!c:Q0shutdown -h now 现在关闭计算机DOIT博客 O4T,N-I+NnA5i/p
***针对文件系统的命令DOIT博客M@RQ e
df  可以查看硬盘所剩下的空间DOIT博客8L.W&_ _Qo
格式
8n/O!F['u7gJ?0df -a /root    列出所有的文件所剩下大小
i4`/z%R4a/]9dox.I0DF -K /ROOT  以KB 的大小显示
E'ut"Tn1It0挂载是将分区关联到某一目录的过程。挂载分区使起始于这个指定目录(通称为挂载点,mount point)的贮存区能够被使用。DOIT博客 ee6h)I gvh(R
例如,如果分区 /dev/hda5/ 被挂载在 /usr/ 上,这意味着所有在 /usr/ 之下的文件和目录在物理意义上位于 /dev/hda5/ 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被保存在 /dev/hda5/上,而文件 /etc/X11/gdm/Sessions/Gnome 却不是。DOIT博客'w U8X7HF(H^

DF -T 可以查看文件系统DOIT博客8_3N&V3}cl[F
du 检查一个目录所占有的空间
KAW+bRj A6s1w0du -s /root  显示ROOT占用的文件的总数
Q jt-~1l6l rj0mount -t /dev/sdb1 /mnt/usb   将SDB1这个硬件设备挂在到/MNT/USB 目录下面DOIT博客 c F5be.A^W`"O
umount /挂在目录  卸载了这个挂在点
DOX-J1[YN0cal   打开日历表DOIT博客fdEMT"`f)W
cal 11 1986  打开1986年的日历表
#M/?w+pQ/k2Vo(B.s4E0dmesg 获取服务器的一些信息DOIT博客3wwM.SnI4h9r Y
dmesg >>a.txt  将类容输出到A.TXT 文件DOIT博客p,|)T4~:G9p O`*k
touch a.txt    将类容输出到A.TXT 文件DOIT博客[dv+qc(f0Z:}
uname -a  得到系统版本信息
;je,Jy o6N0man IS 列出IS 命令的帮助信息DOIT博客/`0alz0@&b.L(H(q
***********************************************DOIT博客2FjN?0X
用VI 编辑文件
YB lyv.\ l)Ds W0VI  文件名
*P,`[3^p2n0模式:命令模式,编辑模式,末行模式。

k { |La2g5u0切换方式:命令模式→i→编辑模式,编辑模式→Esc→命令模式,命令模式→:→末行模式。

R+ntE2R0功能:

*j/`(AWc:j0    命令模式(Command Mode):  控制光标移动,删除字符,段落复制。
8M4HRQ*`0    编辑模式(Insert Mode):   新增文字及修改文字。
Bw1S#A9m-G zW Z9D0    末行模式(Last Line Mode):保存文件,离开vi,以及其他设置。DOIT博客5[;b3Q4P.l


&R[8a8] L0命令模式命令

^P.d4J$x0~eu?0命令       说明DOIT博客9K0f1F)na5lC;i
 h           将光标向左移动一格DOIT博客JT4WC&x:^}V(q
 l           将光标向右移动一格
W#y h Cw0 j           将光标向下移动一格DOIT博客&Hr%Q:x&X c4f!gm`7j
 k           将光标向上移动一格
%Y"XDO)~{ AV%V?$@0 0           数字0,将光标移动到该行的行首DOIT博客2O?,l1l/{RQ
 $           将光标移动到该行的行末DOIT博客nK"s_4VDr#iKM
 H           将光标移动到该屏幕的顶端DOIT博客*WC l!q!n}2v6?
 M           将光标移动到该屏幕的中间
-r]#jo5[y"`.c{-o0 L           将光标移动到该屏幕的底端DOIT博客#_/v_f QG
 gg          将光标移动到文章的首行DOIT博客 }[`t&c.T
 G           将光标移动到文章的尾行
O O fC |~`0w或W         将光标移动到下一单词DOIT博客:cW,A)k9C*`M:R r)jR
 x           删除光标所在处的字符
J!|9c/A9eQ"W7e%F0g0 X           删除光标前的字符
1j)K'CKI0 dd          删除光标所在行DOIT博客z!HO k ol
*dd          从光标所在行向下删除*行,*为数字
yiS!\V[0 D           删除光标所在处到行尾DOIT博客,B3c0k@N'kIb
 r           取代光标处的一个字符DOIT博客4}jQTO8v
 R           从光标处向后替换,按Esc结束DOIT博客$m)lY Pb^
 u           取消上步的操作
#^%U1f8J.|0 U           取消目前的所有操作DOIT博客1y!e;h*c!IxF
 yy          复制光标所在行
6CL8N(m2te0 p           将复制的内容放在光标所在行的下行DOIT博客 `o4AS c o(Z$|


(H enZi p } o'C){0编辑模式命令DOIT博客"[]$e:sw5z/N@

命令       说明DOIT博客7Jr8A PY
 a           在光标后插入文本
g8yt!j%Y |.`'u'c6z ~0 A           在光标所在行后插入文本DOIT博客2~\t`6n~!T
 i           在光标前插入文本
4|-_"q'N'P?0 I           在光标所在行前插入文本DOIT博客ee/Lq1lYm!h
 o           在光标所在行下插入新行(小写字母o)DOIT博客|U'|7ZCAT8d
 O           在光标所在行上插入新行(大写字母O)DOIT博客Y1~){J#vZi"}

DOIT博客7T)w,f`jds;F3X ^
末行命令

0D hU}%I^*x0命令       说明DOIT博客dT a9RvUl)j
 e           创建新文件
1s f s!c)i W6@3To0 n           加载新文件DOIT博客sd;x\]? g u:S
 w           保存文件DOIT博客)Ej!oLSk
 !           强行操作DOIT博客.JJ*odm*xr&q3F&L
 w!          强行保存文件DOIT博客%_+l5T?O#u
 q           退出DOIT博客 U4d4YGX5K-];ui4o5r
 q!          强行退出
"p P.}}P h y#Jj0 wq          保存退出
/^ E%SW"s#Ve0 wq!         强行保存退出
(l)jr8NXCQ'x0 set nu      显示行号DOIT博客E"jFn;_5K{9~ c
 set nonu    不显示行号
)V{3~lD8U0 /*          /搜索,*任意字符串DOIT博客a.Ic+f"O
 ?           同上
#s4l j \#q3@{7n x_D0..............................................

S+_Kf:V0x0grub控制开机选项DOIT博客z%TVa0O
主要在 grub 目录
q%V T^a0vi /boot/grub/grub.conf  进入GRUB 的配置文件
.R7t3]M7I)e0如何在LUNXI 下面挂在WIN200
z+?+d+]8zd"rm v'?;X0打开GRUP 目录DOIT博客K9g5T1Za"?)t
在可编辑部分输入
DL$B'mC0title windows 2kDOIT博客6[hM}[+H2Gho%l:o
       rootnoverify(hd0,6)DOIT博客 x!ne4`RF x
       chainloadrer +1    扇区控制DOIT博客N3sX i$Sa EL1M
       同时还需要在LUNIX 处进行加密处理DOIT博客M/Ff7uJE{ {
      可以用MD5加密处理DOIT博客!W#y!W9sldq
**如何突破ROOT 权限
:ZW_w'C+LG`0在启动LUNIX时候 进入到DOIT博客Tt6ss'gS9X
grub edit> kernel /vmlinuz-2.4.28.20-8 root=label=/ single 在输入SINGLE 前后需要按E键
Sc0EE+\j-hL0 如果 GRUB.CONF文件丢失也可以直接键入GRUBDOIT博客C9S"Q `3R9`J6|
直接在 GRUB 下面操作 进行引导DOIT博客)Cd3|Jd@O
GRUB》 ROOT (HD0 ,0)
j&JMiH.`3oJ0GRUB》 STUP (HD0,0)DOIT博客t'sZ(J-Z^2df!Y?
GRUB》 ROOT (HD0,0)DOIT博客_v2\C z U
以上命令是对LUNIX 进行修复
B!k0Cr0d.[]0下面的命令进行应到
UQ3dlg&|0GRUB》KERNEL /VMLINUZDOIT博客n},d#T [0X
GRUB》INITRDDOIT博客 H&pEw5Bw
GRUB》BOOTDOIT博客4_FG;Xn\F*m$X
*TAB键具有提示作用DOIT博客'c h"bB$OM d1r
三.****文件压缩和解压缩的方法DOIT博客)j5p"g5{ KIz O
*.GZ 和*.BZ2 *.ZIP 都是常见的压缩文件
,Hx$M;`*Q01.压缩成GZ 文件DOIT博客"o:pI ?M
GZIP -V 文件名   显示压缩进度   DOIT博客 i$o8i~,?x"N[&H
压缩后的文件名变成  文件名.GZDOIT博客c&B @y qs$x*L

2.解压缩GZ文件DOIT博客 t+k:g/u U3{
GUNZIP -FV X.PHP.GZ  DOIT博客fl2i5Z"w
GZIP -D X.PHP.GZ   效果也是解压缩文件DOIT博客A:P!v7LWG#f

3. zip 压缩后的文件名.ZIP 文件名DOIT博客+vt;iYL
4. UNZIP  被解压缩的文件名.ZIPDOIT博客:Si"fm rq!n\hQ r
5.BZIP2 文件名   压缩成*.BZ2文件DOIT博客+m SN7}X z#V
6.bunzip2 *.bzz2  解压缩文件
l T+uf#~:I/xeS07.TAR 包DOIT博客/DccRq:J
TAR -CVF SOFT.TAR SOFT/SOFT/BB   对这个目录进行打包DOIT博客K,{~QW0?']3_.b;e0}~
RM -F SOFT.TAR 删除这个包
:W1?\T J"?0TAR XVF BBB.PHP.TAR 解开这个TAR包DOIT博客~2L,U1E-q
TAR CZVF PHPSHELL.PHP.TAR.GZ   把PHPSHELL.PHP打成TAR包在进行压缩
5HZ4gg:s0TAR ZXVF PHPSHELL.PHP.GZ  解压这个包DOIT博客SJt h"x!D
TAR ZCVF PHPSHELL.PHP .TGZ PHPSHELL.PHP  压缩成TGZ包DOIT博客fX~B&[
TAR ZXVF PHPSHELL.PHP.TGZ 解包
)J#Nkr!J!fJ6g0四.软件包的安装
ne B$u9sU4^3HA5^1]f!x0X.tar.gz包的安装方法
7G4ap:l hg ['mo01.先对他解包
g4`NrR4`2D0h02.找到安装文件
b;W |2d qs7G03.查看安装文件权限 看是否可以安装 否则要改变他的权限DOIT博客:d$UzB d5YI$nd
CHMOD 755 软件名DOIT博客W y9AXv"X
如何安装RPM包
)M9h)p+sF|2P0RPM -U(升级) -F(更新) -V(安装信息) -H(安装进度) -E(删除软件包)-Q (列出用户安装的软件包) X.RPM
&Zl V6uI^0例如
)~uwr6sl8E0RPM -IVH X.RPMDOIT博客 g-c(l#so^ f
X (直接运行安装后的软件)
8t$Rg,p9p|e0在安装一个包时首先要进行解压缩
Uwu]4^p0辕马包的安装
j-p"~:YQB'{"@*j5k&X0CONFIGure 配置命令DOIT博客qe*T7RI|!_:k a^
./CONFIGURE wenjian
~ J a*n4~ kWn J0MAKEFILE 文件名.C 编译这些软件
Sp"\5In'BM0./configure make make install 将编译好的软件安装到你的计算机上
5u hp4d$Ou0VI 文件名 编辑这个文件DOIT博客6Au&c7B(G?w3?6olz
.命令 意思是使用本目录下的命令DOIT博客q(_ ck$E&J9Q:|
五.LINUX 用户的管理DOIT博客ZNB7@3y1b t
CD /ETC
%d8|4D9N/]+C0IS 查看PASSWORD文件(他用来管理用户)DOIT博客[^0R"T)wat?*`c
VI PASSWORDDOIT博客"HJ1z)Q:}2q0p#j|u ]
第一行显示了:DOIT博客P X t }7G
 ROOT(用户名):(分割符) 0(用户名ID):0(用户组ID):ROOT(用户组名):/ROOT(用户的主目录):/BIN/BASH (用户将使用BASH命令解释器)
h_J3c ott?A,M0可以用这中同样的格式来创建一个ROOT用户
)R1Wj^ J E0LIEYAN(用户名):(分割符)X(用户登陆时要输入密码): 0(用户名ID):0(用户组ID):ROOT(用户组名):/ROOT(用户的主目录):/BIN/BASH (用户将使用BASH命令解释器)DOIT博客^/q\\r[F1}{9~
LIEYAN 具有了ROOT的权限DOIT博客 }.]v4`$q!d#?
LINUX识别用户权限是按照用户ID(0)进行识别的DOIT博客 A(_o9b0V B#J

VI SHADOW (/ETC下的SHADOW 文件存放的都是与用户密码相关的信息)DOIT博客5q QE {.J.qqQ
ROOT(用户名):MD5加密密码:时间:0(修改密码的最小间隔):9999(修改密码的最大间隔):7(密码到期差7天的时候提示你修改)::(密码过期后将封锁帐号)DOIT博客CTZ\*t5q,^
下一个重要文件
wB V}&|0VI LOGIN.DEFS 建立用户和系统默认的一些信息
o)Pv/a6WXA0带#的行说明已经被注释 不生效了
:LuR `CK%x;A0|[0UID 用户ID
_]-h/T g7Z?2B0GID 组IDDOIT博客?4azlGTc0}
修改用户信息的命令
#M8W:m0GS],i0useradd -U 用户ID -G 组名 -D 主目录 -S 命令解释器 -P 密码DOIT博客{X;R)E]@+|1D}
useradd -u 501 -g bin -G ftp -d /home/bac/ -sDOIT博客?:S@|9Q ]+?,}$O
/bin /bash -p abc(密码) bac(密码)
P+R U&z r[vZM0建立了bac 用户后 就可以切换用户进入/home/bac/主目录
2g5[:x;~2@^"B0passwd 用户名   为该用户名创建新的密码DOIT博客 S w:yO4~R7L
125896  新的密码
%DY"Ykrp]HU;Dd2v0删除用户DOIT博客ug:f9oB\#s
删除PASSWORD 中的用户信息
?s8m0io)T1u[T0和SHADOW 文件中的密码信息DOIT博客"J4QV t6@1{RLm
RM -RF 用户目录
)V1}M"M._&N0USER  该命令列出所有的 用户
u+izQ*}E0六.LINUX 下的进程管理
A}e+KG*K0who 查看有多少人登陆过该服务器DOIT博客H9D*p_ d"Oj2a
who -u  显示的更加详细 多了一个进程号,可以通过关闭进程来取消这个用户的操作DOIT博客 V B^zwU/?8_dU
W 命令显示用户更加的详细
u:p;gW9\'m*K|m;a0ALT+F12可以切换到另一个用户 另一个终端
M/i.pMk#k(h3k0last  查看最近有那些用户登陆过该系统DOIT博客L1u,g T])b
top 系统监视命令DOIT博客(K:z|eD;\]
PS 显示系统当前的进程DOIT博客9oWSC3r rX*~7FT
PS-A 显示当前系统的所有进程
My:F$bB ^0ps -aux 更加全面的显示系统进程信息
]8S#q4L&p/C0关闭进程
UJ#Pu O X lX0kill -9(级别为9无条件杀死一个进程) 2359(进程ID)
5gm)~%O)c0kill -8 25639
Dpyv(o e!I7LM-g$z0第七.LUNIX下面的日志文件DOIT博客a'|0E9gS6u3`(W8K4e
CD /VAR/LOGDOIT博客%m9b]#h\W
一看就明白了日
^\d3@0e}/N6s w0authpriv.* 用户登陆的信息DOIT博客-E oqq?&M
LOCAL7.*引导信息  .后面的东西是优先级别DOIT博客%k zr!Q-@
也可以用VI编辑器来修改 其中的配置
Z@@s_1A B(E0第八,LINUX 下的SHELL(命令解释器)编程 (相当于批处理)
lIXY e0A.SH 这样的格式都是SHELL 的脚本DOIT博客}4L3e9L;G'O |
bash < a.sh  指定命令解释器和脚本的绝对或者相对路径(运行A.SH)
w^TW+X&D0VI A.SH 可以进入编辑
EOJ0M"u-T2~8x I'ygq0echo $显示系统默认的变量
Ph C)c(?p0在   SHELLE 中可以定义函数,变量DOIT博客3S)r"s|8s
第九,LINUX下的网络配置DOIT博客3PH+^#D*b6H
ifconfig 查看当前的网络配置
D(Wn-@oW/C(H0STEP UP ---NET WORK ---OK 进入了网络配置截面
gv$VRY#Q${0在这里可以配置IP 和其他东西DOIT博客PiVr-G S.n Xa
service network restart重新启动网络就可以让修改的IP生效
Ecn8De]#}q0也可以用REBOOT
!R Y8ynaxc\/h0也可以用VI 用文本来修改DOIT博客+o4dq7K3\r Z4xy8?o
etc/sysconfig/network object/etho
%W@$u+TQ-|)z0etc/resolv.pag  域名服务器DOIT博客ULu(Ej^
service network state 查看网络状态DOIT博客-qiE2`F KX'o
service network startDOIT博客w3x Vv E p d
service network stopDOIT博客!e/HI,I,d"@v
service network restartDOIT博客&{4`0C!|tu3oZh
开启/关闭和重启网络服务DOIT博客^_h7a`8b@g

也可以写一个SHELL脚本来启动DOIT博客~^9y)P4_(PVj
第十. DHCP 服务器 动态IP分配
9gw*T}w1^MPA0CD /ETCDOIT博客Y8^#Z)Fe J~ V
VI DHCPD.CONF 这个就是DHCP服务器的配置文件DOIT博客4cn'AtZ-S'q
routers 网关
+N3X7saf `4e!FWV0rang 192.168.0.1 192.168.0.255 IP的取值范围DOIT博客-c?h)g%O|$u T0m
service dhcpd restart 重新启动DHCP 服务器
]&^CV@h&[0DHCLENT 获取DHCP 服务器自动分配的IP 地址DOIT博客Z m(o'@%_BS k[x
service network restart 重新 启动网卡 才可重新启动DHCP 服务器DOIT博客4{,Q,Erv0O~
十一 . SAMBA 服务器DOIT博客k7bb.Y:u5k6CX
CD /ETCDOIT博客t"o'e(_$Pa-Y
CD SAMBADOIT博客Kp h `o _!G$k^*k
ISDOIT博客kW+b*Ju;K
VI SMB.CONFDOIT博客)Kx0p!C-m
配置文件中的类容DOIT博客$]^G%r%Z&G*_2ci
WORKGROUP=工作组名
\ZB h `/q0SERVER STRING = 服务器名字DOIT博客8zd:` }3U8U!K
PRINTCAOP NAME = 打印机名 DOIT博客!K a)a8N2U o*?
GUEST ACCOUNT =NOBODY  这是一个匿名访问的用户DOIT博客3z`f7`wUUz!S
LOGFILE = 日志文件的路径
!Ea?'F8rZ:^0MAX LOG SIZE =日志文件大小DOIT博客5I GM\.AZS3z(?wo
匿名访问 关于PASSWORD 的信息全部注释掉
cs^Ro:A7k.U la0SOCKER OPTION 设置网络会话不 做修改
$O2y,~$fCJ&U P0#和;都代表注释的意思
4M E/q{ h:d W0[HOME] 定义用户的共享目录
,^6MnC8J%R0[ROSE]
*p/J'~6]6Am.[*Uk Z0.COMMENT =ROSE
fT"Gi p$F0PATH= /WAR/SPLL
BU2[M,D cU(`*e-~0VALID USERS=NOBODYDOIT博客;x%`#qkPU%L.p
PUBLIC =YES
] B#u~Z)~Vj M0WERITABLE=YES 对指定目录是否可以写
IL0Y&K+rv4Sn-AI(e2q0这就是培植好的共享目录
@+r4~Ma*r*WW0SERVICE SMB RESTART 重启动SAMBA 服务器
b }5p_H$D_ }0CD /WAR/SPOOL/SAMBADOIT博客+m8miJFhR;b
2.有用户名的登陆配置DOIT博客5UU){Yh9prpj
#GUEST ACCOUNT =NOBODY 要将他注释
(vw8Ulf0securtiy =user 访问方法改为USER  意思是起用用户拉访问DOIT博客S/]n r w},kN
encrypt password =yes 询问密码时候加密
0gCO jJ1G/E2Y;?0AMB PASSWORD =/X/H/J  存放访问用户密码文件的路径
dXJ ?6]F5o0[ROSE]DOIT博客Fzb8N7Mc8I1J(a;J
COMMENT =ROSE
0dE6h bB+l.z'E0PATH= /WAR/SPLL
#`8F&{3Y5M3Dw0VALID USERS=BIN 用户要实际存在才可以 也可以添加多个
4u&[vb J$P~0PUBLIC =YESDOIT博客 ?/adX7M.?5U"r
WERITABLE=YES 对指定目录是否可以写
g;CC9s3n HYU0smbpasswd 给SAM 服务器天家用户的命令DOIT博客2Z ?2\6}*cm-`
smbpasswd -b bin 天家用户到BIN 下的密码文挡(password)中
Tf'I e"D+tC`046415 密码DOIT博客vD s+?,P/HH
smbclient -l 主机名   访问别的SAM 服务器
$@,x []!dY Wb0十二. LINUX下的DNS服务器
x![:_*o!L0rpm -qa | grep bind 搜索计算机上安装的RPM 包
~Jt FrBba R"@AE0rpm -e bind-9.2.1-16 删除这个RPM 包
;d,U| {o}\0rpm -ivh bind-utils-9.2 安装9.2 这个工具包
AV6SJc-sX.I&|0rpm -ivh bind -9.2 在安装服务器包DOIT博客5qy,O$NVdf
安装后就会产生DNSDOIT博客i9|WEu4`6}8_*I3i
more name.ca > /var/named/named.ca 将NAME.CA 定义到指定目录下的name.ca
_?$~ F*fc0DNS服务器所使用的断口是53DOIT博客%Y?-JNu`KV
 service named strart 打开53断口(启动DNS)
.y-Ua"K-] lV0netstat -an  查看DOIT博客*nW(yYHf m
HOSThttp://www.hackbase.com/  查看能 否解吸 域名DOIT博客`d\r:Fs4kGl+U.f%C6z
service named stop 关闭53断口DOIT博客$Hm;_ H~i-f"D7]B
******
%X$~BYz@0vi named.conf 配置DNS服务器的信息DOIT博客m@Z'V3K3Rjf
zonehttp://www.hackbae/  定义http://www.hackbase/这个域
R`|&k#DXP]2T5a0name.ca 跟域 中间定义了很多域的是数据文件DOIT博客uB2Z5elv(}u1M
nslookup 域名解析
*_b{%v7@ c:V7m%X0十三 linux 下的WEB 服务器APCHEDOIT博客POQ;d%KL]dN-y qq
cd /etc
_Qi3yxH9s0httpd 这个文件就APCHE 的文件DOIT博客6cf@5]q
cd httpd
UIX/HC Eg9Zm0cd conf
Y+kLWO&`3m|0is
'X^.p~k&zJJ3K0vi httpd.conf  apche 的配置文件
Qf I!QT7y,k4J0serverroot "/ect/httpd" apche 的配置信息 错误信息 写入这个文件
M ~JRodd \%n0maxkeepaliverequests 100 客户断并发连接服务器的最大数量
Dtc3[e-}*uIY0<ifmodle prefork.c>
[:t r zBe:C]L0.......
5|:C9J-N0[0......DOIT博客7q:Wc(`s,wC i$]
</ifmodule>   启动是的子进程
6? k\_$w&kJ9I H0docament root= 主页路径
O8HR!q L;b;yr0directoryindex a.html 默认设置的主页DOIT博客!ysz+y1jR+X(G
isDOIT博客il'O usb3g2~k w
cd conf.d  有是服务器DOIT博客 QV7Y if%UH2h
apche 服务器器用户访问控制DOIT博客.}1FpnyI\7u PB7]9g
打开 httpd.confDOIT博客f#l+Q,i|&P
在文件最后加入DOIT博客2E-s&j-auY2q(R1z
<directory "网站的访问路径/var/www/html">DOIT博客`;Q"n F}LO
authname "123abc"    注意大小写
6D$bz@"a Xgc P0authtype  basicDOIT博客 q*zs t8vf@P-jW
authuserfile /etc/httpd/password   指定这个文件来存放用户明DOIT博客os"_;Z(wj!u`P
require user abc (require group 定义个定义个最小组名DOIT博客q%S5}+i$_"o
</directory>
l@Yr ^ ^]S0htpassword -c /etc/httpd/password abc  添家用户DOIT博客9k9Z^6CN9~
密码 DOIT博客8u-i0[}o(j#\4?
service httpad restart 重新启动apche 服务器DOIT博客bWwws0G#G1B
apche 的虚拟主机配置DOIT博客U8o8w O7bT
<virtualhost ip>
*cA]KYf,nO0documentroot /var/www/html/www1
.F P,O Ke1C%Ju0servername localhostDOIT博客.L.P Vt/^.L-G pF6{V
serveradminroot@localhostDOIT博客5N0Z ZXn
</virtualhost>
(~)qo%h+x0这个就是配置好的第一个虚拟主机
R_|2sD(S^p0可以用通用的方法在其他地方创建
,S8T5e7}Zz\0cp ifcfg-etho ifcfg-eth0:2
2C;v.EXG!mx q sR0用COPY 的方法创建另一个网卡
1u S,prOEM4En4VwC0vi ifcfg-eth0:2DOIT博客i![y+Dvx u
可以进入编辑
e)gu*LE+o_1A0十四.linux 的网络安全
wy4SW%N }N!Q:\s0ping 探测网络设置DOIT博客!X&i'l3g4uj&A jj9u
ping -b 192.168.1.1    PING 网关或者广播
e7]_)^ s0/proc/sys/net/ipv4   找到此目录DOIT博客B+z.n(}au|/O/@
isDOIT博客[ew(PG'SX*jf?
vi icmp_echo_ignore_allDOIT博客8W*Rc?2Kz O
 把其中的0改成1
JdN G$aJ ]X0就可以防止PING 包的探测DOIT博客]N%dZ.Wk@Q6z
VI SERVICE 断口与服务的对应
-p{ T#p l1As0chattr +i password   给这个文件加上限制 (完全限制了文件的可读性)DOIT博客ZUT]"GG
chattr -i password    取消限制
%C"ZSe-F/|x&{!J0总之要修该文件的权限
C j @&OF-qS6k0十五.IBtables 防火墙的使用DOIT博客nW`%b Y^!mMz0]!{+d)Y
前言
z$}4p/Q)NK0概述DOIT博客{6Dqi V2t
这是一篇以介绍在Linux操作系统平台上构建防火墙系统(Netfilter/Iptables)为主的科技文档,旨在帮助使用者在较短的时间内掌握管理和配置要领,为企业的网络安全提供相关的安全保障。DOIT博客5iK6PZs!BU
本文是《Linux安全应用——构建以防火墙为核心的安全管理系统》一文的姐妹篇,如果把那篇文章看成是What is it?那么,本文则以技术细节为主,即How to do?关于为什么要使用基于Linux操作系统平台的防火墙系统的原因,
NUPK]x P0本文共分为两部分,第一部分具体介绍了Netfilter/Iptables的运行机制和配置管理方法,这是全文中最核心的一部分。第二部分给出了一些具体的范例脚本供系统管理员参考。DOIT博客$b E$?W WT
鉴于笔者水平有限,文中有错误的地方望不吝赐教。DOIT博客Y [V)f+q
适用对象DOIT博客}2Y F)U]vEi9w
本文首先是为各个企业的网络系统管理员撰写的,无论是那些已经使用了基于Netfilter/Iptables防火墙系统的企业,还是那些正准备使用它的企业,本文的内容都非常适合为系统管理员们提供参考。DOIT博客 D@/NUu'W R
对于那些Linux的个人用户和爱好者,本文也不失为一篇相当有价值的参考文档,其中,相当一部分内容深入浅出的讲解能帮助读者很快的理解和掌握Netfilter/Iptables的精髓。DOIT博客y _4m3cU.iIX,i
对于希望通过本文了解Netfilter/Iptables的读者,应至少具备一定的Linux操作系统的应用基础,比如文件操作、网络配置操作等,当然,如果使用者还具备一定的编译核心的能力那是在好不过的了。DOIT博客'D]ng,J wy
为了更好的配置防火墙系统,使用者除了掌握Netfilter/Iptables本身的配置管理技巧外,掌握一定的TCP/IP网络知识也是必须的,比如在缺省情况下,应该知道SMTP(Simple Mail Transfer Protocol)协议使用TCP25端口做为其对外提供服务的端口,FTP(File Transfer Protocol)协议在建立连接的整个过程中,会与客户端建立两条连接,一条是用户传输数据的,另一条则是用户控制传输的。
9Ecy7nR2Q7Sx3|0资源列表
2E6p$r [7H&H.t3squ@0Netfilter/Iptables的官方网站:
|9k]6Vo)H"i0http://www.netfilter.org/
m%Q!Z?\0在Netfilter的官方网站,用户能够下载Iptables的最新的源代码,Iptables的使用说明文档,FAQ和Mail List,这个站点是有关Netfilter/Iptables最权威、最全面的地方,在这里,你几乎能够找到和Netfilter/iptables相关的所有帮助和技术支持。
'\fOHq8h0术语
D;XhO&|4v8x{0文中包含了一些术语,也许读者对其中的一部分似曾相识,但又并不完全理解其正确的含义,或者和其他相关安全产品的概念混淆了。这里有一些解释,并说明了本文中如何使用它们。DOIT博客5U&c5W;qK3OgN,SR4}_3D
DNAT - Destination Network Address Translation 目的网络地址转换。 DNAT是一种改变数据包目的IP地址的技术,这种技术经常用于将内部网络(RFC1918定义的地址段)的服务器通过公有的可路由IP地址发布到Internet上,通过对同一个IP地址分配不同的端口,来决定数据的流向。
%ezX3wx |!v B0SNAT - Source Network Address Translation源网络地址转换。这是一种改变数据包源IP地址的技术,经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解决这个问题。IPv6使得地球上每一粒沙子大小的空间都能够分配到一个IP地址,因此IPv6不存在地址空间短缺的问题。DOIT博客+?6DN7c6y[ O'P
State - 状态 指明数据包处于什么状态。状态在RFC 793 - Transmission Control Protocol中定义,或由用户在Netfilter/iptables中自定义。需要注意的是Netfilter设定了一些关于连接和数据包的状态,但没有完全使用使用RFC 793的定义。
8p,kWg x{#B0C0User space - 用户空间,指在内核外部或发生在内核外部的任何东西。例如,调用 iptables -h 发生在内核外部,但iptables -A FORWARD -p tcp -j ACCEPT(部分地)发生在内核内部,因为一条新的规则加入了规则集。DOIT博客x6Y\y6w:G&Px\
Kernel space - 内核空间 ,与用户空间相对,指那些发生在内核内部。
\,M4a:X7i+]u'C0target - 这个词在后文中有大量的应用,它表示对匹配的数据包所做的操作,如ACCEPT、DROP、REDIRECT等等。DOIT博客;A8bJ0M2Z*W r
约定
f C;|}ZU0本文中涉及的命令、范例都是以Redhat Linux操作系统平台为基础的,尽管在绝大多数的情况下,Linux的大多数命令都是独立于发行版本的,但每个发行版本之间或多或少的存在微小的区别。DOIT博客 FLzn&?Ts+fz%Hl|
本文中的命令以黑体5号宋体字表示,如下例:
3D7o?R(S$k)en5a0#iptables-restore /etc/sysconfig/iptablesDOIT博客~-yG%Ub2^)JzN
本文中涉及到的命令、范例脚本都经过我们的严格测试,能够保证使用者按照文中介绍的做法正确配置防火墙,当然,每一个用户的网络环境都是不一样的,具体的配置还需要用户根据自己的具体情况来适当调整。
"Qc0FX e;r z-d%b0致谢DOIT博客8F[.ido
在撰写本文时,参考了Oskar Andreasson的《iptables tutorial 1.1.19》一文,由于本人英语水平有限,因此额外参考了中国Linux公社里的Linux新鲜社员sllscn的翻译稿,在此向他们两人表示谢意。DOIT博客tP8N-Y*k*e)U
第一章 构建Netfilter/Iptsbles防火墙系统DOIT博客$oB:k\O,E
1.1    获取iptablesDOIT博客.b dk_"t n.|] x
iptables可以从http://www.netfilter.org/下载,该网站是netfilter/iptables最专业的网站,由Harald Welte、Jozsef Kadlecsik、Martin Josefsson、Patrick McHardy等核心成员进行维护,此外,还有众多的iptables的使用者和开发者为网站提供了大量的文档和更新代码。DOIT博客:_)vX+]?6b-h
1.2    编译内核
G0J7Y7yC0在一般情况下,我们采用的Linux的distribution比如Redhat都会帮我们安装好Iptables,而且netfilter的核心层也被以模块(Modules)的方式编译进了核心,所以,在绝大多数的情况下,我们是不需要对核心进行重新编译的。DOIT博客*X1VL(S`8\W
当然,我们写这篇文档的用意决不仅限于教会用户使用几个命令来管理iptables,所以,我们还是来描述一下如何编译核心以使Linux在核心层能够支持数据包过滤。DOIT博客|M#{Z$VC-j5r Kh&O
编译核心的准备工作当然是必需有Linux Kernel的源代码,在源代码文件的目录/usr/src/linux-2.4(这个目录一般是个链接文件)中输入:DOIT博客6du6k3E)N
#make menuconfigDOIT博客L.r}v$vezap4[
会出现如下的画面:DOIT博客 ug8d\ _SsuH

在图中高亮显示的地方回车进入Networking options的核心配置页面,DOIT博客@Gm#M.tg

将高亮显示的部分编译进核心,在该配置页面内,还有一处需要注意,就是Netfilter Configuration的配置页面,在该处回车即可进入配置界面:

[3?;U E _\R U#Nz3I6^0从图中可以看到,左面尖括号内的“M”代表该选项被编译成核心模块,仅在系统需要时才被装载入核心空间,由于模块化的核心是不占用核心本身的空间的,因此,对于这些选项,除非肯定不会用到的以外,其他的都可以选择编译成核心模块,但有些是必须的,如DOIT博客/@,{KM$hb
Connection tracking——用于支持状态链接跟踪功能
T$k)Sid0FTP protocol support——用于支持对Ftp协议的连接跟踪机制
.B6e\ N)Ip0IP tables support——用于支持包过滤DOIT博客 uZ8`-T@/P J#P u
Connection state match support——用户支持连接状态匹配
Arb L|*r0MASQUERADE target support——支持地址伪装功能DOIT博客/_n6i"Y8x|8\!t
Multiport match support——支持多端口匹配,这对于设置过滤规则非常有好处
:Z:d9g8w6?}G0REDIRECT target support——如果你想使用iptables将特定的流量交给特定的代理程序如squid来处理,这个选项需要被编译进核心模块
Ch;R6SV8~P7I0这些选项选择完成后,按照核心编译的方法对配置好的核心进行编译即可:
f5C d Ni}9ay0#make depDOIT博客3R3~,a+X&r K
#make bzImageDOIT博客kjwAu:c
#make install
v4y%o:m(F&PFus8lo0#make modules
Utq3H j$EF+]0#make modules_install
+O8LrT'C!Z9cC01.3    iptables的编译和安装DOIT博客 X J[IG
就象我们在上节中说到的一样,如果采用诸如Redhat之类的Linux Distribution,在安装系统时,Iptables已经被做为缺省的软件安装到系统上了,用户不需要另行安装,如果用户需要另外安装新版本的iptables软件,可以到http://www.netfilter.org/的网站下载最新版本的iptables源代码,目前最新的版本是1.2.9。
jbNm+M+o"T0从网站上下载的源代码是“tar.bz2”格式的,编译源代码的第一步工作是解压缩,命令如下:DOIT博客!Q:]L] zZO
#/bin/tar xjvf iptables-1.2.9.tar.bz2DOIT博客cM \ VV\.?6P
解压缩后,进入源代码的安装目录,开始编译:DOIT博客T_!WS]0b9e P'U
#make KERNEL_DIR=/usr/src/linux/
5g ?-flt_0如果一切正常,那么iptables应该编译好了,接下来可以进行安装了,安装命令非常简单:
,Lo8h3b^j0#make install KERNEL_DIR=/usr/src/linux/DOIT博客0|5k;|j e9O]pk7L
怎么样?简单吧,当然,如果这时您的系统核心还没有将netfilter/iptables编译进去,那么安装了iptables软件是没有多大意义的。
8~O n%mb'W01.4    iptables的启动和关闭DOIT博客e9tt j#Ao$\
在Redhat Linux上,由于历史的原因,ipchains和iptables是并存的(ipchains是在kerenl版本2.4.x以前的包过滤防火墙系统),因此ipchains和iptables同时运行是不允许的,我们首先要将ipchains的服务停掉:DOIT博客 DMeX7GN
#/sbin/chkconfig –level 123456 ipchains off
|XeKF[0#/sbin/service ipchains stopDOIT博客%`;VB s J+O:Pu.z
当然,既然不使用ipchains了,我们也可以将ipchains从系统中移除,使用命令:
:S I{0EY%V0#rpm –e ipchainsDOIT博客C:p | e8|
第二步是启动Iptables的服务
Tb:p@o0#/sbin/chkconfig –level 345 iptables onDOIT博客4f/xe7v/v!I#n2D-E
#/sbin/service iptables start
o X jttG x'v+`0chkconfig命令表示在系统启动时,ipchains或iptables在相应启动级别的缺省设置,如果是off,则代表系统启动时不启动ipchains或iptables服务。反之,则启动。
J8m@eE~01.5    iptables的工作原理和基础架构
4i'L&B%l{6}~0iptables被分为两部分,一部分被称为核心空间,另一部分称为用户空间,在核心空间,iptables从底层实现了数据包过滤的各种功能,比如NAT、状态检测以及高级的数据包的匹配策略等,在用户空间,iptables为用户提供了控制核心空间工作状态的命令集。无论如何,一个数据包都会经过下图所示的路径,并在其中的任何一条路径中被处理。
T(G4P7h-Ry4vUx0首先,当一个包进来的时候,也就是从以太网卡进入防火墙,内核首先根据路由表决      定包的目标。如果目标主机就是本机,则如下图直接进入INPUT链,再由本地正在等待该包的进程接收,否则,如果从以太网卡进来的包目标不是本机,再看是否内核允许转发包(可用echo 1 > /proc/sys/net/ipv4/ip_forward 打开转发功能如果不允许转发,则包被DROP掉,如果允许转发,则送出本机,这当中决不经过INPUT或者OUTPUT链,因为路由后的目标不是本机,只被转发规则应用,最后,该linux防火墙主机本身能够产生包,这种包只经过OUTPUT链被送出防火墙。

;Z5p E4ukZ4^._i0现在,我们来讨论为什么iptables叫iptables,这句话挺别扭是吗?但iptables的名字起的确实如其名,我们可以叫它ip表,在iptables中共有三类表,分别是mangle、nat和filter。
H:Cc0ix8mm#h0mangle表从目前来看,他的作用对于满足常规的防火墙应用作用不大,我们在这里不进行具体的描述。
P,Wv6_/^-Iq9a8M0nat表的作用在于对数据包的源或目的IP地址进行转换,这种应用也许只会在IPv4的网络中适用,nat表又可主要分为三条链,如下:
"[EXO\v%X0DNAT:DNAT操作主要用在这样一种情况下,你有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上,比如DMZ。也就是说,我们改变的是目的地址,以使包能重路由到某台主机上。
Q4Bh$\-W({U0Ej0SNAT:SNAT改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT,以使LAN能连接到Internet。如果使用类似 192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。因为RFC1918定义了这些网络为私有的,只能用于LAN内部。
nT9w1[ZK0MASQUERADE:MASQUERADE的作用和SNAT完全一样,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。当然,这也有好处,就是如果我们使用诸如PPPOE等拨号的方式连接Internet,这些地址都是由ISP的随机分配的,这时使用MASQUERADE是非常好的一个解决方案。DOIT博客#["B7zC9kcc+m
filter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。我们就是在这里根据包的内容对包做DROP或ACCEPT的。当然,我们也可以预先在其他地方做些过滤,但是这个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。DOIT博客~6zL:[:A Z
1.6    状态机制
#?5K ]5\3qyO Y0状态机制是iptables中较为特殊的一部分,这也是iptables和比较老的ipchains的一个比较大的区别之一,运行状态机制(连接跟踪)的防火墙称作带有状态机制的防火墙,以下简称为状态防火墙。状态防火墙比非状态防火墙要安全,因为它允许我们编写更严密的规则。DOIT博客 Q lr7MH
在iptables上一共有四种状态,分别被称为NEW、ESTABLISHED、INVALID、RELATED,这四种状态对于TCP、UDP、ICMP三种协议均有效。下面,我们来分别阐述四种状态的特性。DOIT博客qhp1m1}D
NEW:NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接的第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。
Kdc8t;sm9Xq0ESTABLISHED:ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。DOIT博客!V ]mP? Z#H8q7z/[
RELATED:RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有关联的,如果没有在iptables的策略中配置RELATED状态,FTP-data的连接是无法正确建立的,还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。DOIT博客8x0[?pJ(A
INVALID:INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西,因为防火墙认为这是不安全的东西。
{q-?x9_itk0每个状态相对于不同的第四层协议来讲,稍微有些区别,对于TCP协议来说,当防火墙收到第一个数据包,也就是SYN报文时,将该会话标记为NEW状态,在系统的/proc/net/目录下,可以查阅文件ip_conntrack,这是在内存空间里存放防火墙当前状态表的临时文件,对于NEW状态的记录如下:DOIT博客V/l;V;Qvx:k)i'T5mc
tcp  6 117 SYN_SENT src="/192.168.1.5" dst=192.168.1.35 sport=1031 dport=23 [UNREPLIED] src="/192.168.1.35" dst=192.168.1.5 sport=23 dport=1031 use=1
_ Je p,xm(k9T0从上面的记录可以看出,SYN_SENT状态被设置了,这说明连接已经发出一个SYN包,但应答还没发送过来,这可从[UNREPLIED]标志看出,当服务器端回应了SYN/ACK包后,状态表改写为:DOIT博客 gh oK%v d
tcp 6 57 SYN_RECV src="/192.168.1.5" dst=192.168.1.35 sport=1031 dport=23 src="/192.168.1.35" dst=192.168.1.5 sport=23 dport=1031 use=1DOIT博客 yu/Sg$_"p
现在我们已经收到了相应的SYN/ACK包,状态也变为SYN_RECV,这说明最初发出的SYN包已正确传输,并且SYN/ACK包也到达了防火墙。 这就意味着在连接的两方都有数据传输,因此可以认为两个方向都有相应的回应。DOIT博客i N9}_,D qk M T
接下来,TCP三次握手的随后一个报文ACK包也到达了防火墙,防火墙上的状态表变成了:DOIT博客(Rfvc@~(|Z
tcp 6 431999 ESTABLISHED src="/192.168.1.5" dst=192.168.1.35 sport=1031 dport=23 src="/192.168.1.35" dst=192.168.1.5 sport=23 dport=1031 use=1DOIT博客IIo!SqK h
现在,我们来看看UDP协议的状态描述方法,从协议本身的特性来看,UDP连接是无状态的,因为它没有任何的连接建立和关闭过程。以某个顺序收到的两个数据包是无法确定它们的发出顺序的。但内核仍然可以对UDP连接设置状态。我们来看看是如何跟踪UDP连接的,以及在核心目录/proc/net/ip_conntrack的相关记录。
q_"Hv:|A0当第一个UDP的数据包到达防火墙后,防火墙在他的状态表中留下了这样的记录:
Q#i+S$`&KP*s?~h)Q@0udp 17 20 src="/192.168.1.2" dst=192.168.1.5 sport=137 dport=1025 [UNREPLIED] src="/192.168.1.5" dst=192.168.1.2 sport=1025 dport=137 use=1DOIT博客*^C5n(h!hQ js
UNREPLIED代表这是一个状态为NEW的数据包,当这条连接的回应数据包到达防火墙后,防火墙立即将修改这条状态记录:DOIT博客0`/]x%Z9^ z
udp 17 160 src="/192.168.1.2" dst=192.168.1.5 sport=137 dport=1025 src="/192.168.1.5" dst=192.168.1.2 sport=1025 dport=137 use=1DOIT博客 `dVq1Q5k
在这条新的状态记录中,UNREPLIED被删除了,这代表现在防火墙已经建立了一条UDP协议的会话,但这里并没有象TCP协议那样显示ESTABLISHED标记,这是TCP的状态记录和UDP的状态记录稍微不同的一个地方,当然,还有一个地方需要注意,在测试中,还需要有一些数据包经过,防火墙才会将状态记录改写成:
EO&G?n\}0udp 17 179 src="/192.168.1.2" dst=192.168.1.5 sport=137 dport=1025 src="/192.168.1.5" dst=192.168.1.2 sport=1025 dport=137 [ASSURED] use=1DOIT博客Xd+}$Oz/U
ASSURED状态表示当前有数据在进行传输,表面当前连接的状态是ACTIVE的。如果,在这个状态下数据停止了传输,则这条记录会有一个计时器,也就是记录中的第三个字段,上面这条记录的第三个字段是179,代表当前的ASSURED状态还能够保持179秒,如果还有新的数据包经过,那么计时器会被重新设置成缺省的180秒,如果在180秒内都没有流量,那么这条状态记录就会从状态表中被删除。
2H\] A(ieR0最后,我们在来看看Linux kernel是如何标示ICMP协议的状态的,ICMP也是一种无状态协议,它只是用来控制而不是建立连接。ICMP包有很多类型,但只有四种类型有应答包,它们是回显请求和应答(Echo request and reply),时间戳请求和应答(Timestamp request and reply),信息请求和应答(Information request and reply),还有地址掩码请求和应答(Address mask request and reply),这些包有两种状态,NEW和ESTABLISHED 。时间戳请求和信息请求已经废除不用了,回显请求还是常用的,比如ping命令就用的到,地址掩码请求不太常用,但是可能有时很有用并且值得使用。看看下面的图,就可以大致了解ICMP连接的NEW和ESTABLISHED状态了。

W(E!B1Tz0如图所示,主机向目标发送一个回显请求,防火墙就认为这个包处于NEW状态。目标回应一个回显应答,防火墙就认为包处于ESTABLISHED了。当回显请求被发送时,ip_conntrack里就有这样的记录了:
7x3Lk B\ i [q0icmp 1 25 src="/192.168.1.6" dst=192.168.1.10 type=8 code=0 id=33029 [UNREPLIED] src="/192.168.1.10" dst=192.168.1.6 type=0 code=0 id=33029 use=1DOIT博客ZL Y1G2tJ^
可以看到,ICMP的记录和TCP、UDP的有点区别,协议名称、超时时间和源、目地址都一样,不同之处在于没有了端口,而新增了三个新的字段:type,code和id。字段type说明ICMP的类型。code说明ICMP的代码,这些代码在附录ICMP类型里有说明。id是ICMP包的ID。每个ICMP包被发送时都被分配一个ID,接受方把同样的ID 分配给应答包,这样发送方能认出是哪个请求的应答。DOIT博客_z-H9H0u^0Z
[UNREPLIED]的含义和前面一样,说明数的传输只发生在一个方向上,也就是说未收到应答。再往后,是应答包的源、目地址,还有相应的三个新字段,要注意的是type和code是随着应答包的不同而变化的,id和请求包的一样。和前面一样,应答包被认为是ESTABLISHED的。然而,在应答包之后,这个ICMP 连接就不再有数据传输了。所以,一旦应答包穿过防火墙,ICMP的连接跟踪记录就被销毁了。因此,要想在/proc/ip_conntrack文件中抓到ICMP协议的状态记录实在不是一件容易的事。您可以用如下的命令来尝试获取这些记录:
z3I3Y6X,{$u4@f5tR0#cat /proc/net/ip_conntrack |  grep icmpDOIT博客!^z+Fy:q h
如果没有输出,那么就不停的重复这个命令,直到发现icmp的记录为止。
zS-hcrgw"n&W0以上各种情况,请求被认为NEW,应答是ESTABLISHED。换句话说,就是当防火墙看到一个请求包时,就认为连接处于NEW状态,当有应答时,就是ESTABLISHED状态。
0zL lwc!gU ~01.7    规则的保存和恢复DOIT博客xa/wo`Y3a
iptables提供了两个命令来对策略进行保存和恢复:iptables-save和iptables-restore,iptables-save用来保存当前内存空间的策略,iptables-restore用来将iptables配置文件的策略写入内存空间。
b V*ND5_0iptables-save的命令格式非常简单:
0^:i&ZLc0#iptables-save –c > /etc/sysconfig/iptablesDOIT博客_#BXIE2vP
上面的命令表示将内存中的策略写入/etc/sysconfig/iptables文件中,同时将当前内存中针对每条策略的流量统计值也写入该文件。DOIT博客3qk Cg1B:?
#iptables-save –t nat > /etc/sysconfig/iptablesDOIT博客GnJ'n7gG-zB
这条命令表明只保存当前内存中的nat表。
7ImGBCr-w u0#iptables-restore /etc/sysconfig/iptablesDOIT博客 `0VY jw P,am
这条命令表明将/etc/sysconfig/iptables配置文件中的内容写入内存空间,并覆盖当前内存空间中的所有配置。如果不希望更改当前内存空间中的配置,可以添加-n参数,如下:DOIT博客8Q}8I \R6X
#iptables-restore –n /etc/sysconfig/iptablesDOIT博客 Ah8nqk#L
这表明配置文件只将内存空间中没有的策略添加到内存空间。
#_`UUa8m"QRu0另一种运行iptables的方法是使用脚本,使用脚本能够实现一些更灵活的、结构化的配置策略,对于一些习惯使用脚本管理防火墙的系统管理员来说,这是一个更好的选择,后面,我们会提供一些脚本范例。DOIT博客?T8ua nV`[/g"Oc
1.8    编写详细的规则表
WVq#C;k0本节我们开始揭开iptables的神秘面纱,当我们真正进入iptables的世界,我们发现,这里的世界原来也很精彩。
|qd.{a J0iptables的所有命令都是以iptables开头,其总体的命令结构如下:
0F3Sz4Zj0F0iptables [-t table] command [match] [target/jump]
OJn0b&N01.8.1    table
?~(o QXF.t+uP+pY0-t table表示当前的策略属于哪个table,前面,我们提到了,一共有三种table:mangle、filter和nat,由于iptables的主要工作是过滤进出本地网络适配器的数据包,因此,很自然的,如果一条策略是关于过滤的,那么在缺省情况下,“-t filter”是可以省略的,而mangle和nat是一定要注明的,在实际的应用环境当中,mangle几乎是用不到的,因此,在本文中,我们着重讨论nat表和filter表。
9ZQH.P2gI{*us Z01.8.2    command
-?]"{kK_^zcNO0command指定iptables 对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或做点儿其他什么。以下是iptables可用的command:
I^ f~,df0命令    -A,--appendDOIT博客}7l*Ur$l]
范例    iptables –A INPUT……
)AL&P5v&GB cP0注解    添加规则DOIT博客:z3F4de$LP
命令    -D,--delete
n$|}t#k![^0范例    iptables –D INPUT 8,iptables –D FORWARD –p tcp –s 192.168.1.12 –j ACCEPTDOIT博客c*q_;Df:S
注解    从所选的链中删除规则,有两种方法:一种是以编号来表示被删除的规则,另一种是以整条的规则来匹配策略。
!X}Lzl&pk.O~0命令    -R,--replaceDOIT博客}MSsC c"?'b2]
范例    iptables –R FORWARD 2 –p tcp –s 192.168.1.0 –j ACCEPTDOIT博客D,zf[}j2h!xw
注解    替换相应位置的策略,这时有一点需要注意,如果源或目的地址是以名字而不是以IP地址表示的,如果解析出的IP地址多于一个,那么这条命令是失效的。
"A.p.Yyo8A8q4SPD7}u0命令    -I,--insertDOIT博客,]b f!R-p;uj
范例    iptables –I FORWARD 2 –p tcp –s 192.168.1.0 –j ACCEPTDOIT博客r/] Jo4cb|I;F
注解    这个命令和上面一个命令只差一个参数,而不同之处在于这个命令是在相应的位置前面插入一条命令,而不是替换。
?$z wS)u6d+?Z0命令    -L,--listDOIT博客 j|3xNC4x
范例    iptables –t nat –L,iptables –L INPUTDOIT博客2zr$w f4@
注解    列出当前内存空间的策略。DOIT博客2MtoR7x
命令    -F,flushDOIT博客J nb uS^
范例    iptables –F,iptables –t nat -FDOIT博客*})GA.zlNl6X6|C8?0G
注解    清空所选的链的配置规则。DOIT博客[(V3b8G2N~5dBw
命令    -N,--new-chain
I}$Ai v^#c0范例    iptables –N tcp_allowedDOIT博客%n8]gJ-Zb%v
注解    添加新的链,在默认情况下,iptables有ACCEPT、DROP、REJECT、LOG、REDIRECT等,如果希望对数据包做定制的处理,可以自己定义新的链。
x4[ TXR4el+s.{"U#D0命令    -X,--delete-chainDOIT博客 Z(|N'F+EK
范例    iptables –X tcp_allowed
uX2ob w:tWQ0注解    这条命令用于删除自定义的链。DOIT博客;]p*CNK,OzN9B#x
命令    -P,--pollicyDOIT博客RR.[@\'s&\0}%S;C
范例    iptables –P INPUT DROPDOIT博客e^Q[8]i(M4M"l!m
注解    为链设置缺省的target,通常为ACCEPT和DROP,可以理解为防火墙的缺省策略:除非特定的被运行,其他的都被禁止或除非特定的被禁止,其他的都被允许。DOIT博客9y.e1r ]3q+T
上表列出了一些主要的iptables的命令,此外还有其他的一些命令不很常用,我们在这里不作介绍。这些命令有一些选项,要想详细了解选项的具体内容,可以查看iptables的manpage页。
'm9B4y;n0U.Z f n01.8.3    matchDOIT博客ZB r#K$yDD
在iptables的一条策略中,如何匹配一个数据包是非常关键的。这一节,我们会详细讨论一些matche,大致可以归为五类。第一类是generic matches(通用的匹配),适用于所有的规则;第二类是TCP matches,顾名思义,这只能用于TCP包;第三类是UDP matches,当然它只能用在UDP包上了;第四类是ICMP matches ,针对ICMP包的;第五类比较特殊,针对的是状态(state),所有者(owner)和访问的频率限制(limit)等。DOIT博客a0m sK^&ihw]
通用匹配:无论我们使用的是何种协议,也不管我们又装入了匹配的何种扩展,通用匹配都是可用的。也就是说,它们可以直接使用,而不需要什么前提条件,在后面你会看到,有很多匹配操作是需要其他的匹配作为前提的。DOIT博客s(wd/\~HZ
-p, –protocol,匹配指定的协议,协议可以用名字来表示,比如tcp、udp、icmp等,名字是部分大小写的,也可以使用他们的整数值,比如tcp对应的是整数1、udp对应17,tcp对应6。在缺省情况下,如果不写这个匹配,代表所有ALL,但要注意,ALL表示tcp、udp、icmp这三种协议,而不包括/etc/protocol中的所有协议。如果有多个协议需要匹配,可以使用逗号分割,例如:DOIT博客.MH W b ky
#iptables –A INPUT –p tcp,udp –j ACCEPTDOIT博客J6y X@@0rX:n)\'I
在协议的前面用“!”标示,代表除了“逻辑非”,例如:DOIT博客Mm~9R#DW-Q At
#iptables –A INPUT –p ! tcp –j DROPDOIT博客 r._ }@~CE3`O#s
这个表达式代表只允许tcp协议通过,而udp和icmp全部被禁止通过。DOIT博客#]&i0B2J7B{'d7Y)G)x(|
-s, --src, --source,匹配数据包的源地址,地址的表示形式如下:DOIT博客"@bg0up z
单个地址,如192.168.1.1,也可写成192.168.1.1/32或192.168.1.1/255.255.255.255
(xif Sf#F V0网络地址,如192.168.1.0,也可写成192.168.1.0/24或192.168.1.0/255.255.255.0DOIT博客E+D;U Xe-m,]L
在地址前加“!”表示去反,如 ! 192.168.1.0表示除这个地址段外的所有地址。DOIT博客X)^o:dr;wG;dU }Eg
如果不在一条策略中注明地址,表示所有地址,也可以表示成0.0.0.0/0
}&]R4qk Z2J0-d, --dst, –destination,匹配数据包的目的地址,表示方法于源地址的表示方法一致。DOIT博客] B?])B^
-i, --in-interface,以包进入本地所使用的接口来匹配数据包,注意,这个匹配只适用于INPUT、FORWARD、PREROUTING链中,而用在其他任何地方都会出错。可以使用接口的名称来标示数据包的入口,如eth0、ppp0等,也可以使用通配符,如eth+,表示匹配从所有的以太接口进入的数据包,和前面的一些匹配特性一样,我们可以使用去反符号“!”来标示除了被列出的接口的所有接口。
T!z3M6n/s1b8PNe+p0-o, --out-interface,以包离开本地所使用的接口来匹配数据包,匹配方法和-i的匹配方法完全一致
"r+G:s E+M\]7a0#iptables –A FORWORD –i  eth0 –o eth1 –p tcp –j ACCEPTDOIT博客!c$Gc"F2L4sE%m
上例说明了凡是从eth0接口进入,从eth1接口流出的tcp数据流被允许通过。DOIT博客-][Rb#~#G({Y
隐含匹配:这种匹配操作是自动地或隐含地装载入内核的。例如我们使用参数-p tcp 时,不需再装入任何东西就可以匹配只有IP包才有的一些特点。有三种隐含的匹配针对三种不同的协议,即TCP matches,UDP matches和 ICMP matches。它们分别包括一套只适用于相应协议的判别标准。相对于隐含匹配的是显式匹配,它们必须使用-m或--match被明确地装载,而不能是自动地或隐含地,下一节会介绍到。DOIT博客!z}6~Bp1Zp,t
tcp matches,该匹配只匹配tcp包的细节,它们必须有-p tcp做为前提条件。主要有以下几种匹配参数:DOIT博客,lzVN(}$Q)w%]
--sport,--source-port,匹配源端口,有几个原则需要注意:
*` R(O0K*~%u4^?0    1、不使用此项,则表示匹配所有端口。
+x!o Bsuf7d:uG0    2、可以使用服务名或端口号,使用服务名是为了简化用户的配置,也许用户知道服务名,但不一定知道服务对应的端口号,服务名必须在/etc/services文件中进行标注,当然简化配置的代价是iptables必须花费额外的系统资源在/etc/services文件中查询服务名对应的端口号,如果用户知道服务名对应的端口号,我们还是建议用户直接使用端口号来定义。
3vt&]"_a0b0    3、可以使用连续的端口来表示一个服务,比如 –sport 135:139,这表明是从135端口到139端口,也有这样的表示方法 –sport 1024:,表示匹配源端口从1024到65535。
J6qZm _Lxe0    4、可以在端口号前添加“!”表示除了该端口以为的其他所有端口。
\+]dTPRH8I&W0    5、不能用这种匹配来标识端口不连续的情况,我们会在后面的部分介绍如何匹配端口不连续的情况。
yl"A TZK4Z|0--dport,--destination-port,匹配目的端口,使用方法与源端口的匹配方法一致。
QG dNc l0#iptables –A FORWARD –p tcp –dport 21:25 –j ACCEPT
;`z4CE6r,N5l0上例中的语句表明允许tcp 21到25端口的服务通过防火墙。DOIT博客+I U5E/t/` h
udp matches:鉴于udp协议与tcp协议的相似之处:都用端口号来表示一个应用或服务,因此,udp matches的使用方法也和tcp matches的使用方法基本一致,它也有 --sport 、--dport 的匹配原则,但与tcp matches不同的是,udp matches必须与 –p udp配合使用,这是非常容易理解的问题。我们在这里就不需要多说了。DOIT博客s+JR^-B a R?)k6\ G(b0h
icmp matches:与tcp和udp不同,icmp matches是根据ICMP类型匹配包,类型的指定可以使用十进制数值或相应的名字,数值在RFC792中有定义,名字可以用iptables --protocol icmp --help 查看。这个匹配也可用英文感叹号取反,如:--icmp-type ! 8就表示匹配除类型8之外的所有ICMP包。人们经常会使用到icmp协议,但最常用的可能要属icmp echo-request和icmp echo-reply了,也就是我们检测网络连通性的ping命令了。DOIT博客F|"eRF/B [$jG v
显示匹配:显示匹配就必须用-m或--match装载,比如要使用状态匹配就必须使用-m state。有些匹配还需要指定协议,有些就不需要,比如连接状态就不要。这些状态是NEW(还未建立好的连接的第一个包),ESTABLISHED(已建立的连接,也就是已经在内核里注册过的),RELATED(由已经存在的、处于已建立状态的连接生成的新连接),等等。有些匹配还处在开发阶段,或者还只是为了说明iptables的强大能力。这说明不是所有的匹配一开始就是实用的,但以后你可能会用到它。随着iptables 新版本的发布,会有一些新的匹配可用。隐含匹配和显式匹配最大的区别就是一个是跟随协议匹配自动装载的,一个是显式装载的。
3xz E2UwT0limit匹配:这个匹配操作必须由-m limit明确指定才能使用。有了它的帮助,就可以对指定的规则的日志数量加以限制,以免系统记录大量重复的日志信息。比如,你可以事先设定一个限定值,当符合条件的包的数量不超过它时,就记录;超过了,就不记录。我们可以控制某条规则在一段时间内的匹配次数(也就是可以匹配的包的数量),这样就能够减少DoS syn flood攻击的影响。
skZ b/E0--limit-burst:这个参数定义了当前策略的峰值,也就是单位时间内匹配的数据包的最大数量,每匹配一个,数值就减一,直到0为止,新来的数据包将不被进行匹配操作,也可以将这一数值理解为允许建立连接的阀值。
EDn*Y v6Yv$@0--limit:这个参数定义了一个相当于频率的概念,在—limit-burst这个匹配项中我们已经提到,当 --limit-burst定义的数值被耗尽,在单位时间内是会得到适当的补充的,这个频率和数量就是在 --limit中定义的。DOIT博客"qbl3Q @ a|
举个例子也许更容易帮你理解 –limit-burst和 –limit组合使用的功效。具有再充值功能的电话卡(比如神州行卡)想必许多人都用过,设想这样一种情况,某个人在新买的手机上一次性的充了300元钱的话费,然后以后每月月底都往卡里充100元的话费,但有两个前提:DOIT博客'_6k EF!kfi)B?
1、充值后的卡内余额不得超过300元。DOIT博客#|?_^#Wy yd
2、当月能且只能充100元的话费。即便最初的300元话费全部用光了,也只能补充这么多的话费。DOIT博客D1}qz P k
在上例中我们可以将那个300元话费看成 --limit-burst 定义的数值,将每月的100元话费看成 --limit定义的数值,记住 --limit 是有单位的,在iptables中,这个单位可以是second、min、hour、day。DOIT博客%x8\*oF x.w^\
我们可以用limit功能来做一些防止Dos攻击的工作,看下面的例子:DOIT博客4UH"n$?8H
#iptables –A INPUT –p tcp --dport 80 –m limit --limit 10/second --limit-burst 200 –j ACCEPTDOIT博客reES4M pE:S
上面的例子是在传达这样一个意思,主机的80端口对外开放,系统资源允许每秒新建立250个会话,主机通过iptables设置了能够提供每秒200个新会话的容量(通常情况下,我们需要为服务器或主机本身考虑一些冗余),在正常情况下,这个数值完全能够满足应用的要求,但如果有某个攻击者对主机的80端口进行拒绝服务攻击,每秒200个新会话的容量也许一会的功夫就被用光了,对于一个没有保护措施的主机来讲,系统马上就会瘫痪,但由于我们设置了一定的保护措施,即便有攻击过来,在iptables这一关就会被丢弃。在这之后,iptables会每秒重新给主机10个新的会话名额,使之能够处理新的连接。在新来的连接请求中,有正常的连接请求,也有一些是攻击,但无论如何,通过这种方式,我们保证了服务器始终不会被攻瘫掉,在更有效的对付拒绝服务攻击的新技术出现以前,这也许是最有效的方法。DOIT博客Xz4?[9i]V
MAC匹配:基于包的MAC源地址匹配包,地址格式只能是XX:XX:XX:XX:XX:XX,当然它也可以用英文感叹号取反,如--mac- source ! 00:00:00:00:00:01,意思很简单了,就是除此之外的地址都可接受。注意,因为 MAC addresses只用于Ethernet类型的网络,所以这个match只能用于Ethernet接口。而且,它还只能在PREROUTING,FORWARD 和INPUT链里使用。DOIT博客"AH8f s0`j2i-^t
MAC匹配有一个非常好的应用就是可以进行IP地址和MAC地址的绑定,对于一些安全要求较高的网络,这是一个有效的配置策略。DOIT博客N1H)q2j5v
#iptables –A FORWARD –s 192.168.1.23 –m mac –mac-source 00:e0:4c:3d:5e:4f –j ACCEPTDOIT博客F"N:fH3M4I
上例表明源IP地址为192.168.1.23,源MAC地址为00:e0:4c:3d:5e:4f的计算机能够通过防火墙,如果这个用户将自己的IP地址改成了192.168.1.24,而该地址同样也做了MAC地址的match,那么要想通过更改IP地址而获取上网权限的企图是徒劳的。
7\5XW Lo0说明:可以通过iptables实现IP地址与MAC地址绑定的功能,但还有一种更加高效的方法,我们在这里简要的说明一下,在/etc/目录下编辑文件ethers,在文件中添加如下内容:
2G9cA~6O0192.168.1.1 00:e0:4c:3d:5e:4f
CMb4m7}#G C;W!m)Eg`0192.168.1.1 00:e0:4c:3d:5b:3d
9XK.E+^-m9{ iA0…….DOIT博客K\[9Z m%rLpo
文件编辑完成后执行命令:
R4s1Lq2YR}bpS0#/sbin/arp –fDOIT博客.|/|HS9L&r0X*A
state匹配:state匹配在防火墙配置过程中非常重要的,如果没有state的配置,那么需要配置双向的规则才能满足通讯的需要,但防火墙既然有状态检测功能,我们为什么不好好使用它呢?
%Z2h7N~V1Y'F!J:_`0--state:state的状态有四种,指定要匹配包的的状态,当前有4种状态可用:INVALID,ESTABLISHED,NEW和RELATED。四种数据包的状态我们在前面已经做了详细的描述本节我们只进行state的用法描述,如下例所示:DOIT博客R| j{1K4jd(c ^
#iptables –A FORWARD –p tcp –m state --state RELATED,ESTABLISHED –j ACCEPTDOIT博客%[Mh Pd4l/r8X
本例表明凡是数据包状态为“RELATED”、“ESTABLISHED”的tcp包允许通过防火墙,在一般情况下,基于状态的策略都是配置在每一条chain的最前面,因为当包被匹配到以后,就能够直接被处理了,这是一种比较高效的配置方法。关键字ESTABLISHED比较容易理解,即匹配状态为“已经建立连接”的数据包,那么怎么理解“RELATED”呢,RELATED表示不属于已经建立的那条连接,但和那条连接有关,比如ftp,ftp在建立连接的过程中会首先建立一条ftp-control连接用以传输指令等,真正传输数据的是一条叫做ftp-data的连接,而传输数据的连接是和传输控制信号的连接相关的,因此“RELATED”是用于类似这些特殊服务的。在正常情况下,对于每一种协议:TCP、UDP、ICMP都可以单独的配置状态策略,但一种比较简单高效的做法是:
'b Z%hf;T0#iptables –A INPUT –p all –m state --state RELATED,ESTABLISHED –j ACCEPTDOIT博客MYFj,P],c*V
multiport:这个匹配选项为我们解决了如何在一条策略种匹配那些端口不连续的服务,在一般情况下,一个公司或企业的安全策略是允许内部网络使用有限的Internet服务,如收发电子邮件、上网浏览网页、msn聊天等,看看下面的例子:DOIT博客7q:w/u9PQ1dt`
#iptables –A FORWARD –i eth0 –p tcp –m multiport --dports 25,80,110,443,1863 –j ACCEPT
)nAU?'y7d0#iptables –A FORWARD –i eth0 –p udp --dport 53 –j ACCEPTDOIT博客d^!Kp_({+Y[
仅仅两条命令就解决了内部用户上网收发E_mail、浏览网页、使用msn聊天等需求,怎么样,就这么简单。
,cl4Sz6SH*{/d X unR01.8.4    target和jumpDOIT博客:@2T+o+|0W Sp
从字面的意思来理解,target表示目标,jump表示跳转,两个结合起来表示被匹配到的数据包将跳转的哪个目标去,并执行那个目标相应的动作,DROP、ACCEPT或其他。还是举个例子有助于我们理解target和jump。DOIT博客U$Gc]*O%R [
#iptables –N power_usersDOIT博客gjWT ?
#iptables –A power_users –p all –j ACCEPT
ri#P|^ Y0#iptables –A FORWARD –s 192.168.1.0 –j power_users
#Pc6cq~0^B4\0上面的例子中,第一句表示新建一条chain,名称叫做power_users,第二句是对power_users链定义策略,该策略表明接受所有协议的数据包,确实如此,否则我们也不会将这条链成为power_users了,第三条语句定义了一个转发策略,将原地址为192.168.1.0/24网段的用户产生的数据包被跳转至power_users链处理。
K8w};@2BUPR0在本节中,我们将对比较常用的几个targets进行详细的描述,他们分别是DROP、ACCEPT、SNAT、DNAT、MASQUERADE、LOG。
|?9i9w#K zC [0DROP:DROP target表示被匹配的数据包将要被执行的动作是丢弃,也就是说,在这里,包的生命走到了终点,在这种情况下,iptables对包的处理只是将包丢弃,它不会对包的发送者返回任何信息,也不会向路由器发送任何错误信息,这在某些情况下会造成一些问题,比如发送者还在苦苦等待回包的到来,而发送出去的包早就在半路上夭折了,可以通过REJECT target来避免这个问题,REJECT和DROP的差别在于它不仅仅丢弃包,而且还礼节性的告诉发送者,这样就不至于发送者苦苦等待了。其实对于一般的应用,我们并不建议使用REJECT,既然包总是要被DROP的,那就让发送者去等吧,这和我们有什么关系呢?&#61514;DOIT博客 CorK]0Pa;bZ
ACCEPT:这个target没有任何选项和参数,使用也很简单,指定-j ACCEPT即可。一旦包满足了指定的匹配条件,就会被ACCEPT,并且不会再去匹配当前链中的其他规则或同一个表内的其他规则。
G M&@%y I6c0?9s'M'pN5|+Q0SNAT:这个target是用来做源网络地址转换的,就是重写包的源IP地址。当我们有若干台计算机共享一个Internet 连接时,就能用到它了,而且这也是绝大多数企业用户所采用的Internet互联方案。先在内核里打开ip转发功能,然后再写一个SNAT规则,就可以把所有从本地网络出去的包的源地址改为Internet连接的地址了。如果我们不这样做而是直接转发本地网的数据包的话,Internet上的机子就不知道往哪儿发送应答了,因为在本地网里我们一般使用的是IANA组织专门指定的一段地址,它们是不能在Internet上使用的,还记得那些地址范围吗?让我们来回忆一下:
0]+Uankq;R@010.0.0.0        -   10.255.255.255  (10/8 prefix)
0x+Xipf${ W0    172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
c8t-T+no'TP/m0192.168.0.0     -   192.168.255.255 (192.168/16 prefix)DOIT博客.i d-Bf"I I@F&M-s
SNAT target的作用就是让所有从本地网出发的包看起来都是从一台机子发出的,这台机子一般就是防火墙或路由器之类的三层设备。DOIT博客MTLt Dt6gx| Y
SNAT只能用在nat表的POSTROUTING链里。只要连接的第一个符合条件的包被SNAT了,那么这个连接的其他所有的包都会自动地被SNAT,而且这个规则还会应用于这个连接所在流的所有数据包。DOIT博客2qz&^-n(qpbD1Q(d#OB)c
既然提到了ip包转发的问题,我们也不妨费一些文字做一些简要的说明,当iptables被用来安装在一个提供WWW或E_mail服务的主机上以期为主机提供保护时是不涉及包转发的,但当iptables被用在网络的边界节点充当一个安全网关时,就涉及到包转发的问题了,这时,iptables需要通过不同的网卡来转发数据包,在linux系统中,控制是否允许转发数据包是有一个开关的,0表示不转发,1表示转发,只要更改/etc/sysct.confl文件中的如下内容:DOIT博客'i'_)~0?oC
#Controls IP Packets Forwarding
9U?5S ^jC Cl0net.ipv4.ip_forward = 1
V P5K#FX3ERW0然后重启系统,这时系统就能够进行包转发了,还有一种方法是在内核空间内直接更改,通过改下列文件的参数:
*joD&b6lh;Q V/gb0#echo 1 > /proc/sys/net/ipv4/ip_forwardDOIT博客/D1F3v8jyG:D.w
注意,这个文件一旦更改,立即生效,但如果重启系统,将回到默认设置,所以/etc/sysctl.conf文件无论如何都应该将转发开关置位为“1”。DOIT博客Pw^0?qotzR
看看下面的范例,一般一个SNAT的命令是这样完成的:DOIT博客'R#T)f(Z/~*R[;L
#iptables –t nat –A POSTROUTING –s 192.168.1.0 –j SNAT --to-source 1.1.1.1DOIT博客N v1_^#P#O6]
这条命令表示将内部网络的192.168.1.0/24网段的地址翻译成1.1.1.1,这样内部地址就可以使用一个公有IP(Public IP address)地址共享上网了,当然,还要有额外的策略允许内部用户上网才行哦,别忘了。DOIT博客G;o2[z}| V4dZ4BK
SNAT只有一个参数,--to-source,它有几种使用方法:
{dP g^-gJh01、单独的地址,就象上面的例子所示。DOIT博客` duX3P
2、一段连续的地址,用连字符分隔,如1.1.1.1-1.1.1.10,这样可以实现负载平衡。每个流会被随机分配一个IP,但对于同一个流使用的是同一个IP。当然,前提是你要有这么多的公有ip才行啊!
"n$Vg T0yR}2} D!c03、在指定-p tcp 或 -p udp的前提下,可以指定源端口的范围,如1.1.1.1:1024-32000,这样包的源端口就被限制在1024-32000了。
q-?!f1x(?yU.Fr0DNAT:这个target是用来做目的网络地址转换的,意思是重写包的目的IP地址。如果一个包被匹配了,那么和它属于同一个流的所有的包都会被自动转换,然后就可以被路由到正确的主机或网络。DNAT target是非常有用的。比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就可以使用这个 target让防火墙把所有到它自己HTTP端口的包转发给LAN内部真正的Web服务器。目的地址也可以是一个范围,这样的话,DNAT会为每一个流随机分配一个地址。因此,我们可以用这个target做某种类型的负载平衡。
,dFq4[;A+aJ0DNAT也和SNAT一样只有一个参数,--to-destination,看看下面的例子:DOIT博客)@I7@O&q4[1pr
#iptables –t nat –A PREROUTING –d 1.1.1.1 –j DNAT --to-destination 192.168.1.24DOIT博客^ yaOuzQ
上面的例子说明凡是访问1.1.1.1的数据包都转给内网的192.168.1.24,这样内部的服务器就可以发布出去了。现在问题来了,如果仅仅这样配置还是存在一点问题的,假设内部网络的其他用户也访问这个经过映射后的地址会怎样?当然他们完全可以直接访问服务器的真实地址,但在一些具体的情况下,比如dns的解析就是指向了映射后的地址。可以加一条这样的语句:DOIT博客UF8Z9ry GM)Ru:K
#iptables –t nat –A POSTROUTING –d 1.1.1.1 –j SNAT –to-source 192.168.1.254
%H8mRp,_ g2o0在这里,假设防火墙的内网地址是192.168.1.254,通过这样的配置,问题解决了,想一想为什么会这样?看看下面的示意图:也许你就明白了:

M-O/u;E5Wk$Dz0知道问题出在哪里了吗?很明显,当客户机192.168.1.23发起一个访问请求给映射后的地址1.1.1.1,防火墙收到这个请求后根据策略表匹配发现是一个对内部服务器192.168.1.24的映射,如果不加上面的那一行语句,防火墙会通过纯路由的方式将数据包转发给服务器192.168.1.24,服务器收到请求后,发现源地址为192.168.1.23的客户机发来了一个请求,并且这台主机与自己在同一个网段内,于是直接将回应包SYN+ACK发送给主机192.168.1.23,主机收到这个包后会感觉很奇怪,因为它从来就没有给192.168.1.24发送过连接请求报文,所以就会将回应报文丢弃,现在,我们对内网主机通过映射后地址访问内网服务器的需求进行一些修改,如上面的哪条命令,我们对所有到1.1.1.1的连接都做一个原地址路由,将连接的原地址改变成防火墙的内网接口地址,于是问题解决了。
'y.e-Pj|t,W0当然,问题总有两面性,对于服务器而言,所有访问者这时都变成了防火墙内网的接口地址,这对于服务器的审计是有影响的,在具体的配置过程中,使用者需要权衡利弊,在做配置决定。DOIT博客Y6x2PkL$^5F5u:fx9]b
MASQUERADE:这个链与SNAT的差别不大,回忆一下在进行SNAT的配置时需要指明一个固定的映射地址,但如果用户的网络使用的是ADSL这种动态获取IP地址的方式,SNAT就不适用了,这时只能使用MASQUERADE(地址伪装),在具体的处理过程中,系统需要读取当前的动态地址,然后用当前的地址对数据包进行重新封装:
F!ciZXoZ"u0#iptables –A POSTROUTING –o eth1 –s 192.168.1.0/24 –j MASQUERADEDOIT博客3d1y@9uc iY]8s
MASQUERADE可以添加参数--to-ports 1024-30000,可以通过这个参数指定映射后的源端口范围。DOIT博客Q9C6Gxl2X4l4OR9z0w
LOG:顾名思义,这条链是用来记录日志的。记录日志有助于必要是为我们提供一些有用的信息,比如被防火墙DROP的数据包就有可能包含一些危险的动作,网络发生故障时,我们也能够通过LOG发现一些潜在的问题。DOIT博客Q$sR0li6X2O8Z
有两个常用的选项,--log-level 、--log-prefix
$|A `Up(J3w;]0--log-level 告诉iptables和 syslog使用哪个记录等级。记录等级的详细信息可以查看文件syslog.conf,一般来说有以下几种,它们的级别依次是:debug,info,notice,warning,warn,err,error,crit,alert, emerg,panic。其中,error和err、warn和warning、panic和emerg分别是同义词,也就是说作用完全一样的。注意这三种级别是不被赞成使用的,换句话说,就是不要使用它们(因为信息量太大)。信息级别说明了被记录信息所反映的问题的严重程度。所有信息都是通过内核的功能被记录的,也就是说,先在文件 syslog.conf里设置DOIT博客`:V:hIso
kern.info     /var/log/iptablesDOIT博客vI!]&NY,c
然后再让所有关于iptables的LOG信息使用级别info,就可以把所有的信息存入文件/var/log/iptables内。注意,其中也可能会有其他的信息,它们是内核中使用info 这个等级的其他部分产生的。有关日志的详细信息,可以syslog和syslog.conf的man page。DOIT博客#E?Jx ]s t+Z
--log-prefix 描述日志的前缀,这样和grep或其他工具一起使用时就容易追踪特定的问题,而且也方便从不同的规则输出。前缀最多能有29个英文字符,这已经是包括空白字符和其他特殊符号的总长度了。
:K6}l+I&i]Z0#iptables –A FORWARD –p tcp –j LOG –log-prefix “tcp_packets “ –log-level infoDOIT博客:UH2^0_2j:a
这条语句表示需要记录所有tcp协议的数据包,并以“tcp_packets”做为标记。
lJ/]1T-A0第二章 范例DOIT博客!^ ZQ+Xj7f sC9E
网络环境

T(zq&Omn,[ [0如上所示:这是一个非常典型的企业网络拓扑结构,通过固定IP地址接入Internet,内部网络通过防火墙与Internet互连并进行安全控制,只允许内部网络的用户通过ftp、http、smtp、和pop3与Internet连接,而禁止所有从外网到内网的连接,内部用户通过防火墙的外网接口地址共享上网。运行脚本firewall.sh如下:
(gFegm-jtk|0#!/bin/sh
)I0|-h#e5J7u0# example.firewall - Initial SIMPLE IP Firewall scrīpt for Linux 2.4.x and iptables
1`U|Q%Oa&~}0###########################################################################DOIT博客tKf"@5{S
#  Configuration options.DOIT博客@!a\N_ e3f-T
# Internet Configuration.
{jg?(|0INET_IP="194.236.50.155"
oU,yR3m'n5a y0INET_SERVER=”194.236.50.156”
xbG3dj;YI0INET_IFACE="eth0"DOIT博客6S~Hvoe7DR
INET_BROADCAST="194.236.50.255"DOIT博客rT2G;?Q`Nw
###########################################################################DOIT博客E Ra4zp8\(~J
#Lan configuration
^3b?ek~h*} q8W5uj0# your LAN's IP range and localhost IP. /24 means to only use the first 24DOIT博客y2w M3E K)k)vl
# bits of the 32 bit IP address. the same as netmask 255.255.255.0
;VMLn0L|0LAN_IP="192.168.0.254"DOIT博客;czF"Oja(Z2HT
LAN_SERVER=”192.168.0.1”DOIT博客I(X(W/BM L8m/L y
LAN_IP_RANGE="192.168.0.0/24"DOIT博客-IVi-Djsv\b(C
LAN_BROADCAST=”192.168.0.255”DOIT博客*k-[)rA*{k&i8X$L
LAN_IFACE="eth1"DOIT博客NA@ `J{DE6N
###########################################################################
7M F6_%i4w9GyV$q0# Localhost Configuration.
y7cc*e!C+c)wE0LO_IFACE="lo"DOIT博客 |@4q"^6z/~]
LO_IP="127.0.0.1"DOIT博客l'E6l4T r \j
###########################################################################DOIT博客-m3i(r'{},LSv*mS C
#  IPTables Configuration.DOIT博客%^pk1s-it-WYH BU Bj
IPTABLES="/usr/sbin/iptables"
\Ch;O?+Q3?0###########################################################################
NR ~d0w7]0# Module loading.DOIT博客n.E2X$i4H{@r`I8R
# Needed to initially load modules
c:lV$p$x)h0/sbin/depmod -a
{v$sFS5}l0# Required modules
!r Bd4v}7`d0/sbin/modprobe ip_tables
dk"d%C&u+e0/sbin/modprobe ip_conntrackDOIT博客 C+cnd*C z
/sbin/modprobe iptable_filterDOIT博客%G"{HR(w:J+P
/sbin/modprobe iptable_nat
)gd,@.}1_ jo'O,O/Z;[0/sbin/modprobe ipt_LOGDOIT博客m-PLI7e.L
/sbin/modprobe ipt_limit
m+G0@:E,`nR ]dt@0/sbin/modprobe ipt_stateDOIT博客'c7f A/i7G%`C Y
##########################################################################DOIT博客 dE"|DGT{ AO(g/yg
# Non-Required modules
/q+KM0L.e}lF0#/sbin/modprobe ipt_ownerDOIT博客8R#CJ0S~\cRSg
#/sbin/modprobe ipt_REJECT
$]2Z0]5r-x?.AP _)Z1i/v*hf0#/sbin/modprobe ipt_MASQUERADEDOIT博客;LuCR/Y#iE@m'Q
/sbin/modprobe ip_conntrack_ftpDOIT博客1KsdQ i9w0{
#/sbin/modprobe ip_conntrack_ircDOIT博客V(w@zw0P ElC
/sbin/modprobe ip_nat_ftpDOIT博客'sWr QFy:c5G$xvA#k3|
###########################################################################
ov,gR K GAC9JO0# /proc set up.DOIT博客,FWP&N(C2@
# Required proc configurationDOIT博客nsw/P"K
echo "1" > /proc/sys/net/ipv4/ip_forwardDOIT博客#u Q7jD\'p` n
###########################################################################DOIT博客-qb1gkzf&w5J }?
# rules set up.
(ov;tJ1|s#k0# Filter table
)rwaNz}O0# Set default policiesDOIT博客`3h'y/`,n)S#St
$IPTABLES -P INPUT DROP
P'v(R:z ul*s0$IPTABLES -P OUTPUT DROPDOIT博客,tax\6i8M$g)S
$IPTABLES -P FORWARD DROPDOIT博客;k V[:L1Af
###########################################################################DOIT博客x1K S(INtrxg p
# Create userspecified chains
'SV~ cA/`A'?*zq0# Create chain for bad tcp packetsDOIT博客GG)LN1x]
$IPTABLES -N bad_tcp_packets
J^&X'?d#U!GyRw0# Create separate chains for ICMP, TCP and UDP to traverse
.W:Pz#Anx4a%W ~ W0$IPTABLES -N allowed
;[ }UcesC0$IPTABLES -N tcp_packets
0|C,Z8gx0$IPTABLES -N udp_packetsDOIT博客%g2L&{"EN*SH\
$IPTABLES -N icmp_packets
pq:DXG0###########################################################################
s5atU0K_ TA0# Create content in userspecified chains
?5y4`%B)e'e)_+s0# bad_tcp_packets chain
:jlfj:fe0$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \DOIT博客+j@U@j
-m state --state NEW -j REJECT --reject-with tcp-reset
b3P2C.F[2r d0$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
s K,q9F-}'L)v9e0--log-prefix "New not syn:"
*zP*w\"U0$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
P],m#Me.h.ui0###########################################################################
j+Eag6Y"dA _0# allowed chain
lXp#P8{WH1@9NH0$IPTABLES -A allowed -p TCP --syn -j ACCEPT
]_;s`0g$sx t0$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
D!_G5M+z L4y%RkI0$IPTABLES -A allowed -p TCP -j DROP
;Qd&Zo\8G7|;lb0############################################################################
5uCYM U0# TCP rules for the services of ftp,smtp,ssh,http,pop3DOIT博客*e5eM4di8U'kx)X
#DOIT博客DK S SB"qz
$IPTABLES -A tcp_packets -p TCP –m multiport --dports 21,22,25,80,110 -j allowedDOIT博客E TZ\@ R
############################################################################DOIT博客8cq1jh y6UL {SsU
# UDP rules for the services of dns
+pK n2ee0g z0#DOIT博客zWh Y8os8SRl
$IPTABLES -A udp_packets -p UDP --destination-port 53 -j ACCEPTDOIT博客+r^Qb*R#mQ0q
#
WALZrD9R4Ssr0# In Microsoft Networks you will be swamped by broadcasts. These linesDOIT博客"F-d2TbO]qIs#l_
# will prevent them from showing up in the logs. Uncomment the followingDOIT博客0A'u%PEq}6y%L;u
# line to make the policy active if you have such a network
4Sk1E NW(w*Mh0#
]j zJ,G!C0#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST \
h2L5|0^Vo~0#--destination-port 135:139 -j DROP
'B.`IEDq,h0#$IPTABLES -A udp_packets -p UDP -i $LAN_IFACE -d $LAN_BROADCAST \
;qC?q N.gWq2b0#--destination-port 135:139 -j DROPDOIT博客-q1G;t;|&JREz
###########################################################################
isD:M"r3j4P0# ICMP rulesDOIT博客/}ad6kLL&|
#DOIT博客 Z a-f]]6R
$IPTABLES -A icmp_packets -p ICMP --icmp-type 8 -j ACCEPTDOIT博客W|y^4Rc)y
###########################################################################DOIT博客x,@r:l/`P8T'{`
# INPUT chainDOIT博客af5L.{&zif"D
#
4KR}cb'Hy,s2i0# Bad TCP packets you don't want.
'r-B(@8V0iD_6M0#
O;f ~llr7w3P0$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
7wRK@ L7T$O0#DOIT博客%k^{7P3GbnT.FRWf
# Rules for special networks not part of the Internet
KiGZ |iST(T0#
&j,C0]aJ'ne8y0$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPTDOIT博客zj\^+~TF
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPTDOIT博客d1X5whA1U
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
)G+Esg1ag0D|)O2l&`0$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPTDOIT博客,c5^^$M d;P `l3WS8S
# Drop the packet from InternetDOIT博客FU-~7RK#@;a
#
!V5e(w+[Jse~5r0$IPTABLES -A INPUT -p ALL -i $INET_IFACE –j DROPDOIT博客 G`mTy"V9gf*SI
# Log weird packets that don't match the above.DOIT博客f(c;]0L VR(K ? W
#DOIT博客8EC:K8R+HPMs
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \DOIT博客y1a"V2y?'h6U)?
--log-level DEBUG --log-prefix " INPUT packet died: "DOIT博客7R5VO](fu,^K
###########################################################################
q,QhX7D(X3v0# FORWARD chain
-`{`.g(tTQ0#DOIT博客X7AgV8U[LC
# Bad TCP packets we don't wantDOIT博客7d9U4o$F [|(~~M6h
#
[(td^+Pi:B0$IPTABLES -A FORWARD -p tcp -j bad_tcp_packetsDOIT博客z$~$Bs _\,j
#DOIT博客L o+N+V3Dwd7k
# Accept the packets we actually want to forwardDOIT博客yJ3h`[KXl}
#
eK$MpnA0$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTDOIT博客 Int+HZY+I
$IPTABLES -A FORWARD –p tcp -i $LAN_IFACE -j tcp_packets
qYX)J9U9gT0$IPTABLES -A FORWARD –p udp -i $LAN_IFACE -j udp_packets
J V3uS r3D0$IPTABLES -A FORWARD -p icmp -i $LAN_IFACE -j icmp_packetsDOIT博客1tI3T-d+ED5v(k"g'L
#DOIT博客9\r.O$L"F} Q_ jd
# Log weird packets that don't match the above.DOIT博客:R2J[h6}z
#DOIT博客a"k$eNUsX!\
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
x)un` ?b|/c0--log-level DEBUG --log-prefix "FORWARD packet died:  "DOIT博客o d^n1YC
#DOIT博客e nXmt*s K-mC
# OUTPUT chainDOIT博客f(wB-m8`
#
8q*j(U/}y"O0# Bad TCP packets we don't want.
+^ g3jy'{+qQ0#DOIT博客/G l f:Gybc(F
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packetsDOIT博客9R LYjx*m M!V
#
E;t A~(Ucv.I0# Special OUTPUT rules to decide which IP's to allow.DOIT博客)id)KrD
#
o(D/f3@.{V0$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPTDOIT博客$W kZ~I
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPTDOIT博客}DXKdVT@&H
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPTDOIT博客G${)b,hn+~
#
*oV$Z+K!u&@2~Y'i m0# Log weird packets that don't match the above.
All [ bF0#
[3S FI1VM0$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \DOIT博客mj Q4g1]d |8T
--log-level DEBUG --log-prefix "OUTPUT packet died: "DOIT博客&`3@4xx7O
###########################################################################
PU\3FrL5m0# nat tableDOIT博客Z*x8c1_NnZL
-j DNAT --to-destination $LAN_SERVERDOIT博客 ^L7Ud&P
# POSTROUTING chainDOIT博客!uNa)|K4VX5i5]
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IPDOIT博客 {7V6Sx Nf
编辑好脚本后,为其添加可执行权限:
3w)[C6Mth:j0#chmod ugo+x firewall.shDOIT博客Y5\'_$~1M
将firewall.sh脚本移动到/etc目录下:DOIT博客#u4mR&M9Z)Mfd
#mv firewall.sh /etc/
vf%T$ch m E0确保系统在启动是能够运行该脚本,添加如下语句到/etc/rc.d/rc.local文件中:DOIT博客 Jx'@ nP'v*e
#echo sh /etc/firewall.sh >> /etc/rc.d/rc.localDOIT博客m U,qX}O;nh
第三章 Iptables的新功能
rY:|Qm3J%|0在netfilter的官方网站,2004年03月02日,发布了新的patch,在新的patch中公布了一些iptables可以使用的新的功能,有一些还是非常实用的。比如可以用来定义IP地址范围段的iprange、定义连续或不连续端口范围的mport、定义时间规则的time,定义网络流量配额的quota等,这些功能本人已经测试过,基本上还不错,但其他的一些功能,在本人来看还不是特别实用,因此没有测试,读者如果感兴趣,也可以自己用用看,别忘了告诉我结果哦&#61514;.
Gd"CJ}/d's K0在使用这些新的功能前,首先需要将这些patch编译进核心,当然也可以将他们做为Modules使用,至于如何编译核心,我在前面已经讲过了。
#tJ ^2|7\}A9@l?0写到这里,花了我好几天的功夫,实在是累了,这一章就不仔细写了,就好像维纳斯缺一个胳膊却是美的化身,本文也在第三章留一些缺憾,相信如果您已经仔细的阅读了本文的前两章,并进行了实际的操作,相信在第三章,您可以凭借自己的能力搞定我没有仔细阐述的那些问题的。
(E5@5HjU*TZ(mNs0********
p m_7iN UZ7m b0E)\e0十六  GCC编译器DOIT博客U3rT$sCgeC W7K
gcc -v 显示编译器的信息DOIT博客;`XfH$bJ
在LINUX中很多脚本都可以用 VI 编辑器来编辑
!^1PI]jx1R0EG :DOIT博客4E Q9h~j/UQ5K+?
GCC A.C    如果比提示错误则说明 编译成功 其默认输出可以执行文件A.OUT
T{:Cr;dXl A0也 可以自己定义
Qnp ?8i*V |0GCC A.C -O HACK  自动生成HACK可执行文件DOIT博客-?p[.AXM
man x 获得X的帮助文件
uy A n+~+N%y@9@0G++ X  编译C++写的程序
p E4vv|p0十七.linux kernel 内核DOIT博客Q#XR1X(E;n
cd /user/src
$s/`9N,g%ij7W}7puu0isDOIT博客"hd.mQM(G(V
cd linux-2.4.20-8/ 这个目录存放的是内核的代码
c6]/eLJ{,^0isDOIT博客Kb%C6O(h$Z-U
mm 目录 存放类寸管理代码DOIT博客/n5Bw%fE:S[l%Y
fs 对文件进行操作都在这个目录
+R;F0O;A"C0arch 与CPU 相关的东西都在这个目录
5N3uu8D+I'Co0kernel 实现了大多数核心函数 最主要的部分
[Tx0ct!W@fFE0cd kernel/ 目录下的*.C文件就是是LINUX的原文件DOIT博客)A1` vxA2Yp
http://www.kernel.org/旧可以到达网站下载最新的内核代码DOIT博客z3g0k0K!I$t8wr~T|%F


TAG:

引用 删除 Guest   /   2008-10-24 10:45:53
来看看!





深圳市动力互联数据中心是资深的服务器托管、服务器租用、服务器合租、主机托管、主机租用、主机合租、域名注册、虚拟主机和企业邮箱品牌服务商,南北双线互联互通技术领先者。感谢您及贵公司对我们的产品和服务的关注。

如需了解更多信息,请浏览公司网址:http://www.88822911.com
7×24小时服务电话:0755-88822911 88822119

深圳市动力互联数据中心

网址:http://www.cctvidc.com.cn
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-05  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 3475
  • 日志数: 22
  • 图片数: 1
  • 建立时间: 2007-09-13
  • 更新时间: 2007-10-02

RSS订阅

Open Toolbar