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
沒有可編輯設定檔,只能透過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
類型的SSH
port連線 (--dport
輸入ssh
或22
相同):
$ 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