iptables命令可用于配置Linux的包過(guò)濾規(guī)則,,常用于實(shí)現(xiàn)防火墻、NAT,。咋一看iptables的配置很復(fù)雜,,掌握規(guī)律后,,其實(shí)用iptables完成指定任務(wù)并不難,下面我們通過(guò)具體實(shí)例,,學(xué)習(xí)iptables的詳細(xì)用法,。
1.刪除已有規(guī)則
在新設(shè)定iptables規(guī)則時(shí),我們一般先確保舊規(guī)則被清除,,用以下命令清除舊規(guī)則:
iptables -F
(or iptables --flush)
2.設(shè)置chain策略
對(duì)于filter table,,默認(rèn)的chain策略為ACCEPT,,我們可以通過(guò)以下命令修改chain的策略:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
以上命令配置將接收,、轉(zhuǎn)發(fā)和發(fā)出包均丟棄,施行比較嚴(yán)格的包管理,。由于接收和發(fā)包均被設(shè)置為丟棄,,當(dāng)進(jìn)一步配置其他規(guī)則的時(shí)候,需要注意針對(duì)INPUT和OUTPUT分別配置,。當(dāng)然,,如果信任本機(jī)器往外發(fā)包,以上第三條規(guī)則可不必配置,。
3.屏蔽指定ip
有時(shí)候我們發(fā)現(xiàn)某個(gè)ip不停的往服務(wù)器發(fā)包,,這時(shí)我們可以使用以下命令,將指定ip發(fā)來(lái)的包丟棄:
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
以上命令設(shè)置將由x.x.x.x ip發(fā)往eth0網(wǎng)口的tcp包丟棄,。
4.配置服務(wù)項(xiàng)
利用iptables,,我們可以對(duì)日常用到的服務(wù)項(xiàng)進(jìn)行安全管理,比如設(shè)定只能通過(guò)指定網(wǎng)段,、由指定網(wǎng)口通過(guò)SSH連接本機(jī):
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
若要支持由本機(jī)通過(guò)SSH連接其他機(jī)器,,由于在本機(jī)端口建立連接,因而還需要設(shè)置以下規(guī)則:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
類(lèi)似的,,對(duì)于HTTP/HTTPS(80/443),、pop3(110)、rsync(873),、MySQL(3306)等基于tcp連接的服務(wù),,也可以參照上述命令配置。
對(duì)于基于udp的dns服務(wù),,使用以下命令開(kāi)啟端口服務(wù):
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
5.網(wǎng)口轉(zhuǎn)發(fā)配置
對(duì)于用作防火墻或網(wǎng)關(guān)的服務(wù)器,,一個(gè)網(wǎng)口連接到公網(wǎng),其他網(wǎng)口的包轉(zhuǎn)發(fā)到該網(wǎng)口實(shí)現(xiàn)內(nèi)網(wǎng)向公網(wǎng)通信,,假設(shè)eth0連接內(nèi)網(wǎng),,eth1連接公網(wǎng),配置規(guī)則如下:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
6.端口轉(zhuǎn)發(fā)配置
對(duì)于端口,,我們也可以運(yùn)用iptables完成轉(zhuǎn)發(fā)配置:
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
以上命令將422端口的包轉(zhuǎn)發(fā)到22端口,,因而通過(guò)422端口也可進(jìn)行SSH連接,,當(dāng)然對(duì)于422端口,我們也需要像以上“4.配置服務(wù)項(xiàng)”一節(jié)一樣,,配置其支持連接建立的規(guī)則,。
7.DoS攻擊防范
利用擴(kuò)展模塊limit,我們還可以配置iptables規(guī)則,,實(shí)現(xiàn)DoS攻擊防范:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
--litmit 25/minute 指示每分鐘限制最大連接數(shù)為25
--litmit-burst 100 指示當(dāng)總連接數(shù)超過(guò)100時(shí),,啟動(dòng) litmit/minute 限制
8.配置web流量均衡
我們可以將一臺(tái)服務(wù)器作為前端服務(wù)器,利用iptables進(jìn)行流量分發(fā),,配置方法如下:
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
以上配置規(guī)則用到nth擴(kuò)展模塊,,將80端口的流量均衡到三臺(tái)服務(wù)器。
9.將丟棄包情況記入日志
使用LOG目標(biāo)和syslog服務(wù),,我們可以記錄某協(xié)議某端口下的收發(fā)包情況,。拿記錄丟包情況舉例,可以通過(guò)以下方式實(shí)現(xiàn),。
首先自定義一個(gè)chain:
iptables -N LOGGING
其次將所有接收包導(dǎo)入LOGGING chain中:
iptables -A INPUT -j LOGGING
然后設(shè)置日志前綴,、日志級(jí)別:
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
最后將包倒向DROP,將包丟棄:
iptables -A LOGGING -j DROP
另可以配置syslog.conf文件,,指定iptables的日志輸出,。