打印本文 打印本文 关闭窗口 关闭窗口
linux常见命令
作者:武汉SEO闵涛  文章来源:敏韬网  点击数16271  更新时间:2009/4/22 23:08:24  文章录入:mintao  责任编辑:mintao
| |--------------------------| ---------------------------- | Rule3: -p UDP -j DROP | ---------------------------- 考虑一个由192.168.1.1到1.2.3.4的TCP包。它进入INPUT链,由Rule1检查 - 不匹配。 Rule2匹配,那么它的目标就是test,所以下一个检查由test开始。test中的第一个规则 Rule1是匹配的,但是没有指定目标,所以由第二个规则Rule2检查。结果是不匹配,而我们 到达了链的尾部。于是回到INPUT链,因为刚刚被Rule2检查,所以现在由Rule3来检查,仍然 不匹配。 所以这个包的路线是:
                                       v    __________________________
                `INPUT''''                |   /    `test''''                v
               ------------------------|--/    -----------------------|----
               | Rule1                 | /|    | Rule1                |   |
               |-----------------------|/-|    |----------------------|---|
               | Rule2                 /  |    | Rule2                |   |
               |--------------------------|    -----------------------v----
               | Rule3                 /--+___________________________/
               ------------------------|---
                                       v
用户定义链可以跳转到另一个用户定义链(不过不能循环:如果发现循环,包就会被丢弃)。
7.4.2 iptables扩展:新目标 其他类型的扩展是目标。目标扩展由内核模块组成,而且iptables的一个可选扩展提供了新的命令行选项。有几个扩展是包含在默认netfilter发布中的。 LOG --log-level 跟一个级别名称或数字。合适的名字是(忽略大小写)''''debug''''、''''info''''、''''notice''''、''''warning''''、''''err''''、''''crit''''、''''alert''''和''''emerg'''',相当于数字7到0。请参考syslog.conf的手册获取这些级别的说明。默认是''''warning''''。 --log-prefix 跟一个最多29个字符的字符串,它被写入到log信息的开始处,这样可以区别出来。 这个模块最有用的就是跟在limit match后面,这样你就不会被你的log淹没了。 REJECT 此模块和''''DROP''''效果一样,除了会发送一个''''port unreachable''''的ICMP错误报文。注意如果属于以下情况,ICMP错误报文不会发送: o 包一开始就是ICMP错误报文,或者是未知的ICMP类型。 o 包被作为无头的分片过滤了。 o 我们已经向那里发送了太多的ICMP错误报文(参见/proc/sys/net/ipv4/icmp ratelimit)。
7.4.3 特殊的内建目标 有两个特殊的内建目标:RETURN和QUEUE。 RETURN如同到达这个链的尾部:如果是内建的链的规则,那么这个链的默认规则将被执行。如果是用户定义链,当跳至这个链中的这条规则(包含RETURN)时,回到前面的链继续匹配。 QUEUE是一个特别的目标,会为用户空间进程队列这个包。要这样使用,需要两个部件: o 一个"queue handler",处理用户空间与内核之间的机制。 o 和一个用户空间用来接收的应用程序,可能是操作,以及对包进行裁决。 IPv4 iptables的标准queue handler是 ip_queue 模块,跟随内核发布并标记为实验中。 下面是一个如何用iptables为用户空间进程队列包的快速例子: # modprobe iptable_filter # modprobe ip_queue # iptables -A OUTPUT -p icmp -j QUEUE 在这个例子中,本地生成的送出ICMP包(如由ping产生)到达ip_queue模块,然后包被试图送往用户空间应用。如果没有用户空间应用在(那儿)等着,包就被丢弃了。 要写一个用户空间应用,需要libipq API。和iptables一起发布。在CVS的testsuite tools(如redirect.c)中可以找到相关例子。 可以通过这里检查ip_queue的状态: /proc/net/ip_queue 队列的最大长度(也就是不包含返回包的送往用户空间包的数量)可以通过这里控制: /proc/sys/net/ipv4/ip_queue_maxlen 默认队列长度是1024。一旦达到这个长度,新的包就会被丢弃,直到队列长度小于这个值。好的协议如TCP,会对丢弃的包作出拥挤的解释,而且在队列满了后会很理想的将它挡回。无论如何,如果默认值太小的话,最好是多实验以决定队列的最大长度。
7.5 对整个链进行操作 iptables一个非常有用的特性是可以将链中相关的规则成组。你可以随意给链取名,不过我建议使用小写字母以避免与内建的链和目标产生冲突。链的名称最长为31个字母。
7.5.1 创建新链 让我们创建一个新链。因为我是个充满想象的家伙,我叫它test。使用''''-N''''或''''--new-chain''''选项: # iptables -N test 如此简单,现在你可以像上面说的那样放入规则了。
7.5.2 删除链 删除一个链同样简单,使用 ''''-X''''或''''--delete-chain''''选项。为什么是''''-X''''?嗯,因为所有合适的字母都已经被使用了。 # iptables -X test 有几个删除链的限制:他们必须是空的(见下面的"Flushing a Chain")而且他们不能是任何规则的目标。你也不能删除任何一个内建的链。 如果你不指定链名的话,所有可以被删除的用户定义链都将被删除。
7.5.3 清空一个链 这是清除一个链中所有规则的简单方法,使用''''-F'''' 或 ''''--flush''''命令。 # iptables -F FORWARD 如果不指定链的话,所有链都将被清空。
7.5.4 对链进行列表 用''''-L''''或''''--list''''命令,你可以列出一个链中的所有规则。 用户定义链中的''''refcnt''''是有多少链的规则指向了它。这个值必须为0,然后才可以删除这个链。 如果链名被忽略,所有链都将被列出,即便是空的。 ''''-L''''可以有三个选项。''''-n''''(数字)选项对于阻止iptables试图查找IP地址时非常有用,因为(如果你像大多数人一样使用DNS)如果你的DNS设置不太合适的话,可能会造成长时间的停顿,或者你滤掉了DNS请求。它还会让TCP或UDP端口以数字显示。 ''''-v''''选项显示所有规则的细节,包括饱和字节计数器,TOS比较,以及接口。否则这些值是被忽略的。 注意,报和字节计数器可以分别使用''''K''''、''''M''''或者''''G''''来代替1000、1,000,000 和1,000,000,000。使用''''-x''''(扩展数字)标志来打印整个值,不管它有多大。
7.5.5 重置(清零)计数器 可以重置计数器非常有用。可以用''''-Z''''或''''--zero''''来完成。 考虑下面的: # iptables -L FORWARD # iptables -Z FORWARD 在上述例子中,有些包在''''-L''''和''''-Z''''命令之间通过。因此,你可以把''''-L''''和''''-Z''''一起使用,读取时就清空计数器。
7.5.6 设置原则(默认规则) 我们在前面讨论包是如何通过链的时候,已经解释了当包到达内建链的尾部时会发生什么。这时,链的原则就决定包的命运。只有内建的链(INPUT、OUTPUT和FORWARD)有原则,因为如果包到达用户定义链的尾部会返回到前面的链。 原则可以是ACCEPT或DROP,例如: # iptables -P FORWARD DROP
8. 使用ipchains和ipfwadm netflter发布中有ipchains.o和ipfwadm.o模块。把其中一个加载到你的内核(注意:他们和ip_tables.o不兼容)。然后你就可以像以前那样使用ipchains和ipfwadm了。 这在一段时间内仍然被支持。我认为合理的计算方式是 2*(替代发布 - 初始的稳定版本),超过了这个时间,就应当使用替代的稳定版本了。这意味着在Linux 2.6或2.8中对它们的支持很可能被放弃。
9. NAT和包过滤的混合使用 想要做网络地址转换(参见NAT HowTo)和包过滤的已很常见。好消息是他们可以混合起来使用的,而且工作得非常好。 你可以完全忽略你的NAT,来定义你的包过滤。包过滤看见的包的源及目标是“真正”的源和目标。例如,如果你将任何发往1.2.3.4 80端口的包DNAT到10.1.1.1的8080端口。包过滤器看见的是包发往10.1.1.1的8080端口(真正的目的地),而非1.2.3.4 的80端口。同样,你可以忽略伪装:看到的是包的真实外部IP地址(如10.1.1.1),而响应的则返回到那里。 你可以使用''''state''''匹配扩展,使包过滤器不需要做任何额外的工作,因为无论如何,NAT都会要求连接跟踪。扩展NAT HowTo中简单的伪装例子,以禁止任何来自ppp0接口的新的连接,你可以这样: #对送至ppp0的包进行伪装 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE # 禁止由ppp0进入的新的或不合适的包 iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP # 开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward
10. iptables和ipchains之间的差别 o 首先,内建链的名称从小写改成了大写,因为现在的INPUT和OUTPUT链只获取指向本地和本地生成的包。他们用来检查所有进入和发送的包。 o ''''-i''''标志现在表示进入接口的意思,而且只适用于INPUT和FORWORD链。FORWORD或OUTPUT链中的规则应该将''''-i''''改为''''-o''''。 o TCP和UDP端口现在必须用--source-port或--sport(或者--destination-port/--dport)拼写,而且必须放在''''-p tcp''''或''''-p udp''''选项之后,因为TCP或UDP扩展是分别加载的。 o TCP -y 标志现在是 --syn,而且必须在''''-p tcp''''之后。 o DENY目标现在是DROP. o 对单个链,可以在列出其工作同时清零。 o 清空内建链同时清除了原则计数器。 o 列出链给出的是一个计数器的微型的快照。 o REJECT和LOG现在是扩展目标,意思是他们是独立的内核模块。 o 链的名称最多可以是31个字符。 o MASQ现在是MASQUERADE而且使用不同的语法。REDRIRECT,在保留相同的名字时,也经历了语法的改变。参见NAT-HOWTO以获取配置它们的更多信息。 o -o选项不再用于将包传递给用户空间设备了(见上面的-i)。现在通过 QUEUE目标传递到用户空间。 o 很可能还有一些我也忘了。
11. 对制定包过滤器的建议 在计算机安全领域中,最明智的办法是阻挡所有东西,然后对需要的开启。这通常称为“凡是没有明确允许的都是禁止的”。我建议这样做如果安全是你最关心的。 不要运行任何你不需要的服务,即使你认为你已经阻碍了对它们的访问。 如果你创建专用防火墙,开始时不运行任何东西,并阻止所有包,然后添加服务并让需要的包通过。 我强调安全:结合tcp-wrappers(对于包过滤器本身的连接),代理(通过包过滤器的连接),路由验证和包过滤。路由验证是如果包来自未预期的接口那么将被删除:例如,如果你的内部网络地址是10.1.1.0/24,而一个包的源地址是你的外部接口,那么它将被丢弃。对一个接口如ppp0来说可以这样: # echo 1 > /proc/sys/net/ipv4/conf/ppp0/rp_filter 或者对所有已有的或将有的接口: # for f in /proc/sys/net/ipv4/conf/*/rp_filter; do # echo 1 > $f # done Debian在可能的范围了将这些设为默认。如果你使用非对称路由(如你期望包来自一个其他的方向),你可能需要在这些接口上禁止这一过滤。 记录对于当工作不正常时设置防火墙非常有用,但是在一个作为产品的防火墙上,总是应当将它与''''limit''''匹配结合,以防止有人充斥你的记录。 我极力推荐对安全系统使用连接追踪:它虽然会造成负担,因为所有连接都被追踪。但是对于控制对你的网络的访问非常有用。如果你的内核没有自动加载而且没有内建,你需要加载''''ip_conntrack.o''''这个模块。如果想要精确追踪复杂的协议,你需要加载合适的相关模块(如''''ip_conntrack_ftp.o'''')。 # iptables -N no-conns-from-ppp0 # iptables -A no-conns-from-ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A no-conns-from-ppp0 -m state --state NEW -i ! ppp0 -j ACCEPT # iptables -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:" # iptables -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:" # iptables -A no-conns-from-ppp0 -j DROP   # iptables -A INPUT -j no-conns-from-ppp0 # iptables -A FORWARD -j no-conns-from-ppp0 建造一个好的防火墙超越了这个HOWTO的范围,不过我的建议是“一切从严”。请参见Security HOWTO获取更多信息,来测试和探索你的服务器。
all pages ended here. kingpaul @ 09:50 AM 发表于 linux | 编辑 | 留言 (0) | TrackBack (0)

2004年04月22日

Linux一句话精彩问答

瀚海星云 -- Linux精华区文章阅读

发信人: noclouds (景天云飞), 信区: Linux
标 题: Linux一句话精彩问答--2004/03/16更新
发信站: 瀚海星云 (2004年03月21日07:45:16 星期天), 站内信件


编者按:鉴于目前中国Linux的发展现状,90%以上的问题都可以用一句话来回答,这便是本文的初衷。欢迎大家添加自己的“一句话”,收录后注明原始提供者。更详细的文
档,请浏览本版精华区或http://www.douzhe.com/linux/

(注:请对照自己使用的gnu/linux释放版本,因为有的解答并不支持所有版本)
----------------------------网络无关篇--------------------------
0001 修改主机名(bjchenxu)
vi /etc/sysconfig/network,修改HOSTNAME一行为"HOSTNAME=主机名"(没有这行?那就添加这一行吧),然后运行命令" hostname 主机名"。无论你是否重启,主机名修改成功了。

0002 Ret Hat Linux启动到文字界面(不启动xwindow)(bjchenxu)
vi /etc/inittab
id:x:initdefault:
x=3:文本方式 x=5:图形方式

0003 linux的自动升级更新问题(hutuworm,NetDC)
对于redhat,在www.redhat.com/corp/support/errata/找到补丁,6.1以后的版本带有
一个工具up2date,它能够测定哪些rpm包需要升级,然后自动从redhat的站点下载并完
成安装。
升级除kernel外的rpm: up2date -u
升级包括kernel在内的rpm: up2date -u -f

Debian跟别的发行版还是有很大的差别的,用Debian做服务器维护更加方便;红帽的升
级其实挺麻烦的,当然,如果你交钱给红帽的话,服务是会不一样的。
Debian下升级软件:
apt-get update
apt-get upgrade
前提:配置好网络和/etc/apt/sources.list,也可以用apt-setup设置。

0004 windows下看linux分区的软件(bjchenxu)
Paragon.Ext2FS.Anywhere.2.5.rar和explore2fs-1.00-pre4.zip

0005 mount用法(sakulagi)
fat32的分区 mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom
ntfs的分区 mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom
iso文件 mount -o loop /abc.iso /mnt/cdrom
软盘 mount /dev/fd0 /mnt/floppy
USB闪存 mount /dev/sda1 /mnt/cdrom
所有/etc/fstab内容 mount -a
可以指定文件格式"-t 格式", 格式可以为vfat, ext2, ext3等.

0006 在vmware的LINUX中使用本地硬盘的FAT分区(bjchenxu)
将本地的FAT分区共享,然后在VMWARE中使用SMBFS挂上。可以将如下的行放到/etc/fsta
b中:
//win_ip/D$ /mnt/d smbfs
defaults,auto,username=win_name,password=win_pass,codepage=936,iocharest=gb23
12 0 0
其中win_ip是你的windows的IP地址;
D$是你的windows里面共享的D盘的共享名;
/mnt/d是要将该分区mount到linux的目录;
win_name和win_pass是你的WINDOWS里面可以读取该分区的用户,比如你的管理员名和密
码。
如果你运行了/etc/rc.d/init.d/netfs,那么在启动的时候就会自动挂载这个分区。

0007.a 删除名为-a的文件(bjchenxu)
rm ./-a
rm -- -a 告诉rm这是最后一个选项,参见getopt

 << 上一页  [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口