Linux系统管理技巧3

[toc]html

Linux系统管理技巧3

扩展(selinux了解便可)linux

  1. selinux教程 http://os.51cto.com/art/201209/355490.htm

2.selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK编程

10.11 Linux网络相关

1.ifconfig查看网卡IP

若是系统没有ifconfig命令,可使用yum install -y net-tools) Linux上有多个网卡,而只想重启某一个网卡的话,可使用这个命令:vim

2.ifdown ens33;ifup ens33对网卡的操做ifdown ens33 && ifup ens33

两个命令能够一块儿执行windows

[root@localhost ~]# ifdown ens33 //即停用网卡

[root@localhost ~]# ifup ens33
//从新启动

ifdown ens33 && ifup ens33
两个命令能够一块儿执行,表示重启网卡

mark

须要注意的是,若是咱们远程登陆服务器,当使用ifdown ens33这个命令的时候,颇有可能后面的命令ifup eth33不会被运行,这样致使咱们断网而没法链接服务器,因此请尽可能使用 service network restart 这个命令来重启网卡。centos

3.给一个网卡设定多个IP,设置虚拟网卡; #cp ifcfg-ens33 ifcfg-ens33:0

  • cp ifcfg-ens33 ifcfg-ens33:0 之因此加上反斜杠,是由于要把:转义,否则在Linux命令下没法识别。而后编辑这个配置文件 mark

mark

  • vim编辑 mark mark
ifdown ens33 && ifup ens33 //重启网卡

mark

mark 从上面能够看到,多了一个ens33:0虚拟网卡 而且在windows下是能够ping通的 mark安全

4.查看网卡链接状态mii-tool ens33

示例命令以下:bash

  • mii-tool ens33 查看网卡是否链接
[root@localhost network-scripts]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

只要看到 “link ok” 就说明网卡为链接状态,若是显示 “no link” 说明网卡坏掉了或者没有链接网线。 另外还有一个命令也能够查看网卡状态:服务器

5.ethtool ens33

mark

6.更改主机名hostname命令

当装完系统后,默认主机名为localhost,使用hostname就能够知道你的linux的主机名:网络

[root@localhost ~]# hostname
localhost.localdomain

使用hostname修改主机名字

[root@localhost /]# hostname xavi
[root@localhost /]# hostname
xavi

7.不过这样的修改只是保存在内存中,若是重启,主机名仍是会编程改动以前的名称,要想完全修改还须要更改相关的配置文件/etc/hostname,方法以下:

[root@localhost ~]# hostnamectl set-hostname zlinux
[root@localhost ~]# hostname
xavilinux
[root@localhost ~]# bash //打开子shel即bashl就看到已经修改好了,重启也能够 
[root@xavilinux ~]#

8.设置DNS,配置文件/etc/resolv.conf中便可

DNS是用来解析域名用的,平时咱们访问网站都是直接输入一个网址,而DNS把这个网址解析到一个IP。

在linux下面设置DNS很是简单,只要把DNS地址写到一个配置文件/etc/resolv.conf中便可。

[root@localhost /]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29

这个数据是从网卡配置文件中来的 /etc/sysconfig/network-scripts/ifcfg-ens33

[root@localhost /]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost /]# ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
成功激活的链接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@localhost /]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29
nameserver 8.8.8.8

mark

但这只是临时的,也能够在vim /etc/resolv,conf 若是须要永久生效,仍是要在网卡配置文件中添加。

9.在Linux下还有一个特殊文件/etc/hosts也能解析域名,不过须要咱们在里面手动添加IP和域名这些内容,它的做业是临时解析某个域名,很是有用.

该文件内容以下:

[root@localhost /]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • vim 编辑该文件,增长一行192.168.72.150 www.qq123.com.保存文件后再ping一下www.qq123.com就会链接到192.168.72.150了。只能在本机上生效

mark

mark

10. /etc/hosts 的格式很简单,每一行做为一条记录,分红两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点须要你注意:

  • [ ] 一个IP后面能够跟多个域名,能够是几十个甚至上百个;
  • [ ] 每行只能有一个IP,也就是说一个域名不能对应多个IP;
  • [ ] 若是有多行中出现相同的域名(前面IP不同),会按最前面出现的记录来解析。

mark

10.12 Linux防火墙

1. SELinux,临时关闭为setenforce 0;

