CentOS6.4防火墙iptables

本文详细介绍防火墙管理的不同类型,如TCPWrappers与iptables,并深入探讨iptables的基础配置与高级应用,包括规则设置、核心参数调整及NAT表配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本上,依据防火墙管理的范围,我们可以将防火墙区分为网域型与单一主机型的控管。在单一主机型的控管方面,主要的防火墙有封包过滤型的Netfilter与依据服务软件程序作为分析的TCP Wrappers两种。若以区域型的防火墙而言,由于此类防火墙都是当作路由器角色,因此防火墙类型主要则有封包过滤的Netfilter与利用代理服务器(proxy server)进行存取代理的方式了。

<1>、TCP Wrappers:

由于主要是透過分析服務器程序來管控,因此與啟動的端口無關,只與程序的名稱有關,舉例來說,我們知道FTP可以啟動在非正規的port21進行臨聽,當你透過Linux內建的TCP wrappers限制FTP時,那麼你只要知道FTP的軟件名稱(vsftpd),然后對他作限制,則不管FTP啟動在哪個端口,都會被該規則管理。

TCP Wrappers:就是透過/etc/hosts.allow,/etc/hosts.deny這兩個文件來管理的一個類似防火墻的機制,但不是所有的軟件都可以通過這兩個檔案來進行處理,只有滿足以下條件之一的才可以,兩個條件分別是:

(1)由super daemon(xinetd)所管理的服務

===>yum install xinetd

===>chkconfig xinetd on

===>chkconfig --list

(2)有支援libwrap.so模塊的服務

===>ldd $(which rsyslogd sshd xinetd httpd)

===>for name in rsyslogd sshd xinetd httpd

do

echo $name

ldd $(which $name) | grep libwrap

done

<2>、iptables

iptables的表格(table)與鏈(chain)

預設的情況下,咱們linux的iptables至少就有三個表格,包括管理本機進出的filter,管理后端主機(防火墻內部的其它計算機)的nat,管理特殊旗標使用的mangle。

(1)filter(過濾器):主要跟進入linux本機的封包有關,這個是預設的table。

INPUT:主要與想要進入我們linux本機的封包有關;

OUTPUT:主要與我們linux本機所要送出的封包有關;

FORWARD:與linux本機比較沒有關系,他可以轉遞封包到后端的計算機中,與nat table相關性較高。

(2)nat:這個表格主要在進行來源與目的ip或port的轉換,與linux本機較無關,主要與linux主機后的局域網絡內計算機較有相關。

PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)

POSTROUTING:在進行路由判斷之后所要進行的規則(SNAT/MASQUERADE)

OUTPUT:與發關出去的封包有關

<3>iptables的語法

CentOS默認的iptables分析:

Chain INPUT (policy ACCEPT)

target         prot         opt             source              destination

ACCEPT         all              --               0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

ACCEPT         icmp          --               0.0.0.0/0            0.0.0.0/0

ACCEPT         all              --               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

REJECT         all              --               0.0.0.0/0            0.0.0.0/0             reject-with  icmp-host-prohibited

Chain FORWARD(policy ACCEPT)

target        prot         opt             source              destination

REJECT         all              --               0.0.0.0/0            0.0.0.0/0             reject-with  icmp-host-prohibited

Chain OUTPUT(policy ACCEPT)

target        prot         opt             source              destination

(1)只要是封包狀態為RELATED,ESTABLISHED就予以接受

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

(2)只要封包協議是icmp類型的,就予以放行

-A INPUT -p icmp -j ACCEPT

(3)無論任何來源(0.0.0.0/0)且要去任何目標的封包,不論任何封包格式(prot為all),通通都接受

-A INPUT -i lo -j ACCEPT

(4)只要是傳給port22的主動式聯機tcp封包就接受

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

(5)全部的封包信息通通拒絕

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-witch icmp-host-prohibited

<4>、如何清空防火墻的規則

iptables [-t tables] [-FXZ]

選項與參數:

-F:清除所有的已訂定的規則

-X:殺掉所有使用者“自定義”的chain,具體是指tables

-Z:將所有chain的計數與流量統計都歸零

iptables  [-t nat]  -P  [INPUT,OUTPUT,FORWARD]  [ACCEPT,DROP]

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

<5>封包的基礎比對

(1)IP,網域及接口裝置

iptables [-AI 鏈名] [-io 網絡接口] [-p 協議] [-s來源IP/網域] [-d目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG]

-A:新增加一條規則,該規則增加在原本規則的最后面。

-I:插入一條規則,如果沒有指定此規則的順序,默認是插入變成第一條規則。

-io:網絡接口  -i封包所進入的那個網絡接口,例如eth0,lo等接口,需與INPUT鏈配合。

-p:協定,設定此規則適用于哪種封包格式,主要的封包格式有:tcp,udp,icmp,all

