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

相關文章
相關標籤/搜索