iptables 命令學習

iptables 命令學習


摘要

Linux 早起版本使用netfilter進行數據包過濾.
最新的版本開始改用 ebpf的方式進行內核編程式的包過濾.

netfilter 可以理解爲內核態的一個處理機制
iptables 是在用戶態進行管理netfilter配置的工具. 

也就可以理解爲:
iptables 是管理netfilter的一個工具
便於實現安全以及路由等功能. 

四表

raw 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT
mangle 表中的規則可以被哪些鏈使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有)
filter 表中的規則可以被哪些鏈使用:INPUT,FORWARD,OUTPUT

五鏈

PREROUTING 的規則可以存在於:raw表,mangle表,nat表。
INPUT 的規則可以存在於:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。
FORWARD 的規則可以存在於:mangle表,filter表。
OUTPUT 的規則可以存在於:raw表mangle表,nat表,filter表。
POSTROUTING 的規則可以存在於:mangle表,nat表。

四表五鏈的關係--來自朱雙印的blog

image


一些命令注意事項

關於關閉防火牆
很多blog說可以使用 iptables -F 的方式來清理防火牆的規則.
但是這一點有很多問題. 

建議需要先查看一下默認規則. 
iptables -L -v -n
注意最好是如下規則再進行-F 
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

如果是drop 後者是 reject 的話建議不要如此使用
建議可以使用如下命令進行修改
iptables -P INPUT ACCEPT

需要注意後面其實有很多注意事項: 
-L 羅列相關信息
-v 冗餘模式
-P 設置鏈的策略 -P 鏈路 策略

後面會將幫助打出來一遍進行學習與查看. 

一些常用命令

1. 查看, 注意可以通過 -t 查看特定的filter
iptables -L -n -v
2. 屏蔽IP地址
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
3. 屏蔽指定的ip指定的協議
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4. 解封某個地址
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
5. 阻止特定的傳出連接
iptables -A OUTPUT -p tcp --dport xxx -j DROP
6. 阻止特定的傳入連接
iptables -A INPUT -p tcp --dport xxx -j ACCEPT
7. 一次性處理多個端口
iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
8. 使用IP地址範圍
iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
9. 設置端口轉發
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
10. 放置flood攻擊
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
11. 屏蔽ping
iptables -A INPUT -p icmp -i eth0 -j DROP
12. 開放loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
13. 屏蔽指定mac地址
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
14. 限制併發連接數
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
15. 清空規則, 可以指定鏈表進行清除.
iptables -t nat –F
iptables -f
16. 保存和緩存iptables規則
iptables-save > ~/iptables.rules
iptables-restore < ~/iptables.rules
17. 允許建立相關連接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
18. 丟棄無效數據包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
19. 組織發送郵件
iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
20. 組織連接到某塊網卡
iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

注意以上命令來源:csdn. 感謝原作者. 


關於防火牆的功能

iptables 不僅可以實現防火牆的策略
還可以實現 路由轉發(軟路由)
K8S比較早的版本網絡棧都是採用的iptables
但是因爲如果K8S的集羣擴大之後會導致嚴重的性能衰退
iptables 管理起來非常複雜. 後來直接使用ipvs進行網絡棧處理
所以iptables的功能是非常強大的. 

附錄: 命令幫助

iptables -h
iptables v1.8.4

Usage: iptables -[ACD] chain rule-specification [options]
        iptables -I chain [rulenum] rule-specification [options]
        iptables -R chain rulenum rule-specification [options]
        iptables -D chain rulenum [options]
        iptables -[LS] [chain [rulenum]] [options]
        iptables -[FZ] [chain] [options]
        iptables -[NX] chain
        iptables -E old-chain-name new-chain-name
        iptables -P chain target [options]
        iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain            Append to chain
  --check   -C chain            Check for the existence of a rule
  --delete  -D chain            Delete matching rule from chain
  --delete  -D chain rulenum
                                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                                Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
                                Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
                                List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
                                Print the rules in a chain or all chains
  --flush   -F [chain]          Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
                                Zero counters in chain or all chains
  --new     -N chain            Create a new user-defined chain
  --delete-chain
             -X [chain]         Delete a user-defined chain
  --policy  -P chain target
                                Change policy on chain to target
  --rename-chain
             -E old-chain new-chain
                                Change chain name, (moving any references)
Options:
    --ipv4      -4              Nothing (line is ignored by ip6tables-restore)
    --ipv6      -6              Error (line is ignored by iptables-restore)
[!] --proto     -p proto        protocol: by number or name, eg. `tcp'
[!] --source    -s address[/mask][...]
                                source specification
[!] --destination -d address[/mask][...]
                                destination specification
[!] --in-interface -i input name[+]
                                network interface name ([+] for wildcard)
 --jump -j target
                                target for rule (may load target extension)
  --goto      -g chain
                               jump to chain with no return
  --match       -m match
                                extended match (may load extension)
  --numeric     -n              numeric output of addresses and ports
[!] --out-interface -o output name[+]
                                network interface name ([+] for wildcard)
  --table       -t table        table to manipulate (default: `filter')
  --verbose     -v              verbose mode
  --wait        -w [seconds]    maximum wait to acquire xtables lock before give up
  --wait-interval -W [usecs]    wait time to try to acquire xtables lock
                                default is 1 second
  --line-numbers                print line numbers when listing
  --exact       -x              expand numbers (display exact values)
[!] --fragment  -f              match second or further fragments only
  --modprobe=<command>          try to insert modules using this command
  --set-counters PKTS BYTES     set the counter during insert/append
[!] --version   -V              print package version.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章