-s與-d:ip:192.168.0.100,網域:192.168.0.0/24,192.168.0.0/255.255.255.0

若規范為不許時,則加上!即可,例如-s ! 192.168.100.0/24表示不許192.168.100.0/24之封包來源

例子:設定lo成為受信任的裝置,亦即進出lo的封包都予以接受

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT

iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

(2)TCP、UDP的規則比對:針對端口設定

iptables [-AI鏈] [-io網絡接口] [-p tcp,udp] [-s來源IP/網域] [--sport端口范圍] [-d目標IP/綱域] [--dport端口范圍] -j [ACCEPT|DROP|REJECT]

例子:iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP

將來自任何地主來源port 1:1023的主動聯機到本機端的1:1023聯機丟棄

iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP

(3)iptables外掛模塊:mac與state

iptables -A INPUT [-m state] [--state 狀態]

選項與參數

-m:一些iptables的外掛模塊,常見的有

state:狀態模塊

mac:網絡卡硬件地址

--state:一些封包的狀態,主要有:

INVALID:無效的封包,例如數據破損的封包狀態

ESTABLISHED:已經聯機成功的聯機狀態

NEW:想要新建立聯機的封包狀態

RELATED:這個最常用!表示這個封包是與我們主機發送出去的封包有關

例:只要已建立或相關封包就予以通過,只要是不合法封包就丟棄

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state INVALID -j DROP

針對局域肉絡內的aa:bb:cc:dd:ee:ff主機開放其聯機

iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

(4)icmp封包規則的比對:針對是否響應ping來設計(拿掉ICMP type 8)

iptables -A INPUT [-p icmp] [--icmp-type 類型] -j ACCEPT

選項與參數:

--icmp-type:后面必須要接icmp的封包類型,也可以使用代號

例:#!/bin/bash

icmp_type="0 3 4 11 12 14 16 18"

for typeicmp in $icmp_type

do 

iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT

done


