[toc]html
擴展(selinux瞭解便可)linux
2.selinux pdf電子書 http://pan.baidu.com/s/1jGGdExK編程
若是系統沒有ifconfig命令,可使用yum install -y net-tools) Linux上有多個網卡,而只想重啓某一個網卡的話,可使用這個命令:vim
兩個命令能夠一塊兒執行windows
[root@localhost ~]# ifdown ens33 //即停用網卡 [root@localhost ~]# ifup ens33 //從新啓動 ifdown ens33 && ifup ens33 兩個命令能夠一塊兒執行,表示重啓網卡
須要注意的是,若是咱們遠程登陸服務器,當使用ifdown ens33這個命令的時候,頗有可能後面的命令ifup eth33不會被運行,這樣致使咱們斷網而沒法鏈接服務器,因此請儘可能使用 service network restart 這個命令來重啓網卡。centos
ifdown ens33 && ifup ens33 //重啓網卡
從上面能夠看到,多了一個ens33:0虛擬網卡 而且在windows下是能夠ping通的
安全
示例命令以下:bash
[root@localhost network-scripts]# mii-tool ens33 ens33: negotiated 1000baseT-FD flow-control, link ok
只要看到 「link ok」 就說明網卡爲鏈接狀態,若是顯示 「no link」 說明網卡壞掉了或者沒有鏈接網線。 另外還有一個命令也能夠查看網卡狀態:服務器
當裝完系統後,默認主機名爲localhost,使用hostname就能夠知道你的linux的主機名:網絡
[root@localhost ~]# hostname localhost.localdomain
使用hostname修改主機名字
[root@localhost /]# hostname xavi [root@localhost /]# hostname xavi
[root@localhost ~]# hostnamectl set-hostname zlinux [root@localhost ~]# hostname xavilinux [root@localhost ~]# bash //打開子shel即bashl就看到已經修改好了,重啓也能夠 [root@xavilinux ~]#
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
但這只是臨時的,也能夠在vim /etc/resolv,conf 若是須要永久生效,仍是要在網卡配置文件中添加。
該文件內容以下:
[root@localhost /]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
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.
Disabled 表明 SELinux 被禁用,Permissive 表明僅記錄安全警告但不阻止 可疑行爲,Enforcing 表明記錄警告且阻止可疑行
[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
iptables是管理防火牆的工具,CentOS7默認防火牆爲firewalld。,以前版本使用的netfilter。即便是firewalld,一樣也支持以前版本的命令用法,向下兼容。
iptables和netfilter的關係: 這是第一個要說的地方,Iptables和netfilter的關係是一個很容易讓人搞不清的問題。不少的知道iptables殊不知道 netfilter。其實iptables只是Linux防火牆的管理工具而已,位於/sbin/iptables。真正實現防火牆功能的是 netfilter,它是Linux內核中實現包過濾的內部結構。
我在網上看到的三者關係圖:
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服務
[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中,也能夠查看一下這個文件。
這個表主要用於過濾包的,是系統預設的表,用的最多。內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT做用於進入本機的包;OUTPUT做用於本機送出的包;FORWARD做用於那些跟本機無關的包。
主要用處是網絡地址轉換,也有三個鏈。PREROUTING 鏈的做用是在包剛剛到達防火牆時改變它的目的地址,若是須要的話。OUTPUT鏈改變本地產生的包的目的地址。POSTROUTING鏈在包就要離開防火牆以前改變其源地址。該表用的很少,但有時候會用到。
這個表主要是用於給數據包打標記,而後根據標記去操做哪些包。這個表幾乎不怎麼用。除非你想成爲一個高級網絡工程師,不然你就沒有必要花費不少心思在它上面。
通常是爲了避免再讓iptables對數據包進行跟蹤,提升性能。
這個表用於強制訪問控制(MAC)網絡規則,CentOS6中是沒有的
數據包進去路由以前,做用是在包剛剛到達防火牆時改變它的目的地址,若是須要的話。
經過路由後目的地爲本機,做用於輸入本機的數據包。
經過路由表後,目的地部位本機。做用於與本機無關的包。
由本機產生,向外轉發。做用與本機輸出的數據包。
發送到網卡接口以前。在包離開防火牆以前改變其源地址。
錶鏈的關係和做用能夠理解爲三個機器A\B\C之間,A和B有公網實現通信傳輸,B和C經過私網進行傳輸,爲了能讓A和C之間通訊,把B做爲網絡映射的過程.
??? security表在centos6中並無,用於強制訪問控制(MAC)的網絡規則
參考文章 http://www.cnblogs.com/metoy/p/4320813.html
iptables是一個很是複雜和功能豐富的工具,因此它的語法也是頗有特色的。
[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
以下所示
[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打印的信息是同樣的 關於清除規則的命令中,用的最多的就是下面兩個:
[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
[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
清零後:
下面舉例來理解這些概念:
[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不同外,其餘地方都同樣.
[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
[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
而後刪除某一條規則,使用以下:
[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
-t<表>:指定要操縱的表; -A:向規則鏈中添加條目; -D:從規則鏈中刪除條目; -i:向規則鏈中插入條目; -R:替換規則鏈中的條目; -L:顯示規則鏈中已有的條目; -F:清楚規則鏈中已有的條目; -Z:清空規則鏈中的數據包計算器和字節計數器; -N:建立新的用戶自定義規則鏈; -P:定義規則鏈中的默認目標; -h:顯示幫助信息; -p:指定要匹配的數據包協議類型; -s:指定要匹配的數據包源ip地址; -j<目標>:指定要跳轉的目標; -i<網絡接口>:指定數據包進入本機的網絡接口; -o<網絡接口>:指定數據包要離開本機所使用的網絡接口。
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:日誌記錄。
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
[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
[root@localhost ~]# service iptables restart Redirecting to /bin/systemctl restart iptables.service
3.1 ping 外網是正常的,外部ping虛擬機沒法鏈接
iptables -A INPUT -p all -m state --state INVALID -j DROP
iptables -A INPUT all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 21,22,23,24,25 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
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
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
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