Linux系統管理技巧3 原

[toc]

Linux系統管理技巧3

擴展(selinux瞭解即可)

  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上有多個網卡,而只想重啓某一個網卡的話,可以使用這個命令:

2.ifdown ens33;ifup ens33對網卡的操作ifdown ens33 && ifup ens33

兩個命令可以一起執行

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

[root@localhost ~]# ifup ens33
//重新啓動

ifdown ens33 && ifup ens33
兩個命令可以一起執行,表示重啓網卡

mark

需要注意的是,如果我們遠程登錄服務器,當使用ifdown ens33這個命令的時候,很有可能後面的命令ifup eth33不會被運行,這樣導致我們斷網而無法連接服務器,所以請儘量使用 service network restart 這個命令來重啓網卡。

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

示例命令如下:

  • 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章