一、防火牆分類
二、Linux防火牆(Iptables)
netfilter:又稱“內核空間”
iptables:又稱“用戶空間”
1、Iptables默認的四張表
1)filter: 用於防火牆,默認有INPUT/OUTPUT/FORWARD三條鏈
2)nat: 網絡地址轉換,默認有PREROUTING/POSTROUTING/OUTPUT三條鏈
3)mangle: 流量×××,默認有五條鏈(對數據進行標記)
4)raw: 用於狀態跟蹤,默認有兩條鏈
iptables -t nat -L //查看iptables裏的nat表規則
iptables -t filter -L //查看iptables裏的filter表規則
iptables -t mangle -L //查看iptables裏的mangle表規則
iptables -t raw -L //查看iptables裏的raw表規則
說明:-t 指定表
2、Iptabels默認的五條規則鏈
1)INPUT: 如果一個數據包的目的地址是LINUX本身,則進入INPUT鏈
2)OUTPUT: 源地址是LINUX本身
3)FORWARD: 數據包從一塊網卡接收,從另一塊網卡發出,經過LINUX的包,進入這條鏈的
4)PREROUTING: 路由前
5)POSTROUTING: 路由後
iptables -N yy //-N 自定義規則鏈,自己在表裏創建一個規則鏈,名字自己隨便寫
iptables -X yy //刪除自定義規則鏈
表對應的鏈如下圖:表裏面存鏈,鏈裏又存規則
3、Iptables端口號範圍
知名端口號: <254的端口號 保留給UNIX服務端口號: 254~1024之間端口號
自定義端口號: >1024的端口號
三定位:
IP地址 + 協議(TCP/UDP)+ 端口號
如:客戶端A用SSH訪問服務器B
A在用ssh訪問B時,B是用22端口響應,而A的端口是>1024隨機生成
發起者的端口號是>1024隨機的,接受者是固定的
4、編寫規則
規則選項
基本匹配條件
最基本的目標操作
*ACCEPT : 允許通過/旅行
*DROP : 直接丟棄,不給出任何迴應
*REJECP : 拒絕通過,必要時會給出提示
*LOG :記錄日誌,然後傳給下一條規則(匹配即停止,規律的唯一例外)
iptables -F //清空全部的路由規則
iptables -F INPUT //只清空INPUT的規則
iptables -P INPUT DROP //更改默認規則爲拒絕((這默認規則不能設置成REJECT)
iptables -nL //列出所有規則
iptables -nL --line-numbers //查看防火牆規則,每個規則註明序號
iptables -t nat -nvl //查看指定表
iptables -A INPUT -p icmp -j DROP //拒絕ping防火牆本身
iptables -I INPUT 1 -s 192.168.194.1 -p icmp -j ACCEPT //允許指定IP地址ping防火牆
iptables -D INPUT 2 //刪除防火牆的INPUT鏈中第二條規則
允許特定IP地址訪問LINUX的telnet服務
1.iptables -P INPUT DROP
2.iptables -A INPUT -s 192.168.194.1 -p tcp --dport 23 -j ACCEPT
向INPUT鏈插入規則,作爲第一條;從eth0網卡收到的、訪問telnet服務的數據包,拒絕
iptables -I INPUT -i eth0 -p tcp --dport 23 -j REJECT
三、FORWARD鏈的使用
echo-request 准許發送
echo-reply 准許迴應
要使用FORWARD鏈,首先要打開linux路由轉發功能
臨時打開路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
永久打開轉發功能:
# echo 'echo 1 > /proc/sys/net/ipv4/ip_forward' >> /etc/rc.local
或者
# vi /etc/sysctl.conf
net.ipv4.ip_forward= 1
# sysctl -p
假設內網段:192.168.194.0/24
假設外網段:192.168.195.0/24
1、拒絕192.168.195.0/24網段訪問192.168.194.0/24網段的telnet服務
iptables -A FORWARD -s 192.168.195.0/24 -d 192.168.194.0/24 -p tcp --dport 23 \
-i eth1 -o eth0 -j REJECT
2、拒絕SSH協議通過防火牆
iptables -A FORWARD -p tcp --dport 22 -j REJECT
3、不是192.168.195.0/24網段的主機訪問SSH服務,可通過
iptables -I FORWARD ! -s 192.168.195.0/24 -p tcp --dport 22 -j ACCEPT
4、防火牆拒絕icmp的請求
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
5、允許192.168.195.0/24網段進行PING
iptables -I INPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-request -j ACCEPT
6、防火牆拒絕發送echo-reply
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j REJECT
7、允許防火牆迴應192.168.195.0/24網段的ping
iptables -I OUTPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
8、防火牆拒絕192.168.195.0/24對其進行TCP連接(檢查SYN/ACK/RST/FIN四個位置,其中SYN被置位)
iptables -I INPUT -s 192.168.195.0/24 -p tcp --tcp-flags SYN,ACK,RST,FIN SYN -j REJECT
9、從eth1發過來的tcp連接請求都拒絕
iptables -I INPUT -p tcp --tcp-flag SYN,ACK,FIN,RST SYN -j REJECT
四、擴展匹配
1、拒絕指定MAC地址的主機對防火牆本身的訪問
iptables -A INPUT -m mac --mac-source 00:0C:29:43:CA:BA -j REJECT
2、在防火牆上通過一條命令打開多個端口
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
3、SSH登錄的IP範圍控制
允許從 192.168.4.10-192.168.4.20登錄
禁止從 192.168.4.0/24網段其他的IP登錄
# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range
192.168.4.10-192.168.4.20 -j ACCEPT
# iptables -A INPUT -p tcp -dport 22 -s 192.168.4.0/24 -j DROP
4、192.168.194.0/24作爲內網,192.168.195.0/24作爲外網。從內到外的訪問不受限制,從外到內的主 動連接全部拒絕
# iptables -A FORWARD -s 192.168.194.0/24 -j ACCEPT
# iptables -A FORWARD -d 192.168.194.0/24 -j REJECT
# iptables -I FORWARD -d 192.168.194.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
說明:
網絡連接的五種狀態
NEW: 請求建立連接的包、完全陌生的包
ESTABLISHED:將要或已經建立連接的包
RELATED: 與已知某個連接相關聯的包
INVALID: 無對應連接,以及連接無效的包
UNTRACKED: 未跟蹤狀態的包
5、減輕DOS(拒絕服務)***
比如反射/反彈式***
iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP
iptables -A FORWARD -m state --state NWE -p tcp ! --syn -j DROP
6、免狀態跟蹤
比如訪問量較大的web服務
iptables -t raw -A PREROUTING -d 192.168.4.100 -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -s 192.168.4.100 -p tcp --sport 80 -j NOTRACK
iptables -t raw -A FORWARD -m state --state UNTRACKED -j ACCEPT
五、NAT表-Iptables
1、SNAT 把源地址轉換,所以稱作Source NAT
實現: 注意把ip_forward打開;
寫入iptables規則;
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 201.1.1.1
#iptables -t nat -nvL //查看
說明:內網IP 192.168.1.0/24
公網IP 201.1.1.1
連接到外網的網卡 eth1
2、SNAT ip僞裝
作用:當連接外網時,使用的IP地址不是固定的(如ADSL撥號連接),可以利用IP僞裝來簡化配置
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
注意:如果使用ADSL撥號,將會出現一個PPP0網絡,iptables的規則,
出口設備應該使用ppp0( -o ppp0 )
ADSL撥號連接
(1)安裝軟件
#yum install -y rp-pppoe
(2)設置ADSL連接
#pppoe-setup //根據嚮導回答問題
3、DNAT 將內網服務器發佈至公網
例一:局網域有一臺WEB服務器,IP地址是192.168.194.10。防火牆連接公網的端口是eth1,當訪問eth1 的IP地址(192.168.195.40)80端口時,就把這個請求發給內網的WEB服務器。
# iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.194.10
例二:與例一類似,只是內網服務器提供ssh訪問。當訪問防火牆公網地址的2222端口時,將請求發送到 內網服務器的22端口。
# iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 2222 \
-j DNAT --to-destination 192.168.194.10:22
客戶端連接: # ssh 192.168.195.40 -p 2222
例三:如果發佈FTP服務器,命令配置與發佈WEB服務器類似,只是端口號不一樣。但是應該加載兩個相 關的模塊。
# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
# service iptables restart
六、防火牆規則的備份和還原
# service iptables save //正常保存
# iptables-save > ~/iptables-20131210 //將當前配置保存到一個指定文件
# iptables-restore < ~/iptables-20131210 //根據備份的文件進入恢復防火牆配置
七、調整內核參數
# vi /etc/sysctl.conf
net.ipv4.ip_default_ttl=128 ->設置IP包默認的TTL值從多少開始
net.ipv4.icmp_echo_ignore_all=1 ->設置主機忽略icmp消息
net.ipv4.icmp_echo_ignore_broadcasts = 1 ->設置主機響應icmp廣播消息