如何删除grub,修复windows引导

是不是想让系统直接启动到Windows,不出现LinuxGrub(或LILO)引导界面或者是在Windows中删除了Linux分区后无法正确启动Windows,而停留在“grub>”提示符处,怎么办? 请往下看,这里给你提供几种实用的方法:

Solution 0

要是手头没有DOS启动盘,可以使用windowXP系统盘,按R进入到故障恢复台,然后使用命令 FIXMBR 多数情况也能够恢复,没有DOS启动盘,一般采取此方法

Solution 1

DOS命令fdisk恢复主引导扇区MBRMain/Master Boot Record

用光盘引导到DOS命令行下,执行:"fdisk /mbr"即可。

Solution 2

Linux系统中,恢复MBR(如果你还能登陆到Linux系统中的话)

在终端的命令提示符后输入: "dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1"

注意,其中bsbuffer size)是指重写的字节数。为什么不是512呢?主引导扇区是一个扇区(512字节呀),因为我们只是想通过扇面的命令修复系统MBR的引导或删除Grub/LILO引导;而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。 boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘DPT表也破坏掉。那就坏事了!!! (MBR512字节中前446字节为引导程序,紧跟着后面64字节为分区表,最后面2个字节为结束标记)

Solution 3

如果你的fdisk不好使,或者Linux已经不能使用,可以使用Clear MBR 0.9来清除MBR

下载Clear MBR 0.9 ,直接运行执行“Clear MBR”即可(说明,我并没有下载到,所以这种方式没有试)

Solution 4

Linux
的分区已经被你从Windows中删除,系统启动后停在“grub>”提示符处。

“grub>”提示符后输入:“rootnoverify(hd0,0)” 回车。//将第一块硬盘(hd0)的第一个分区(0)设为根分区/root设备,但不加载文件系统。

“grub>”提示符后输入:“chainloader1” 回车。//将启动引导权转交给当前分区的首扇区(Windows系统所在分区的首扇区)。

“grub>”提示符后输入:“boot” 回车。系统将启动Windows。如果不成功,则表明 (hd0,0) 不是 Windows 系统所在分区,再从第一步开始试一下“root (hd0,1)/root (hd0,2)/root (hd0,3)/…”,总之这样一定可以引导启动你的Windows系统。

好了,进入Windows了,请采用Solution 3的方法清除MBR

ubuntu9.04恢复Ctrl+Alt+Backspace组合键

ubuntu 9.04默认的Ctrl+Alt+Backspace组合键是没有开启的,之前的版本都有,习惯了使用这个组合键重启Xwindows,突然之间没有了,感觉就是不习惯。于是上网搜索解决办法。终于搞定。

介绍两种方法

第一种:
编辑/etc/X11/xorg.conf
sudo gedit /etc/X11/xorg.conf
最后加上
Section “ServerFlags”
Option “DontZap” “false”
EndSection
保存退出。
(注: “DontZap”和”false”分隔用的是tab键)

第二种:
打开终端
输入
sudo apt-get install dontzap
sudo dontzap -d
搞定

ubuntu下Opera字体混乱修复

Opera是一款非常不错的浏览器,小巧快捷Windows和Linux下都有相应的发行版,最新版本是9.5。在Linux下使用Opera浏览中文页面时经常会发生字体混乱的问题。具体来说就是在一行中文中大部分都是宋体但是有时会蹦出来几个楷体字而且字号偏小显示模糊。

这一问题的产生和Opera的字体调用机制有关,解决起来也不难。Linux下Opera的字体配置文件是目录/usr/share/opera/ini下的font.ini文件,用VI编辑器打开该文件,找到“Know fonts that solves specific problems”项,修改包含“chinese-s good try-first”的条目如下family:WenQuanYi Bitmap Song=chinese-s good try-first,如果使用微软的SimSun字体(最好不要用,一面惹上官司)相应的将WenQuanYi Bitmap Song替换为SimSun即可。 而后将上下的japanese和korean条目注释掉。

完成上述修改后,重启Opera即可。

