iptables的規則介紹

Linux 的防火牆

SELinux

臨時生效
setenforce 0
html

[root@jinkai ~]#
[root@jinkai ~]# getenforce
Enforcing
[root@jinkai ~]# setenforce 0
[root@jinkai ~]# getenforce
Permissivelinux

永久生效
修改配置文件:/etc/selinux/config 重啓後生效
bash

[root@jinkai ~]# cat /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=disabled
.# SELINUXTYPE= can take one of three values:
.# targeted - Targeted processes are protected,
.# minimum - Modification of targeted policy. Only selected processes are protected.
.# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@jinkai ~]# getenforce
Disabled網絡

netfilter防火牆

netfilter和Firewalld,iptables三者之間的關係
Iptables和firewalld 都只是防火牆的管理工具,一樣都是基於iptables的命令管理,真正實現防火牆功能的是netfilter
tcp

Iptables 防火牆管理工具

關閉firewalld防火牆工具,安裝iptables工具ide

[root@jinkai ~]# systemctl disable firewalld //禁止firewalld 開機自啓動
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@jinkai ~]# systemctl stop firewalld //關閉firewalld 服務器
[root@jinkai ~]# yum install -y iptables-services //安裝iptables服務
[root@jinkai ~]# systemctl enable iptables // 開啓開機自啓動
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@jinkai ~]# systemctl start iptables //打開iptables服務工具

查詢iptables默認規則
iptables -nvL
.net

[root@jinkai ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
29 1700 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
0 0 REJECT all --
* 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedrest

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 17 packets, 1260 bytes)
pkts bytes target prot opt in out source destination
[root@jinkai ~]#

-nvL選項表示查看規則,-F表示臨時清除當前規則,-n表示不針對ip反解析主機名,-L表示列出,-v表示列出信息更加詳細。
必須使用service iptables save 保存才行,防火牆規則保存在/etc/sysconfig/iptables中;

netfilter的5個表

filter:用於過濾包,是系統預設表,最經常使用的表;有INPUT、OUTPUT、FORWARD等三個鏈;
nat:主要用於網絡地址轉換;有PREROUTING、OUTPUT、POSTROUTING等三個鏈;
mangle:用來給數據包作標記,而後根據標記來操做相應的包;
raw:能夠實現不追蹤某些數據包,默認系統的數據包都會被追蹤;
security:強制訪問控制(MAC)的網絡規則;

netfilter的5個鏈

PREROUTING:數據包進入路由表以前;
INPUT:經過路由表後目的地爲本機;
FORWARD:經過路由表,目的地部位本機;
OUTPUT:有本機產生,向外轉發;
POSTROUTING:發送到網卡接口以前;
詳細能夠參考:https://www.cnblogs.com/metoy/p/4320813.html

iptables基本語法

-A/-D:增長或刪除一條規則;
-I:插入一條規則;
-F:清空規則;
-Z:清空計數,從新開始計數;
-t:指定表,後面必須帶參數表名,-t nat;
-n:不針對ip反解析主機名;
-v:更加詳細的信息;
-L:列出,與-v一塊兒使用;
-p:表示指定協議,能夠是tcp、udp、icmp;
--dport:跟-p一塊兒使用,表示指定目標端口;
--sport:跟-p一塊兒使用,表示指定源端口;
-s:表示指定源ip(能夠是一個網段)
-d:表示指定目的ip(能夠是一個網段)
-j:後面跟動做,其中ACCEPT表示容許包、DROP表示丟掉包、REJECT表示拒絕包;
-i:表示指定網卡(不經常使用);

清空和查看防火牆規則
iptables -F 把全部規則刪除,不加-t 指定表,默認刪除filter表;
service iptables save 保存到文件,重啓生效;

[root@jinkai ~]# iptables -F
[root@jinkai ~]# iptables -nvL
Chain INPUT (policy ACCEPT 6 packets, 364 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 4 packets, 368 bytes)
pkts bytes target prot opt in out source destination
[root@jinkai ~]#

查看指定表

iptables -t nat 

