当前位置:首页 » 数据仓库 » linuxband如何配置
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

linuxband如何配置

发布时间: 2022-08-17 23:16:45

① 如何在Linux上高效阻止恶意IP地址

在Linux中,只要借助netfilter/iptables框架,就很容易实现阻止IP地址这一目的:
$ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP

如果你想要禁止某一整个IP地址区段,也能同样做到这一点:
$ sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP

不过,要是你有1000个没有共同CIDR(无类别域间路由)前缀的独立IP地址想要禁止访问,该如何是好?那你就要设定1000个iptables规则!很显然这种方法不具有良好的扩展性。
$ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP
$ sudo iptables -A INPUT -s 2.2.2.2 -p TCP -j DROP
$ sudo iptables -A INPUT -s 3.3.3.3 -p TCP -j DROP
. . . .

何谓IP集?
这时候,IP集(IP set)就能派得上大用场。IP集是一种内核功能,允许多个(独立)IP地址、MAC地址或者甚至多个端口号高效地编码并存储在比特图/散列内核数据结构里面。一旦创建了IP集,就能创建与该集匹配的iptables规则。
你应该会立马看到使用IP集带来的好处,那就是你只要使用一个iptables规则,就能够与IP集中的多个IP地址进行匹配!你可以结合使用多个IP地址和端口号来构建IP集,还可以用IP集动态更新iptables规则,对性能根本没有任何影响。
将IPset工具安装到Linux上
想创建并管理IP集,你就需要使用一种名为ipset的用户空间工具。
想将ipset安装到Debian、Ubuntu或Linux Mint上:
$ sudo apt-get install ipset

想将ipset安装到Fedora或CentOS/RHEL 7上:
$ sudo yum install ipset

使用IPset命令禁止IP地址
不妨让我通过几个简单的例子,具体介绍如何使用ipset命令。
首先,不妨创建一个新的IP集,名为banthis(名称随意):
$ sudo ipset create banthis hash:net

上述命令中的第二个变量(hash:net)必不可少,它代表了所创建的集的类型。IP集有多种类型。hash:net类型的IP集使用散列来存储多个CIDR区段。如果你想在该集中存储单个的IP地址,可以改而使用hash:ip类型。
一旦你创建了一个IP集,就可以使用该命令来检查该集:
$ sudo ipset list

这显示了可用IP 集的列表,另外还显示了每个集的详细信息,其中包括集成员。默认情况下,每个IP集可以最多含有65536个元素(这里是CIDR区段)。你只要在后面添加“maxelem N”选项,就可以调大这个极限值。
$ sudo ipset create banthis hash:net maxelem 1000000

现在不妨将IP地址区段添加到该集:
$ sudo ipset add banthis 1.1.1.1/32
$ sudo ipset add banthis 1.1.2.0/24
$ sudo ipset add banthis 1.1.3.0/24
$ sudo ipset add banthis 1.1.4.10/24

你会发现,集成员已发生了变化。
$ sudo ipset list

现在可以使用该IP集来创建一个iptables规则了。这里的关键在于,使用“-m set --match-set ”这个选项。
不妨创建一个iptables规则,阻止该集中的所有那些IP地址区段通过端口80访问网站服务器。这可以通过这个命令来实现:
$ sudo iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 80 -j DROP

如果你想,还可以将特定的IP集保存到一个文件中,然后以后可以从该文件来恢复:
$ sudo ipset save banthis -f banthis.txt
$ sudo ipset destroy banthis
$ sudo ipset restore -f banthis.txt

