1. 程式人生 > >七周三課 Linux網絡、firewalld和netfilter、netfilter5表5鏈等

七周三課 Linux網絡、firewalld和netfilter、netfilter5表5鏈等

網絡 iptables

linux網絡相關
ifconfig:查看網卡命令,這個命令在centos6中是默認安裝的,在centos7中我們需要安裝net-tools。
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::df71:e49:bd9a:8b3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:52:5a:0f txqueuelen 1000 (Ethernet)
RX packets 6714 bytes 894198 (873.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9197 bytes 2440939 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)

RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

這裏有一個參數-a,他的意思是網卡沒有IP的時候它是不顯示的。

ifdown 網卡名:關閉網卡
技術分享圖片
這裏有一個參數-a,他的意思是網卡沒有IP的時候它是不顯示的。
技術分享圖片
ifup 網卡名:網卡開啟
技術分享圖片
ifup/ifdown這兩個命令一般在我們單獨針對一個網卡進行更改,比如我們增加一個dns或者更改網關,改完我們要重啟網卡,但是我們又不想重啟所有網卡,我們只需要重啟指定網卡,那我們就可以用這兩個命令,如果我們正在使用這個網卡,那我們不能直接ifdown網卡,那樣我們就不能遠程連接了。但是我們可以這個樣做 ifdown 網卡名 && ifup 網卡名 。兩個命令一起執行,這樣就可以了。

給一個網卡設置多個IP
首先我們先到網卡配置文件中所在的目錄中拷貝一下
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-eth ifdown-post ifdown-Team ifup-aliases ifup-ipv6 ifup-post ifup-Team init.ipv6-global
ifcfg-lo ifdown-ippp ifdown-ppp ifdown-TeamPort ifup-bnep ifup-isdn ifup-ppp ifup-TeamPort network-functions
ifdown ifdown-ipv6 ifdown-routes ifdown-tunnel ifup-eth ifup-plip ifup-routes ifup-tunnel network-functions-ipv6
ifdown-bnep ifdown-isdn ifdown-sit ifup ifup-ippp ifup-plusb ifup-sit ifup-wireless
然後拷貝一下當前網卡
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33\:0(\是脫意的意思)
然後我們編輯這個文件
vi ifcfg-ens33\:0

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33:0"(需要改成新網卡名)
DEVICE="ens33:0"(需要改成新網卡名)
ONBOOT="yes"
IPV7_PRIVACY="no"
IPADDR=192.168.1.150(改成新IP)

然後執行命令
[root@localhost network-scripts]# ifdown ens33 && ifup ens33
成功斷開設備 ‘ens33‘。
連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/4)