我再提供另外一种方法:
请下载并解附件,并重命名为font.ini.tar.bz2(去掉后面的 .jpg)。压附件文件 font.ini.tar.bz2,存为 /usr/share/opera/ini/font.ini,之后重启 Opera。

附件:请右键单击这里,选另存为

Google和Picasa相册图片无法访问的解决办法

6月24日晚开始起,Google.com,Gmail等google服务均无法正常访问,结果初步检查发现是Google.com及Gmail相关域名被劫持。原理很简单:GFW通过技术手段,将Google的各类境外域名解析到一个错误的地址,使得Google.com无法访问。

既然是域名劫持,那么解决方法也能简单。既然你不让我解析正确,那么我把Google域名的IP直接解析,跳过被劫持的DNS解析这个步骤,即可正常访问Google.com及Gmail.

你只需在你电脑C:\WINDOWS\system32\drivers\etc里面打开hosts文件,另起一行加上

74.125.91.103 www.google.com
74.125.91.83 mail.google.com
74.125.91.18 www.gmail.com
74.125.91.99 www.picasa.com
74.125.91.103 picasa.google.com

如果遇到不能修改就取消只读属性,经过这个步骤,所有Google服务均可访问。

P.S google目前已经恢复正常

==============================分割线==================================
看不到Picasa相册图片可用下面的方法解决
用记事本打开hosts文件,hosts文件位于 c:\windows\system32\drivers\etc\hosts
在hosts文件中加入下面这些内容

#picasaweb.google.com
203.208.39.99 lh1.ggpht.com
203.208.39.99 lh2.ggpht.com
203.208.39.99 lh3.ggpht.com
203.208.39.99 lh4.ggpht.com
203.208.39.99 lh5.ggpht.com
203.208.39.99 lh6.ggpht.com
203.208.39.99 lh7.ggpht.com
203.208.39.99 lh8.ggpht.com

保存。

P.S Picasa相册可以使用代理打开

解决ubuntu9.04 FLASH不能正常显示汉字

打开终端,输入以下命令:

cd /etc/fonts/conf.d/
sudo cp 49-sansserif.conf 49-sansserif.conf_backup
sudo rm 49-sansserif.conf

以上命令的功能是先备份49-sansserif.conf文件,再删除,经测试在ubuntu9.04中有效。

《仙剑奇侠传98柔情》Nokia S60_3rd版本

【转贴】【5.19更新】仙剑98 3rd版本(PC移植版)【82实测通过】附安装方法及截图!

§§★★注意游戏目前只支持FP1/FP2,MR机型暂不支持本游戏目前基本完美,估计还有少量BUG……但是玩剧情应该是不成问题了!而且重要的是能正常存档和读档,而且游戏速度很流畅,不是dosbox模拟的那种所能比的!★★§§

安装详细步骤:

★★★★★★★★★★★★★★★★安装注意事项★★★★★★★★★★★★★★★★★★第一次安装请照此教程安装按顺序安装,以后想安装新版本的话,只需安装主程序即可。本帖子中的安装目录中的E是指手机的存储卡,不是电脑的E盘。

==================================================

1、游戏资源下载:

2、安装过程:

    (1)将下载下来的openc运行库压缩包解压得到三个组件,分别是glib.SIS、stdcpp.SIS、pips_nokia_1_4_SS.sis,见下图:

     (2)依次安装glib.SIS、stdcpp.SIS和pips_nokia_1_4_SS.sis(这3个组件无需签名)

       (3)安装图形声音支持库,如下图所示。PS:这里提一下图形声音支持库和主程序命名上的区别,图像声音支持库是以sdl开头,而主程序是以sdlpal开头。

       (4)安装主程序(截图中显示的版本和最新的不一样,但是文件名开头都是sdlpal)如下图所示:

  

      (5)将pal98 原版游戏资源压缩包解压,把得到的资源文件拷贝到E:\data\pal目录下,pal目录不存在的话可以自己建.解压后的资源文件如下图所示:

    

     (6)将物品说明及字库资源包解压,解压出来的文件复制到E:\data\pal目录下,会弹出文件覆盖的提示,点“全部”确定。物品说明及字库资源包解压后的文件如下图所示:

