邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

git克隆到一个非空目录
git clone 到一个非空目录

解决办法

1.进入非空目录 /www/study/
2.git clone --no-checkout https://github.com/flyaction/mc_framework.git tmp
3.mv tmp/.git
4.rmdir tmp
5.git reset --hard HEAD
6.然后就可以正常的提交推送了
NIS 搭配 NFS 的设定在丛集计算机上的应用(转私房菜)
 NIS 搭配 NFS 的设定在丛集计算机上的应用(转私房菜)


范例说明:

账号:建立大于 2000 以上的账号,账号名称为 cluser1, cluser2, cluser3 (将 cluster user 缩写为 cluser,不是少写一个 t 喔!),且这些账号的家目录预计放置于 /rhome 目录内,以与 NIS client 本地的用户分开;
NIS 服务器:领域名为 vbirdcluster,服务器是 www.centos.vbird (192.168.100.254),客户端是 clientlinux.centos.vbird (192.168.100.10);
NFS 服务器:服务器分享了 /rhome 给 192.168.100.0/24 这个网域,且预计将所有程序放置于 /cluster 目录中。 此外,假设所有客户端都是很干净的系统,因此不需要压缩客户端 root 的身份。
NFS 客户端:将来自 server 的文件系统都挂载到相同目录名称底下!

NIS 实作阶段

# 1. 建立此次任务所需要的账号数据:
[root@www ~]# mkdir /rhome
[root@www ~]# useradd -u 2001 -d /rhome/cluser1 cluser1
[root@www ~]# useradd -u 2002 -d /rhome/cluser2 cluser2
[root@www ~]# useradd -u 2003 -d /rhome/cluser3 cluser3
[root@www ~]# echo password | passwd --stdin cluser1
[root@www ~]# echo password | passwd --stdin cluser2
[root@www ~]# echo password | passwd --stdin cluser3

# 2. 修改 NISDOMAIN 的名称
[root@www ~]# vim /etc/sysconfig/network
NISDOMAIN=vbirdcluster  <==重点在改这个项目喔!

# 3. 制作数据库以及重新启动所需要的服务:
[root@www ~]# nisdomainname vbirdcluster
[root@www ~]# /etc/init.d/ypserv restart
[root@www ~]# /etc/init.d/yppasswdd restart
[root@www ~]# /usr/lib64/yp/ypinit -m


NFS 服务器的设定

# 1. 设定 NFS 服务器开放的资源:
[root@www ~]# mkdir /cluster
[root@www ~]# vim /etc/exports
/rhome          192.168.100.0/24(rw,no_root_squash)
/cluster        192.168.100.0/24(rw,no_root_squash)

# 2. 重新启动 NFS 啰:
[root@www ~]# /etc/init.d/nfs restart
[root@www ~]# showmount -e localhost
Export list for localhost:
/rhome       192.168.100.0/24
/cluster     192.168.100.0/24

# 1. 设定 NIS Client 的 mount 数据!
[root@clientlinux ~]# mkdir /rhome /cluster
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/rhome   /rhome
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/cluster /cluster
# 如果上述两个指令没有问题,可以将他加入 /etc/rc.d/rc.local 当中啊!

[root@clientlinux ~]# su - cluser1
[cluser1@clientlinux ~]$ 


NFS服务器搭建案例展示(转私房菜)
NFS服务器搭建案例展示(转私房菜)

模拟的环境状态中,服务器端的想法如下:

假设服务器的 IP 为 192.168.100.254 这一部;
/tmp 分享为可擦写,并且不限制使用者身份的方式,分享给所有 192.168.100.0/24 这个网域中的所有计算机;
/home/nfs 分享的属性为只读,可提供除了网域内的工作站外,向 Internet 亦提供数据内容;
/home/upload 做为 192.168.100.0/24 这个网域的数据上传目录,其中,这个 /home/upload 的使用者及所属群组为 nfs-upload 这个名字,他的 UID 与 GID 均为 210;
/home/andy 这个目录仅分享给 192.168.100.10 这部主机,以提供该主机上面 andy 这个使用者来使用,也就是说, andy 在 192.168.100.10 及 192.168.100.254 均有账号,且账号均为 andy ,所以预计开放 /home/andy 给 andy 使用他的家目录啦!


