Linux系統iptables防火牆怎麼設定

來源:互聯網
上載者:User

安裝iptables防火牆

如果沒有安裝iptables需要先安裝,CentOS執行:

yum install iptables

Debian/Ubuntu執行:

apt-get install iptables

星期九所在的VPS上iptables設定為:

*nat
:PREROUTING ACCEPT [7978:1018059]
:POSTROUTING ACCEPT [9376:593102]
:OUTPUT ACCEPT [9376:593102]
-A POSTROUTING -s 192.168.217.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.217.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.217.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.217.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.217.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [449:152450]
:FORWARD DROP [52:3156]
:OUTPUT DROP [0:0]
-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 88 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -s 60.195.252.107 -i eth0 -p udp -m udp --dport 161 -j ACCEPT
-A INPUT -s 60.195.252.110 -i eth0 -p udp -m udp --dport 161 -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT
其中僅開放了SSH的連接埠22,http的連接埠80,FTP的21、22,UDP的161,以及PPTP所使用的1723。LNMPA伺服器可能需要注意開放88連接埠,因為軍哥的一鍵安裝包其後端Apache使用88連接埠。也可以將Nginx的連接埠改到88。另外此設定不接受ping的ICMP包。

iptables規則管理

列出當前iptables規則:


iptables -L -n --line-numbers

刪除其中某一條規則(藉助相應規則與行號),如:

iptables -D INPUT 6
iptables -D FORWARD 1
將分別刪除INPUT裡的第6條規則與FORWARD裡的第一條規則。

iptables規則的儲存與自啟

設定好後,執行:

iptables-save > /etc/iptables.rules
將規則儲存於/etc目錄下的iptables.rules檔案,然後在/etc/rc.local檔案裡添加隨開機執行的命令:

vi /etc/rc.local
在“exit 0”的上面添入下面語句:

iptables-restore
清除iptables規則

執行:

iptables -F
iptables -X
iptables -Z

iptables從入門到精通

實驗環境介紹:

本指令碼環境為eth0外網,eth1內網;

#!/bin/sh

#外網網卡

EXT_IF="eth0"

FW_IP="61.137.85.21"

#內網網卡

INT_IF="eth1"

LAN_IP="192.168.0.1"

LAN_IP_RANGE="192.168.0.0/255.255.255.0"

#載入模組,一般已內建

#Module loading.

#echo "modprobe modules"

#modprode ip_tables

#modprode ip_nat_ftp

#modprode ip_conntrack

#modprobe ip_conntrack_ftp

#啟用轉寄(forward)功能

echo "enabling IP FORWARDING......"

echo "1" > /proc/sys/net/ipv4/ip_forward

#規則初始化,設定預設都為drop

echo "enabling iptables rules"

#reset the default policies in the tables

#Iptables 命令參數

iptables -F

iptables -X

iptables -F -t mangle

iptables -X -t mangle

iptables -F -t nat

iptables -X -t nat

iptables -Z -t nat

#set policies

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

###-----------------------------------------------------------------###

#過慮蠕蟲

#444/445/69/135/139

###-----------------------------------------------------------------###

iptables -A FORWARD -p tcp --dport 4444 -j DROP

iptables -A FORWARD -p udp --dport 4444 -j DROP

iptables -A FORWARD -p tcp --dport 445 -j DROP

iptables -A FORWARD -p udp --dport 445 -j DROP

iptables -A FORWARD -p tcp --dport 69 -j DROP

iptables -A FORWARD -p udp --dport 69 -j DROP

iptables -A FORWARD -p tcp --dport 135 -j DROP

iptables -A FORWARD -p udp --dport 135 -j DROP

iptables -A FORWARD -p tcp --dport 139 -j DROP

iptables -A FORWARD -p udp --dport 139 -j DROP

#允許ping localhost,ping 192.168.0.1/2

#allow loopback access

iptables -A INPUT -p icmp -i lo -j ACCEPT

