iptables命令可用於配置Linux的包過濾規則,經常使用於實現防火牆、NAT。咋一看iptables的配置很複雜,掌握規律後,其實用iptables完成指定任務並不難,下面咱們經過具體實例,學習iptables的詳細用法。前端
1.刪除已有規則web
在新設定iptables規則時,咱們通常先確保舊規則被清除,用如下命令清除舊規則:安全
iptables -F (or iptables --flush)
2.設置chain策略服務器
對於filter table,默認的chain策略爲ACCEPT,咱們能夠經過如下命令修改chain的策略:tcp
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
以上命令配置將接收、轉發和發出包均丟棄,施行比較嚴格的包管理。因爲接收和發包均被設置爲丟棄,當進一步配置其餘規則的時候,須要注意針對INPUT和OUTPUT分別配置。固然,若是信任本機器往外發包,以上第三條規則可沒必要配置。學習
3.屏蔽指定ipspa
有時候咱們發現某個ip不停的往服務器發包,這時咱們可使用如下命令,將指定ip發來的包丟棄:日誌
BLOCK_THIS_IP="x.x.x.x"iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
以上命令設置將由x.x.x.x ip發往eth0網口的tcp包丟棄。code
4.配置服務項orm
利用iptables,咱們能夠對平常用到的服務項進行安全管理,好比設定只能經過指定網段、由指定網口經過SSH鏈接本機:
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
若要支持由本機經過SSH鏈接其餘機器,因爲在本機端口創建鏈接,於是還須要設置如下規則:
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
相似的,對於HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基於tcp鏈接的服務,也能夠參照上述命令配置。
對於基於udp的dns服務,使用如下命令開啓端口服務:
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
5.網口轉發配置
對於用做防火牆或網關的服務器,一個網口鏈接到公網,其餘網口的包轉發到該網口實現內網向公網通訊,假設eth0鏈接內網,eth1鏈接公網,配置規則以下:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
6.端口轉發配置
對於端口,咱們也能夠運用iptables完成轉發配置:
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
以上命令將422端口的包轉發到22端口,於是經過422端口也可進行SSH鏈接,固然對於422端口,咱們也須要像以上「4.配置服務項」一節同樣,配置其支持鏈接創建的規則。
7.DoS攻擊防範
利用擴展模塊limit,咱們還能夠配置iptables規則,實現DoS攻擊防範:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
--litmit 25/minute 指示每分鐘限制最大鏈接數爲25
--litmit-burst 100 指示當總鏈接數超過100時,啓動 litmit/minute 限制
8.配置web流量均衡
咱們能夠將一臺服務器做爲前端服務器,利用iptables進行流量分發,配置方法以下:
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:80iptables -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:80iptables -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
以上配置規則用到nth擴展模塊,將80端口的流量均衡到三臺服務器。
9.將丟棄包狀況記入日誌
使用LOG目標和syslog服務,咱們能夠記錄某協議某端口下的收發包狀況。拿記錄丟包狀況舉例,能夠經過如下方式實現。
首先自定義一個chain:
iptables -N LOGGING
其次將全部接收包導入LOGGING chain中:
iptables -A INPUT -j LOGGING
而後設置日誌前綴、日誌級別:
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的日誌輸出。