Selinux是Redhat/CentOS系统特有的安全机制。不过由于这个东西限制太多,配置也特别繁琐因此几乎没有人去真正应用它。因此装完系统,咱们通常都要把selinux关闭,以避免引发没必要要的麻烦。临时关闭selinux的方法为:

[root@localhost ~]# setenforce 0
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# getenforce
Disabled

获得的结果与咱们设想的不一样,是由于咱们在以前的课程中已经改变了,SELINUX=enforcing改为了SELINUX=disabled.

2.获取当前 SELinux 运行状态 getenforce 可能返回结果有三种:Enforcing、Permissive 和 Disabled。

Disabled 表明 SELinux 被禁用,Permissive 表明仅记录安全警告但不阻止 可疑行为,Enforcing 表明记录警告且阻止可疑行

  • vim /etc/selinux/config 下编辑,把它关闭,利于系统的使用,也不会用太大安全问题
[root@localhost ~]# vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled   //已经被关闭了,默认是enforencing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

3.netfilter,CentOS7之前版本使用的防火墙工具

iptables是管理防火墙的工具,CentOS7默认防火墙为firewalld。,以前版本使用的netfilter。即便是firewalld,一样也支持以前版本的命令用法,向下兼容。

4.netfilter才是防火墙;firewalld和iptables是两种不一样的防火墙管理工具,其底层都是iptables命令。

iptables和netfilter的关系: 这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。不少的知道iptables殊不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

我在网上看到的三者关系图: mark

5.关闭firewalld开启netfilter方法

systemctstop firewalld;

systemctl disable firewalled

yum install -y iptables-services

systemctl enable iptables

systemctl start iptables

systemctl disable firewalld //禁止firewalld服务开机启动

那么咱们先来用下以前的版本,关闭firewalld,开启iptables:

[root@localhost ~]# systemctl disable firewalld //禁止firewalld服务开机启动
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@localhost ~]# systemctl stop firewalld //关闭firewalld服务
[root@localhost ~]# yum install -y iptables-services //安装iptables-services,这样就可使用以前版本的iptables了.
[root@localhost ~]# systemctl enable iptables //让他开启服务
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@localhost ~]# systemctl start iptables //启动iptables服务
  • 完成这些步骤以后,咱们就可使用iptables了。示例以下:

6. iptables -nvL选项表示查看规则,示例中咱们看到防火墙规则保存在/etc/sysconfig/iptables中,也能够查看一下这个文件。

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  205 13528 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
   83  6783 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 114 packets, 13000 bytes)
 pkts bytes target     prot opt in     out     source               destination

上例中,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,因此须要使用service iptables save保存一下规则.

[root@localhost ~]# iptables -F;
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  肯定  ]

上例中咱们看到防火墙规则保存在/etc/sysconfig/iptables中,也能够查看一下这个文件。

10.13 netfilter5表5链介绍

1.netfilter五个表

filter:

这个表主要用于过滤包的,是系统预设的表,用的最多。内建三个链INPUT、OUTPUT以及FORWARD。INPUT做用于进入本机的包;OUTPUT做用于本机送出的包;FORWARD做用于那些跟本机无关的包。

nat:相似家里路由器,设备经过nat来上网

主要用处是网络地址转换,也有三个链。PREROUTING 链的做用是在包刚刚到达防火墙时改变它的目的地址,若是须要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙以前改变其源地址。该表用的很少,但有时候会用到。

mangle:

这个表主要是用于给数据包打标记,而后根据标记去操做哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,不然你就没有必要花费不少心思在它上面。

raw:

通常是为了避免再让iptables对数据包进行跟踪,提升性能。

security:

这个表用于强制访问控制(MAC)网络规则,CentOS6中是没有的

2.netfilter的5个链

PRERPUTING链:

数据包进去路由以前,做用是在包刚刚到达防火墙时改变它的目的地址,若是须要的话。

INPUT链:

经过路由后目的地为本机,做用于输入本机的数据包。

FORWARD链:

经过路由表后,目的地部位本机。做用于与本机无关的包。

OUTPUT链:

由本机产生,向外转发。做用与本机输出的数据包。

POSTROUTING链:

发送到网卡接口以前。在包离开防火墙以前改变其源地址。

表链的关系和做用能够理解为三个机器A\B\C之间,A和B有公网实现通信传输,B和C经过私网进行传输,为了能让A和C之间通讯,把B做为网络映射的过程.

3. iptables传输数据包的过程

