天天看點

iptables 整理

作者:北京老頭做運維

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 端口