目錄html
什麼是交換?什麼是路由?什麼是路由表?node
交換是指同網絡訪問(兩臺機器連在同一個交換機上,配置同網段的不一樣IP地址就能夠直接通信)web
路由就是跨網絡訪問(路徑選擇)shell
路由表是記錄路由信息的表vim
//route命令用來查看和設置路由表信息 [root@ceshi ~]# route -n Kernel IP routing table 目標網絡 網關 子網掩碼 路由標誌 網卡 Destination Gateway Genmask Flags Metric Ref Use Iface 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0 0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0 U:up,啓動狀態 UG:該網關爲路由器
討論1: 按上圖中的路由表來看,若是ping一個公網IP(如ping 14.200.151.38),應該怎麼走? 1)先看目標IP是否爲本機IP,若是是,則直接訪問本地;若是不是,則找路由表裏是否有想訪問的網段 2)若是路由表有則從這個路由條目後面指定的網卡出去;若是路由表裏沒有你要訪問的網段,則會找默認路由(也就是網關) 討論2: 按上面的路由表來看,若是ping一個局域網IP爲10.1.1.10,怎麼走? 直接走本地路由從eth0網卡出去 討論3: 如何加網關和刪除網關,加網關有什麼要求? route add default gw x.x.x.x 臨時添加網關,立刻生效 route del default gw x.x.x.x 臨時刪除網關,立刻生效 永久修改網關: vim /etc/sysconfig/network-scripts/ifcfg-eth0 GATEWAY=X.X.X.X 或者 vim /etc/rc.local .. route add default gw x.x.x.x 注意事項: 1.加網關只能加你已經有的路由網段裏的一個IP才行(此IP不必定存在) 2.加網關能夠不用指定子網掩碼(由於是已有的一個網段的IP,全部掩碼已經確認了) 討論4: 一個Linux服務器上能有幾個有效網關? 準確來講,一個路由表上能夠加多個網關,但只有一個生效 討論5: 一臺Linux上若是有雙物理網卡,請問可不能夠兩個網卡配置同網段的不一樣IP呢? eth0 10.1.1.1/24 eth1 10.1.1.2/24 若是兩個網卡同網段,則會有下面兩條路由 10.1.1.0 eth0 10.1.1.0 eth1 結果: 它會實現從兩張網卡進來的包,卻從一張網卡出去,問題將產生了。假設eth0網卡有問題,路由表咯匹配到第一條後,依然走eth0,不走eth1 解決方法(好比多路由表或者雙網卡綁定)
route -n 查看路由,顯示IP,不解析 route del default 刪除默認路由 route add default gw 192.168.1.110 添加一個默認網關,把全部不知道的網絡交給網關來轉發 route add -net 192.168.2.0/24 dev eth0 對一個網絡添加一個新的路由(另外一個網段) route add -host 192.168.3.1 gw 192.168.1.110 對一個具體的IP添加路由
環境準備: node1:10.1.1.1和192.168.0.1 做爲網關服務器,開啓路由轉發功能/proc/sys/net/ipv4/ip_forward node2:172.16.0.254 node3:10.12.0.254 要求: 實現不一樣網絡(10.12.0.0/24和172.16.0.254/24)之間的互通,使用第三方主機node1做爲路由進行轉發 具體步驟
思考1:服務如何進行網絡訪問控制?安全
配置文件、xinetd、tcp_wrappers服務器
思考2:系統如何進行訪問控制?網絡
防火牆app
做用:ssh
防火牆做爲內部網和外部網之間的一種訪問控制設備,經常安裝在內部網絡和外部網絡的邊界上。防火牆具備很好的網絡安全保護做用,入侵者必須首先穿過防火牆的安全防線,才能接觸目標計算機。能夠將防火牆配置成許多不一樣保護級別。高級別的保護可能會禁止一些服務,如視頻流等,但至少這是你本身的保護選擇。 主要做用: 一、Internet防火牆能夠防止Internet上的危險傳播到網絡內部 二、能強化安全策略 三、能有效記錄Internet上的活動
總結:
四張表
[root@ceshi ~]# iptables -t filter -L
五條鏈
[root@ceshi ~]# iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination
總結:iptables是由表組成的,表是鏈的集合,鏈是規則的集合
iptables [-t 表名] 命令選項 [鏈名] [規則號碼] [條件匹配] [-j 目標動做]
小寫 大寫 大寫 小寫 大寫
說明:
表名和鏈名:用於指定iptables命令所操做的表和鏈
命令選項:用於指定管理iptables規則的方式(好比:插入、增長、刪除、查看等)
規則號碼:用於指定規則的編號
條件匹配:用於指定對符合什麼樣條件的數據包進行處理(好比:什麼協議、出入網卡等)
目標地址:用於指定數據包的處理方式(好比:容許處理、拒絕、丟棄等)
iptables -L iptables -t filter -L iptables -t nat -L iptables -t raw -L iptables -t mangle -L
iptables 的啓動和關閉及保存
/etc/rc.d/init.d/iptables //腳本文件 軟鏈接 /etc/init.d/iptables //臨時中止|啓動|查看狀態|從新加載|從新啓動 service iptables stop|start|status|reload|restart //開機是否自啓動 chkconfig iptables off|on //永久保存規則 vim /etc/sysconfig/iptables ...
iptables 經常使用的命令選項
-L 查看 -A 追加,放置在最後一條 -I 插入,默認插入成第一條 -D 刪除 -F 清空flush -P 設置默認策略policy 處理動做: filter表: -j ACCEPT 容許 -j DROP 丟棄,沒有任何提示信息 -j REJECT 拒絕,有提示信息 -j LOG 寫日誌 /var/log/messages 而後將數據包傳遞給下一條規則 nat表: -j SNAT 源地址轉換 POSTROUTING -j DNAT 目標地址轉換 PREROUTING
iptables -t filter -A INPUT -j DROP 添加規則,丟棄全部進來的數據包 iptables -t filter -A input -j ACCEPT 添加規則,容許全部進來的數據包 //指定位置插入規則,容許全部進來的數據包第1條規則 iptables -t filter -I INPUT 1 -j ACCEPT iptables -t filter -A OUTPUT -j DROP 添加規則,丟棄全部出去的數據包 //指定位置插入規則,拒絕全部進來的數據包爲第3條規則 iptables -t filter -I INPUT 3 -j REJECT iptables -t filter -L --line-numbers 查看規則編號 iptables -t filter -R INPUT 1 -j ACCEPT 覆蓋已有規則 iptables -t filter -D INPUT 3 刪除INPUT鏈的第3條規則 iptables -t filter -F 清空filter表的全部規則 iptables -A INPUT -j LOG 增長規則,先寫日誌,而後將數據包傳遞給下一條規則 iptables -I INPUT 2 -j DROP iptables -t filter -P INPUT DROP 設置鏈上的默認規則 iptables -D INPUT 1 說明:若是不指定表名,默認操做filter表
匹配的條件: -s 192.168.134.0/24 源地址 -d 192.168.134.1 目標地址 -p tcp|udp|icmp 協議 -i lo input 從lo接口進入的數據包 -o eth0 output 從eth0出去的數據包 -p tcp --dport 80 目標端口是80,必須和-p tcp|udp連用 -p udp --dport 53 目標端口是53/udp
iptables -t filter -A INPUT -s 10.1.1.3 -j ACCEPT 容許源地址爲10.1.1.3進入 iptables -t filter -A INPUT ! -s 10.1.1.3 -j ACCEPT 不容許源地址爲10.1.1.3進入 iptables -t filter -A IPPUT -s 10.1.1.3 -j DROP 拒絕源地址10.1.1.3進入 iptables -t filter -A OUTPUT -d 10.1.1.3 -j DROP 丟棄到達目標地址爲10.1.1.3的包 iptables -t filter -A OUTPUT ! -d 10.1.1.3 -j ACCEPT 丟棄到達目標地址爲10.1.1.3的包 iptables -t filter -A INPUT -d 10.1.1.2 -j DROP 丟棄全部到目標地址爲10.1.1.2的包 iptables -t filter -A OUTPUT -s 10.1.1.2 -j ACCEPT 源地址爲10.1.1.2出去的包所有容許
iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP 拒絕ssh iptables -A INPUT -s 10.1.1.3 -p icmp -j DROP iptables -A INPUT -s 10.1.1.3 -p tcp -j DROP iptables -A INPUT -s 10.1.1.3 ! -p tcp -j DROP icmp協議中: icmp-type 8 類型爲8表明請求回顯,ping 請求 icmp-type 0 類型爲0表明回顯應答,ping 應答 需求1:只容許本身ping通別人,不容許別人ping通本身(在policy DROP前提下加規則) iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT iptables -t filter -A INPUT -P icmp --icmp-type 0 -j ACCEPT 需求2:(input和output都是DROP狀況下) 只容許本身和10.1.1.2相互ping通,其餘人不能ping通本身,可是容許本身ping通別人 iptables -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:21 -j ACCEPT iptables -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT echo 0> /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1> /proc/sys/net/ipv4/icmp_echo_ignore_all 練習: 1.禁止你的另一臺服務器訪問你的80端口,在INPUT和OUTPUT iptables -A INPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP iptables -A OUTPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP 2.只容許別人訪問你的80端口 iptables -A INPUT ! -s 10.1.1.1 -p tcp --dport 80 -j ACCEPT 3.拒絕全部人登陸你的sshd服務 iptables -A INPUT -p tcp --dport 22 -j DROP 4.只容許你能夠ping通另一臺主機,可是不容許它ping通你 INPUT 默認策略:DROP OUTPUT :DROP iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -d 10.1.1.2 -j ACCEPT iptables -t filter -A INPUT -p icmp --icmp-type 0 -s 10.1.1.2 -j ACCEPT
1.5 iptables 內置模塊(擴展)
-m 參數+<模塊名> 1.multiport 多端口 目的:指定多個不連續的端口,減小iptables的條目,達到優化效果 用法: iptables -m multiport --help multiport match options: [!] --source-ports port[,port:port,port...] --sports ... match source port(s) [!] --destination-ports port[,port:port,port...] --dports ... match destination port(s) [!] --ports port[,port:port,port] match both source and destination po 示例: iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT 等於: iptables -t filter -A INPUT -s 10.1.1.2 -p tcp -m multiport --dports 22,80 -j ACCEPT 2.iprange ip範圍 用法: iptables -m iprange --help iprange match options: [!] --src-range ip[-ip] Match source IP in the specified range [!] --dst-range ip[-ip] Match destination IP in the specified range iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -j ACCEPT 3.state 鏈接狀態 目的:根據鏈接請求的狀態進行數據過濾 狀態值: NEW 首次訪問,好比:打開網站看到首頁文件,後續點擊叫後續操做 ESTABLISHED 鏈接完成 1)某服務的後續全部訪問 2)服務器的全部響應 RELATED: 相關聯的鏈接,好比ftp鏈接,命令鏈接成功後,創建數據鏈接 INVALID: 無效鏈接 示例: iptables -A OUTPUT -p tcp -m multiport --sports 20:22,80,137,445 -j ACCEPT 等於: iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT 例子:ftp開啓防火牆下被動模式 1.ftp服務,須要固定被動模式下的端口 vim /etc/vsftpd/vsftpd.conf 增長如下內容 pasv_min_port=2000 pasv_max_port=3000 重啓服務 service vsftpd restart iptables -t filter -A INPUT -p tcp --dport 2000:3000 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --sport 2000:3000 -j ACCEPT iptables -t filter -A INPUT -m multiport -p tcp --dports 20:21,2000:3000 -j ACCEPT iptables -A INPUT -d 10.1.1.1 -s 10.1.1.3 -p tcp --sport 2000:3000 -j ACCEPT 2.使用鏈接追蹤模式(擴展)(INPUT和OUTPUT都是DROP下) iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT 作完這步後只能訪問,不能查看數據 這兩個規則至關於iptables -I INPUT -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT modprobe nf_conntrack_ftp //加載鏈接追蹤模塊(臨時) vim /etc/sysconfig/iptables-config //開機自動加載 IPTABLES_MODULES="nf_conntrack_ftp" 作完這兩步就能查看數據 nf_conntrack_ftp:針對數據端口鏈接時,將三次握手第一次的狀態由NEW識別成RELATED iptables-save 注意:修改完配置文件須要重啓防火牆 service iptables restart 常見協議的端口 /etc/services grep ^http /etc/services 服務 協議 端口/傳輸協議 httpd http 80/tcp
環境: server 10.1.1.1 部署了ftp,http,samba,ssh client1:10.1.1.2 client2:10.1.1.3 要求: 1.server端根據權限最小化原則,INPUT的默認規則改成DROP 2.client2能夠訪問server端的全部服務 3.client1 只能訪問server端的ftp服務和ssh服務 4.IP地址爲10.1.1.100到10.1.1.200之間的人只能訪問server端的samba服務
具體步驟:
首先,server端部署相關服務並啓動 //查看相應的軟件包是否成功安裝,沒安裝請安裝 rpm -q vsftpd httpd samba openssh-server
功能:地址轉換(源地址和目標地址) 三條鏈: PREROUTING POSTROUTING OUTPUT 處理動做: nat表: -j SNAT 源地址轉換 POSTROUTING -j DNAT 目標地址轉換 PREROUTING -j MASQERRADE 地址假裝
環境: client:10.1.1.2 nat-server:10.1.1.1和2.2.2.1 web-server:2.2.2.2 需求: 客戶端client是私有IP,想要訪問互聯網中的web服務 步驟: 1.client端:設置本身的默認路由(網關)指向nat-server服務器 (把‘中間人10.1.1.1’的IP添加網絡做爲網關,此處已有,故不添加net,只加gw) route add default gw 10.1.1.1 route -n 2.nat-server端:開啓路由轉發功能並添加防火牆規則 (路由後POSTROUTING) 還原 iptables -F 包括配置文件/etc/sysconfig/iptables也要還原(此處注意,提早備份) echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1 3.web-servcer端:搭建web服務 echo "this is snat test page" > /var/www/html/index.html service httpd restart netstat -nltp|grep 80 route -n Destination Gateway Genmask Flags Metric Ref Use Iface 2.2.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 4.client端測試驗證:client10.1.1.2是否能夠訪問web-server端2.2.2.2的web服務 wget http://2.2.2.2 能夠訪問 1.家裏實現上網和上面有什麼不一樣? iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE(公網地址變的狀況下) 2.地址轉換是在NAT表上進行,若是在nat-server端的filter表的FORWARD鏈拒絕轉發,是否能夠正常訪問? 能夠,由於是路由後POSTROUTING轉換
路由前 web-server:10.1.1.3 nat-server:10.1.1.1和2.2.2.1(兩個網卡,網絡適配器增長,配置好eth1) client:2.2.2.2 需求:公網用戶client訪問私網服務器提供的WEB服務 步驟: 1.web-server端:10.1.1.3上搭建web服務 echo "this is dnat test page">/var/www/html/index.html 2.nat-server端:10.1.1.一、2.2.2.1端開啓路由轉發功能並添加DNAT規則 echo 1 > /proc/sys/net/ipv4/ip_forward route -n 查看路由表信息,確認有到達目標的網關 (默認ACCEPT) iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3 3.client端:2.2.2.2客戶端測試驗證 elinks --dump http://2.2.2.1 this is dnat test page 網關必定要指定‘中間人’的IP網關