iptables -A OUTPUT -p icmp -o lo -j ACCEPT

#開啟內對內串連

#iptables -A INPUT -i lo -j ACCEPT

#允許代理和內網客戶機相互傳輸資料(包括ping)

#allow ping LAN

iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT

iptables -A OUTPUT -p ALL -o $INT_IF -d $LAN_IP_RANGE -j ACCEPT

#允許外網的網卡與內網相互連訊.接受資料只接受響應封包,否則不予允許存取.發送資料沒有限制.

iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT

iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT

#拒絕外部使用內網進行欺騙

#deny local cheat

iptables -A INPUT -i $EXT_IF -s 192.168.0.0/16 -j DROP

iptables -A INPUT -i $EXT_IF -s 10.0.0.0/8 -j DROP

iptables -A INPUT -i $EXT_IF -s 172.16.0.0/12 -j DROP

iptables -A INPUT -i $EXT_IF -s 127.0.0.0/8 -j DROP

#從LAN進入防火牆主機的dhcp封包,不於允許存取,只有防火牆擔任DHCP時才允許存取

#deny DHCP_packets from LAN

iptables -A INPUT -p udp -i $INT_IF --dport 67 --sport 68 -j DROP

###-----------------------------------------------------------------------------------###

#配置向外方向的TCP規則,其中 --state ESTABLISHED ,NEW參數指定要檢查哪個狀態。

#ESTABLISHED標誌匹配屬於已有的TCP串連的封包.

#NEW標誌指定試圖建立一條新的TCP串連的第一個封包,這條規則指明屬於建立的和已建立的

#TCP串連的封包將會通過eth0連接埠向外發送.

###-----------------------------------------------------------------------------------###

iptables -A OUTPUT -o $EXT_IF -p tcp -m state --state ESTABLISHED,NEW -j ACCEPT

###----------------------------------------------------------------------------------###

#配置封包從一個連接埠轉寄到另一個連接埠

###----------------------------------------------------------------------------------###

iptables -A FORWARD -i $INT_IF -j ACCEPT

# same to above 和上面的規則功能相同

#iptables -A FORWARD -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

###-------------------------------------------------------------------------------------###

#檢查到達外部網路介面的封包狀態.屬於已有TCP串連的封包都允許通過

# 從WAN到LAN的封包僅允許存取回應封包

###-------------------------------------------------------------------------------------###

iptables -A INPUT -i $EXT_IF -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

# 限制過濾規則的比對頻率為每分鐘平均流量三個封包(超過上限的封包將暫停比對),

#並將瞬間流量設定為一次最多處理三個封包(超過上限的封包將丟棄不予處理),

#這類封包通常是駭客用來進行阻斷式攻擊

iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packets died:"

###-------------------------------------------------------------------------###

#不管來自哪裡的ip片段都進行控制,允許每秒通過100個片段

###-------------------------------------------------------------------------###

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

###-------------------------------------------------------------------------###

#icmp包通過的控制,防止icmp駭客攻擊

###-------------------------------------------------------------------------###

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

###-------------------------------------------------------------------------###

# 防止DDOS

###-------------------------------------------------------------------------###

#iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

###-------------------------------------------------------------------------###

# UDP包一律允許存取

# allow UDP

###-------------------------------------------------------------------------###

iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT

###-------------------------------------------------------------------------###

#根據mac屏蔽主機上網

###-------------------------------------------------------------------------###

#iptables -t nat -I PREROUTING -m mac --mac-source 4C:00:10:D8:57:F3 -j DROP

###-----------------------------------------------------###

# 開放內部主機可以telnet至外部主 telnet port 23

###-----------------------------------------------------###

#沒必要開啟23連接埠

#iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT

#iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT

###-----------------------------------------------------###

# 開放郵包轉送通道 open SMTP port 25

###-----------------------------------------------------###

#以下是別人可以送信給你

iptables -A INPUT -i $EXT_IF -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT

iptables -A OUTPUT -o $EXT_IF -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT

#以下是你可以送信給別人

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT

###-----------------------------------------------------###

# 開放對外離線下載信件的通道 POP3 port 110

###-----------------------------------------------------###

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT

###-----------------------------------------------------###

# 開放瀏覽網頁的通道 http port 80

###-----------------------------------------------------###

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT

###-----------------------------------------------------###

# 開放查詢外部網路的DNS主機 DNS port:53

###-----------------------------------------------------###

#第一次會用udp封包來查詢

iptables -A OUTPUT -o $EXT_IF -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

#若有錯誤,會改用tcp包來查詢

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

#開放這台主機上的DNS和外部的DNS主機互動查詢:使用udp

iptables -A OUTPUT -o $EXT_IF -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT

#開放這台主機上的DNS和外部的DNS主機互動查詢:使用udp

iptables -A OUTPUT -o EXT_IF -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT

iptables -A INPUT -i EXT_IF -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT

###------------------------------------------------------------------------###

#開放內部主機可以SSH至外部的主機 SSH port:22

###------------------------------------------------------------------------###

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT

#以下是SSH protocol比較不同的地方

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT

###------------------------------------------------------------------------###

###開放內部網路,可以ftp至外部主機

###------------------------------------------------------------------------###

#以下是開啟命令 channel 21

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT

#以下是開啟資料 channel 20

iptables -A INPUT -i $EXT_IF -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o $EXT_IF -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT

#以下是開啟 passive mode FTP 資料通道

iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT

iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT

#-------------------------------------NAT------------------------------------------------

#透明代理設定:將WWW服務轉向squid

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

###-------------------------------------------------------------------------###

#啟動內部對外部轉址:源網路位址轉譯SNAT

###-------------------------------------------------------------------------###

iptables -t nat -A POSTROUTING -o $EXT_IF -s $LAN_IP_RANGE -j SNAT --to $FW_IP

###-------------------------------------------------------------------------###

#啟動外部對內部轉址(設定內網WWWW伺服器映射)DNAT

###-------------------------------------------------------------------------###

iptables -t nat -A PREROUTING -i $EXT_IF -p tcp -d $FW_IP --dport 80 -j DNAT --to 192.168.0.16:80

雙線原理是一樣的:

如果內網1[或者外網]是192.168.1.0/24

內網2[或者外網]是192.168.2.0/24

只要改相應部分就行了

#啟動內部對外部轉址:源網路位址轉譯SNAT

###-------------------------------------------------------------------------###

iptables -t nat -A POSTROUTING -o $EXT_IF -s 192.168.1.0/24 -j SNAT --to $FW_IP

iptables -t nat -A POSTROUTING -o $EXT_IF -s 192.168.2.0/24 -j SNAT --to $FW_IP

附上基礎規則:

*filter
:INPUT ACCEPT [106:85568]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [188:168166]
:RH-Firewall-1-INPUT - [0:0]
#允許本地迴環介面(即運行本機訪問本機)
-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允許已建立的或相關連的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允許所有本機向外的訪問
-A OUTPUT -j ACCEPT
#允許PPTP撥號翻牆
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
#僅特定主機訪問Rsync資料同步服務
-A INPUT -s 8.8.8.8/32 -p tcp -m tcp --dport 873 -j ACCEPT
#僅特定主機訪問WDCP管理系統
-A INPUT -s 6.6.6.6/32 -p tcp -m tcp --dport 8080 -j ACCEPT
#允許訪問SSH
-A INPUT -p tcp -m tcp --dport 1622 -j ACCEPT
#允許訪問FTP
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
#允許訪問網站服務
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#禁止所有未經允許的串連
-A INPUT -p tcp -j DROP
#注意:如果22連接埠未加入允許規則,SSH連結會直接斷開。
#-A INPUT -j REJECT
#-A FORWARD -j REJECT
COMMIT

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.