1.首先,就是要建立 /etc/exports 这个档案的内容啰,你可以这样写吧!
[root@www ~]# vim /etc/exports
/tmp         192.168.100.0/24(rw,no_root_squash)
/home/nfs    192.168.100.0/24(ro)  *(ro,all_squash)
/home/upload 192.168.100.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/andy   192.168.100.10(rw)

2.再来,就是要建立每个对应的目录的实际 Linux 权限了!我们一个一个来看:

# 1. /tmp
[root@www ~]# ll -d /tmp
drwxrwxrwt. 12 root root 4096 2011-07-27 23:49 /tmp

# 2. /home/nfs
[root@www ~]# mkdir -p /home/nfs
[root@www ~]# chmod 755 -R /home/nfs
# 修改较为严格的档案权限将目录与档案设定成只读!不能写入的状态,会更保险一点!

# 3. /home/upload
[root@www ~]# groupadd -g 210 nfs-upload
[root@www ~]# useradd -g 210 -u 210 -M nfs-upload
# 先建立对应的账号与组名及 UID 喔!
[root@www ~]# mkdir -p /home/upload
[root@www ~]# chown -R nfs-upload:nfs-upload /home/upload
# 修改拥有者!如此,则用户与目录的权限都设定妥当啰!

# 4. /home/andy
[root@www ~]# useradd andy
[root@www ~]# ll -d /home/andy
drwx------. 4 andy andy 4096 2011-07-28 00:15 /home/andy


3.重新启动 nfs 服务:
[root@www ~]# /etc/init.d/nfs restart


4.在 192.168.100.10 这部机器上面演练一下:
# 1. 确认远程服务器的可用目录:
[root@clientlinux ~]# showmount -e 192.168.100.254
Export list for 192.168.100.254:
/home/andy   192.168.100.10
/home/upload 192.168.100.0/24
/home/nfs    (everyone)
/tmp         192.168.100.0/24

# 2. 建立挂载点:
[root@clientlinux ~]# mkdir -p /mnt/{tmp,nfs,upload,andy}

# 3. 实际挂载:
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/tmp         /mnt/tmp
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/nfs    /mnt/nfs
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/upload /mnt/upload
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/andy   /mnt/andy

一个局域网络的 DHCP 服务器设定案例(转私房菜)
一个局域网络的 DHCP 服务器设定案例(转私房菜)

Linux 主机对内的 eth1 的 IP 设定为 192.168.100.254 这个;
内部网段设定为 192.168.100.0/24 这一段,且内部计算机的 router 为 192.168.100.254 ,此外 DNS 主机的 IP 为中华电信的 168.95.1.1 及 Seednet 的 139.175.10.20 这两个;
我想要让每个使用者预设租约为 3 天,最长为 6 天;
只想要分配的 IP 只有 192.168.100.101 到 192.168.100.200 这几个,其他的 IP 则保留下来;
我还有一部主机,他的 MAC 是『 08:00:27:11:EB:C2 』,我要给他的主机名为 win7 ,且 IP 为 192.168.100.30 

[root@www ~]# vim /etc/dhcp/dhcpd.conf
# 1. 整体的环境设定
ddns-update-style            none;            <==不要更新 DDNS 的设定
ignore client-updates;                        <==忽略客户端的 DNS 更新功能
default-lease-time           259200;          <==预设租约为 3 天
max-lease-time               518400;          <==最大租约为 6 天
option routers               192.168.100.254; <==这就是预设路由
option domain-name           "centos.vbird";  <==给予一个领域名
option domain-name-servers   168.95.1.1, 139.175.10.20;
# 上面是 DNS 的 IP 设定,这个设定值会修改客户端的 /etc/resolv.conf 档案内容

# 2. 关于动态分配的 IP
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.101 192.168.100.200;  <==分配的 IP 范围

    # 3. 关于固定的 IP 啊!
    host win7 {
        hardware ethernet    08:00:27:11:EB:C2; <==客户端网卡 MAC
        fixed-address        192.168.100.30;    <==给予固定的 IP
    }
}