3、到此完成了整个安装过程,大功告成了!运行“应用程序”下的“仙剑奇侠",嘿嘿,接下去就是我们很熟悉的画面了!祝大家玩得愉快!

附件:截图,以下都是自己82用超级截图截的图,不是在电脑上哦!有时间戳:

(1)图一:

(2)图二:

(3)图三:

本文转自:塞班智能手机网
原帖地址:http://bbs.dospy.com/thread-3329376-1-1.html

linux 技巧:使用 screen 管理你的远程会话

你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

元凶:SIGHUP 信号

让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。

在Linux/Unix中,有这样几个概念:

进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。
根据POSIX.1定义:

挂断信号(SIGHUP)默认的动作是终止程序。
当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
如果会话期首进程终止,则该信号发送到该会话期前台进程组。
一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。
因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

我们来看一个例子。打开两个SSH终端窗口,在其中一个运行top命令。

[root@tivf09 root]# top

在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。

[root@tivf09 root]# ps -ef|grep top root
5180 5128 0 01:03 pts/0 00:00:02 top root
5857 3672 0 01:12 pts/2 00:00:00 grep top

使用pstree命令可以更清楚地看到这个关系:

[root@tivf09 root]# pstree -H 5180|grep top

|-sshd-+-sshd—bash—top

使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。

[root@tivf09 root]# ps -xj|grep 5128
5126 5128 5128 5128 pts/0 5180 S 0 0:00 -bash
5128 5180 5180 5128 pts/0 5180 S 0 0:50 top
3672 18095 18094 3672 pts/2 18094 S 0 0:00 grep 5128

关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。

[root@tivf09 root]# ps -ef|grep 5128 root
18699 3672 0 04:35 pts/2 00:00:00 grep 5128

如 果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终 端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放 在后台运行。

nohup [argument...] &

虽然nohup很容易使用,但还是比较”简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。

其实我们可以使用一个更为强大的实用程序screen。流行的Linux发行版(例如Red Hat Enterprise Linux 4)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

[root@tivf06 ~]# rpm -qa|grep screen xscreensaver-4.18-5.rhel4.11 screen-4.0.2-5

开始使用Screen

简 单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多 个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方 式:

1.直接在命令行键入screen命令

[root@tivf06 ~]# screen

Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2.Screen命令后跟你要执行的程序。

[root@tivf06 ~]# screen vi test.c

Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。

3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/abc文件:

[root@tivf06 ~]# screen vi /tmp/abc

之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:
暂时中断会话

半个小时之后回来了,找到该screen会话:

[root@tivf06 ~]# screen -ls
There is a screen on: 16582.pts-1.tivf06 (Detached) 1 Socket in /tmp/screens/S-root.

重新连接会话:

[root@tivf06 ~]# screen -r 16582

看看出现什么了,太棒了,一切都在。继续干吧。

你 可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向 screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key binding),C-a叫做命令字符(command character)。

可以通过C-a ?来查看所有的键绑定,常用的键绑定有:

C-a ? 显示所有键绑定信息
C-a w 显示所有窗口列表
C-a C-a 切换到之前显示的窗口
C-a c 创建一个新的运行shell的窗口并切换到该窗口
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口(与C-a n相对)
C-a 0..9 切换到窗口0..9
C-a a 发送 C-a到当前窗口
C-a d 暂时断开screen会话
C-a k 杀掉当前窗口
C-a [ 进入拷贝/回滚模式

Screen常用选项

使用键绑定C-a ?命令可以看到, 默认的命令字符(Command key)为C-a,转义C-a(literal ^a)的字符为a:
Screen 常用选项

因为screen把C-a看作是screen命令的开始,所以如果你想要screen窗口接收到C-a字符,就要输入C-a a。Screen也允许你使用-e选项设置自己的命令字符和转义字符,其格式为:

-exy x为命令字符,y为转义命令字符的字符

下面命令启动的screen会话指定了命令字符为C-t,转义C-t的字符为t,通过C-t ?命令可以看到该变化。
自定义命令字符和转义字符

[root@tivf18 root]# screen -e^tt

其他常用的命令选项有:

-c file 使用配置文件file,而不使用默认的$HOME/.screenrc
-d|-D [pid.tty.host] 不开启新的screen会话,而是断开其他正在运行的screen会话
-h num 指定历史回滚缓冲区大小为num行
-list|-ls 列出现有screen会话,格式为pid.tty.host
-d -m 启动一个开始就处于断开模式的会话
-r sessionowner/ [pid.tty.host] 重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限
-S sessionname 创建screen会话时为会话指定一个名字
-v 显示screen版本信息
-wipe [match] 同-list,但删掉那些无法连接的会话

下例显示当前有两个处于detached状态的screen会话,你可以使用screen -r 重新连接上:

[root@tivf18 root]# screen -ls
There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Detached) 2 Sockets in /root/.screen.
[root@tivf18 root]# screen -r 8736

