Linux - iptables

防火牆 iptables :

關閉兩項功能:
 selinux ,生產中也一般關閉,也可以做ids***檢測
 iptables ,生產中內網關閉,外網打開,大併發情況下需要關閉,否則影響性能
 
 安全優化:
 
 1. 儘量不要給服務器配置外網ip,可以通過代理轉發。
 
 
 Netfilters/iptables 是開源的基於包過濾的防火牆工具,主要工作在OSI七層模型的2 ,3,4層,如果編譯內核的話,iptables也支持7層控制(squid + iptables)。
 
 Nginx負載均衡:
 四層負載均衡: IP + 端口的負載
 七層負載均衡: 基於URL等應用層信息的負載均衡
 二層負載 : 基於MAC地址
 三層負載均衡: 基於IP
 
 
iptables涉及的名詞 :
  容器 : 用於形容包含與被包含的關係
  Netfilter : 是表的容器,即是說iptables或者netfilter中包含的是各個表(filter表,NAT表,MANGLE表,RAW表)
  iptables的表又是鏈的容器

  鏈 : INOUT , OUTPUT , FORWARD(轉發) ,  PREROUTING(預路由,進來之前路由) , POSTROUTING 
 
  鏈式規則的容器 
  
  規則 : 一條條過濾的語句 
  
  表與鏈之間關係 :
  
   filter表包含的鏈有  :  INPUT , OUTPUT , FORWARD , filter表主要與主機自身相關,是默認的表,
   nat表包含的鏈有  : OUTPUT , PREROUTING(發生在路由判斷之前,主要作用是修改數據包的目標地址及端口,外網映射內網) , POSTROUTING(改變數據包的源地址,源端口,內網映射外網 如共享上網) 
   mangle表包含所有的鏈  。
 
查看iptables規則  :  iptables  -L -n  或  iptables -L -n --line-numbers  (會給規則顯示序號,方便刪除)

iptables  -V  : 查看版本信息
iptables -h : 查看幫助信息

啓動iptables :
/etc/iinit.d/iptables start 

iptables -F : 清除所有規則,除了默認的
iptables -X : 清除用戶自定義的鏈
iptables -Z : 鏈的計數器清零 

注意  : 使用iptables所做的操作屬於臨時生效,重啓iptables或者主機就沒效果了
demo :
1. 封端口 
  找出ssh端口  : netstat -lntup |  grep ssh  等價於命令  ss -lntup | grep ssh         結果爲  22 
  
  語法  :  iptables  -t 表明  -A|-D   鏈   具體規則  處理選項(-j)(DROP | REJECT | ACCEPT)
  然後禁用  :   iptables -t  filter  -A  INPUT -p tcp  --dport 22  -j DROP
  
  恢復 : -F 參數刪除所有 ,有點暴力
  通過序號刪除 :  iptables  -D  INPUT  規則序號 
  
  注意: 封ip時,需要使用-i參數添加規則到鏈首,-a 在鏈尾,可能不起作用
  
 2. 禁止10.0.0.0網段連接或者封IP
    iptables -t filter  -A  INPUT  -i eth0  -s 10.0.0.0/24  -j DROP  # -i 表示進入的接口   -s 是源地址(可以是ip或者網段)  // 效果測試  ping不通
	
	可以禁止別人而放行自己 : 利用感嘆號 ,即取非運算,感嘆號在 -s 前邊或者後邊與os版本有關   ,效果測試: 自己可以ping通自己,但別人ping不通 
	
3. 封端口段
   iptables  -A INPUT  -p tcp  --sport  22:88    # --sport 源端口  	
   或
    iptables  -A INPUT  -p tcp  -m mutiport  -dport 21,22,23,24  
	
匹配製定的網絡接口:
iptables -A INPUT -i    eth0   # 從eth0 進入的  
iptables -A OUTPUT -o    eth0    #  從 eth0出去的

配置一個企業防火牆 :
iptables -F
iptables -X
iptables -Z
iptables -A  INPUT  -p tcp  --dport 22  -s 10.0.0.0/24  -j ACCEPT    #  允許企業內網主機連接22端口 ssh
iptables -A INPUT -i lo  -j ACCEPT   # 允許從本地迴路進入
iptables -A INPUT -o lo  -j ACCEPT   
iptables  -A  OUTPUT  -o lo  -j ACCEPT   # 允許從本地迴路出去

默認規則: -P參數  大寫P
iptables  -P  INPUT DROP  

生產操作  :
 編輯文件 :  /etc/sysconfig/iptables  
 
4、使用linux做網關
					
	原理: 利用iptable的NAT表的POSTROUTING鏈

	服務器網關需具備的條件:
	a. 物理條件  具備雙網卡,建議eth0 外網(10.0.0.19 ,GW 10.0.0.254) ,eth1 內網(192.168.1.19,內網卡不配置網關)
	b. 內核文件/etc/sysctl.conf 開啓轉發功能 , net.ipv4.ip_forward=1  執行  sysctl -p 使修改生效
	c. iptables的filter表的FORWARD允許轉發 :  intables -P  FORWARD ACCEPT  
  加載iptables內核模塊 ,並放入rc.local :
    lsmod | egrep ^ip :查看是否有相關模塊,如果沒有則加載下面的模塊
  載入內核模塊 :
  modprobe  iptables
  modprobe iptable_filter
  modprobe iptable_nat 
  modprobe ip_conntrack
  modprobe ip_conntrack_ftp
  modprobe ip_nat_ftp
  modprobe ipt_state
 
局域網NAT共享上網兩條命令 :
法1 : 適合有固定外網地址的
   iptables -t nat -A POSTROUTING  -s 192.168.1.0/24  -o eth0 -j SNAT --to-source 10.0.0.19   # 將出去的數據包的源地址改爲外網地址10.0.0.19
   tips :  -s 192.168.1.0/24 辦公室或IDC內網網段
           -o eth0  爲網關的外網卡接口
		   -j SNAT --to-source 10.0.0.19  是網關的外網卡的IP地址
法2 : 適合外網地址變化的(如ASDL)
   iptables -t nat -A  POSTROUTING  -s 192.168.1.0/24  -j MASQUERADE
   

外網地址映射到內網地址:
  iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp  --dport 80 -j  DNAT  --to-destination  192.168.1.17:9000 
  
IP轉IP一對一轉發  :
 iptables -t nat PREROUTING -A  -d 10.0.0.7 -j DNAT --to-destination 192.168.19.5
 
對於企業上網人數較多,同時有多個外網IP時,可以將ip按段分配:映射多個外網Ip地址上網
iptables -t nat POSTROUTING -A  -s 10.0.0.0/255.255.240.0  -j SNAT --to-source 124.42.60.11-124.42.60.16
iptables -t nat POSTROUTING -A  -s 172.16.1.0/255.255.255.0  -j SNAT --to-source 124.42.60.103-124.42.60.106


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