然後我們再查詢一下網絡
[root@localhost network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::df71:e49:bd9a:8b3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:52:5a:0f txqueuelen 1000 (Ethernet)
RX packets 10789 bytes 1865182 (1.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9772 bytes 2509163 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.150 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:52:5a:0f txqueuelen 1000 (Ethernet)
這樣我們就獲得了新網卡

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 96 bytes 8232 (8.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 96 bytes 8232 (8.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

然後我們用windows ping一下新網卡的ip
技術分享圖片
可以ping通,證明沒有問題。

mii-tool 網卡名:查看網卡是否連接
[root@localhost network-scripts]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
這就證明我們的網卡是通的

有的時候我們用這個命令時會提示不支持,那我們就用ethtool 網卡名
[root@localhost network-scripts]# ethtool ens33
Settings for ens33:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes(如果是yes,就是連接成功。若是no則是沒有連接網卡)

hostnamectl:更改主機名。
sentos6不支持這個命令。
[root@localhost ~]# hostnamectl set-hostname linletao-001

更改完後我們在當前的終端下我們可以用hostname來查看主機名
[root@localhost ~]# hostname
linletao-001
但是我們發現最前面我們的主機名還是沒有改過來,如果我們想顯示新的主機名,我們需要重新登錄。

我們也可以進入一個子shell,讓他顯示新的主機名
[root@localhost ~]# bash
[root@linletao-001 ~]#

它的配置文件
[root@localhost ~]# cat /etc/hostname
linletao-001

設置DNS
DNS是用來解析域名的,平時我們上網都是直接數如一個網址,而DNS把這個網站解析到一個ip。
zailinux下設置DNS非常簡單。只要把DNS地址寫到配置文件/etc/resolv.conf中即可
[root@localhost ~]# cat /etc/resolv.conf

Generated by NetworkManager

search DHCP HOST
nameserver 202.96.69.38
nameserver 202.96.64.68
如果我們以後想改dns,那麽就直接改網卡的配置文件,當然也可以vim /etc/resolv.conf。但是這樣改只會是臨時更改,如果網卡重啟,那麽他還會被以前的dns所覆蓋。

linux下有一個特殊文件/etc/hosts也能解析域名,不過需要我們在裏面手動添加IP和域名這些內容。它的作用是臨時解析某個域名。
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

我們用vim編輯這個文件,在裏面增加一行內容。
[root@localhost ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.150 www.baidu.com(新增加的一行內容)

然後我們再ping一下www.baidu.com
[root@localhost ~]# ping www.baidu.com
PING www.baidu.com (192.168.1.150) 56(84) bytes of data.
64 bytes from www.baidu.com (192.168.1.150): icmp_seq=1 ttl=64 time=0.214 ms
64 bytes from www.baidu.com (192.168.1.150): icmp_seq=2 ttl=64 time=0.080 ms
64 bytes from www.baidu.com (192.168.1.150): icmp_seq=3 ttl=64 time=0.081 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.080/0.125/0.214/0.062 ms
這樣我們再ping這個網站的時候就會自動連接到我們設置的ip了。

/etc/hosts的格式很簡單,每行記錄一條記錄,分為兩部分,第一部分是IP,第二部分是域名。關於hosts的文件,我們需要註意以下幾點。
1.一個ip後面可以跟多個域名,甚至是幾十個上百個。
2.每行只能有一個ip,也就是一個域名不能對用多個ip。
3.如果有多行中出現相同的域名(對應ip不一樣),會安最下面出現的記錄來解析。

linux防火墻-netfilter
我們配置秘鑰認證的時候後,我們要關閉selinux,關閉selinux分為為兩種,一種是臨時關閉,一種是永久關閉。
臨時關閉的命令是:setenforce 0
永久關閉我們要編輯配置文件/etc/selinux/config
[root@linletao-001 ~]# vi /etc/selinux/config

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=enforcing改為(disabled關閉selinux)

SELINUXTYPE= can take one of three two values:

targeted - Targeted processes are protected,

minimum - Modification of targeted policy. Only selected processes are protected.

mls - Multi Level Security protection.

SELINUXTYPE=targeted(切記這行不要改)

然後我們用getenforce這個命令來查看selinux是否打開
[root@linletao-001 ~]# getenforce
Permissive
Permissive:雖然selinux也開啟了,但是他僅僅是遇到需要發生阻斷的時候它不需要真正的阻斷,他僅僅是個提醒。

selinux我們平時都是關閉的,如果開啟,會增大我們的運維管理成本,因為很多服務受限於selinux,我們把他關閉也不會有太大的安全問題。

linux的另一個防火墻:netfilter
netfilter在centos7以前的版本存在,在centos7中改了名字firewalld。他們兩個的防火墻機制不太一樣,但實際上他們的內部工具iptables的用法是一樣的,我們可以通過iptables工具去添加一些規則,比如我們把80端口開放,把20端口開放。把8080端口關閉,那麽我們就可以用iptables這個命令來實現,增加一定規則就可以了。不管是netfilter還是firewalld,他們都支持iptables命令的。雖然我們現在主流還是centos7,但是不排除還有用centos6甚至是centos5。所以我們也要了解netfilte的。

在centos7中默認的是firewalld。netfilte防火墻沒有開啟。我們現在可以在centos7中關閉firewalld,開啟netfilte。在7系統中運行6的防火墻機制是沒有問題的。

[root@linletao-001 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
我們先將fierwalld停掉,不讓他開機啟動。

[root@linletao-001 ~]# systemctl stop firewalld
然後我們在將它關掉。

我們開啟netfilte,在開啟之前,我們需要安裝一個包,iptables-services。
安裝完後會產生一個服務:
[root@linletao-001 ~] # systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

然後我麽把他開啟
[root@linletao-001 ~]#systemctl start iptables

然後我們可以通過命令iptables -nvL來查看他的默認規則
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
27 1860 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
29 29251 REJECT all --
* 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 16 packets, 1504 bytes)
pkts bytes target prot opt in out source destination

netfilter表
filter表:它包含了三個內置的鏈,包括INPUT、FORWARD、OUTPUT。

INPUT:數據包進入的時候,我們要經過的一個鏈。進入本機後我們要進行一些操作,比如訪問我們80端口的數據包,我們要檢查一下源IP,發現可疑IP我們要禁掉,這就是INPUT的作用。

FORWARD:數據進入到我們的設備,但它並不會進入我們的內核裏,因為這個數據包不是給你處理的,而是給另外一臺機器處理的,所以他要判斷一下目標地址是不是本機,如果不是本機,它就要經過FORWARD。經過FORWARD時我們也要進行一些操作,比如我們要把目標地址做一些更改,或者做一個轉發。

OUTPUT:在本機產生的包,出去之前做的一些操作。比如說我這個包是發給某一個IP的,這個IP我要禁掉,把這個IP加入黑名單,只要是發往這個IP的數據包我們都給他禁掉。

nat表:它的作用是網絡地址轉換和端口映射。它也包含三個鏈,PREROUTING、OUTPUT、POSTROUTING。

OUTPUT:它和filter表的OUTPUT作用相同。

PREROUTING:這個鏈用來更改這個數據包,在進來的瞬間更改。

POSTROUTING:而POSTROUTING也是要更改數據包,在他們出去的那一刻更改。

數據包流向分為經過本機和不經過本機兩種。
經過本機:數據包--->PREROUTING--->INPUT--->OUTPUT--->POSTROUTING
不經過本機:數據包--->PREROUTING--->FORWARD--->POSTROUTING
然後我們再針對數據包所在的那一個鏈做一些相應的規則處理,那這個就是iptables

iptables的基本語法

查看iptables的規則:iptables -nvL
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
27 1860 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
29 29251 REJECT all --
* 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 16 packets, 1504 bytes)
pkts bytes target prot opt in out source destination

iptables的規則儲存在/etc/sysconfig/iptables
[root@linletao-001 ~]# cat /etc/sysconfig/iptables

sample configuration for iptables service

you can edit this manually or use system-config-firewall

please do not ask us to add additional ports/services to this default configuration

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

有時候我們覺得規則不合適,想把所有的規則都清掉。輸入命令iptables -F
[root@linletao-001 ~]# iptables -F
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 38 packets, 6058 bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 20 packets, 1968 bytes)
pkts bytes target prot opt in out source destination

這時我們發現規則都沒有了,但是文件中還保存這規則,並保存在在配置文件/etc/sysconfig/iptables(文件路徑)中。如果我們想把當前的規則保存到文件中,我們則需要運行一個命令,service iptables save(保存規則),這樣才會把當前的規則保存到配置文件中去。但實際上默認規則清空後他就沒有任何規則,我們現在保存的只是一個空規則。如果不保存,我們可以重啟服務器或者是iptables規則,他都會加載配置文件中的規則的。

這些操作都是針對filter表,這是默認的表。

我們也可以查看nat表
[root@linletao-001 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 34 packets, 34150 bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 2 packets, 152 bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 2 packets, 152 bytes)
pkts bytes target prot opt in out source destination
net表中是沒有任何規則的。

service iptables save(保存規則):當我們把規則寫完後,他只是保存在當前的內存中生效的,如果我們想讓他重啟依然生效,我們需要做一個save操作,service iptables save保存規則。

iptables計數器清零:為什麽要清0呢,比如我們現在抓包,發現有一些請求來源的IP有異常,所以我們就會把這個IP給拒絕掉,然後我們在iptables -nvL的統計中會有統計數據量和數據包量。那我可以設定一個規則,如果過了半小時數據包量沒有超過一個範圍,那麽我們就可以將這個IP解封掉。我們是通過第一列的數字作為判斷依據。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
205 14520 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
在我們用 -nvL時第一列和第二列都是有數字的。其中pkts下面的數字是有多少個包,bytes是數據量有多少字節。如果我們想把這兩個數字清空,我們要運行這個命令iptables -Z來清零。

pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
這樣就清零了。但是過一會它就會重新出現數字,這是因為它無時無刻的都在通信,所以會產生數據。

給iptables增加規則
假設我們現在給iptables增加一條規則
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
這裏我麽們沒有加-t,默認就是針對filter表

iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
(針對的鏈) (指定的來源ip) (指定協議) (來源端口) (目標的ip) (目標端口) (數據直接扔掉)

[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
204 13828 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
138 140K REJECT all --
0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 DROP tcp --
* 192.168.188.1 192.168.188.128 tcp spt:1234 dpt:80(這就是我們剛增加的一條規則)

還有一種用法 -i插入
iptables -I INPUT -p tcp --dport 80 -j DROP
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80(新添加的規則)
411 29564 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
582 590K REJECT all --
0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 DROP tcp --
* 192.168.188.1 192.168.188.128 tcp spt:1234 dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 9 packets, 1068 bytes)
pkts bytes target prot opt in out source
我們不寫來源ip,也不寫目標ip,我們只寫目標的端口,但是我們一定要指定-ptcp,一旦我們用了--dport,我們前面一定要指定協議,如果不指定,就會報錯。用-I的作用是將這條規則插入到iptables規則的第一行。iptables在過濾的時候優先過濾通過-I添加的規則,因為-I會將他插入到第一行,一旦匹配,直接執行。然後再一條一條的往下執行。而-A是添加到最後一行所以會延後執行規則。

既然我們可以增加規則,可以插入規則,那麽我們也可以刪除規則 -d就是刪除規則。
iptables -D INPUT -p tcp --dport 80 -j DROP
[root@linletao-001 ~]# iptables -D INPUT -p tcp --dport 80 -j DROP
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
411 29564 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
582 590K REJECT all --
0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 DROP tcp --
* 192.168.188.1 192.168.188.128 tcp spt:1234 dpt:80
這樣我們就將第一條添加的命令給刪除了。

優勢也會出現下面這種情況,我們想刪除一條規則,但是隔了很長時間,我們已經忘了命令是怎樣寫的。這時候我們還有一種方法。就是通過--line-number給規則加上序列號,然後通過序列號刪除。
[root@linletao-001 ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 803 59932 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 928 940K REJECT all --
0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 0 0 DROP tcp --
* 192.168.188.1 192.168.188.128 tcp spt:1234 dpt:80(這是我們要刪除的)

然後我們開始刪除
[root@linletao-001 ~]# iptables -D INPUT 6
[root@linletao-001 ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 848 62928 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT tcp --
0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 939 951K REJECT all --
* 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
這樣我們就刪除成功了。

參數:-A是add(增加)
-s是source(來源),指定來源ip
-p指定協議
-d指定ip
-j後面跟動作
-I插入
-D刪除
-P默認策略(最好不要動,保持默認)

我們現在再總結一下關於iptables的命令語法。
iptables -nvL:查看規則
iptables -F :清空規則
iptables -Z :計數器清零
iptables -t :指定表的名字,不加-t是默認filter表
service iptables seva :保存規則。它將規則保存在/etc/sysconfig/iptables。我們重啟的時候它會調用裏面的規則。
iptables -A/-I:他們的區別在於-A是將新規則放到最後面,-I是將規則插入到最前面。在讀取的時候是先從第一條開始匹配,然後逐條向下。
iptables -D :刪除規則
-A,-I-D後面跟的是鏈的名字,可以是INPUT,OUTPUT, FORWARD(用的比較少)
-s :指定源IP
-p :指定協議,可以是tcp,icmp
--sport :指定源端口
--dport :指定目標端口
-d :指定目標地址
-j :跟你的行為,可以是DROP(丟掉包) ,ACCEPT(允許包), REJECT(拒絕包)
--line-numbers:列出規則編號,然後根據編號來刪除規則。
-P :指定鏈的默認策略。(最好不要直接去操作,有可能導致遠程終端斷開)

七周三課 Linux網絡、firewalld和netfilter、netfilter5表5鏈等