如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

[root@tivf18 root]# kill -9 8462
[root@tivf18 root]# screen -ls
There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Dead ???) Remove dead screens with ’screen -wipe’. 2 Sockets in /root/.screen.
[root@tivf18 root]# screen -wipe
There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Removed) 1 socket wiped out. 1 Socket in /root/.screen.
[root@tivf18 root]# screen -ls
There is a screen on: 8736.pts-1.tivf18 (Detached) 1 Socket in /root/.screen.
[root@tivf18 root]#

-d -m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname

启动一个初始状态断开的screen会话:

[root@tivf06 tianq]# screen -dmS mygdb gdb execlp_test

连接该会话:

[root@tivf06 tianq]# screen -r mygdb

管理你的远程会话

先 来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到系统,直接ftp命令开始传输,之 后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开SSH连接了。让我们使用screen来试试。

SSH登录到系统,在命令行键入screen。

[root@tivf18 root]# screen

在screen shell窗口中输入ftp命令,登录,开始传输。不愿意等了?OK,在窗口中键入C-a d:
管理你的远程会话

然后。。退出SSH登录?随你怎样,只要别杀掉screen会话。

是 不是很方便?更进一步,其实我们可以利用screen这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次登录到系统都要开很多窗口,然后每 天都要重复打开关闭这些窗口?让screen来帮你”保存”吧,你只需要打开一个ssh窗口,创建需要的screen窗口,退出的时候C-a d”保存”你的工作,下次登录后直接screen -r 就可以了。

最好能给每个窗口起一个名字,这样好记些。使用C-a A给窗口起名字。使用C-a w可以看到这些窗口名字,可能名字出现的位置不同。

更多Screen功能

Screen 提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定 screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定 screen配置文件。

以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内 容请参考screen的man页。

原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

ubuntu配置vnc4server远程桌面

 

vnc4server配置过程:

1. 配置远程控制权限

打开 系统->系统管理->登陆窗口

点击<远程>页面,在样式中选择"与本地相同"

点击"配置XDMCP"按钮,将"遵从非直接请求"的选中状态取消

编辑 /etc/gdm/gdm.conf

sudo gedit /etc/X11/gdm/gdm.conf

找到[xdmcp]节,将enable改为true

Enable=True

找到行,# RemoteGreeter=/usr/lib/gdm/gdmlogin 去掉注释

RemoteGreeter=/usr/lib/gdm/gdmlogin

2. 安装所需软件

sudo apt-get install vnc4server xinetd

3. 设置VNC口令

sudo vncpasswd /root/.vncpasswd

4. 在xinetd中增加VNC服务

sudo vi /etc/xinetd.d/Xvnc Xvnc内容如下 service Xvnc { type = UNLISTED disable = no socket_type = stream protocol = tcp wait = yes user = root server = /usr/bin/Xvnc server_args = -inetd :1 -query localhost -geometry 1024×768 -depth16 -once -fp /usr/share/fonts/X11/misc -DisconnectClients=0-NeverShared passwordFile=/root/.vncpasswd -extension XFIXES port = 5901 }

5. 启动xinetd服务

sudo /etc/init.d/xinetd stop sudo killall Xvnc sudo /etc/init.d/xinetd start

vnc客户端配置:

我的客户端系统是win XP,vnc客户端用的是UltraVNC Viewer。

