iptables/netfilter入門到進階

防火墻的概念

Firewall:工作于主機或網絡邊緣,對于進出本主機或網絡的報文根據事先定義的規則作匹配檢測,對于更改被規則匹配到的報文做出相應處理的組件

網絡層防火墻(包過濾防火墻):

優點:對用戶來說透明,處理速度快且易于防護

缺點:一旦黑客突破防火墻,就可以請以偽造數據包源地址、目的地址和IP端口號

代理服務型防火墻(Proxy Service)

優點:在應用層對數據進行檢查,比較安全

缺點:會增加防火墻的負載

現實生產中使用的防火墻都是二者合體,先檢查網絡數據,通過后再送到應用層檢查

主機防火墻:服務范圍為當前主機

網絡防火墻:服務范圍為防火墻的局域網

軟件防火墻:應用軟件處理邏輯運行與通用硬件平臺之上的防火墻

硬件防火墻:硬件和軟件結合

 

Iptables基本認識:

Netfilter組件稱為內核空間,被集成在Linux內核中。是一種內核中用于擴展各種網絡服務的結構化底層框架。

Netfilter在內核中選取五個位置放置了五個hook function(鉤子函數)并且向用戶開放,用戶可通過iptables工具向其寫規則。

input 、output 、forward 、prerouting、postrouting

Iptables也稱用戶空間,是一個工作在用戶層用來寫規則的工具,寫好的規則被送往netfilter,這些規則告訴內核中的nrtfilter組件如何去處理信息包。

netfilter/iptables的最大優點是它可以配置有狀態的防火墻,這是ipfwadm和ipchains等以前的工具都無法提供的一種重要功能。有狀態的防火墻能夠指定并記住為發送或接收信息包所建立的連接的狀態。防火墻可以從信息包的連接跟蹤狀態獲得該信息。在決定新的信息包過濾時,防火墻所使用的這些狀態信息可以增加其效率和速度。這里有四種有效狀態,名稱分別為ESTABLISHED、INVALID、NEW和RELATED。

狀態ESTABLISHED指出該信息包屬于已建立的連接,該連接一直用于發送和接收信息包并且完全有效。INVALID狀態指出該信息包與任何已知的流或連接都不相關聯,它可能包含錯誤的數據或頭。狀態NEW意味著該信息包已經或將啟動新的連接,或者它與尚未用于發送和接收信息包的連接相關聯。最后,RELATED表示該信息包正在啟動新連接,以及它與已建立的連接相關聯。

Iptables優點:

netfilter/iptables的一個重要優點是,它使用戶可以完全控制防火墻配置和信息包過濾??梢远ㄖ谱约旱囊巹t來滿足特定需求,從而只允許想要的網絡流量進入系統。

另外,netfilter/iptables是免費的,這對于那些想要節省費用的人來說十分理想,它可以代替昂貴的防火墻解決方案。

Iptables組成:

Iptalbes 是用來設置、維護和檢查Linux內核的IP包過濾規則的??梢远x不同的表,每個表都包含幾個內部的鏈,也能包含用戶定義的鏈。每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱作target(目標),也可以跳向同一個表內的用戶定義的鏈。

四表(table)

filter:過濾規則表(過濾)

nat:地址轉換規則表(用于修改源IP或目標IP,也可以改端口)

mangle:修改數據標記位規則表(拆解報文,做出修改,并重新封裝)

raw:跟蹤數據表規則表(關閉nat表上啟用的連接追蹤機制)

實際還有security表

五鏈(chain)

INPUT:通過路由表后目的地為本機(處理入站數據包)

OUTPUT:由本機產生,向外轉發(處理出站數據包)

FORWARD:通過路由表后,目的地不為本機(處理轉發數據包)

PREROUTING:數據包進入路由表之前  (路由前處理數據包)

POSTROUTING:發送到網卡接口之前 (路由后處理數據包)

iptables/netfilter入門到進階 

表和鏈的對應關系

raw:PREROUTING,OUTPUT

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat:PREROUTING,[INPUT] OUTPUT,POSTROUTING

filter:INPUT,FORWARD,OUTPUT

iptables/netfilter入門到進階 

鏈:鏈上的規則次序,即為檢查的次序;因此,隱含一定的應用法則:

(1) 同類規則(訪問同一應用),匹配范圍小的放上面

(2) 不同類的規則(訪問不同應用),匹配到報文頻率較大的放在上面

(3) 將那些可由一條規則描述的多個規則合并成一個