<6>IPV4的核心管理功能:/proc/sys/net/ipv4/*

(1)/proc/sys/net/ipv4/tcp_syncookies

預防阻斷式服務(DoS)攻擊法當中的一種方式,可以啟用核心的SYN Cookie模塊,這個SYN Cookie模式可以在系統用來啟動隨機聯機的端口(1024:65535)即將用完時自動啟動。透過此一機制可以大大的降低無效的SYN等待端口,而避免SYN Flooding的DoS攻擊,如何啟動此模塊呢?如下:

echo "1"  >  /proc/sys/net/ipv4/tcp_syncookies

不過總的來說,這個設定值還是不錯的,只是不適合用在負載已經很高的服務器內,因為負載太高的主機有時會讓核心誤判受到SYN Flooding的攻擊。

(2)/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

用于阻斷ping flooding,那如何避免呢,取消icmp類型8的icmp封包回應就是了,我們可以透過防火墻來抵檔,這也是比較建義的方式,當然也可以讓核心自動取消ping的響應,不過你必須了解,某些局域網絡內常見的服務會使用ping的方式來偵測是否有重復的ip,所以你最好不要取消所有的ping響應比較好。

核心取消ping回應的設定值有兩個,分別是/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts,僅有ping broadcasts地址時才取消ping的回應,/proc/sys/net/ipv4/icmp_echo_ignore_all,全部的ping都不回應。因此只設定取消icmp_echo_ignore_broadcasts就好了。

(3)/proc/sys/net/ipv4/conf/網絡接口/*

核心還可以針對不同的網絡接口進行不一樣的參數設定,網絡接口的相關設定放置在/proc/sys/net/ipv4/conf當中,每個接口都以接口代號做為其代表,例如eth0接口的相關設定數據在/proc/sys/net/ipv4/conf/eth0內,那麼網絡接口的設定數據有哪些比較需要注意的呢?

rp_filter===>稱為逆向路徑過濾,可以藉由分析網絡接口的路由信息配全封包的來源地址,來分析該封包是否為合理。

log_martians===>這個設定數據可以用來啟動記錄不合法的ip來源,舉例來說,包括來源為0.0.0.0、127.x.x.x及class E的ip來源,因為這些來源的ip不應該應用于internet。

accept_source_route===>或許某些路由器會啟動這個設定值,不過目前的設備很少使用到這種來源路由,因此你可以取消這個設定值。建意關閉

accept_redirects、send_redirects===>這兩個設定值是為了方便在同一個實體網段內有2個或2個以上ip網域時,它們之間傳遞數據時不經過路由器而是直接傳遞。建意關閉


<7>NAT表

若內部LAN有任何一部主機想要傳送封包出去時,那麼這個封包要如何透過linux主機而傳送出去,過程是這樣的:

1==>先經過NAT table的PREROUTING鏈

2==>經由路由判斷確定這個封包是要進入本機與否,若不進入本機,則下一步

3==>再經過Filter table的FORWARD鏈

4==>通過NAT table的POSTROUTING鏈,最后傳送出去。

SNAT主要是應付內部LAN連接到Internet的使用方式,至于DNAT則主要用在內部主機想要架設可以讓Internet存取的服務器。

(1)最簡單的ip分享功能

在NAT服務器的設定方面,最容易出錯的地方就是路由了,特別是在拔號產生ppp0這個對外接口的環境下,這個問題最嚴重,如果你的public IP取得的方式是拔接或cable modem時,你的配置文件/etc/sysconfig/network,ifcfg-eth0,ifcfg-eth1等檔案,千萬不要設定GATEWAY,否則就會出現兩個default gateway。

(2)事實上,除了ip偽裝(MASQUERADE)之外,我們還可以直接指定修改IP封包表頭的來源IP呢!

假設對外的ip固定為192.168.1.100,若不想使用偽裝,該如何處理

-->iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100

(3)若果對個的publicIP有很多個

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100-192.168.1.105

(4)假設內網有部主機ip為192.168.100.10,該主機是可對Internet開放的www服務器,你該如何透過NAT機制,將www封包傳到該主機上。

iptables -t nat -A PREROUTING -i eth0-p tcp --dport 80  -j DNAT --to-destination 192.168.100.10:80

(5)端口轉換

-j REDIRECT --to-ports<port number>

這個也挺常見的,基本上,就是進行本機上面port的轉換就是了!

不過,特別留意的是,這個動作僅能夠在nat table的PREROUTING以及OUTPUT鏈上面實行而已。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

<8>iptables實例

#!/bin/bash

EXTIF="eth0"

INIF="eth1"

INNET="192.168.100.0/24"

export EXTIF  INIF  INNET

#第一部分,針對本機的防火墻設定

#1、先設定好核心的網絡功能

echo "1"  >  /proc/sys/net/ipv4/tcp_syncookies

echo "1"  >  /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

for  i  in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians};

do

echo "1" > $i

done

for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects, send_redirects}

do

echo "0" > $i

done

#2.清除規則,設定默認政策及開放lo與相關的設定值 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

export PATH

iptables -F

iptables -X

iptables -Z

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#3.啟動額外的防火墻script模塊

if  [ -f /usr/local/virus/iptables/iptables.deny ];  then

sh /usr/local/virus/iptables/iptables.deny

fi

if  [-f /usr/local/virus/iptables/iptables.allow ];  then

sh /usr/local/virus/iptables/iptables.allow

fi

if  [-f /usr/local/virus/httpd-err/iptables.http ];  then

sh /usr/local/virus/httpd-err/iptables.http

fi

#4.允計某些類型的ICMP封包進入

AICMP="0 3 3/4 4 11 12 14 16 18"

for tyicmp in $AICMP

do 

iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT

done

#5.允許某些服務的進入

iptables -A INPUT -p tcp -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT       #FTP

iptables -A INPUT -p tcp -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT       #SSH

iptables -A INPUT -p tcp -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT       #SMTP

iptables -A INPUT -p udp -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT      #DNS

iptables -A INPUT -p tcp -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT      #DNS

iptables -A INPUT -p tcp -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT      #WWW

iptables -A INPUT -p tcp -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT      #POP3

iptables -A INPUT -p tcp -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT      #HTTPS

#第二部分 針對后端主機的防火墻設定

#1、先加載一些有用的模塊

modules="ip_tables   iptables_nat  ip_nat_fty   ip_nat_irc   ip_conntrack   ip_conntrack_ftp   ip_conntrack_irc"

for mod in $modules

do

testmod=`lsmod | grep "^${mod}" | awk '{print $1}'`

if [ "$testmod" == "" ]; then

modprobe $mod

done
#2.清除NATtable的規則

iptables -F -t nat

iptables -X -t nat

iptables -Z -t nat

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

#3.若有內部接口的存在(雙網卡)開放成為路由器,且為ip分享器

if [ "$INIF" != " " ]; then 

iptables -A INPUT -i $INIF -j ACCEPT

echo  "1"  >  /proc/sys/net/ipv4/ip_forward

if [ "$INNET" != " " ]; then

for innet in $INNET

do     #其中MASQUERADE為ppp0這個情況下,publicIP不固定的情況

iptables  -t nat  -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE

done

fi

fi

#4、NAT服務器后端的LAN內對外之服務器設定

iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 -j DNAT --to-destination 192.168.1.210:80

#5、特殊的功能,包括Windows遠程桌面所產生的規則,假設桌面主機為1.2.3.4

iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 -j DNAT --to-destination 192.168.100.10

iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 -j DNAT --to-destination 192.168.100.20

#6、最終將這些功能儲存下來

/etc/init.d/iptables  save







基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值