iptables 用法複習html
#!/bin/bash ipt="/user/sbin/iptables" $ipt -F // 清空規則 $ipt -P INPUT DROP // $ipt -P OUTPUT ACCEPT // $ipt -P FORWARD ACCEPT // $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT //放行22端口 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT // 放行80端口 $ipt -A INPUT -p tcp --dport 21 -j ACCEPT //
Iptables參數 -m state --state <狀態>linux
Iptables參數 -m state --state <狀態> 有數種狀態,狀態有: ▪ INVALID:無效的封包,例如數據破損的封包狀態 ▪ ESTABLISHED:已經聯機成功的聯機狀態; ▪ NEW:想要新創建聯機的封包狀態; ▪ RELATED:這個最經常使用!表示這個封包是與咱們主機發送出去的封包有關, 多是響應封包或者是聯機成功以後的傳送封包!這個狀態很常被設定, 由於設定了他以後,只要將來由本機發送出去的封包, 即便咱們沒有設定封包的 INPUT 規則,該有關的封包仍是能夠進入咱們主機, 能夠簡化至關多的設定規則。
執行腳本,查看規則已經生效,但爲寫入配置文件,service iptables restart恢復原規則web
icmp 示例:禁掉ping本地,但能夠ping通外網安全
iptables -I INPUT -p icmp --icmp -type 8 -j DROPbash
先在虛擬機中克隆一個linux系統b網絡
在系統a中添加網卡,默認選項,完成less
添加lan區段,並選擇添加的區段tcp
給系統b也添加一個網卡,選擇上一步添加的區段,同時取消鏈接b的第一個網卡網站
啓動a系統spa
設置新添加網卡ip
ifconfig ens37 192.168.99.1/24 // ip隨意指定
啓動b系統也設置網卡ip,要和a的網卡在一個網段
ifconfig ens37 192.168.99.99/24 // ip隨意指定
a系統ping b系統,成功聯通。
[root@glinux-01 ~]# ping 192.168.99.99 PING 192.168.99.99 (192.168.99.99) 56(84) bytes of data. 64 bytes from 192.168.99.99: icmp_seq=1 ttl=64 time=0.831 ms 64 bytes from 192.168.99.99: icmp_seq=2 ttl=64 time=0.424 ms 64 bytes from 192.168.99.99: icmp_seq=3 ttl=64 time=1.80 ms
a機器打開路由轉發
運行 echo "1"> /proc/sys/net/ipv4/ip_forward
出於安全考慮,Linux系統默認是禁止數據包轉發的。所謂轉發即當主機擁有多於一塊的網卡時, 其中一塊收到數據包,根據數據包的目的ip地址將包發往本機另外一網卡,該網卡根據路由表繼續發送數據包。 這一般就是路由器所要實現的功能。 配置Linux系統的ip轉發功能,首先保證硬件連通,而後打開系統的轉發功能 less /proc/sys/net/ipv4/ip_forward,該文件內容爲0,表示禁止數據包轉發,1表示容許,將其修改成1。
a機器添加規則
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens33 -j MASQUERADE 讓192.168.99.0這個網段能夠上網 MASQUERADE,地址假裝
b機器設置網關
route -n 查看網關
route add default gw 192.168.99.1(a機器的ip)
ifdown ens33 關掉ens33網卡
b機器ping a機器ens33的網卡,成功
修改b機器dns
vi /etc/resolv.conf
ping通dns
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 192.168.244.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (將ip x.244.128:1122目的網絡地址轉換 x.192.168.100.100:22)
iptables -t nat -A POSTROUTING -s 192.168.99.99 -j SNAT --to 192.168.244.128
(源網絡地址192.168.99.99轉換成192.168.244.128)
nat dnat snat分別是什麼?
http://ask.apelearn.com/question/7255
https://zhidao.baidu.com/question/335463920.html
NAT(Network Address Translation,網絡地址轉換)是將IP 數據包頭中的IP 地址轉換爲另外一個IP 地址的過程。在實際應用中,NAT 主要用於實現私有網絡訪問公共網絡的功能。這種經過使用少許的公有IP 地址表明較多的私有IP 地址的方式,將有助於減緩可用IP地址空間的枯竭 DNAT Destination Network Address Translation 目的網絡地址轉換, SNAT Source Network Address Translation 源網絡地址轉換,其做用是將ip數據包的源地址轉換成另一個地址,可能有人以爲奇怪,好好的爲何要進行ip地址轉換啊,爲了弄懂這個問題,咱們要看一下局域網用戶上公網的原理,假設內網主機A(192.168.2.8)要和外網主機B(61.132.62.131)通訊,A向B發出IP數據包,若是沒有SNAT對A主機進行源地址轉換,A與B主機的通信會不正常中斷,由於當路由器將內網的數據包發到公網IP後,公網IP會給你的私網IP回數據包,這時,公網IP根本就沒法知道你的私網IP應該如何走了。因此問它上一級路由器,固然這是確定的,由於從公網上根本就沒法看到私網IP,所以你沒法給他通訊。爲了實現數據包的正確發送及返回,網關必須將A的址轉換爲一個合法的公網地址,同時爲了之後B主機能將數據包發送給A,這個合法的公網地址必須是網關的外網地址,若是是其它公網地址的話,B會把數據包發送到其它網關,而不是A主機所在的網關,A將收不到B發過來的數據包,因此內網主機要上公網就必需要有合法的公網地址,而獲得這個地址的方法就是讓網關進行SNAT(源地址轉換),將內網地址轉換成公網址(通常是網關的外部地址),因此你們常常會看到爲了讓內網用戶上公網,咱們必須在routeros的firewall中設置snat,俗稱IP地址欺騙或假裝(masquerade) 區分SNAT和DNAT 從定義來說它們一個是源地址轉換,一個是目標地址轉換。都是地址轉換的功能,將私有地址轉換爲公網地址。 要區分這兩個功能能夠簡單的由鏈接發起者是誰來區分: 內部地址要訪問公網上的服務時(如web訪問),內部地址會主動發起鏈接,由路由器或者防火牆上的網關對內部地址作個地址轉換,將內部地址的私有IP轉換爲公網的公有IP,網關的這個地址轉換稱爲SNAT,主要用於內部共享IP訪問外部。 當內部須要提供對外服務時(如對外發布web網站),外部地址發起主動鏈接,由路由器或者防火牆上的網關接收這個鏈接,而後將鏈接轉換到內部,此過程是由帶有公網IP的網關替代內部服務來接收外部的鏈接,而後在內部作地址轉換,此轉換稱爲DNAT,主要用於內部服務對外發布。 在配置防火牆或者路由acl策略時要注意這兩個NAT必定不能混淆。