mark

  • [ ] 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否须要转送出去。
  • [ ] 若是数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序能够发送数据包,这些数据包会通过OUTPUT链,而后到达POSTROUTING链输出。
  • [ ] 若是数据包是要转发出去的,且内核容许转发,数据包就会如图所示向右移动,通过FORWARD链,而后到达POSTROUTING链输出。

??? security表在centos6中并无,用于强制访问控制(MAC)的网络规则

参考文章 http://www.cnblogs.com/metoy/p/4320813.html

10.14 iptables语法

iptables是一个很是复杂和功能丰富的工具,因此它的语法也是颇有特色的。

1. 查看规则和清除规则 iptables -nvL

[root@localhost ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 23 packets, 3004 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 23 packets, 3004 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 120 packets, 8796 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 120 packets, 8796 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   180 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        
    0     0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
    0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24

2. -t选项后面跟表名,-nvL表示查看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。若是不加-t选项则打印filter表的相关信息,

以下所示

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  205 13528 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
   83  6783 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 114 packets, 13000 bytes)
 pkts bytes target     prot opt in     out     source               destination

上例中-nvL和-t filter打印的信息是同样的 关于清除规则的命令中,用的最多的就是下面两个:

3. #iptables -F;#iptables -Z;这里-F表示把全部规则的所有删除,若是不加-t指定表,默认只清除filter表的规则,-Z表示把包以及流量计数器置零.

  1. iptable -F 清空全部规则

4. service iptables save 保存规则

[root@localhost ~]# iptables -F; //表示把全部规则所有删除
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 593 packets, 45671 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 70 packets, 6796 bytes)
 pkts bytes target     prot opt in     out     source               destination

mark

  • iptables -t nat //-t指定表
  • iptables -Z 能够把计数器清零
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 1095 packets, 89419 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 149 packets, 14835 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

清零后:

mark

5. 增长/删除一条规则,运行一下命令: #iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP

mark

  • [ ] -A 表示增长一条规则,排队,只能在最后面
  • [ ] -I 表示插入一条规则,效果和-A同样,插队
  • [ ] -D 删除一条规则;
  • [ ] -s 后跟源地址;
  • [ ] -p 协议(tcp, udp, icmp);
  • [ ] --sport/--dport 和-p一块儿使用,后跟源端口/目标端口;
  • [ ] -d 后跟目的IP(主要针对内网或者外网);
  • [ ] -j 后跟动做(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即容许包)。
  • [ ] -i 表示指定网卡(不经常使用,可是偶尔能用到)

下面举例来理解这些概念:

6.iptables -I INPUT -s 1.1.1.1 -j DROP;iptables -D INPUT -s 1.1.1.1 -j DROP.-j 后跟动做(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即容许包)