(4) 設置默認策略

 

iptables命令:

規則格式:iptables [-t 表名] <-A|-I|-D|-R>鏈名 [規則編號] [-i|-o網卡名稱][-p協議類型][-s源IP地址|源子網][-sport源端口號][-d目標IP地址|目標子網][-dport目標端口號] -j<動作>

鏈管理:

-N:new, 自定義一條新的規則鏈;每個自定義鏈都有引用計數,引用計數不為零就無法刪除

[root@localhost ~]#systemctl stop firewalld.service[root@localhost ~]#iptables -vnL[root@localhost ~]#iptables -N IN_web_rules     新建一條名為IN_web_rules的鏈[root@localhost ~]#iptables -vnLChain IN_web_rules (0 references)pkts bytes target     prot opt in     out     source               destination  

-X:delete,刪除自定義的規則鏈(空鏈)

非自定義的、有規則的、有引用的無法刪除

[root@localhost ~]#iptables -X IN_web_rules       刪除名為IN_web_rules的鏈[root@localhost ~]#iptables -vnL

-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:

ACCEPT:接受

DROP:丟棄

REJECT:拒絕

[root@localhost ~]#iptables -vnLChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         [root@localhost ~]#iptables -P FORWARD DROP       修改默認規則鏈規則 ACCEPT(接受)改為DROP(丟棄)[root@localhost ~]#iptables -nLChain FORWARD (policy DROP)target     prot opt source               destination       

-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除

[root@localhost ~]#iptables -N IN_web[root@localhost ~]#iptables -vnLChain IN_web (0 references)pkts bytes target     prot opt in     out     source               destination         [root@localhost ~]#iptables -E IN_web IN_web_rules 重命名自定義鏈[root@localhost ~]#iptables -vnLChain IN_web_rules (0 references)pkts bytes target     prot opt in     out     source               destination   

規則管理:

-A:append,追加

-I:insert, 插入,要指明位置,省略時表示第一條

-D:delete,刪除

(1) 指明規則序號

(2) 指明規則本身

[root@localhost ~]#iptables -D FORWARD 1               刪除FORWARD第一條規則

-R:replace,替換指定鏈上的指定規則

-F:flush,清空指定的規則鏈

[root@localhost ~]#iptables -F                清空所有鏈[root@localhost ~]#iptables -F IN_public                清空IN_public鏈

-Z:zero,置零

iptables的每條規則都有兩個計數器

(1) 匹配到的報文的個數

(2) 匹配到的所有報文的大小之和

[root@localhost ~]#systemctl start firewalld.service[root@localhost ~]#iptables -vnLChain INPUT_ZONES (1 references)      55  6097 IN_public  all  --  ens33  *       0.0.0.0/0            0.0.0.0/0           [goto] [root@localhost ~]#iptables -Z INPUT_ZONES                清空INPUT_ZONES的計數器Chain INPUT_ZONES (1 references)0     0 IN_public  all  --  ens33  *       0.0.0.0/0            0.0.0.0/0           [goto] [root@localhost ~]#iptables -Z                    清空所有計數器[root@localhost ~]#iptables -vnLChain IN_public (2 references)pkts bytes target     prot opt in     out     source               destination         3   486 IN_public_log   all  --  *      *       0.0.0.0/0            0.0.0.0/0           134 16720 IN_public_deny   all  --  *      *       0.0.0.0/0            0.0.0.0/0          134 16720 IN_public_allow   all  --  *      *       0.0.0.0/0            0.0.0.0/0           0     0 ACCEPT      icmp --  *      *       0.0.0.0/0            0.0.0.0/0  

[root@localhost ~]#iptables -Z IN_public 2           清空IN_public的第二條規則Chain IN_public (2 references)pkts bytes target     prot opt in     out     source               destination         43  4348 IN_public_log      all  --  *      *       0.0.0.0/0            0.0.0.0/0           1   229 IN_public_deny   all  --  *      *       0.0.0.0/0            0.0.0.0/0           174 20582 IN_public_allow   all  --  *      *       0.0.0.0/0            0.0.0.0/0           0     0 ACCEPT      icmp --  *      *       0.0.0.0/0            0.0.0.0/0  

查看:

-L:list, 列出指定鏈上的所有規則

-n:numberic,以數字格式顯示地址和端口號

-v:verbose,詳細信息

-vv, -vvv隨著v增加,顯示的信息就愈加詳細

-x:exactly,顯示計數器結果的精確值

–line-numbers:顯示規則的序號