在上述命令中,我试着使用destroy选项来删除现有的IP集,看看我能不能恢复该IP集。
自动禁止IP地址
至此,你应该会看到IP集这个概念有多强大。仍然维持一份最新的IP黑名单可能是件麻烦又费时的活儿。实际上,现在外头有一些免费服务或收费服务可以为你维护这些IP黑名单。另外,不妨看一下我们如何可以将可用IP黑名单自动转换成IP集。
我暂且从免费或收费发布各种IP阻止列表的iblocklist.com获取免费的IP列表。提供了P2P格式的免费版本。
我要使用一款名为iblocklist2ipset的开源python工具,这个工具可以将P2P版本的iblocklist转换成IP sets。
首先,你需要安装好pip(想安装pip,请参阅这篇指导文章:http://ask.xmolo.com/install-pip-linux.html)。
然后安装iblocklist2ipset,具体如下所示。
$ sudo pip install iblocklist2ipset

在Fedora之类的一些发行版上,你可能需要运行这个命令:
$ sudo python-pip install iblocklist2ipset

现在进入到iblocklist.com,获取任何P2P列表URL(比如“level1”列表)。
然后将该URL粘贴到下面这个命令中:
$ iblocklist2ipset generate \
--ipset banthis "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz" \
> banthis.txt

在你运行上述命令后,你就创建了一个名为bandthis.txt的文件。如果你检查其内容,就会看到类似以下的内容:
create banthis hash:net family inet hashsize 131072 maxelem 237302
add banthis 1.2.4.0/24
add banthis 1.2.8.0/24
add banthis 1.9.75.8/32
add banthis 1.9.96.105/32
add banthis 1.9.102.251/32
add banthis 1.9.189.65/32
add banthis 1.16.0.0/14

你可以使用ipset命令,就能轻松装入该文件:
$ sudo ipset restore -f banthis.txt

现在,用下面这个命令检查自动创建的IP集:
$ sudo ipset list banthis

截至本文截稿时,“level1”阻止列表含有237000多个IP地址区段。你会发现,许多IP地址区段已经被添加到了IP集中。
最后,只需创建一个iptables规则,就能阻止所有这些地址!

② Linux 网卡绑定什么作用

首先检测系统是否安装开启NetworkManager服务,在root 用户下输入rpm -qa NetworkManager 如命令行下方出现NetworkManager-0.8.1-33.el6.x86_64名字类似的名字证明已经安装,命令行输入service NetworkManager status 查看NetworkManager是否为开启状态,默认为开启,如果为开启状态请输入chkconfig NetworkManager off 关闭服务。关闭后我们就可以正常的做网卡绑定配置了。切记在网卡绑定之前一定要关闭这个服务否则绑定网卡会报错,请确保如图示红色框起来的状态,否则绑定不会成功。
rhel linux 网卡绑定

第一组网卡绑定配置进入 /etc/sysconfig/network-scripts/目录,首先cp 将eth0或者em1名字的网卡配置文件复制一份(其他网卡也同样备份一份),我保存到当前目录 命名为ifcfg-em1.bak 已避免绑定失败无法回滚。备份好在当前网卡配置信息,直接vi ifcfg-bond0(这个文件在网卡没有绑定之前一般不存在我们直接vi建立就好了)将下面参数直接粘贴到band0文件里面。之后配置两块网卡的参数。

下面为bond0参数

EVICE=bond0

ONBOOT=yes

BOOTPROTO=none

IPADDR=192.168.28.102 (IP地址根据自的实际情况填写)

NETMASK=255.255.255.0 (掩码根据自的实际情况填写)

GATEWAY=192.168.28.254 (网关自己网路的网关)

USERCTL=no

em1网卡参数

vi ifcfg-em1 进入em1配置,将里面的配置清空,粘贴如下参数,rhel系统安装到dell 服务器会将网卡ID eth0变成em1,这里的网卡id需要根据系统里面的文件确定,有些是eth*的id。我这里就是em1的id,参数如下;

DEVICE=em1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

USERCTL=no

保存退出,在vi ifcfg-em2 进入em2配置,直接清空配置,粘贴如下参数。

DEVICE=em2

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

USERCTL=no
rhel linux 网卡绑定
rhel linux 网卡绑定
rhel linux 网卡绑定

通过上一步bond0 和em1 em2的参数配置,网卡绑定修改参数还差一步就完成了,请在/etc/modprobe.conf文件中添加如下脚本,如果没有modprobe.conf文件看直接vi 一个填入下面的代码既可。

modprobe.conf文件添加的脚本如下

alias eth0 pcnet32

alias eth1 pcnet32

alias bond0 bonding

options bond0 miimon=100 mode=0(配置模式这里配置为mode=0负载均衡模式0,mode参数为模式类型,具体请参考相关模式资料。miimon为监听时间,我设置100为0.1毫秒)

请将以上4行添加保存。到此第一组网卡绑定参数设置已经完成,如是多个网卡绑定为一组方法相同只需要将配置参数复制粘贴到相关网卡配置文件既可只需修改DEVICE将网卡id更换既可。
rhel linux 网卡绑定

第二组网卡配置与第一组基本相同,只不过就是修改一些IP地址和网关,一般的网络只有一个网关,我们在第一组配置了网关,在第二组我们就不用在配置网关了。当前目录下新建bond1,直接vi ifcfg-bond1将下面的bond1参数粘贴过来。将这两个保存即可。网卡参数配置修改,直接将网卡现有配置删除,vi ifcfg-em3/eth4 进入网卡配置参数修改,删除网卡现有的配置参数直接粘贴以下脚本。

下面bond1参数

DEVICE=bond1

BOOTPROTO=none

ONBOOT=yes

IPADDR=172.18.99.18 (IP地址根据自的实际情况填写)

NETMASK=255.255.255.0 (掩码根据自的实际情况填写)

USERCTL=no

网卡配置参数

DEVICE=eth3

BOOTPROTO=none

ONBOOT=yes

MASTER=bond1 (掩码写bond1)

USERCTL=no

DEVICE=eth4

BOOTPROTO=none

ONBOOT=yes

MASTER=bond1 (掩码写bond1)

USERCTL=no

rhel linux 网卡绑定

通过上一步bond1 和em3 em4的参数配置,网卡绑定修改参数还差一步就完成了,请在/etc/modprobe.conf文件中添加如下脚本,之前的bond0配置文件也配置过,直接在bond0下面添加既可,

modprobe.conf文件添加的脚本如下

alias eth3 pcnet32

alias eth4 pcnet32

alias bond1 bonding

options bond0 miimon=100 mode=0(配置模式这里配置为mode=0负载均衡模式0,mode参数为模式类型,具体请参考相关模式资料。miimon为监听时间,我设置100为0.1毫秒)

请将以上4行添加保存。到此第二组网卡绑定参数设置已经完成,如是多个网卡绑定为一组方法相同只需要将配置参数复制粘贴到相关网卡配置文件既可只需修改DEVICE将网卡id更换既可。
rhel linux 网卡绑定

通过以上配置,两组网卡配置基本完成,现在我们重启网络服务 输入命令

service network restart 等待从其完成,现在网卡配置还没有生效,请输入以下两行代码是网卡绑定生效;

ifenslave bond0 em1 em2

ifenslave bond1 em3 em4

为了更好的利用系统资源,我们还需要将生效过程开机自动启动,需要在/etc/rc.d/rc.local目录下将这两行代码添加进去,下次重启服务器就会自动生效,否者还需要手动生效。

配置全部完成,只剩下检测了,现在我需要用ifconfig 来检测一下绑定信息如图所示,bond0下的em1 em2 的mac地址全部相同证明成功了。bond1也是一个道理,这里我缺少bond1的图片,正常ifconfig是全部都会有的只要确定bond1和em3 em4的mac地址相同基本就是正常。
rhel linux 网卡绑定

③ 当linux应用程序中存在多个异步通知时怎样处理

驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时候,我们希望通知用户程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备的状态,从而节约了资源,这就是异步通知。好,那下一个问题就来了,这个过程如何实现呢?简单,两方面的工作。

一 驱动方面:
1. 在设备抽象的数据结构中增加一个struct fasync_struct的指针
2. 实现设备操作中的fasync函数,这个函数很简单,其主体就是调用内核的fasync_helper函数。
3. 在需要向用户空间通知的地方(例如中断中)调用内核的kill_fasync函数。
4. 在驱动的release方法中调用前面定义的fasync函数
呵呵,简单吧,就三点。其中fasync_helper和kill_fasync都是内核函数,我们只需要调用就可以了。在
1中定义的指针是一个重要参数,fasync_helper和kill_fasync会使用这个参数。

二 应用层方面
1. 利用signal或者sigaction设置SIGIO信号的处理函数
2. fcntl的F_SETOWN指令设置当前进程为设备文件owner
3. fcntl的F_SETFL指令设置FASYNC标志
完成了以上的工作的话,当内核执行到kill_fasync函数,用户空间SIGIO函数的处理函数就会被调用了。
呵呵,看起来不是很复杂把,让我们结合具体代码看看就更明白了。
先从应用层代码开始吧:
#include <sys/types.h>

#include <sys/stat.h>

#include <stdio.h>

#include <fcntl.h>

#include <signal.h>

#include <unistd.h>

#define MAX_LEN 100

//处理函数,没什么好讲的,用户自己定义

void input_handler(int num)
{

char data[MAX_LEN];

int len;
//读取并输出STDIN_FILENO上的输入

len = read(STDIN_FILENO, &data, MAX_LEN);
data[len] = 0;
printf("input available:%s\n", data);
}

void main()

{

int oflags;

//启动信号驱动机制,将SIGIO信号同input_handler函数关联起来,一旦产生SIGIO信号,就会执行input_handler

signal(SIGIO, input_handler);

//STDIN_FILENO是打开的设备文件描述符,F_SETOWN用来决定操作是干什么的,getpid()是个系统调用,

//功能是返回当前进程的进程号,整个函数的功能是STDIN_FILENO设置这个设备文件的拥有者为当前进程。
fcntl(STDIN_FILENO, F_SETOWN, getpid());

//得到打开文件描述符的状态

oflags = fcntl(STDIN_FILENO, F_GETFL);

//设置文件描述符的状态为oflags | FASYNC属性,一旦文件描述符被设置成具有FASYNC属性的状态,
//也就是将设备文件切换到异步操作模式。这时系统就会自动调用驱动程序的fasync方法。
fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);

//最后进入一个死循环,程序什么都不干了,只有信号能激发input_handler的运行

//如果程序中没有这个死循环,会立即执行完毕
while (1);
}
再看驱动层代码,驱动层其他部分代码不变,就是增加了一个fasync方法的实现以及一些改动
//首先是定义一个结构体,其实这个结构体存放的是一个列表,这个

