iptable 基礎整理
iptables 參數:
--append -A chain 添加規則到鍊
--delete -D chain 從鍊裡面删除規則
--delete -D chain 根據規則号删除
--insert -I chain 【rulenum】插入規則預設為第一條
--list -L list規則
--flush -F 清空所有規則
--zero -Z 清空計數器
--policy -P chain target 設定預設規則
-X 删除自定義的鍊
iptables -FZ 清空規則清空計數器
options:
--protocol -p proto 針對協定過濾,如‘tcp’ 協定
--source -s address 基于源位址
--destination -d address 基于目的位址
--in-interface -i input name 指定進入接口
--jump -j target 跳轉
--numeric -n 數字輸出位址和端口
--out-interface -o output name 指定出去接口
--table -t table 指定表 預設為 ‘filter’表
--line-numbers 顯示規則号
iptables四張表5個鍊
1、filter表 作為主機防火牆過濾
2、nat表 作為端口、ip 映射
3、mangle表 配置路由标記,ttl、tos、mark)
4、raw表
5鍊
1、input 入棧
2、output 出棧
3、forward 轉發
4、prerouting 路由前
5、postrouting 路由後
基本格式
iptables -t 表名 /檢視/增加/替換/删除/清空 鍊名 比對條件 處理動作
執行個體:
iptables -L -n 檢視規則 = -nL
1、封22端口:
iptables -t filter -A INPUT --dport 22 -j DROP
= iptables -A INPUT --dport 22 -j DROP 預設是filter表,是以沒有指定 -t filter 表
-p #指定過濾的協定
--dport #指定目的端口(使用者請求的端口)
-j #對規則的具體處理方法 (ACCEPT,DROP,REJECT,SNAT/DNAT)源位址轉換、目的位址轉換
--sport #指定源端口
注: 删除剛才的規則
iptables -nL --line-number 顯示規則的号碼,剛才的指令規則行号為 1
iptables -D INPUT 1
2、禁止10.0.0.1 通路
iptables -I INPUT -p tcp -s 10.0.0.1 -i eth0 -j DROP
-I 将規則列為第一條
INPUT 鍊
-p tcp 協定
-s 10.0.0.1 源位址是10.0.0.1 就是從10.0.0.1 通路本機
-i eth0 指定本機接口,從eth0進入本機
-j DROP 處理方法為DROP
禁止
3、取反
iptables -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP
! 為取反
4、隻允許辦公網絡通路伺服器
iptables -I INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j ACCEPT
5、封單個IP
iptables -I INPUT -p tcp -s 10.0.0.1 -j DROP
檢視連接配接數最大的10個
netstat -an|awk '/^tcp/'|grep -i est|awk -F "[: ]+" '{print $6}'|sort|uniq -c |head -10
傳回:
4 10.0.01
6、封除 10.0.0.61 以外的是以機器對本機的通路
iptables -I INPUT -p tcp ! -s 10.0.0.61 -j DROP
7、同時封多個端口
iptables -I INPUT -p tcp -m multiport --dport 21,23,24,80,3306 -j DROP
iptables -I INPUT -p tcp --dport 23:8809 -j ACCEPT 從23--8809 端口範圍
8、比對ICMP ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP 忽略ping 包
iptables -A INPUT -p icmp -s 192.168.1.0/24 --icmp-type 8 -j ACCEPT
核心封ping
net.ipv4.icmp_echo_ignore_all=0
iptables 順序執行規則,第一條比對就不會執行下面的
是以: -I 預設是加大第一行的
iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.51 -j ACCEPT 允許51 ping
iptables -I INPUT -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP 非10.0.0.1 的ping 都DROP掉
有順序的!!!!!!!!!!!!!!!!!!!!!!!!!
比對網絡狀态
-m state --state
NEW: 已經或将啟動新的連接配接
ESTABLISHED: 已建立的連接配接
RELATED: 正在啟動的新連接配接
INVALID: 非法或無法識别的
例如:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-m limit --limit n/{second/minute/hour}: 限制指定時間内允許通過的數量及并發數
例如:
iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP
--limit-burst [n] 在同一時間内允許通過的請求“n”為數字,不指定預設為5
iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT
企業級防火牆項目
逛公園模式: 黑名單
看電影模式: 白名單
主機防火牆 ---- 白名單模式
網關 ---- 黑名單
一、各種清零
iptables -F
iptables -X
iptables -Z
二、允許自己的網段及22端口
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
三、設定預設規則
iptables -P INPUT DROP 設定預設規則 -P
iptables -P FORWARD DROP
iptables —P OUTPUT ACCEPT
四、設定其他的規則
iptables -A INPUT -i lo -j ACCEPT 允許本地連接配接,否則本地都無法連通
iptables —A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT 開放80 和443端口
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT 開放内網、網段
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
注:以上操作都在記憶體中生效
五、儲存
(Centos 7)
iptables -nL
iptables-save > /etc/sysconfig/iptables 存儲到iptables 配置檔案
(ubuntu 20.04 以上)
iptables-save > iptables.conf
iptables-restore < iptables.conf
六、日常維護
Centos:
修改 /etc/sysconfig/iptables配置 常用的放在前面
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT 添加到結尾 append 追加
生效
systemctl reload iptables
封掉規則要放在允許規則的上面才能生效
允許規則要放在允許規則的上面
常用規則要放在前面
防火牆規則寫成腳本
#!/bin/bash
IPT=/sbin/iptables
$IPT -F
$IPT -X
$IPT -Z
#預設防火牆規則,
$IPT --policy OUTPUT ACCEPT
$IPT --policy FORWARD DROP
$IPT -P INPUT DROP
#設定本地規則
$IPT -A INPUT -i lo -j ACCEPT
#設定通路規則
$IPT -A INPUT -s 202.82.17.0/24 -p all -j ACCEPT
$IPT -A INPUT -s ..........-p all -j ACCEPT
...
#icmp 允許ping 包
$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
#其他規則
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
chkconfig iptables on
systemctl enable iptables
注: 設定前先要 iptables -P INPUT ACCEPT 先要允許INPUT 入 ,否則清空後 ssh會連不上伺服器
nat做ip映射:
SNAT 源位址映射
10.0.0.3 的80 端口映射為 172.16.1.17的80端口
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
實作172.16.1.0/24端的主機通過124.32.54.26 外網ip共享上網
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26
DNAT 和 PNAT
外網通路内網 通過目的地之或者端口映射轉換
iptables -t nat -A PREROUTING -i ens192 -d 192.168.200.20(網關外網位址) -p tcp --dport 22 -j DNAT --to-destination 192.168.100.10:22(内網要暴露的主機ip:port)
PNAT
iptables -t nat -A PREROUTING -i ens192 -d 192.168.200.20 -p tcp --dport 23456 -j DNAT --to-destination 192.168.100.10:22 #通過端口映射 23456 --- 22 端口