[root@localhost ~]#iptables -vnL FORWARD                  查看FORWARD鏈的信息[root@localhost ~]#iptables -vnL FORWARD --line-numbers                    查看FORWARD鏈的信息并顯示鏈上的規則編號Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1   0  0 ACCEPT   all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED2   0  0 ACCEPT   all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           [root@localhost ~]#iptables -vnL FORWARD --line-numbers            顯示FORWARD的序號Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1   0  0 ACCEPT   all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           2   0  0 REJECT   all  --  *    virbr0  0.0.0.0/0          0.0.0.0/0           reject-with icmp-port-unreachabl

匹配條件:

基本匹配:無需加載任何模塊,由iptables/netfilter自行提供;

-s, –source  address[/mask][,…]:檢查報文中的源IP地址是否符合此處指定的地址或范圍

-d, –destination address[/mask][,…]:檢查報文中的目標IP地址是否符合此處指定的地址或范圍

所有地址:0.0.0.0/0

-i, –in-interface name:數據報文流入的接口;只能用于數據報文流入的環節,只能用于PREROUTING,INPUT和FORWARD

-o, –out-interface name:數據報文流出的接口;只能用于數據報文流出的環節,只能用于FORWARD、OUTPUT和POSTROUTING

擴展匹配:對某一種功能的擴展,經由擴展模塊引入的匹配機制

隱式擴展:對某一種協議擴展,無需手動加載擴展模塊

-p:做協議匹配

protocol: tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh or  “all”

TCP隱含指明了-m tcp

–sport port[:port]:匹配報文的源端口;可以是端口范圍

–dport port[:port]:指定目的地端口,目標端口,可以是端口范圍;

–tcp-flags  mask  comp

mask is the flags which we should examine,  written as a comma-separated list(掩碼是我們應該檢查的標志,用逗號分隔的列表編寫。),例如 SYN、ACK、FIN、RST

comp is a comma-separated list  of  flags  which must be set(COMP是一個逗號分隔的旗幟列表,必須設置。),例如SYN

例如:“–tcp-flags  SYN、ACK、FIN、RST  SYN”表示,要檢查的標志位為SYN、ACK、FIN、RST四個,其中SYN必須為1,余下的必須為0

–syn:用于匹配第一次握手,只允許新鏈接,相當于 –tcp-flags  SYN、ACK、FIN、RST、SYN

[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -d 172.16.0.0/16 -p tcp -j ACCEPT

udp   隱含指明了-m udp

–sport port[:port]:匹配報文的源端口;可以是端口范圍

–dport port[:port]:匹配報文的目標端口;可以是端口范圍

[root@localhost ~]#iptables -I INPUT -d 172.16.250.149 -p udp --dport 137:138 -j ACCEPT[root@localhost ~]#iptables -I OUTPUT -s 172.16.250.149 -p udp --sport 137:138 -j ACCEPT

icmp  隱含指明了-m icmp

–icmp-type {type[/code]|typename}

echo-request:8(ping出去請求回應)

echo-reply:0(給予回應)

[root@localhost ~]#iptables -A OUTPUT  -s 172.16.250.149 -p icmp --icmp-type 8 -j ACCEPT[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p icmp --icmp-type 0 -j ACCEPT

顯式擴展:額外附加的更多的匹配規則,必須使用-m選項指明要調用的擴展模塊的擴展機制

1、-m multiport 以離散或連續的方式定義多端口匹配條件,此模塊匹配一組源端口或目標端口。最多可指定15個端口

–sports 22,80,443…:指定多個源端口

–dports 22,80,443…:指定多個目標端口

[root@localhost ~]#iptables -A INPUT  -d 172.16.250.149 -p tcp -m multiport --dports 22,80,139,445 -j ACCEPT[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -p tcp -m multiport --sports 22,80,139,445 -j ACCEPT

2、-m iprange 以連續地址塊的方式來指明多IP地址匹配條件

–src-range from[-to]

–dst-range from[-to]

[root@localhost ~]#iptables -I INPUT 3 -d 172.16.250.149 -p tcp --dport 23 -m iprange --src-range 172.16.250.149-172.16.250.152 -j ACCEPT[root@localhost ~]#iptables -I OUTPUT 3 -s 172.16.250.149 -p tcp --sport 23 -m iprange --dst-range 172.16.250.149-172.16.250.152 -j ACCEPT

3、-m time 根據收到的報文時間/日期與指定的時間/日期格式進行匹配

–timestart hh:mm[:ss]起始時間

–timestop hh:mm[:ss] 結束時間

–weekdays day[,day…]匹配一周中的哪些天

–monthdays day[,day…]匹配一月中的哪些天

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]起始日期時間