[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP

上例中表示插入一条规则,把来自1.1.1.1的数据包丢掉,下例表示删除刚刚插入的规则

[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP

注意上述实例中,删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I和-D不同外,其余地方都同样.

7.iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP表示把来自2.2.2.2而且是TCP协议到本机80端口的数据包丢掉:注意,--dport/--sport必须和-p选项一块儿使用,不然会出错.

[root@localhost ~]# iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

注意,--dport/--sport必须和-p选项一块儿使用,不然会出错.

下例表示把发送到10.0.1.14的22端口的数据包丢掉:

[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP

7.iptables -nvL --line-numbers有时候服务器上的iptables过多了,想删除某一条规则,但又不容易掌握建立时的规则,其实有一种比较简单的方法,先查看iptables规则,示例命令以下:

[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 1662 packets, 124K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DROP       tcp  --  *      *       2.2.2.2              0.0.0.0/0            tcp dpt:80
2        0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
3        0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
4        0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
5        0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
3        0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
4        0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
5        0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 264 packets, 28000 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DROP       tcp  --  *      *       0.0.0.0/0            10.0.1.14            tcp dpt:22
2        0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

而后删除某一条规则,使用以下:

mark

8.下例表示把来自192.168.1.0/24这个网段且做用在eth0上的包放行:

[root@localhost ~]# #iptables -A INPUT -s 192.168.122.0/24 -i eth0 -j ACCEPT
[root@localhost ~]# iptables -nvL |grep '192.168.122.0/24'
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0

9.iptables -P OUTPUT DROP,这里对默认策略不能这样误操做,一旦误操做,只能在虚拟机上把这个包改为ACCEPT.iptables -P OUTPUT ACCEPT.

iptable语法总结:

1.语法:iptables(选项)(参数)

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:建立新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

2. iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动做

表名包括:

raw:高级功能,如:网址过滤。 mangle:数据包修改(QOS),用于实现服务质量。 net:地址转换,用于网关路由器。 filter:包过滤,用于防火墙规则。

规则链名包括:

INPUT链:处理输入数据包。 OUTPUT链:处理输出数据包。 PORWARD链:处理转发数据包。 PREROUTING链:用于目标地址转换(DNAT)。 POSTOUTING链:用于源地址转换(SNAT)。

动做包括:

accept:接收数据包。 DROP:丢弃数据包。 REDIRECT:重定向、映射、透明代理。 SNAT:源地址转换。 DNAT:目标地址转换。 MASQUERADE:IP假装(NAT),用于ADSL。 LOG:日志记录。

10.15 iptables filter表小案例

1.须要吧80端口、22端口和21端口的数据放行,但对22端口必须指定一段IP来放行。

vim /usr/local/sbin/iptables.sh
//输入一下脚步
#!/bin/bash
ipt="/usr/sbin/iptables"
// 用一个字符串来定义某个命令,这样易读。这里命令都是绝度路径俩表达
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
// Here Drop means throw away,and ACCEPT means allow.Drop丢弃的包,ACCEPT是接受该包。
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
//增长的规则,-m state指定了状态,--state里面是三次握手是的数据包状态ESTABLISHED表示创建了链接,RELATED额外的链接.为了保证通信正常    
$ipt -A INPUT -s 192.168.72.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

2.执行上述脚本,执行完成后,重启service iptables restart

[root@localhost ~]# sh /usr/local/sbin/iptables.sh
[root@localhost ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   44  3052 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.72.0/24      0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 26 packets, 2537 bytes)
 pkts bytes target     prot opt in     out     source               destination
  • 执行完成后,重启service iptables restart
[root@localhost ~]# service iptables restart
Redirecting to /bin/systemctl restart  iptables.service

3. icmp示例:iptables -I INPUT -p icmp --icmp-type 8 -j DROP//不容许接受icmp数据包到本地

3.1 ping 外网是正常的,外部ping虚拟机没法链接 mark

mark

4.扩展知识:

不容许发送未知数据包到本地

iptables -A INPUT -p all -m state --state INVALID -j DROP

容许已经容许过的链接和被动请求数据包发送到本地

iptables -A INPUT all -m state --state ESTABLISHED,RELATED -j ACCEPT

检查该链接中第一个数据包,并检查该数据包是否包含syn标记,符合两项条件才容许进入。

iptables -A INPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT

使用Multiport模块一次添加多个端口

iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 21,22,23,24,25 -j ACCEPT

检查全部 TCP-Flags,但只有syn及fin两个标记同时为1时,数据包才会被筛选出来

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

检查全部 TCP-Flags中syn及fin两个标记同时为1时,数据包才会被筛选出来

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

数据批量添加

cat /root/mac_list.txt | while read MAC
do
MAC=$( echo $MAC | awk '{print $1}' )

iptables -t filter -A FORWARD -i eth1 -o eth0 -m mac --mac-source $MAC -j ACCEPT

done

mangle表用法 MRAK模块匹配(单数据包)
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 80
iptables -A FORWARD -p all -m mark --mark 80 -j DROP

管理用户或组模块

iptables -A OUTPUT -p tcp -m owner --uid--owner tom --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp -m owner --uid--owner tom --dport 53 -j ACCEPT
iptables -A OUTPUT -p all -m owner --uid--owner tom -j DROP

使用iprange模块添加ip范围

iptables -A INPUT -m iprange --src-range 192.168.0.2-192.168.0.61 -j DROP
iptables -A INPUT -m iprange --dst-range 192.168.0.2-192.168.0.61 -j DROP

ttl值匹配模块

iptables -A INPUT -m ttl --ttl-eq 64 -j REJECT
--ttl-eq 等于
--ttl-lt 小于
--ttl-gt 大于

数据包状态 发送 接受

TCP NEW ESTABLISHED
UDP NEW ESTABLISHED
ICMP NEW RELATED

IPSEC SPI 值控制模块 iptables -A FORWARD -p ah -m ah --ahspi 300 -j ACCEPT iptables -A FORWARD -p esp -m esp --espspi 200 -j ACCEPT

相关文章
相关标签/搜索