~ read.
iptables簡單設置

iptables簡單設置

個人認為,iptables作為一個應用層的存在,是最為開放、高效的訪問策略管理程序,他和運行在Linux核心層的Netfilter配合工作,成為了一個經典的Ring3 & Ring0架構典範。iptables可以有很高級且廣泛的應用,我計劃在日後將這些都整理出來,以備查找。今天,先上一片篇礎配置。

頭部

  • 因為手上同時管理著多台使命不同服務器,為了防止平時在修改配置時弄錯,所以在頭部寫上服務器名稱是個不錯的習慣
# Server-Info
  • 首先,是三个内建链
*filter  
:INPUT ACCEPT [0:0]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0]  

下面開始寫規則,規則本著一個基本的思路:出口入口控制其中一個即可,另一個可以完全開放,這樣可以很大程度上降低配置成本,所以我們在末尾的最後一條規則,使用-A OUTPUT -j ACCEPT,所有出站數據全部允許,然後去設置入站規則

配置

  • 基本配置:開放本地ping、lookback!等
-A INPUT -i lo -j ACCEPT  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p icmp -j ACCEPT  
-A INPUT -j REJECT --reject-with icmp-host-prohibited  
  • 然後是內網白名單
-A INPUT -s 10.0.0.0/8 -j ACCEPT  
-A INPUT -s 172.16.0.0/12 -j ACCEPT  
-A INPUT -s 192.168.0.0/16 -j ACCEPT  

為規範書寫,也可以在內網白名單下面配置你需要的外網白名單,比如允許特定IP的服務器訪問特定端口等.

  • 然後是訪問控制端口
-A INPUT -p tcp --dport 21 -j ACCEPT  //ftp service
-A INPUT -p tcp --dport 80 -j ACCEPT  //web service
-A INPUT -p tcp --dport 443 -j ACCEPT  //SSL service
-A INPUT -p tcp --dport 22 -j ACCEPT  //ssh service 


強調一下SSH端口,別忘記開了!否則後果你應該知道😄

  • 然後,讓我們幹掉一些hacker常用的木馬端口,這些端口的數據全部丟棄
-A OUTPUT -p tcp --sport 31337:31340 -j DROP  
-A OUTPUT -p tcp --sport 27444 -j DROP  
-A OUTPUT -p tcp --sport 27665 -j DROP  
-A OUTPUT -p tcp --sport 20034 -j DROP  
-A OUTPUT -p tcp --sport 9704 -j DROP  
-A OUTPUT -p tcp --sport 137:139 -j DROP  
-A OUTPUT -p tcp --sport 2049 -j DROP  
  • 处理IP碎片数量,防止攻击,允许每秒100个
-A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT  
  • 设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
-A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT  
  • 丢弃坏的TCP包
-A FORWARD -p TCP ! --syn -m state --state NEW -j DROP  
  • 开启转发功能
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i eth1 -o eh0 -j ACCEPT  
  • 除上面設置的規則外,拒绝其它所有的進站和轉發
-A INPUT -j DROP  
-A FORWARD -j DROP  
  • 最後,开放出口
-A OUTPUT -j ACCEPT  
COMMIT  

iptables常用命令

$ iptables -F        //清除所有規則鏈的規則
$ iptables -X        //清除所有自定義鏈規則
$ iptables -nL --line-number   //查看當前配置
$ iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]   //添加一條規則

伸手黨複製粘貼區

# Server-Info

*filter  
:INPUT ACCEPT [0:0]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0] 

#開放ping/lo
-A INPUT -i lo -j ACCEPT  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p icmp -j ACCEPT  
-A INPUT -j REJECT --reject-with icmp-host-prohibited  

#內網白名單  
-A INPUT -s 10.0.0.0/8 -j ACCEPT  
-A INPUT -s 172.16.0.0/12 -j ACCEPT  
-A INPUT -s 192.168.0.0/16 -j ACCEPT  

#訪問控制端口    
-A INPUT -p tcp --dport 21 -j ACCEPT   //ftp service
-A INPUT -p tcp --dport 80 -j ACCEPT   //web service
-A INPUT -p tcp --dport 443 -j ACCEPT  //SSL service
-A INPUT -p tcp --dport 22 -j ACCEPT   //ssh service 

#常用木馬端口
-A OUTPUT -p tcp --sport 31337:31340 -j DROP  
-A OUTPUT -p tcp --sport 27444 -j DROP  
-A OUTPUT -p tcp --sport 27665 -j DROP  
-A OUTPUT -p tcp --sport 20034 -j DROP  
-A OUTPUT -p tcp --sport 9704 -j DROP  
-A OUTPUT -p tcp --sport 137:139 -j DROP  
-A OUTPUT -p tcp --sport 2049 -j DROP  

#处理IP碎片数量,防止攻击,允许每秒100个  
-A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT  

#设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包  
-A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT  

#丢弃坏的TCP包  
-A FORWARD -p TCP ! --syn -m state --state NEW -j DROP  

#开启转发功能
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i eth1 -o eh0 -j ACCEPT  

#拒绝其它所有的進站和轉發
-A INPUT -j DROP  
-A FORWARD -j DROP  

#最後,开放出口  
-A OUTPUT -j ACCEPT  

COMMIT  

寫在最後

  • 每次修改了配置之後,記得使用systemctl restart iptablesreload規則,然後用iptables -nL --line-number查看、確認配置正確生效

其他iptables的玩法,稍後陸續推出