–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]結束日期事時間

–kerneltz:使用內核配置的時區而非默認的UTC

例如:基于時間限定,9點到18點禁止訪問23端口

[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -m time --timestart 09:00:00 --timestop 18:00:00 -j ACCEPT

基于時間限定,周一到周五9點到18點禁止訪問23端口

[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 1,2,3,4,5 -j ACCEPT  

4、-m string 對報文中的應用層數據做字符串匹配檢測

–algo {bm|kmp}指定算法

–string pattern給定要檢查的字符串模式

–hex-string pattern給定要檢查的十六進制格式字符串模式

–from offset

–to offset

例如:禁止訪問包含特定字符“hello”的頁面

[root@localhost ~]#vim /var/www/html/test.html

 

[root@localhost ~]#iptables -I OUTPUT -s 172.16.250.149 -m string --algo kmp --string "hello" -j REJECT[root@localhost ~]#iptables -vnL --line-numbersChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1        0     0 REJECT     all  --  *      *       172.16.250.149       0.0.0.0/0            STRING match  "hello" ALGO name kmp TO 65535 reject-with icmp-port-unreachable

iptables/netfilter入門到進階 

 

5、-m connlimit 根據每個客戶端主機做并發連接數限制,即每個客戶端最多可同時發起的鏈接數量

–connlimit-upto 限定并發連接數上限

–connlimit-above n 限定并發連接數下限

例如:允許23端口大于2個并發連接

[root@localhost ~]#iptables -A INPUT -s 0/0 -d 172.16.250.149 -p tcp --dport 23 -m connlimit --connlimit-above 3 -j ACCEPT

允許23端口同一客戶端小于3個并發連接

[root@localhost ~]#iptables -A INPUT -s 0/0 -d 172.16.250.149 -p tcp --dport 23 -m connlimit ! --connlimit-above 3 -j ACCEPT 

6、-m limit 基于令牌桶算法對報文的速率做匹配

–limit rate[/second|/minute|/hour|/day]

–limit-burst number突發速率限定

限制本機某tcp服務接收新請求的速率:–syn, -m limit

例如:限制每分鐘20個ping請求,前三個不受限制

[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -p icmp --icmp-type 0 -j ACCEPT

7、-m state 狀態監測擴展

–state

NEW: 新連接請求

ESTABLISHED:已建立的連接

INVALID:無法識別的連接

RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接

UNTRACKED:未追蹤的連接

state擴展:

內核模塊裝載:

nf_conntrack

nf_conntrack_ipv4

手動裝載:

nf_conntrack_ftp

查看可追蹤最大連接數:

cat /proc/net/nf_conntrack

調整可記錄的連接數量最大值:

/proc/sys/net/nf_conntrack_max

修改方式:

sysctl -w nrt.nf_conntrack_max=300000

echo 300000>/proc/sys/net/nf_conntrack_max

conntrack(連接跟蹤)所能跟蹤的連接數量最大值取決于/proc/sys/net/nf_conntrack_max的設定

已經追蹤到的并記錄下來的連接位于/proc/net/nf_conntrack文件中,超時的連接將會被刪除,當模板滿載時,后續的新連接可能會超時解決辦法如下:

加大nf_conntrack_max的值,或降低nf_conntrack條目的超時時長,不同協議的超時時長的定義在/proc/sys/net/netfilter目錄下

例如:允許被啟動的FTP服務訪問

[root@localhost ~]#modprobe nf_conntrack_ftp 加載nf_conntrack_ftp模塊[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p tcp --dport 21 -m state --state NEW -j ACCEPT[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -m state --state ESTABLISHED -j ACCEPT

處理動作:

-j ACCEPT接受

DROP丟棄

ERJECT拒絕

ANAT源地址轉換

DNAT目標地址轉換

REDIRECT端口重定向

LOG記錄訪問記錄

LOG

–log-level

–log-prefix

默認日志保存于/var/log/messages

保存和載入規則:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE 可跟時間

[root@localhost ~]#iptables-save > /etc/sysconfig/iptables-config-20160309-v1

重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE 重載后會清空原有規則

-n, –noflush:不清除原有規則

-t, –test:僅分析生成規則集,但不提交

[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables-config-20160309-v1

CentOS 6:

保存規則:

service iptables save

保存規則于/etc/sysconfig/iptables文件,覆蓋保存

重載規則:

service iptables restart

默認重載/etc/sysconfig/iptables文件中的規則

配置文件:/etc/sysconfig/iptables-config

CentOS 7:

(1) 自定義Unit File,進行iptables-restore

(2) firewalld服務;

(3) 自定義腳本

規則優化的思路:

使用自定義鏈管理特定應用的相關規則,模塊化管理規則

(1) 優先放行雙方向狀態為ESTABLISHED的報文

(2) 服務于不同類別的功能的規則,匹配到報文可能性更大的放前面

(3) 服務于同一類別的功能的規則,匹配條件較嚴格的放在前面

(4) 設置默認策略:白名單機制

(a) iptables -P,不建議

(b) 建議在規則的最后定義規則做為默認策略

 

iptables操作實例:

允許來自172.16.0.0網絡訪問本機地址的TCP服務

[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.250.149 -p tcp -j ACCEPT    

 

INPUT加一條規則,來自172.16.0.0網絡的任何主機源地址訪問172.16.250.149目標地址的TCP協議,都允許

[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -s 172.16.0.0/16 -p tcp -j ACCEPT

     

允許本機訪問172.16.0.0網絡的任何主機的TCP協議

[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -d 172.16.0.0/16 -p tcp -j ACCEPT[root@localhost ~]#iptables -P INPUT DROP[root@localhost ~]#iptables -P FORWARD DROP[root@localhost ~]#iptables -P OUTPUT DROP  

允許本機訪問172.16.0.0網絡的任何主機的所有協議

[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -d 172.16.0.0/16 -j ACCEPT

允許任何人ping本機

[root@localhost ~]#iptables -A INPUT -d 172.16.250.149 -p icmp -j ACCEPT (ping的報文可以進來)[root@localhost ~]#iptables -A OUTPUT -s 172.16.250.149 -p icmp -j ACCEPT(ping的報文可以出去)

用另一臺主機ping本機

[root@localhost ~]#ping 172.16.250.149PING 172.16.250.149 (172.16.250.149) 56(84) bytes of data.64 bytes from 172.16.250.149: icmp_seq=1 ttl=64 time=5.41 ms

然后進行抓包

[root@localhost ~]#tcpdump -i ens33 -nn icmptcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes23:19:33.521746 IP 172.16.252.245 > 172.16.250.149: ICMP echo request, id 4370, seq 1, length 64

 

本機SSH服務能被172.16.0.0網絡內主機訪問,并添加為INPUT和OUTPUT第一條規則

[root@localhost ~]#iptables -I INPUT -s 172.16.0.0/16 -d 172.16.250.149 -p tcp --dport 22 -j ACCEPT[root@localhost ~]#iptables -I OUTPUT -s 172.16.250.149 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT

 

生產中實例:

實例一、關閉所有的 INPUT FORWARD OUTPUT

下面是命令實現:

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

再用命令 iptables -L -n 查看 是否設置好, 應看到全部 DROP

這樣的設置好了,我們只是臨時的, 重啟服務器還是會恢復原來沒有設置的狀態

此時使用 service iptables save 進行保存

firewall rules 防火墻的規則保存在 /etc/sysconfig/iptables

 

實例二、只打開22端口

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

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

再查看 iptables -L -n 是否添加上去

最后別忘記了保存 對防火墻的設置

通過命令:service iptables save 進行保存

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

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

 

實例3、禁止某個IP訪問

1臺Linux服務器,2臺windows8 操作系統進行訪問

Linux服務器ip 192.168.1.99

win8_1 ip: 192.168.1.2

win8_2 ip: 192.168.1.8

現在要禁止 192.168.1.2 win8_1 訪問, win8_2 正常訪問,

iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP

正常訪問的 192.168.1.8 win8_2是可以正常訪問的

 

實例4、如何刪除規則

首先我們要知道 這條規則的編號,每條規則都有一個編號

通過 iptables -L -n –line-number 可以顯示規則和相對應的編號

num target prot opt source destination

1 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306

2 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

3 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

多了 num 這一列, 這樣我們就可以看到剛才的規則對應的是編號2。進行刪除

iptables -D INPUT 2

刪除INPUT鏈編號為2的規則。

iptables -L -n 查看一下已經被清除了。

 

實例5、過濾無效的數據包

假設有人進入了服務器,或者有病毒木馬程序,它可以通過22,80端口像服務器外傳送數據。

它的這種方式就和我們正常訪問22,80端口區別。它發向外發的數據不是我們通過訪問網頁請求而回應的數據包。

下面我們要禁止這些沒有通過請求回應的數據包,統統把它們堵住掉。

iptables 提供了一個參數 是檢查狀態的,下面我們來配置下 22 和 80 端口,防止無效的數據包。

iptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

可以看到和我們以前使用的:

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

多了一個狀態判斷。

同樣80端口也一樣,現在刪掉原來的2條規則,

iptables -L -n –line-number 這個是查看規則而且帶上編號。我們看到編號就可以刪除對應的規則了。

iptables -D OUTPUT 1 這里的1表示第一條規則。

當你刪除了前面的規則, 編號也會隨之改變。

我們刪除了前面2個規則,22端口還可以正常使用,說明沒問題了

service iptables save 進行保存。

Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

其實就是把剛才設置的規則寫入到 /etc/sysconfig/iptables 文件中。

 

實例6、DNS端口53設置

下面我們來看看如何設置iptables來打開DNS端口,DNS端口對應的是53

大家看到我現在的情況了吧,只開放22和80端口,我現在看看能不能解析域名。

host www.google.com 輸入這個命令后,一直等待,說明DNS不通出現下面提示 :

;; connection timed out; no servers could be reached

ping 一下域名也是不通

[root@localhost ~ping www.google.com

ping: unknown host www.google.com

我這里的原因就是 iptables 限制了53端口。

有些服務器,特別是Web服務器減慢,DNS其實也有關系的,無法發送包到DNS服務器導致的。

下面演示下如何使用 iptables 來設置DNS 53這個端口,如果你不知道域名服務端口號,你可以用命令 : grep domain /etc/services

[root@localhost ~grep domain /etc/services

domain 53/tcp # name-domain server

domain 53/udp

domaintime 9909/tcp # domaintime

domaintime 9909/udp # domaintime

我們一般使用 udp 協議。

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

這是我們 ping 一個域名,數據就是從本機出去,所以我們先設置 OUTPUT,我們按照ping這個流程來設置。

然后 DNS 服務器收到我們發出去的包,就回應一個回來

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

同時還要設置

iptables -A INPUT -p udp –dport 53 -j ACCEPT

iptables -A OUTPUT -p udp –sport 53 -j ACCEPT

下面開始測試, 可以用 iptables -L -n 查看設置情況,確定沒有問題就可以測試了

[root@localhost ~iptables -L -n

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp spt:53

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:53

Chain FORWARD (policy DROP)

target prot opt source destination

Chain OUTPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:53

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp spt:53

可以測試一下是否 DNS 可以通過iptables 了。

 

原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/78147

(0)
Linux.rookieLinux.rookie
上一篇 2017-06-17 11:33
下一篇 2017-06-17

相關推薦

  • N25_第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本     (1) 獲取當前主機的主機名,保存于hostname變量中;     (2) 判斷此變量的值是否為localhost,如果是…

    Linux干貨 2017-02-02
  • python高階函數與裝飾器

    ##**高階函數**– 函數是python中的一等公民– 函數也是對象,可調用對象– 函數可以作為普通變量、參數、返回值等等– 數學概念y = g(f(x))– 高階函數滿足以下至少一個條件:1.接收一個或多個函數作為參數 2.輸出一個函數 ##**舉例(計數器)**def counter(base…

    Linux干貨 2017-10-23
  • 第5周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell     ~]# egrep "^(root|fedora|user1)" /etc/passwd 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,如:hello();  …

    Linux干貨 2017-01-07
  • grep文本查找和正則表達式

    一、grep grep: (Global search REgular expression and Print outthe line)全局查找正則表達式并且打印結果行。不會對輸入的文本進行修改。 Unix的grep家族包括grep、egrep和fgrep,egrep是grep的擴展,支持更多的正則元字符; fgrep就是fixed grep或f…

    Linux干貨 2016-08-07
  • Ansible playbook

    目錄 1.1        playbook簡介… 1 1.2        Playbook使用場景… 1 1.3      &nbs…

    Linux干貨 2015-12-06
  • 文本處理章練習題

    2017.7.27練習 1、找出ifconfig “網卡名” 命令結果中本機的IPv4地址 ifconfig |head -n 2 |tail -n 1|tr -s ” ” : |cut -d: -f4   2、查出分區空間使用率的最大百分比值 df|tr -s ‘ ‘ %|sort -t% -k5 …

    2017-07-29
欧美性久久久久