启动后观察一下埠口的变化:
[root@www ~]# /etc/init.d/dhcpd start
[root@www ~]# chkconfig dhcpd on
[root@www ~]# netstat -tlunp | grep dhcp

Linux设定ssh在port22及23两个端口监听
Linux设定ssh在port22及23两个端口监听

[root@www ~]# vim /etc/ssh/sshd_config
Port 22
Port 23    <==注意喔!要有两个 Port 的设定才行!
[root@www ~]# /etc/init.d/sshd restart

但是这一版的 CentOS 却将 SSH 规范 port 仅能启动于 22 而已,所以此时会出现一个 SELinux 的错误!
根据 setroubleshoot 的提示,我们必须要自行定义一个 SELinux 的规则放行模块才行!


# 1. 于 /var/log/audit/audit.log 找出与 ssh 有关的 AVC 信息,并转为本地模块
[root@www ~]# cat /var/log/audit/audit.log | grep AVC | grep ssh | audit2allow -m sshlocal > sshlocal.te  <==扩展名要是 .te 才行

[root@www ~]# grep sshd_t /var/log/audit/audit.log | audit2allow -M sshlocal  <==sshlocal 就是刚刚建立的 .te 檔名
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i sshlocal.pp   <==这个指令会编译出这个重要的 .pp 模块!

# 2. 将这个模块加载系统的 SELinux 管理当中!
[root@www ~]# semodule -i sshlocal.pp

# 3. 再重新启动 sshd 并且观察埠口吧!
[root@www ~]# /etc/init.d/sshd restart
[root@www ~]# netstat -tlunp | grep ssh

非标准端口的连接方式
ssh -p 23 root@localhost
Linux最大线程数限制及当前线程数查询
/proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值

/proc/sys/kernel/thread-max

max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程

/proc/sys/vm/max_map_count
linux下制作不用密码可立即登入的 ssh 用户
1. 客户端建立两把钥匙:
//[vbirdtsai@clientlinux ~]$ ssh-keygen [-t rsa|dsa] <==可选 rsa 或 dsa
[vbirdtsai@clientlinux ~]$ ssh-keygen  <==用预设的方法建立密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vbirdtsai/.ssh/id_rsa): <==按 enter
Created directory '/home/vbirdtsai/.ssh'. <==此目录若不存在则会主动建立
Enter passphrase (empty for no passphrase): <==按 Enter 不给密码
Enter same passphrase again: <==再输入一次 Enter 吧!
Your identification has been saved in /home/vbirdtsai/.ssh/id_rsa. <==私钥档
Your public key has been saved in /home/vbirdtsai/.ssh/id_rsa.pub. <==公钥档
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 vbirdtsai@clientlinux.centos.vbird

[vbirdtsai@clientlinux ~]$ ls -ld ~/.ssh; ls -l ~/.ssh
drwx------. 2 vbirdtsai vbirdtsai 4096 2011-07-25 12:58 /home/vbirdtsai/.ssh
-rw-------. 1 vbirdtsai vbirdtsai 1675 2011-07-25 12:58 id_rsa      <==私钥档
-rw-r--r--. 1 vbirdtsai vbirdtsai  416 2011-07-25 12:58 id_rsa.pub  <==公钥档
2. 将公钥档案数据上传到服务器上:
[vbirdtsai@clientlinux ~]$ scp ~/.ssh/id_rsa.pub dmtsai@192.168.100.254:~
3. 将公钥放置服务器端的正确目录与文件名:
# 1. 建立 ~/.ssh 档案,注意权限需要为 700 喔!
[dmtsai@www ~]$ ls -ld .ssh
ls: .ssh: 没有此一档案或目录
# 由于可能是新建的用户,因此这个目录不存在。不存在才作底下建立目录的行为

[dmtsai@www ~]$ mkdir .ssh; chmod 700 .ssh
[dmtsai@www ~]$ ls -ld .ssh
drwx------. 2 dmtsai dmtsai 4096 Jul 25 13:06 .ssh
# 权限设定中,务必是 700 且属于使用者本人的账号与群组才行!

# 2. 将公钥档案内的数据使用 cat 转存到 authorized_keys 内
[dmtsai@www ~]$ ls -l *pub
-rw-r--r--. 1 dmtsai dmtsai 416 Jul 25 13:05 id_rsa.pub <==确实有存在