启动UltraVNC Viewer后,在vnserver中输入刚才配置nvc4server的主机ip和vncserver端口号(如 192.168.1.108:5901),端口号在/etc/xinetd.d/Xvnc文件中设置(port = 5901)。输入用户,口令,就可以从远程登录了

Ubuntu安装KVM虚拟机

Ubuntu可以安装的虚拟机有KVM和apt自带的Vbox。
安装Vbox
sudo apt-get install virtualbox-ose

安装Ubuntu下的虚拟机Kvm,并用虚拟机安装带有授权的WinXP系统:
首先,查看CPU信息。
cat /proc/cpuinfo

在列出来的一系列信息中,注意这一行:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 lahf_lm
这里面如果有SVM (AMD cpu)或者 VMX (Intel cpu)说明CPU是支持安装虚拟机的。

然后安装虚拟机软件 kvm和qemu 两款。
sudo apt-get install kvm qemu

接着,查看目录并且创建 kvm文件夹。
ls
mkdir kvm

然后给要安装的winxp设定分区大小。
qemu-img create -f qcow2 kvm/winxp.img 5G #分区大小5G
-f qcow2 #这个不定义的话(不写),分区就是5个G;定义了,就表示,分区最小32K,按照安装需要,最大可以达到5G——表示不预先分配硬盘。

然后查看分区信息。
ls kvm -l

正式安装虚拟机操作系统。

sudo kvm -m 512M -hda kvm/winxp.img -cdrom /dev/scd0 -boot d
kvm 启动kvm虚拟机安装系统。
-m 512M 给虚拟机分配512M内存。
-hda kvm/winxp.img 用kvm/winxp.img该目录作为虚拟机的硬盘,硬盘名叫hda。
-cdrom /dev/scd0 用/dev/scd0(光驱)作为虚拟机的cdrom。如果是从iso文件安装,就把/dev/scd0替换成XXX.iso文件目录。
-boot d 从光驱引导。回车后开始。

然后就是正常的安装程序了。
安装界面会出现在QEMU窗口里,提示:Ctrl+Alt即在QEMU界面和系统界面之间切换。

安装winxp,它文件复制完安装文件以后,会重启。然后才继续安装,我们这时则只需把QEMU界面关闭,重启界面一下就可以了,注意,这个命令和前一个命令有区别了:
sudo kvm -m 512M -hda kvm/winxp.img -cdrom /dev/scd0
(把后面的-boot d去掉了,表示不是从光驱启动了,直接从winxp分区启动,开始继续安装。)

安装完成以后,定义网络启动winxp。

sudo kvm -m 512M -hda kvm/winxp.img -net nic -net user
-net nic -net user 定义虚拟机操作系统的网络。在这个定义下,winxp可以解析IP地址,但是无法ping通网络。不过winxp已经可以正常浏览网页了。
(另有一种定义网络叫桥接式网络,更强)。

转自海明视频教程。

iptables入门教程–设置静态防火墙

1、iptables介绍

iptables是复杂的,它集成到linux内核中。用户通过iptables,可以对进出你的计算机的数据包进行过滤。通过iptables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。接下来,我将告诉你如何设置自己的规则,从现在就开始吧。

2、初始化工作

在shell提示符 # 下打入

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

以上每一个命令都有它确切的含义。一般设置你的iptables之前,首先要清除所有以前设置的规则,我们就把它叫做初始化好了。虽然很多情况下它什么也不做,但是保险起见,不妨小心一点吧! 如果你用的是redhat 或fedora,那么你有更简单的办法

service iptables stop

3、开始设置规则:

接下下开始设置你的规则了

iptables -P INPUT DROP

这一条命令将会为你构建一个非常“安全”的防火墙,我很难想象有哪个hacker能攻破这样的机器,因为它将所有从网络进入你机器的数据丢弃(drop) 了。这当然是安全过头了,此时你的机器将相当于没有网络。如果你ping localhost,你就会发现屏幕一直停在那里,因为ping收不到任何回应。

4 、添加规则

接着上文继续输入命令:

iptables -A INPUT -i ! ppp0 -j ACCEPT

