一、iptables的簡介
iptables/netfilter(下文中簡稱為iptables)組成Linux平臺(tái)下的包過濾防火墻,含有網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translate)、數(shù)據(jù)包內(nèi)容修改以及數(shù)據(jù)包過濾等功能。
- iptables可以理解成一個(gè)是client,用戶通過iptables這個(gè)客戶端代理,將安全設(shè)定執(zhí)行到對(duì)應(yīng)的"安全框架"中,這個(gè)"安全框架"才是真正的防火墻,名字叫netfilter;
- netfilter是iptables的backend,是防火墻真正的安全框架(framework),netfilter位于內(nèi)核空間。
二、iptable下,數(shù)據(jù)經(jīng)過防火墻的流程
1、表tables:各類功能相似的規(guī)則rule的集合
iptables內(nèi)置了4個(gè)表優(yōu)先級(jí)次序(由高而低):raw --> mangle --> nat --> filter
- raw表: 優(yōu)先級(jí)最高,通常與NOTRACK一起使用,用于跳過連接跟蹤(conntrack)和 nat 表的處理;iptable_raw
- mangle表:修改包頭部的某些特殊條目,如 TOS、TTL、打上特殊標(biāo)記 MARK 等,以影響后面的路由決策;iptable_mangle
- nat表:用于進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換,如 SNAT(修改源地址)、DNAT(修改目的地址)、REDIRECT 重定向等;iptable_nat
-
filter表:用于過濾數(shù)據(jù)包,比如 ACCEPT(允許),DROP(丟棄)、REJECT(拒絕)、LOG(記錄日志);iptable_filter
表鏈關(guān)系
2、鏈chains:數(shù)據(jù)包流轉(zhuǎn)的線路節(jié)點(diǎn)
iptables上有5條鏈
- PREROUTING 入站節(jié)點(diǎn),可以存在于:raw表,mangle表,nat表
INPUT 進(jìn)入用戶空間前的節(jié)點(diǎn),可以存在于:mangle表,filter表,(centos7中還有nat表,centos6中沒有) - FORWARD 轉(zhuǎn)發(fā)節(jié)點(diǎn),可以存在于:mangle表,filter表
- OUTPUT 離開用戶空間的節(jié)點(diǎn),可以存在于:raw表mangle表,nat表,filter表
-
POSTROUTING 出站的節(jié)點(diǎn),可以存在于:mangle表,nat表
數(shù)據(jù)經(jīng)過防火墻的流程
三、CentOS各個(gè)版本防火墻的C/S差異
- CentOS 6及以前都是iptables/netfilter
- CentOS 7默認(rèn)使用firewalld作為client,但是中間還是通過iptables的命令操作netfilter
-
CentOS 8繼續(xù)使用firewalld作為client,但是底層不再使用iptables命令以及netfilter作為backend了,取而代之的是ntftable
CentOS各個(gè)版本防火墻
四、CentOS 7 恢復(fù)使用iptables.service的方法
CentOS 7 默認(rèn)使用firewalld.service,要想切換iptables.service需要安裝iptables(默認(rèn)已經(jīng)安裝了)和iptables-services這兩個(gè)依賴包
- 停止并關(guān)閉開機(jī)自啟動(dòng) firewalld
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
- 安裝iptables-service
$ sudo yum install -y iptables-services
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解決依賴關(guān)系
--> 正在檢查事務(wù)
---> 軟件包 iptables-services.x86_64.0.1.4.21-34.el7 將被 安裝
--> 解決依賴關(guān)系完成
依賴關(guān)系解決
============================================================================================================================================
Package 架構(gòu) 版本 源 大小
============================================================================================================================================
正在安裝:
iptables-services x86_64 1.4.21-34.el7 base 52 k
事務(wù)概要
============================================================================================================================================
安裝 1 軟件包
總下載量:52 k
安裝大?。?3 k
Downloading packages:
警告:/var/cache/yum/x86_64/7/base/packages/iptables-services-1.4.21-34.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
iptables-services-1.4.21-34.el7.x86_64.rpm 的公鑰尚未安裝
iptables-services-1.4.21-34.el7.x86_64.rpm | 52 kB 00:00:00
從 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 檢索密鑰
導(dǎo)入 GPG key 0xF4A80EB5:
用戶ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
指紋 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
軟件包 : centos-release-7-8.2003.0.el7.centos.x86_64 (@anaconda)
來自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安裝 : iptables-services-1.4.21-34.el7.x86_64 1/1
驗(yàn)證中 : iptables-services-1.4.21-34.el7.x86_64 1/1
已安裝:
iptables-services.x86_64 0:1.4.21-34.el7
完畢!
- 設(shè)置開機(jī)自啟動(dòng)和啟動(dòng)iptables.service(此服務(wù)沒有daemon在執(zhí)行,會(huì)顯示active(exited),只運(yùn)行一次結(jié)束退出)
$ systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
$ systemctl start iptables.service
$ systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
Active: active (exited) since 五 2020-05-29 22:13:36 CST; 8s ago
Process: 74728 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
Main PID: 74728 (code=exited, status=0/SUCCESS)
5月 29 22:13:36 shell-host systemd[1]: Starting IPv4 firewall with iptables...
5月 29 22:13:36 shell-host iptables.init[74728]: iptables: Applying firewall rules: [ 確定 ]
5月 29 22:13:36 shell-host systemd[1]: Started IPv4 firewall with iptables.
- 查看配置文件sudo cat /etc/sysconfig/iptables
[clam@shell-host ~]$ sudo cat /etc/sysconfig/iptables
[sudo] clam 的密碼:
# 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的命令操作
#查看iptables現(xiàn)有規(guī)則
iptables -L -n
#先允許所有,不然有可能會(huì)杯具
iptables -P INPUT ACCEPT
#清空所有默認(rèn)規(guī)則
iptables -F
#清空所有自定義規(guī)則
iptables -X
#所有計(jì)數(shù)器歸0
iptables -Z
#允許來自于lo接口的數(shù)據(jù)包(本地訪問)
iptables -A INPUT -i lo -j ACCEPT
#開放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#開放21端口(FTP)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#開放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#開放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允許ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#允許接受本機(jī)請(qǐng)求之后的返回?cái)?shù)據(jù) RELATED,是為FTP設(shè)置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丟棄
iptables -P INPUT DROP
#所有出站一律綠燈
iptables -P OUTPUT ACCEPT
#所有轉(zhuǎn)發(fā)一律丟棄
iptables -P FORWARD DROP<span style="color:#000000;border:none;"><span style="color:#000000;border:none;">
#保存上述規(guī)則
service iptables save