[dmtsai@www ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[dmtsai@www ~]$ chmod 644 .ssh/authorized_keys
[dmtsai@www ~]$ ls -l .ssh
-rw-r--r--. 1 dmtsai dmtsai 416 Jul 25 13:07 authorized_keys
# 这个档案的权限设定中,就得要是 644 才可以!不可以搞混了!

Client 必须制作出 Public & Private 这两把 keys,且 Private 需放到 ~/.ssh/ 内;
Server 必须要有 Public Key ,且放置到用户家目录下的 ~/.ssh/authorized_keys,同时目录的权限 (.ssh/) 必须是 700 而档案权限则必须为 644 ,同时档案的拥有者与群组都必须与该账号吻合才行。
私房菜服务器架设篇之防火墙学习笔记
Tcp Wrappers

1.哪些服务支持
由super daemon (xinetd) 所管理的服务
支持libwrap.so模块的服务
yum install xinetd
chkconfig xinetd on //要先进行此命令才能看到下面的
chkconfig --list //列出的结果都可以使用tcp wrappers 来管理

ldd $(which rsyslogd sshd xinetd httpd) 
for name in rsyslogd sshd xinetd httpd;do echo $name;ldd $(which $name) |grep libwrap;done//是否包含libwrap这个库

2. /etc/hosts.{allow|deny}的设置方式 
先以/etc/hosts.allow进行优先比较,该规则符合就予以放行
再以/etc/hosts.deny比对,规则符合就予以抵挡
若不在这两个文件内,亦即规则都不符合,最终则予以放行

例子:开放本机的127.0.0.1可以进行任何本机的服务,让局域网(192.168.1.0/24可以使用rsync,同时10.0.0.100也能够使用rsync,但其他来源则不允许使用rsync\
cat /etc/xinetd.d/rsysc

vim /etc/hosts.allow
All:127.0.0.1
rsync:192.168.1.0/255.255.255.0 10.0.0.100

vim /etc/hosts.deny
rsync:All



Linux的数据包过滤软件 iptables
1. 不同linux内核版本的防火墙软件 uname -a //查看内核版本
version2.0:使用ipfwadm
version2.2:使用ipchains这个防火墙机制
version2.4与2.6:主要使用iptables这个防火墙机制


2.iptables语法
iptables [-t tables] [-L] [-nv]
选项与参数:
-t:后面接table,例如nat或filter,若省略此项目,则使用默认的filter
-L:列出目前的table的规则
-n:不进行IP与HOSTNAME的反查,显示信息的速度会快很多
-v:列出更多的信息,包括通过该规则的数据包总位数,相关的网络接口

范例:列出filter table 3 条链的规则
iptables -L -n
范例:列出nat table 3 条链的规则
iptables -t nat -L -n

target:代表进行的操作,ACCEPT是放行,而REJECT则是拒绝,此外,尚有DROP(丢弃)的项目
prot:代表使用的数据包协议,主要有TCP、UDP及ICMP3中数据包格式
opt:额外的选项说明
source:代表此规则是针对哪个来源IP进行限制
destination:代表此规则是针对哪个目标IP进行限制

iptables-save [-t table] //会列出完整的防火墙规则,只是并没有格式化输出而已
选项与参数:
-t:可以仅针对某些表格来输出,例如仅针对NAT或Filter等
iptables-save

iptables [-t tables] [-FXZ]
选项与参数:
-F:清除所有的已定制的规则
-X:除掉所有用户自定义的chain(应该说的是tables)
-Z:将所有的chain的计数与流量统计都归零

范例:清除本机防火墙(filter)的所有规则
iptables -F
iptables -X
iptables -Z


定义默认策略
当数据包不在我们设置的规则之内时,则该数据包的通过与否,是以Policy的设置为准

iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
选项与参数:
-P:定义策略(Policy)。注意,这个P为大写
ACCEPT:该数据包可接受
DROP:该数据包直接丢弃,不会让Client端知道为何丢弃

范例:将本机的INPUT设置为DROP,其他设置未ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables-save

数据包的基础比对:ip、网络及接口设备
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源IP/网络] [-d 目标IP/网络] -j [ACCEPT|DROP|REJECT|LOG]
选项与参数:
-AI 链名:针对某条链进行规则的插入或累加
 -A:新增加一条规则,该规则增加在原规则的最后面。例如原来已经有四条规则,使用-A就可以加上第五条规则
 -I:插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。例如原本有四条规则,使用-I则该规则变成第一条,原本四条变成2-5条
 链:有input/output/forward等,此链名称又与-io有关

-io:网络接口,设置数据包进出的接口规范
-i:数据包所进入的那个网络接口,例如eth0、lo等接口。需要INPUT链配合
-o:数据包所传出的那个网络接口,需要与output配合

-p:协定:设置此规则适用于哪种数据包格式
   主要的数据包格式有:tcp udp icmp 及 all

-s:来源 IP/网络,设置此规则之数据包的来源地址,可指定当单纯的ip或网络,例如:
IP:192.168.0.100
网络:192.168.0.0/24 192.168.0.0/255.255.255.0
若规范为不许时,则加上!即可,例如 -s ! 192.168.100.0/24 表示不接受192.168.100.0/24

-d:目标 IP/网络 同 -s ,只不过这里指的是目标的IP或网络

-j:后面接操作,主要的操作有接受ACCEPT 丢弃DROP、拒绝REJECT 及记录LOG

范例:设置lo成为受细嫩的设备,亦即进出lo的数据包都予以接受
iptables -A INPUT -i lo -j ACCEPT
范例:只要是来自网络的192.168.100.0/24的数据包就通通接受
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT
范例:只要是来自192.168.100.10就接受,但来自192.168.100.230 这个恶意来源的就丢弃
iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
iptables-save //查看

如果已经放行了192.168.100.0/24,那这个 192.168.100.230 -j DROP 就不会被用到了,如果想要记录
iptables -A INPUT -s 192.168.2.200 -j LOG
iptables -L -n


TCP、UDP的规则比对:针对端口设置

iptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源IP/网络] [--sport 端口范围] [-d 目标IP/网络] [--dport 端口范围] -j [ACCEPT|DROP|REJECT]
选项与参数:
--sport 端口范围:限制来源的端口号码,端口号码可以是连续的,例如1024:65535
--dport 端口范围:限制目标的端口号码
想要使用--dport --sport时,需要加上-p tcp或-p udp的参数才能成功

