天天看點

iptables常用指令

##iptables常用指令

清除已有iptables規則

iptables -F

iptables -X

iptables -Z

解釋:-F是flush清空規則鍊,-X是删除規則鍊,-Z是zero清空所有鍊。

檢視已添加的iptables規則

iptables -L -n

解釋:-L 是list清單,-n是number數字顯示源和目标。

儲存規則

service iptables save

重新開機服務

service iptables restart

iptables的配置檔案

vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Fri Jul 28 05:38:00 2017

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [42:3872]

-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

# Completed on Fri Jul 28 05:38:00 2017

允許通路22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

打開主動模式21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

開放指定的端口

允許本地回環接口(即運作本機通路本機)

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允許所有本機向外的通路

iptables -A OUTPUT -j ACCEPT

允許通路80端口

插入規則:iptables -I INPUT -p tcp --dport 80 -j ACCEPT

追加規則:iptables -A INPUT -p tcp --dport 80 -j ACCEPT

允許指定IP通路22

iptables -I INPUT -s 192.168.0.19 -p tcp --dport 22 -j ACCEPT

禁止其他未允許的規則通路

iptables -A INPUT -j REJECT

iptables -A FORWARD -j REJECT

屏蔽IP

屏蔽單個IP的指令是

iptables -I INPUT -s 123.45.6.7 -j DROP

封整個段即從123.0.0.1到123.255.255.254的指令

iptables -I INPUT -s 123.0.0.0/8 -j DROP

封IP段即從123.45.0.1到123.45.255.254的指令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

封IP段即從123.45.6.1到123.45.6.254的指令是

iptables -I INPUT -s 123.45.6.0/24 -j DROP

删除已添加的iptables規則

比如要删除INPUT裡序号為8的規則,執行:

iptables -D INPUT 8

全部開放FTP傳輸

加載子產品:

modprobe ip_nat_ftp

modprobe ip_conntrack

modprobe ip_conntrack_ftp

加上一條規則:

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables隻允許指定ip位址通路指定端口

iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -d xxx.xxx.xxx.xxx -p tcp --sport 22 -j ACCEPT

上面這兩條,請注意--dport為目标端口,當資料從外部進入伺服器為目标端口;反之,資料從伺服器出去則為資料源端口,使用 --sport

同理,-s是指定源位址,-d是指定目标位址。

關閉所有的端口

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

yum允許下載下傳随機産生的高端口

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 -j ACCEPT

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 10000:65535 -j ACCEPT

----------

使用iptables做網關動态出口IP

Linux自帶的防火牆iptables,拿來做網關非常容易(/etc/sysconfig/iptables)。

-A INPUT -p tcp -j ACCEPT

-A INPUT -p udp -j ACCEPT

-A OUTPUT -p tcp -j ACCEPT

-A OUTPUT -p udp -j ACCEPT

-A INPUT -i eth1 -j ACCEPT

-A FORWARD -i eth+ -j ACCEPT # 要允許包轉發

*nat # 網關表

-A POSTROUTING -o eth0 -j MASQUERADE # 就這句了,eth0是外網口

另外, 要開啟作業系統的包轉發功能:

sysctl -w net.ipv4.ip_forward=1

其實主要就是NAT表裡的 MASQUERADE 選項,他會自動選擇出口。如果要給内網指定的IP段配置設定特定的出口,則需要使用到SNAT:

*nat

-A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 183.10.31.66

好,那如果由于壓力大。則需要大量端口,那麼就需要多的出口IP。這時就需要用到IP池了:

-A POSTROUTING -o eth0 -j SNAT --to-source 183.10.31.100-183.10.31.200

内外網的端口映射(DMZ)用DNAT也輕松搞定:

-A POSTROUTING -d 192.168.10.31 -j MASQUERADE

-A PREROUTING -p tcp -d 183.10.31.122 --dport 3306 -j DNAT --to 192.168.10.31

此時再對iptables做下優化,就大功告成了

-----------------------

9個常用iptables配置執行個體

iptables指令可用于配置Linux的包過濾規則,常用于實作防火牆、NAT。咋一看iptables的配置很複雜,掌握規律後,其實用iptables完成指定任務并不難,下面我們通過具體執行個體,學習iptables的詳細用法。

1.删除已有規則

在新設定iptables規則時,我們一般先確定舊規則被清除,用以下指令清除舊規則:

(or iptables --flush)

2.設定chain政策

對于filter table,預設的chain政策為ACCEPT,我們可以通過以下指令修改chain的政策:

以上指令配置将接收、轉發和發出包均丢棄,施行比較嚴格的包管理。由于接收和發包均被設定為丢棄,當進一步配置其他規則的時候,需要注意針對INPUT和OUTPUT分别配置。當然,如果信任本機器往外發包,以上第三條規則可不必配置。

3.屏蔽指定ip

有時候我們發現某個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包丢棄。

4.配置服務項

利用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: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

以上配置規則用到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的日志輸出。

------------------------

logger手動記錄日志:

來自: http://man.linuxde.net/syslog

任務:要向syslog檔案/var/log/messages中記錄日志資訊: 

logger this is a test log line 

輸出:tail  -5  /var/log/messages 

顯示的結果:Jan 5 10:07:03 localhost root: this is a test log line

任務:如果要記錄特定的标記(tag)可以使用: 

logger  -t  TAG  this  is  a  test  log line 

輸出操作:: tail  -5  messages

顯示的結果:Jan 5 10:37:14 localhost TAG: this is a test log line

      本文轉自rshare 51CTO部落格,原文連結:http://blog.51cto.com/1364952/1952212,如需轉載請自行聯系原作者

繼續閱讀