查看指定nat表,-t 參數就是指定表;

iptables -t nat -nvL 查看net表規則;
[root@jinkai ~]# iptables -t nat -nvL

清空包以及流量計數器歸零

iptables -Z

增長規則
-A:增長規則,增長的規則通常在最後面
增長指定源ip以及端口拒絕訪問目標ip的某端口

iptables -A INPUT -s 192.168.111.136 -p tcp --sport 1234 -d 192.168.111.137 --dport 80 -j DROP
未來源ip 192.168.111.136 的1234端口 訪問192.168.111.137 的80端口 拒絕掉
[root@jinkai ~]# iptables -A INPUT -s 192.168.111.136 -p tcp --sport 1234 -d 192.168.111.137 --dport 80 -j DROP
[root@jinkai ~]# iptables -nvL
Chain INPUT (policy ACCEPT 40 packets, 2320 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- 192.168.111.136 192.168.111.137 tcp spt:1234 dpt:80

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

Chain OUTPUT (policy ACCEPT 21 packets, 1660 bytes)
pkts bytes target prot opt in out source destination
[root@jinkai ~]#

插入規則
-I:插入規則,插入的規則通常在最前面
iptables -I INPUT -p tcp --dport 80 -j DROP

將拒絕全部的ip訪問本機的80端口
[root@jinkai ~]# iptables -I INPUT -p tcp --dport 80 -j DROP
[root@jinkai ~]# iptables -nvL
Chain INPUT (policy ACCEPT 6 packets, 364 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
0 0 DROP tcp -- 192.168.111.136 192.168.111.137 tcp spt:1234 dpt:80

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

Chain OUTPUT (policy ACCEPT 4 packets, 480 bytes)
pkts bytes target prot opt in out source destination
[root@jinkai ~]#

刪除規則
-D:刪除

iptables -D INPUT -p tcp --dport 80 -j DROP

刪除掉已知道命令的規則

[root@jinkai ~]# iptables -D INPUT -p tcp --dport 80 -j DROP

刪除未知命令的規則
iptables -nvL --line-number
顯示規則的序列號num

[root@jinkai ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 121 packets, 7052 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP tcp -- 192.168.111.136 192.168.111.137 tcp spt:1234 dpt:80

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

Chain OUTPUT (policy ACCEPT 64 packets, 5632 bytes)
num pkts bytes target prot opt in out source destination
[root@jinkai ~]#

iptables -D INPUT 1
刪除INPUT鏈中序列號爲1的規則,
[root@jinkai ~]# iptables -D INPUT 1
修改鏈的默認規則
-P 後面跟鏈的名稱,策略DROP
[root@jinkai ~]# iptables -P INPUT DROP

保存與備份規則

保存:

service iptables save
將規則保存到/etc/sysconfig/iptables

備份:

iptables-save > my.ipt
將iptables的規則備份到my.ipt文件中

恢復備份規則

iptables-restore < my.ipt
將文件中的規則恢復到iptables中

案例需求:只針對filter表,預設策略INPUT鏈DROP,其餘兩個鏈ACCEPT,而後針對192.168.188.0/24開通22端口,對全部網段開放80端口,對全部網段開放21端口
多條規則,寫成腳本的形式執行

.#cat /usr/local/sbin/iptables.sh
#! /bin/bash
ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.188.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

完成腳本的編寫後,直接運行/bin/sh /usr/local/sbin/iptables.sh便可。若是想開機啓動時初始化防火牆規則,則須要在/etc/rc.d/rc.local中添加一行/bin/sh /usr/local/sbin/iptables.sh。

[root@jinkai ~]# sh /usr/local/sbin/iptables.sh
[root@jinkai ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
28 1624 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- 192.168.188.0/24 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

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

Chain OUTPUT (policy ACCEPT 15 packets, 1180 bytes)
pkts bytes target prot opt in out source destination
[root@jinkai ~]#
瞭解更詳細能夠參考:https://blog.csdn.net/weixin_47151717/article/details/107736865

相關文章
相關標籤/搜索