//列表保存的是一系列设备文件,SIGIO信号就发送到这些设备上
static struct fasync_struct *fasync_queue;

//fasync方法的实现
static int my_fasync(int fd, struct file * filp, int on)

{

int retval;
//将该设备登记到fasync_queue队列中去

retval=fasync_helper(fd,filp,on,&fasync_queue);
if(retval<0)

{
return retval;

}
return 0;

}
在驱动的release方法中我们再调用my_fasync方法
int my_release(struct inode *inode, struct file *filp)

{

//..processing..

drm_fasync(-1, filp, 0);

//..processing..
}
这样后我们在需要的地方(比如中断)调用下面的代码,就会向fasync_queue队列里的设备发送SIGIO信号
,应用程序收到信号,执行处理程序
if (fasync_queue)
kill_fasync(&fasync_queue, SIGIO, POLL_IN);
好了,这下大家知道该怎么用异步通知机制了吧?

以下是几点说明[1]:
1 两个函数的原型
int fasync_helper(struct inode *inode, struct file *filp, int mode, struct fasync_struct **fa);
一个"帮忙者", 来实现 fasync 设备方法. mode 参数是传递给方法的相同的值, 而 fa 指针指向一个设
备特定的 fasync_struct *

void kill_fasync(struct fasync_struct *fa, int sig, int band);
如果这个驱动支持异步通知, 这个函数可用来发送一个信号到登记在 fa 中的进程.

