[Iptables] 防火牆設定指南 – iptables for CentOS & Ubuntu

Introduction

CentOS & Ubuntu iptables guide.

其中CentOS我認為較方便設定。


指令與參數

快速阻擋一組IP(1.2.3.4/32)的所有連線:

$ iptables -A INPUT -s 1.2.3.4/32 -j DROP

常用參數:

--append   -A :新增至Chain (預設`INPUT`, `FORWARD`, `OUTPUT`)
--source   -s :IP soruce
--protocol -p :protocal
--dport       :目的Port,指服務Port (`--destination-port`)
--jump     -j :目標規則 (`ACCEPT`, `DROP`)

設定檔

CentOS

/etc/sysconfig/iptables

CentOS直接修改設定檔後重啟即可,且永久生效。

service iptables restart

Ubuntu

Ubuntu - IptablesHowTo

沒有可編輯設定檔,只能透過iptables指令加入編輯。

$ iptables {rule}

例如:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.1/16 --dport 22 -j ACCEPT

新增與載入設定檔

Ubuntu社群大多建立/etc/iptables.rules作為IPTABLES規則表,再下指令引入至IPTABLES:

# 利用指令建立規則表,會自動包含格式
iptables-save > /etc/iptables.rules
# 載入規則表,立即生效至IPTABLES
iptables-restore < /etc/iptables.rules

永久生效設定:

sudo vim /etc/network/interfaces

在主要網路卡最後面加入:(每次開機後套用&每次關機前保存)

pre-up iptables-restore < /etc/iptables.rules  
post-down iptables-save > /etc/iptables.rules

規則

規則表需要包含三向的完整設定,如Ubuntu的iptables-save格式:

*filter                   
:INPUT ACCEPT [416:33446] 
:FORWARD ACCEPT [0:0]     
:OUTPUT ACCEPT [147:59940]
COMMIT

以SSH(22)白名單開放For OUTPUT ACCEPT為例:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.1/16 --dport 22 -j ACCEPT

指令速查

清除所有規則(Flush)

$ iptables -F

阻擋IP

阻擋來自1.2.3.0/24的所有連線:

$ iptables -A INPUT -s 1.2.3.0/24 -j DROP

阻擋所有TCP類型的SSHport連線 (--dport輸入ssh22相同):

$ iptables -A INPUT -p tcp --dport ssh -j DROP

針對IP與SSH配對阻擋:

$ iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport ssh -j DROP

頻率速率限制

限制HTTP服務封包速率為20/s(若封包大小為1500KB,則換算流量限制為30KB/s)

$ iptables -A INPUT -p tcp --dport http -m limit --limit 20/s -j ACCEPT
$ iptables -A INPUT -p tcp --dport http -j DROP

一次宣告多個Port可以使用-m multiport

$ iptables -A INPUT -p tcp -m multiport --dport http,https -m limit --limit 20/s -j ACCEPT

Leave a Reply

Your email address will not be published. Required fields are marked *