范例:想要连接进入本机port 21 的数据包都阻挡掉
iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
范例:想连接到本台主机的网上邻居(udp port 137,138 tcp port 139 445)就放行
iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
范例:只要来自192.168.1.0/24的1024:65535端口的数据包,且想要连接到本机的ssh port就予以阻挡,可以这样做
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP
范例:将来自任何地方来源 port 1:1023的主动连接到本机端的1:1023连接丢弃 ,主动连接的SYN标志
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP


iptables 外挂模块:mac与state
iptables -A INPUT [-m state] [--state 状态]
选项与参数:
-m:一些iptables的外挂模块,主要常见的有
state:状态模块
mac:网卡硬件地址
--state:一些数据包的状态,主要有
INVALID:无效的数据包,例如数据破损的数据包状态
ESTABLISHED:已经连接成功的连接状态
NEW:想要新建立连接的数据包状态
RELATED:这个最常用、表示这个数据包是与主机发送出去的数据有关

范例:只要已建立连接或与已发出请求相关的数据包就予以通过,不合法数据就丢弃
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
范例:针对局域网内的aa:bb:cc:dd:ee:ff 主机开放其连接
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT   //--mac-source:就是来源主机的mac



ICMP数据包规则的比对:针对是否响应ping来设置
iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT
选项与参数:
--icmp-type:后面必须要接ICMP的数据包类型,也可以使用代号,例如 8 代表 echo request 的意思
范例:让0,3,4,11,12,14,16,18的icmp type可以进入主机
vim somefile
#!/bin/bash
icmp_type = "0,3,4,11,12,14,16,18"
for typeicmp in $icmp_type
do
iptables -A INPUT -i eth0 -p icmp --icmp-type $icmp_type -j ACCEPT
done
------
sh somefile