这条规则的意思是:接受所有的,来源不是网络接口ppp0的数据。

我们假设你有两个网络接口,eth0连接局域网,loop是回环网(localhost)。ppp0是一般的adsl上网的internet网络接口,如果你不是这种上网方式,那则有可能是eth1。在此我假设你是adsl上网,你的internet接口是ppp0

此时你即允许了局域网的访问,你也可以访问localhost

此时再输入命令 ping localhost,结果还会和刚才一样吗?

到此我们还不能访问www,也不能mail,接着看吧。

5、我想访问www

iptables -A INPUT -i ppp0 -p tcp -sport 80 -j ACCEPT

允许来自网络接口ppp0(internet接口),并且来源端口是80的数据进入你的计算机。
80端口正是www服务所使用的端口。

好了,现在可以看网页了。但是,你能看到吗?

如果你在浏览器的地址中输入www.baidu.com,能看到网页吗?

你得到的结果一定是:找不到主机www.baidu.com

但是,如果你再输入220.181.27.5,你仍然能够访问baidu的网页。

为什么?如果你了解dns的话就一定知道原因了。

因为如果你打入www.baidu.com,你的电脑无法取得www.baidu.com这个名称所能应的ip地址220.181.27.5。如果你确实记得这个ip,那么你仍然能够访问www,你当然可以只用ip来访问www,如果你想挑战你的记忆的话^ _ ^,当然,我们要打开DNS。

6、打开dns端口

打开你的dns端口,输入如下命令:

iptables -A INPUT -i ppp0 -p udp -sport 53 -j ACCEPT

这条命令的含义是,接受所有来自网络接口ppp0,upd协议的53端口的数据。53也就是著名的dns端口。

此时测试一下,你能通过主机名称访问www吗?你能通过ip访问www吗?

当然,都可以!

7、查看防火墙

 此时可以查看你的防火墙了

iptables -L

 如果你只想访问www,那么就可以到此为止,你将只能访问www了。 不过先别急,将上面讲的内容总结一下,写成一个脚本。

#!/bin/bash

# This is a script

# Edit by liwei

# establish static firewall

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp –sport 80 -j ACCEPT

iptables -A INPUT -i ppp0 -p udp –sport 53 -j ACCEPT

8、复杂吗?到此iptables可以按你的要求进行包过滤了。你可以再设定一些端口,允许你的机器访问这些端口。这样有可能,你不能访问QQ,也可能不能打网络游戏,是好是坏,还是要看你自己而定了。顺便说一下,QQ这个东西还真是不好控制,用户与服务器连接使用的好像是8888端口,而QQ上好友互发消息使用的又是udp的4444端口(具体是不是4444还不太清楚)。而且QQ还可以使用www的80端口进行登录并发消息,看来学无止境,你真的想把这个家伙控制住还不容易呢?还是进入我们的正题吧。

如果你的机器是服务器,怎么办?

9、如果不巧你的机器是服务器,并且要提供www服务。显然,以上的脚本就不能符合我们的要求了。但只要你撑握了规则,稍作修改同样也能很好的工作。在最后面加上一句

iptables -A INPUT -i ppp0 -p tcp –dport 80 -j ACCEPT

这一句也就是将自己机器上的80端口对外开放了,这样internet上的其他人就能访问你的www了。当然,你的www服务器得工作才行。如果你的机器同时是smtp和pop3服务器,同样的再加上两条语句,将–dport后面的80改成25和110就行了。如果你还有一个ftp服务器,呵呵,如果你要打开100个端口呢……

我们的工作好像是重复性的打入类似的语句,你可能自己也想到了,我可以用一个循环语句来完成,对,此处可以有效的利用shell脚本的功能,也让你体验到了shell脚本语言的威力。看下文:

10、用脚本简化你的工作,阅读下面的脚本

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall

# define const here

Open_ports=”80 25 110 10″ # 自己机器对外开放的端口

Allow_ports=”53 80 20 21″ # internet的数据可以进入自己机器的端口

#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP #we can use another method to instead it

iptables -A INPUT -i ! ppp0 -j ACCEPT

# define ruler so that some data can come in.

for Port in “$Allow_ports” ; do