2.
fasync_helper 用来向等待异步信号的设备链表中添加或者删除设备文件, kill_fasync被用来通知拥有相关设备的进程. 它的参数是被传递的信号(常常是 SIGIO)和 band, 这几乎都是 POLL_IN[25](但是这可用来发送"紧急"或者带外数据, 在网络代码里).

④ 如何在linux虚拟机上安装adb,嵌入式底层菜鸟求赐教

控制I/O设备 ,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命令传送的是控制信息,其中的数据是辅助的数据。详细自己网络。

⑤ 无线网卡的linux系统驱动

linux下无线网卡具体驱动的操作方法如下:

1、首先需要确定网卡的类型,打开linux的输入窗口,然后继续在linux终端下输入lsusb命令,此时在输出栏的第一行可以查看网卡类型,记录下来。

⑥ linux中系统定义的64种信号分别什么意思

编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
下面我们对编号小于SIGRTMIN的信号进行讨论。
1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
3) SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
4) SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
5) SIGTRAP
由断点指令或其它trap指令产生. 由debugger使用。
6) SIGABRT
调用abort函数生成的信号。
7) SIGBUS
非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
8) SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。
9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
10) SIGUSR1
留给用户使用
11) SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2
留给用户使用
13) SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
14) SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
17) SIGCHLD
子进程结束时, 父进程会收到这个信号。
如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。
18) SIGCONT
让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符
19) SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
21) SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
22) SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG
有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU
超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
25) SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。
26) SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
28) SIGWINCH
窗口大小改变时发出.
29) SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系统调用。
在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP
不能恢复至默认动作的信号有:SIGILL,SIGTRAP
默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞

⑦ 请教Linux系统中网卡band以后的mac地址是什么

输入/sbin/ifconfig后
eth0 Link encap:Ethernet HWaddr 00:1D:D8:B7:22:AF
后面显示的HWaddr后面的就是MAC地址