超简单的客户端防火墙设计与防火墙规则存储
规则: 规则清零 默认策略 信任本机 回应数据包 信任用户
vim bin/firewall.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin/:/usr/bin;export PATH
#1.清除规则
iptables -F
iptables -X
iptables -Z
#2.设置策略
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#3-5 指定各项规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT eth0 -s 192.168.0.1/24 -j ACCEPT0
#6 写入防火墙规则配置文件
/etc/init.d/iptables save
----------------
sh bin/firewall.sh //执行脚本



IPv4的内核管理功能:/proc/sys/net/ipv4/*

1. /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
当启动SYN Cookie 时,主机在发送SYN/ACK确认数据包前,会要求Client端在短时间内回复一个序号,包括IP PORT等。若正确,则为可信任的。
不适合用在负载很高的服务器内。

2./proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
内核取消ping回应的设置值有两个,分别是/proc/sys/net/ipv4内的icmp_echo_ignore_broadcasts(仅有ping broadcast地址时才取消ping的回应)及icmp_echo_ignore_all(全部的ping都不回应).建议设置icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

3./proc/sys/net/ipv4/conf/网络接口/*
例如 /proc/sys/net/ipv4/conf/eth0/内
rp_filter:称为你想路径过滤,可以通过分析网络接口的路由信息,配合数据包的来源地址,分析数据包是否为合理.不合理则予以丢弃,建议启动
log_martisans:这个设置数据可以用来启动记录不合法的ip来源的功能


设置单机防火墙的一个实例
外部网络使用eth0(如果是拨号,有可能使用ppp0)
内部网络使用eth1,且内部使用192.168.100.0/24这个class
主机默认开放的服务有www ssh https等
实际设置
iptables.rule:设置最基本的规则,包括清除防火墙规则、加载模块、设置服务可接受等.
iptables.deny:设置独挡某些而已主机的进入
iptables.allow:设置允许某些自定义的后门来源主机进入

mkdir -p /usr/local/action/iptables
cd /usr/local/action/iptables
vim iptables.rule
#!/bin/bash
# 请先输入您的相关参数,不要输入错误了!
  EXTIF="eth0"             # 这个是可以连上 Public IP 的网络接口
  INIF="eth1"              # 内部 LAN 的连接接口;若无则写成 INIF=""
  INNET="192.168.100.0/24" # 若无内部网域接口,请填写成 INNET=""
  export EXTIF INIF INNET

# 第一部份,针对本机的防火墙设定!##########################################
# 1. 先设定好核心的网络功能:
  echo "1" > /proc/sys/net/ipv4/tcp_syncookies
  echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do
        echo "1" > $i
  done
  for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,\
send_redirects}; do
        echo "0" > $i
  done

# 2. 清除规则、设定默认政策及开放 lo 与相关的设定值
  PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
  iptables -F
  iptables -X
  iptables -Z
  iptables -P INPUT   DROP
  iptables -P OUTPUT  ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 3. 启动额外的防火墙 script 模块
  if [ -f /usr/local/virus/iptables/iptables.deny ]; then
        sh /usr/local/virus/iptables/iptables.deny
  fi
  if [ -f /usr/local/virus/iptables/iptables.allow ]; then
        sh /usr/local/virus/iptables/iptables.allow
  fi
  if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
        sh /usr/local/virus/httpd-err/iptables.http
  fi

# 4. 允许某些类型的 ICMP 封包进入
  AICMP="0 3 3/4 4 11 12 14 16 18"
  for tyicmp in $AICMP
  do
    iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
  done

# 5. 允许某些服务的进入,请依照你自己的环境开启
# iptables -A INPUT -p TCP -i $EXTIF --dport  21 --sport 1024:65534 -j ACCEPT # FTP
# iptables -A INPUT -p TCP -i $EXTIF --dport  22 --sport 1024:65534 -j ACCEPT # SSH
# iptables -A INPUT -p TCP -i $EXTIF --dport  25 --sport 1024:65534 -j ACCEPT # SMTP
# iptables -A INPUT -p UDP -i $EXTIF --dport  53 --sport 1024:65534 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport  53 --sport 1024:65534 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport  80 --sport 1024:65534 -j ACCEPT # WWW
# iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT # POP3
# iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT # HTTPS


# 第二部份,针对后端主机的防火墙设定!###############################
# 1. 先加载一些有用的模块
  modules="ip_tables iptable_nat ip_nat_ftp ip_nat_irc ip_conntrack 
ip_conntrack_ftp ip_conntrack_irc"
  for mod in $modules
  do
      testmod=`lsmod | grep "^${mod} " | awk '{print $1}'`
      if [ "$testmod" == "" ]; then
            modprobe $mod
      fi
  done

# 2. 清除 NAT table 的规则吧!
  iptables -F -t nat
  iptables -X -t nat
  iptables -Z -t nat
  iptables -t nat -P PREROUTING  ACCEPT
  iptables -t nat -P POSTROUTING ACCEPT
  iptables -t nat -P OUTPUT      ACCEPT

# 3. 若有内部接口的存在 (双网卡) 开放成为路由器,且为 IP 分享器!
  if [ "$INIF" != "" ]; then
    iptables -A INPUT -i $INIF -j ACCEPT
    echo "1" > /proc/sys/net/ipv4/ip_forward
    if [ "$INNET" != "" ]; then
        for innet in $INNET
        do
            iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
        done
    fi
  fi
  # 如果你的 MSN 一直无法联机,或者是某些网站 OK 某些网站不 OK,
  # 可能是 MTU 的问题,那你可以将底下这一行给他取消批注来启动 MTU 限制范围
  # iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss \
  #          --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu

# 4. NAT 服务器后端的 LAN 内对外之服务器设定
# iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 \
#          -j DNAT --to-destination 192.168.1.210:80 # WWW

# 5. 特殊的功能,包括 Windows 远程桌面所产生的规则,假设桌面主机为 1.2.3.4
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4  --dport 6000 \
#          -j DNAT --to-destination 192.168.100.10
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4  --sport 3389 \
#          -j DNAT --to-destination 192.168.100.20

# 6. 最终将这些功能储存下来吧!
  /etc/init.d/iptables save
------------------------ 脚本end
 
 假如我要让一个 140.116.44.0/24 这个网域的所有主机来源可以进入我的主机的话,那么这个档案的内容可以写成这样:
  [root@www iptables]# vim iptables.allow
#!/bin/bash
# 底下则填写你允许进入本机的其他网域或主机啊!
  iptables -A INPUT -i $EXTIF -s 140.116.44.0/24 -j ACCEPT

# 底下则是关于抵挡的档案设定法!
[root@www iptables]# vim iptables.deny
#!/bin/bash
# 底下填写的是『你要抵挡的那个咚咚!』
  iptables -A INPUT -i $EXTIF -s 140.116.44.254 -j DROP

[root@www iptables]# chmod 700 iptables.*



范例:假设对外的 IP 固定为 192.168.1.100 ,若不想使用伪装,该如何处理?
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100

范例:假设你的 NAT 服务器对外 IP 有好几个,那你想要轮流使用不同的 IP 时,又该如何设定?举例来说,你的 IP 范围为 192.168.1.210~192.168.1.220
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.210-192.168.1.220

范例:假设内网有部主机 IP 为 192.168.100.10 ,该主机是可对 Internet 开放的 WWW 服务器。你该如何透过 NAT 机制,将 WWW 封包传到该主机上?
假设 public IP 所在的接口为 eth0 ,那么你的规则就是:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:80 

-j REDIRECT --to-ports <port number>
# 这个也挺常见的,基本上,就是进行本机上面 port 的转换就是了!
# 不过,特别留意的是,这个动作仅能够在 nat table 的 PREROUTING 以及
# OUTPUT 链上面实行而已喔!

范例:将要求与 80 联机的封包转递到 8080 这个 port
[root@www ~]# iptables -t nat -A PREROUTING -p tcp  --dport 80  -j REDIRECT --to-ports 8080
# 这玩意最容易在你使用了非正规的 port 来进行某些 well known 的协议,
# 例如使用 8080 这个 port 来启动 WWW ,但是别人都以 port 80 来联机,
# 所以,你就可以使用上面的方式来将对方对你主机的联机传递到 8080 啰!




优惠券
最新微语