iptables -A INPUT -i ppp0 -p tcp -sport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp -sport $Port -j ACCEPT

done

for Port in “$Open_ports” ; do

iptables -A INPUT -i ppp0 -p tcp -dport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp -dport $Port -j ACCEPT

done

这个脚本有三个部分(最前面的一段是注释,不算在这三部分中)

第一部分是定义一些端口:访问你的机器”Open_ports”端口的数据,允许进入;来源是”Allow_ports”端口的数据,也能够进入。

第二部分是iptables的初始化,第三部分是对定义的端口具体的操作。

如果以后我们的要求发生了一些变化,比如,你给自己的机器加上了一个ftp服务器,那么只要在第一部分”Open_ports”的定义中,将ftp对应的20与21端口加上去就行了。呵呵,到此你也一定体会到了脚本功能的强大的伸缩性,但脚本的能力还远不止这些呢!

11、使你的防火墙更加完善

看上面的脚本init部分的倒数第二句

iptables -P INPUT DROP

这是给防火墙设置默认规则。当进入我们计算机的数据,不匹配我们的任何一个条件时,那么就由默认规则来处理这个数据—-drop掉,不给发送方任何应答。

也就是说,如果你从internet另外的一台计算机上ping你的主机的话,ping会一直停在那里,没有回应。

如果黑客用namp工具对你的电脑进行端口扫描,那么它会提示黑客,你的计算机处于防火墙的保护之中。我可不想让黑客对我的计算机了解太多,怎么办,如果我们把drop改成其他的动作,或许能够骗过这位刚出道的黑客呢。

怎么改呢?将刚才的那一句( iptables -P INPUT DROP )去掉,在脚本的最后面加上

iptables -A INPUT -i ppp0 -p tcp -j REJECT –reject-with tcp-reset

iptables -A INPUT -i ppp0 -p udp -j REJECT –reject-with icmp-port-unreachable

这样就好多了,黑客虽然能扫描出我们所开放的端口,但是他却很难知道,我们的机器处在防火墙的保护之中。如果你只运行了ftp并且仅仅对局域网内部访问, 他很难知道你是否运行了ftp。在此我们给不应该进入我们机器的数据,一个欺骗性的回答,而不是丢弃(drop)后就不再理会。这一个功能,在我们设计有状态的防火墙中(我这里讲的是静态的防火墙)特别有用。

你可以亲自操作一下,看一看修改前后用namp扫描得到的结果会有什么不同?

12、这个教程我想到此就结束了,其中有很多东西在这里没有提到,如ip伪装,端口转发,对数据包的记录功能。还有一个很重要的东西就是: iptables处理数据包的流程.在这里我想告诉你,你设置的过滤规则的顺序很重要,在此不宜详细介绍,因为这样一来,这个教程就会拘泥于细节。

iptables是复杂的,我在linuxsir上看过很多教程,它们往往多而全,反而让人望而生畏,希望我的这个教程,能够指导你入门。加油!

最后,我把完整的脚本写出来如下,你只要修改常量定义部分,就能表现出较大的伸缩性^_^

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall

# define const here

Open_ports=”80 25 110 10″ # 自己机器对外开放的端口

Allow_ports=”53 80 20 21″ # internet的数据可以进入自己机器的端口

#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

# The follow is comment , for make it better
# iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

# define ruler so that some data can come in.

for Port in “$Allow_ports” ; do
ptables -A INPUT -i ppp0 -p tcp -sport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp -sport $Port -j ACCEPT
done

for Port in “$Open_ports” ; do
iptables -A INPUT -i ppp0 -p tcp -dport $Port -j ACCEPT
iptables -A INPUT -i ppp0 -p udp -dport $Port -j ACCEPT
done

# This is the last ruler , it can make you firewall better
iptables -A INPUT -i ppp0 -p tcp -j REJECT –reject-with tcp-reset
iptables -A INPUT -i ppp0 -p udp -j REJECT –reject-with icmp-port-unreachable

作者:liweioop
转自www.linuxsir.org
原文地址:http://www.linuxsir.org/bbs/showthread.php?t=184634

下一页 »