由於Linux iptables預設是沒有Log紀錄的,因次參考了Tomato的設定將防火牆設定可以完整記錄封包進出Log設定方式。

防火牆設定參數

-P

定義政策( Policy ),注意,這個 P 為大寫。

INPUT

封包為輸入主機的方向。

OUTPUT

封包為輸出主機的方向。

FORWARD

封包為不進入主機而向外再傳輸出去的方向。

PREROUTING

在進入路由之前進行的工作。

OUTPUT

封包為輸出主機的方向。

POSTROUTING

在進入路由之後進行的工作。

防火牆參數說明

-A :新增加一條規則,該規則增加在最後面,例如原本已經有四條規則,使用 -A 就可以加上第五條規則! -I :插入一條規則,如果沒有設定規則順序,預設是插入變成第一條規則,例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5

  • INPUT :規則設定為 filter table 的 INPUT 鏈
  • OUTPUT :規則設定為 filter table 的 OUTPUT 鏈
  • FORWARD:規則設定為 filter table 的 FORWARD 鏈

-o 設定『封包流出』的網路卡介面 

-i  設定『封包進入』的網路卡介面

interface :網路卡介面,例如 ppp0, eth0, eth1….

-p :請注意,這是小寫呦!封包的協定。

  • tcp :封包為 TCP 協定的封包
  • upd :封包為 UDP 協定的封包
  • icmp:封包為 ICMP 協定
  • all :表示為所有的封包

–sport 來源封包的 port 號碼,也可以使用 port1:port2 如 21:23同時通過 21,22,23 的意思

-d 目標主機的 IP 或者是 Network ( 網域 )

–dport 目標主機的 port 號碼

-j 動作,可以接底下的動作:

  • ACCEPT :接受該封包
  • DROP  :丟棄封包
  • LOG  :將該封包的資訊記錄下來 (預設記錄到 /var/log/messages 檔案)

防火牆設定內容(直連)

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.

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

:logdrop – [0:0]
-A logdrop -m state –state NEW -j LOG –log-prefix “DROP ” –log-level 7
-A logdrop -j DROP

:logreject – [0:0]
-A logreject -j LOG –log-prefix “REJECT ” –log-level 7
-A logreject -p tcp -j REJECT –reject-with tcp-reset

:logaccept – [0:0]
-A logaccept -m state –state NEW -j LOG –log-prefix “ACCEPT ” –log-level 7
-A logaccept -j ACCEPT

:INPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
-A INPUT -i eth0 -p tcp –tcp-flags ALL ALL -j DROP
-A INPUT -i eth0 -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
-A INPUT -i eth0 -p tcp –tcp-flags ALL NONE -j DROP
-A INPUT -i eth0 -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -i eth0 -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
-I INPUT -p tcp -s 要阻擋的IP -j logdrop #可多行
-A INPUT -m state –state INVALID -j DROP
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j logaccept
-A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 200 -j logreject
-A INPUT -j REJECT –reject-with icmp-host-prohibite
-A INPUT -p ALL -j logdrop

:FORWARD – [0:0]
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j LOG

#:OUTPUT ACCEPT [0:0]
#-A OUTPUT -p ALL -m state –state NEW -m limit –limit 60/m -j LOG –log-level DEBUG –log-prefix “ACCEPT:”
# IPT DROP OUTPUT DEAD
#-A OUTPUT -m limit –limit 3/minute –limit-burst 5 -j LOG –log-level DEBUG –log-prefix “ACCEPT:”
COMMIT

防火牆設定內容(NAT)

*mangle
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -i eth0 -d 192.168.16.1/255.255.255.0 -j DROP
COMMIT

#NAT定義

*nat
:PREROUTING ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:WANPREROUTING – [0:0]
-A PREROUTING -d 對外的IP -j WANPREROUTING
-A WANPREROUTING -p icmp -j DNAT –to-destination 192.168.16.1
#-A WANPREROUTING -p udp –dport 500 -j DNAT –to-destination 192.168.16.x:80
-A WANPREROUTING -p tcp  –dport 888 -j DNAT –to-destination 192.168.16.x:333

#對內的IP網段依自身環境需求變更

-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth0 -d 192.168.16.1 -j MASQUERADE
-A POSTROUTING -o eth0 -s 192.168.16.1/255.255.255.0 -d 192.168.16.1/255.255.255.0 -j SNAT –to-source 192.168.16.1
COMMIT

*filter
:INPUT DROP [0:0]

:OUTPUT ACCEPT [0:0]

:logdrop – [0:0]
-A logdrop -m state –state NEW -j LOG –log-prefix “DROP ” –log-level 7
-A logdrop -j DROP

:logreject – [0:0]
-A logreject -j LOG –log-prefix “REJECT ” –log-level 7
-A logreject -p tcp -j REJECT –reject-with tcp-reset

:logaccept – [0:0]
-A logaccept -m state –state NEW -j LOG –log-prefix “ACCEPT ” –log-level 7
-A logaccept -j ACCEPT
-A INPUT -m state –state INVALID -j DROP
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

-N shlimit
-A shlimit -m recent –set –name shlimit
-A shlimit -m recent –update –hitcount 4 –seconds 60 –name shlimit -j logdrop
-A INPUT -p tcp –dport 22 -m state –state NEW -j shlimit
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p icmp -m limit –limit 1/second -j logaccept
-A INPUT -p udp –dport 33434:33534 -m limit –limit 5/second -j logaccept
#-A INPUT -p tcp –dport 443 -j logaccept
-A INPUT -p udp -s 192.168.16.1 –dport 161 -j logaccept
-A INPUT -j logdrop

:FORWARD DROP [0:0]
-A FORWARD -i eth0 -o eth0 -j ACCEPT
-A FORWARD -m state –state INVALID -j DROP
-A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

:wanin – [0:0]
-A wanin -p tcp -m tcp -d 192.168.16.2 –dport 888 -j logaccept

:wanout – [0:0]
-A FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -j wanin
-A FORWARD -o eth0 -j wanout
-A FORWARD -i eth0 -j logaccept

#設定開放通過的IP.Port對應
#-A wanin -p udp -m udp -d 192.168.1.x –dport 80 -j logaccept
COMMIT