iptables/netfilter、?tcp_wrapper

iptables/netfilter:

Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件;
主機防火墻
網絡防火墻
軟件防火墻(軟件邏輯):
硬件防火墻(硬件和軟件邏輯):NetScreen,CheckPoint,。。。
iptables(netfilter)
netfilter:kernel
hooks function(鉤子函數):
iptables:cli
rules untility
hooks function(鉤子函數):
input
output
forward
prerouting
postrouting
報文流向:
流入本機:PREROUTING –> INPUT ==>用戶空間進程;
由本機流出:用戶空間進程==> OUTPUT –> POSTROUTING;
轉發:PREROUTING –> FORWARD –> POSTROUTING
功能:表(table)
filter:過濾,防火墻;
nat:network address translation網絡地址轉換;用于修改源IP或目標IP,也可以改端口;
mangle:拆解報文,按需修改;
raw:關閉nat表上啟用的連接追蹤機制;
?iptables:
1、內置鏈:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING;對應于一個鉤子函數(hook function);
2、自定義鏈:用于內置鏈的擴展和補充,可實現更靈活的規則管理機制;
表<==>鏈:
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw:PREROUTING、OUTPUT

優先級:同一個鏈上的不同的表的規則的應用優先級(高–>低):raw>managle>nat>filter

 

路由功能發生的時刻:

1、報文進入本機后:判斷目標主機是否為本機?是:INPUT;否:FORWARD(真正是否生效取決于是否開啟路由轉發)

2、報文離開本機之前:判斷經由哪一個接口送往下一跳?

 

規則:
組成部分:根據規則匹配條件來嘗試匹配報文,一旦匹配成功,就由規則定義的處理動作作出處理;
a、匹配條件:
1、基本匹配條件
2、擴展匹配條件
b、處理動作(target):
1、基本處理動作
2、擴展處理動作
3、自定義處理機制
添加規則時的考量點:
(1) 要實現哪種功能:判斷添加到哪個表上;
(2) 報文流經的路徑:判斷添加到哪個鏈上;

鏈上規則的次序:即為檢查的次序,因此隱含一定的法則:自上而下檢查

1、同類規則(訪問同一應用),匹配范圍小的放上面;

2、不同類規則(訪問不同應用),匹配到報文頻率較大的放上面;

3、將那些可由一條規則描述的多個規則合并為一個;

4、設置默認策略;

 

 

Centos 7
~]# systemctl stop firewalld.service
~]# systemctl disable firewalld.service
注意:當修改iptables規則時,避免出錯導致遠程訪問給阻擋,應在應用規則前定義一個at或者crontab任務,清除規則,保證遠程訪問可以正常訪問
規則格式:iptables ? [-t table] ? SUBCOMMAND ? chain ? [-m matchname [per-match-options]] ? -j targetname [per-target-options]
-t table:
raw, mangle, nat, [filter]
SUBCOMMAND:
鏈管理:
-N:new, 新增一條自定義鏈;
-F:flush,清空指定的規則鏈;
-X: delete,刪除自定義的空鏈;
-Z:zero,置零規則計數器;iptables的每條規則都有兩個計數器:(1) 匹配到的報文的個數;(2) 匹配到的所有報文的大小之和;
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:ACCEPT:接受、DROP:丟棄、REJECT:拒絕
-E:rename,重命名自定義的未被引用的鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除;
規則管理:
-A:append,在最后追加;
-I:insert, 插入,要指明位置,省略時表示第一條;
-D:delete,刪除指定規則;
-R:replace,替換指定鏈上的指定規則;
兩種指定方式:(1) 指明規則序號;(2) 指明規則本身;
?-S:selected,以iptables-save命令的格式顯示鏈上的規則;
查看:
-L:list, 列出指定鏈上的所有規則;
-n:numeric,以數字格式顯示地址和端口;
-v:verbose,詳細信息;
-vv, -vvv
-x:exactly,顯示計數器結果的精確值而非換算后的結果;
–line-numbers:顯示鏈上的規則的編號;
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
匹配條件:
基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供;
[!] -s, –source ?address[/mask][,…]:檢查報文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, –destination address[/mask][,…]:檢查報文中的目標IP地址是否符合此處指定的地址或范圍;
[!] -p, –protocol protocol
protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or ?“all”
{tcp|udp|icmp}
[!] -i, –in-interface name:數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUT和FORWARD鏈;
[!] -o, –out-interface name:數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUT和POSTROUTING鏈;
擴展匹配條件: 需要加載擴展模塊,方可生效;其模塊目錄為/usr/lib64/xtables/
隱式擴展:可以不用使用-m選項專門加載相應模塊;前提是要使用-p選項可匹配何種協議;
[!] -p, –protocol protocol
協議protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or ?“all”
{tcp|udp|icmp}
1、-p tcp:隱含指明了“-m tcp”,有專用選項:
[!] –source-port, –sport port[:port]:匹配報文的tcp首部的源端口;可以是端口范圍;
[!] –destination-port,–dport port[:port]:匹配報文的tcp首部的目標端口;可以是端口范圍;
[!] –tcp-flags ?LIST1 ?LIST2:檢查LIST1所指明的所有標志位,且這其中,LIST2所表示出的所有標記位必須為1,而余下的必須為0;沒有在LIST1中指明的,不做檢查;
SYN,ACK,FIN,RST,PSH,URG
例如:“–tcp-flags ?SYN,ACK,FIN,RST ? ? SYN”表示,
要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;
[!] –syn:用于匹配第一次握手,相當于“–tcp-flags ?SYN,ACK,FIN,RST ?SYN”;
2、-p udp :隱含指明了“-m udp”,有專用選項:
[!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;
[!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;
3、-p icmp :隱含指明了“-m icmp”,有專用選項:
[!] –icmp-type {type[/code]|typename}
echo-request:8/0echo請求
echo-reply:0/0 echo應答
顯式擴展:必須要手動加載擴展模塊, [-m matchname [per-match-options]];
使用幫助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions
1、multiport擴展
以離散方式定義多端口匹配;最多指定15個端口;
[!] –source-ports,–sports port[,port|,port:port]…:指定多個源端口;
[!] –destination-ports,–dports port[,port|,port:port]…:指定多個目標端口;
[!] –ports port[,port|,port:port]…:指明多個端口;
~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -j ACCEPT
2、iprange擴展
指明連續的(但一般是不能擴展為整個網絡)ip地址范圍時使用;
[!] –src-range from[-to]:源IP地址范圍;
[!] –dst-range from[-to]:目標IP地址范圍;
~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP
3、string擴展
對報文中的應用層數據做字符串模式匹配檢測;
–algo {bm|kmp}:字符串匹配檢測算法;
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
[!] –string pattern:給定要檢測的字符串模式;
[!] –hex-string pattern:給定要檢測的字符串模式,16進制格式;
~]# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string ‘gay’ -j REJECT
4、time擴展
根據將報文到達的時間與指定的時間日期范圍進行匹配;
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時間
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結束日期時間
–timestart hh:mm[:ss]:起始時間(每天)
–timestop hh:mm[:ss]:結束時間(每天)
[!] –monthdays day[,day…]:匹配一個月中的哪些天
[!] –weekdays day[,day…]:匹配一個周中的那些天
–kerneltz:使用內核上的時區,而非默認的UTC;
~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp –dport 80 -m time –timestart 14:30 –timestop 18:30 –weekdays Sat,Sun –kerneltz -j DROP
5、connlimit擴展
根據每客戶端IP做并發連接數數量匹配;
–connlimit-upto n:連接的數量小于等于n時匹配;
–connlimit-above n:連接的數量大于n時匹配;
~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 21 -m connlimit –connlimit-above 8 ?-j REJECT
6、limit擴展
基于令牌桶過濾器算法對收發報文的速率做匹配;
令牌桶過濾器;
–limit rate[/second|/minute|/hour|/day]:平均速率
–limit-burst number ?:突發速率
~]# iptables -I INPUT -d 172.16.100.67 -p icmp –icmp-type 8 -m limit –limit 3/minute –limit-burst 5 -j ACCEPT
~]# iptables -I INPUT 2 -p icmp -j REJECT
7、state擴展
根據“連接追蹤機制”去檢查連接的狀態;
conntrack機制:追蹤本機上的請求和響應之間的關系;狀態有如下幾種:
NEW:新發出請求;連接追蹤模板中不存在此連接的相關信息條目,因此,將其識別為第一次發出的請求;
ESTABLISHED:NEW狀態之后,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信狀態;
RELATED:相關聯的連接;如ftp協議中的數據連接與命令連接之間的關系;
INVALID:無效的連接;
UNTRACKED:未進行追蹤的連接;通常在負載均衡前端需要關閉連接追蹤的功能。
[!] –state state
~]# ?iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -m state –state NEW,ESTABLISHED -j ACCEPT
~]# iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport –sports 22,80 -m state –state ESTABLISHED -j ACCEPT
連接追蹤功能所能夠容納的最大連接數量(可調整):
/proc/sys/net/nf_contrack_max
sysctl -w net.nf_contrack_max 300000
echo “300000” > /proc/sys/net/nf_contrack_max
注意:當conntrack所能夠追蹤的最大值取決于/proc/sys/net/nf_contrack_max的設定;已經追蹤到到的并記錄下來的連接位于/proc/net/nf_conntrack文件中,超時的連接將會被刪除;當模版滿載時,后續的新連接有可能會超時;解決辦法:
(1)加大nf_contrack_max的值;
(2)降低nf_contrack_max條目的超時時長;
不同協議的連接追蹤時長設定位于/proc/sys/net/netfilter/目錄下
已經追蹤到到的并記錄下來的連接:
/proc/net/nf_conntrack
不同的協議的連接追蹤時長:
/proc/sys/net/netfilter/
iptables的鏈接跟蹤表最大容量為/proc/sys/net/ipv4/ip_conntrack_max,鏈接碰到各種狀態的超時后就會從表中刪除;當模板滿載時,后續的連接可能會超時
解決方法一般有兩個:通常采用第1個辦法
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216
net.ipv4.netfilter.nf_conntrack_max = 393216
(2) ?降低 nf_conntrack timeout時間
vi /etc/sysctl.conf
net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n
如何開放被動模式的ftp服務?
(1) 裝載ftp連接追蹤的專用模塊:
~]# modprobe ?nf_conntrack_ftp
(2) 放行命令連接(假設Server地址為172.16.100.67):
~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT
~]# iptables -A OUTPUT -s 172.16.100.67 -p tcp –sport 21 -m state –state ESTABLISHED -j ACCEPT
(3) 放行數據連接(假設Server地址為172.16.100.67):
~]# iptables -A INPUT -d 172.16.100.67 -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT
~]# iptables -I OUTPUT -s 172.16.100.67 -m state –state ESTABLISHED -j ACCEPT
規則優化:
服務器端規則設定:任何不允許的訪問,應該在請求到達時給予拒絕;
(1) 可安全放行所有入站的狀態為ESTABLISHED狀態的連接;
(2) 可安全放行所有出站的狀態為ESTABLISHED狀態的連接;
(3) 謹慎放行入站的新請求
(4) 有特殊目的限制訪問功能,要于放行規則之前加以拒絕;
如何使用自定義鏈:
自定義鏈:需要被調用才能生效;自定義鏈最后需要定義返回規則;
返回規則使用的target叫做RETURN;
規則的用效期限:
使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限;
保存規則:
保存規則至指定的文件:
CentOS 6:
~]# service ?iptables ?save
將規則保存至/etc/sysconfig/iptables文件中;
~]# iptables-save ?> ?/PATH/TO/SOME_RULES_FILE
CentOS 7:
~]# iptables-save ?> ?/PATH/TO/SOME_RULES_FILE
重新載入預存規則文件中規則:
~]# iptables-restore < ?/PATH/FROM/SOME_RULES_FILE
CentOS 6:
~]# service ?iptables ?restart
會自動從/etc/sysconfig/iptables文件中載入規則
自動生效規則文件中的規則:
(1) 用腳本保存各iptables命令;讓此腳本開機后自動運行;
/etc/rc.d/rc.local文件中添加腳本路徑;
/PATH/TO/SOME_SCRIPT_FILE
(2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則;
/etc/rc.d/rc.local文件添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
CentOS 7:
引入了新的iptables前端管理工具firewalld,其管理工個有:firewalld-cmd, ?firewalld-config
關于firewalld:
https://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html
處理動作:
-j targetname [per-target-options]
ACCEPT
DROP
REJECT
RETURN:返回調用的鏈;
REDIRECT:端口重定向;
LOG:記錄日志;
MARK:做防火墻標記;
DNAT:目標地址轉換;
SNAT:源地址轉換;
MASQUERADE:地址偽裝;
LOG:開啟關于匹配數據包的內核日志
–log-level level ? ?日志級別
emerg, alert, crit, error, warning, notice, info, debug.
–log-prefix prefix ?日志行前綴
# iptables -I FORWARD -s 10.0.1.0/24 -p tcp -m multiport –dports 80,21,22,23 -m state –state NEW -j LOG –log-prefix “(new connctions)”
RETURN:
返回調用者;
REDIRECT:
只能用在nat表的PREROUTING和POSTROUTING鏈上,端口重定向(即端口映射)
–to-ports
# iptables -t nat -A PREROUTING -d 172.18.100.67 -p tcp –dport 80 -j REDIRECT –to-ports 8080
nat: network address translation:網絡地址轉換,網絡層+傳輸層實現
snat: source nat
修改IP報文中的源IP地址;
讓本地網絡中的主機可使用同一地址與外部主機通信,從而實現地址偽裝;
請求:由內網主機發起,修改源IP,如何修改由管理員定義;
響應:修改目標IP,由nat自動根據會話表中追蹤機制實現相應修改;
dnat: destination nat
修改IP報文中的目標IP地址;
讓本地網絡中的服務器使用統一的地址向外提供服務,但隱藏了自己的真實地址;
請求:由外網主機發起,修改其目標地址,如何修改由管理員定義;
響應:修改源IP,由nat自動根據會話表中追蹤機制實現相應修改;
pnat: port nat(端口轉換)
snat:POSTROUTING
讓本地網絡中的主機通過某一特定地址訪問外部網絡時;
dnat:PREROUTING
把本地網絡中的某一主機上的某服務開放給外部網絡中的用戶訪問時;
nat表的target:
SNAT
–to-source [ipaddr[-ipaddr]][:port[-port]]
–random
DNAT
–to-destination [ipaddr[-ipaddr]][:port[-port]]
–random
MASQUERADE
–to-ports port[-port]
–random
SNAT示例:
~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT –to-source 172.16.100.67
MASQUERADE:只能用在nat表的POSTROUTING鏈,用于實現要轉換的IP為動態地址時;
源地址轉換:當源地址為動態獲取的地址時,MASQUERADE可自行判斷要轉換為的地址;
~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE
DNAT示例:
~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77
~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77:8080
~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 22012 -j DNAT –to-destination 192.168.12.78:22
REDIRECT:端口重定向;
web: 8080
80 –> 8080
源地址轉換:
iptables -t nat -A POSTROUTING -s localnet ! -d localnet -j SNAT –to-source extip
iptables -t nat -A POSTROUTING -s localnet ! -d localnet -j MASQUERADE
目標地址轉換:
iptables -t nat -A PREROUTING -d extip -p tcp|udp –dport PORT -j ?DNAT –to-destination ?INTERSERVERIP[:PORT]
補充:利用iptables的recent模塊來抵御DOS攻擊: 22,建立一個列表,保存有所有訪問過指定的服務的客戶端IP
ssh: 遠程連接,
iptables -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP
iptables -I INPUT ?-p tcp –dport 22 -m state –state NEW -m recent –set –name SSH
iptables -I INPUT ?-p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j LOG –log-prefix “SSH Attach: “
iptables -I INPUT ?-p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j DROP
1.利用connlimit模塊將單IP的并發設置為3;會誤殺使用NAT上網的用戶,可以根據實際情況增大該值;
2.利用recent和state模塊限制單IP在300s內只能與本機建立2個新連接。被限制五分鐘后即可恢復訪問。
下面對最后兩句做一個說明:
1.第二句是記錄訪問tcp 22端口的新連接,記錄名稱為SSH
–set 記錄數據包的來源IP,如果IP已經存在將更新已經存在的條目
2.第三句是指SSH記錄中的IP,300s內發起超過3次連接則拒絕此IP的連接。
–update 是指每次建立連接都更新列表;
–seconds必須與–rcheck或者–update同時使用
–hitcount必須與–rcheck或者–update同時使用
3.iptables的記錄:/proc/net/xt_recent/SSH
也可以使用下面的這句記錄日志:
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –name SSH –second 300 –hitcount 3 -j LOG –log-prefix “SSH Attack”
第三方模塊:
layer7:識別大多數常見的應用層協議,例如http、qq等協議;
CentOS 6:
http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/
layer7:第三方擴展;
iptables實現七層訪問過濾:
模塊:layer7
識別應用層協議
iptables/netfilter
iptables -m state,
netfilter state
對內核中的netfilter,打補丁layer7,重新編譯內核
對iptables打補丁,補上layer7模塊,重新iptables
diff/patch:文本操作工具
diff是Unix系統的一個很重要的工具程序。它用來比較兩個文本文件的差異,是代碼版本管理的核心工具之一。其用法非常簡單:
  # diff <變動前的文件> <變動后的文件>
由于歷史原因,diff有三種格式:
  * 正常格式(normal diff)
  * 上下文格式(context diff)
  * 合并格式(unified diff)
1、正常格式的diff
例如,對file1(變動前的文件)和file2(變動后的文件)進行比較可使用如下命令:
   # diff file1 file2
顯示結果中,第一行是一個提示,用來說明變動位置。它分成三個部分:前面的數字,表示file1的第n行有變化;中間的”c”表示變動的模式是內容改變(change),其他模式還有”增加”(a,代表addition)和”刪除”(d,代表deletion);
2、上下文格式的diff
上個世紀80年代初,加州大學伯克利分校推出BSD版本的Unix時,覺得diff的顯示結果太簡單,最好加入上下文,便于了解發生的變動。因此,推出了上下文格式的diff。它的使用方法是加入-c選項(即context)。
   # diff -c f1 f2
結果分成四個部分。第一部分的兩行,顯示兩個文件的基本情況:文件名和時間信息,”***”表示變動前的文件,”—“表示變動后的文件。第二部分是15個星號,將文件的基本情況與變動內容分割開。第三部分顯示變動前的文件,即file1。
另外,文件內容的每一行最前面,還有一個標記位。如果為空,表示該行無變化;如果是感嘆號(!),表示該行有改動;如果是減號(-),表示該行被刪除;如果是加號(+),表示該行為新增。
第四部分顯示變動后的文件,即file2。
3、合并格式的diff
如果兩個文件相似度很高,那么上下文格式的diff,將顯示大量重復的內容,很浪費空間。1990年,GNU diff率先推出了”合并格式”的diff,將f1和f2的上下文合并在一起顯示。
它的使用方法是加入u參數(代表unified)。
  # diff -u f1 f2
其結果的第一部分,也是文件的基本信息。”—“表示變動前的文件,”+++”表示變動后的文件。第二部分,變動的位置用兩個@作為起首和結束。第三部分是變動的具體內容。
除了有變動的那些行以外,也是上下文各顯示3行。它將兩個文件的上下文,合并顯示在一起,所以叫做”合并格式”。每一行最前面的標志位,空表示無變動,減號表示第一個文件刪除的行,加號表示第二個文件新增的行。
diff
-u
patch
盡管并沒有指定patch和diff的關系,但通常patch都使用diff的結果來完成打補丁的工作,這和patch本身支持多種diff輸出文件格式有很大關系。patch通過讀入patch命令文件(可以從標準輸入),對目標文件進行修改。通常先用diff命令比較新老版本,patch命令文件則采用diff的輸出文件,從而保持原版本與新版本一致。
patch的標準格式為
patch [options] [originalfile] [patchfile]
如果patchfile為空則從標準輸入讀取patchfile內容;如果originalfile也為空,則從patchfile(肯定來自標準輸入)中讀取需要打補丁的文件名。因此,如果需要修改的是目錄,一般都必須在patchfile中記錄目錄下的各個文件名。絕大多數情況下,patch都用以下這種簡單的方式使用:
patch命令可以忽略文件中的冗余信息,從中取出diff的格式以及所需要patch的文件名,文件名按照diff參數中的”源文件”、”目標文件”以及冗余信息中的”Index:”行中所指定的文件的順序來決定。
-p參數決定了是否使用讀出的源文件名的前綴目錄信息,不提供-p參數,則忽略所有目錄信息,-p0(或者-p 0)表示使用全部的路徑信息,-p1將忽略第一個”/”以前的目錄,依此類推。如/usr/src/linux-2.4.15/Makefile這樣的文件名,在提供-p3參數時將使用linux-2.4.15/Makefile作為所要patch的文件。
patch
-p
-R
mockbuild
總結:操作步驟
1、獲取并編譯內核
# useradd mockbuild
# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm
# cd rpmbuild/SOURCES
# tar linux-2.6.32-*.tar.gz -C /usr/src
# cd /usr/src
# ln -sv
2、給內核打補丁
# tar xf netfilter-layer7-v2.23.tar.bz2
# cd /usr/src/linux
# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
# cp /boot/config-* ?.config
# make menuconfig
按如下步驟啟用layer7模塊
Networking support → Networking Options →Network packet filtering framework → Core Netfilter Configuration
<M> ?“layer7” match support
3、編譯并安裝內核
# make
# make modules_install
# make install
4、重啟系統,啟用新內核
5、編譯iptables
# tar xf iptables-1.4.20.tar.gz
# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/
# cp /etc/rc.d/init.d/iptales /root
# cp /etc/sysconfig/iptables-config /root
# rpm -e iptables iptables-ipv6 –nodeps
# ./configure ?–prefix=/usr ?–with-ksource=/usr/src/linux
# make && make install
# cp /root/iptables /etc/rc.d/init.d
# cp /root/iptables-config /etc/sysconfig
6、為layer7模塊提供其所識別的協議的特征碼
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
7、如何使用layer7模塊
ACCT的功能已經可以在內核參數中按需啟用或禁用。此參數需要裝載nf_conntrack模塊后方能生效。
net.netfilter.nf_conntrack_acct = 1
l7-filter uses the standard iptables extension syntax
# iptables [specify table & chain] -m layer7 –l7proto [protocol name] -j [action]
# iptables -A FORWARD -m layer7 –l7proto qq -j REJECT
編譯內核:
make menuconfig
make -j #
make modules_install
make install
清理內核源碼樹:
提示:xt_layer7.ko依賴于nf_conntrack.ko模塊
?tcp_wrapper:tcp包裝器
對基于tcp協議開發并提供服務的應用程序,提供的一層訪問控制工具;基于庫調用實現其功能:libwrap
判斷某服務是否能夠由tcp_wrapper進行訪問控制的方法:
(1) 動態編譯:ldd命令;
ldd $(which COMMAND) | grep libwrap
(2) 靜態編譯:strings命令查看應用程序文件,其結果中是否出現了hosts.allow和hosts.deny文件;
strings $(which COMMAND)
注意:超級守護進程xinetd鏈接到了libwrap.so;
服務基于libwrap完成訪問控制的流程:
首先檢查/etc/hosts.allow文件中有沒有顯式授權當前請求者訪問:
是:直接授權客戶端訪問;
否:接著去檢查/etc/hosts.deny文件中有沒有顯式拒絕當前請求者訪問:
是:直接拒絕當前請求者的訪問;
否:允許請求者訪問;
配置文件語法:
daemon_list:client_list [:options]
daemon_list:
(1) 單個應用程序的文件名稱,而非服務名;例如vsftpd;
(2) 以逗號分隔的應用程序文件名列表;
例如:sshd, vsftpd
(3) ALL:所有接受tcp_wrapper控制的程序;
client_list:
(1)IP地址或主機名;
(2)網絡地址:必須使用完整格式的掩碼(172.18.0.0/255.255.0.0),或簡短格式的網絡地址:例如172.16. 表示172.16.0.0/255.255.0.0;不能使用前綴格式掩碼;
(3)ALL:所有主機;
(4)KNOWN(正解與反解一致):UNKNOWN:PARANOID(正反解不匹配):
(5)EXCEPT:除了;
例如:包含172.18網絡,除了172.18.100網段,但包含172.18.100.68主機;(雙重except代表肯定)
vsftpd: 172.18. EXCEPT 172.18.100.0/255.255.255.0 EXCEPT 172.18.100.68
:options
deny:拒絕,主要用于hosts.allow文件;
allow:允許,主要用于hosts.deny文件;
spawn:啟動指定的應用程序;
例如:sshd: ALL :spawn /bin/echo $(date) login attempt from %c to %s, %d >> /var/log/sshd.log
可使用的擴展:
%c: client ip
%s: ?daemon@serve_ ip
%d: daemon name
%p:daemon process id
獲取所有幫助信息手冊:man hosts_access
例如:vsftpd僅開放給172.16.0.0/255.255.0.0中的主機訪問;
? sshd僅開放給172.16.0.0/255.255.0.0中的主機訪問,但是不包含172.16.100.6;
/etc/hosts.allow:
sshd: 172.16. ?EXCEPT ?172.16.100.6
vsftpd: 172.16.
/etc/hosts.deny:
sshd: ALL
vsftpd:ALL

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100479

(0)
N26-深圳-城市蝸牛N26-深圳-城市蝸牛
上一篇 2018-06-05
下一篇 2018-06-05

相關推薦

  • 文本處理工具

    本文主要介紹:1、文本查看工具 2、文本統計工具 3、文本比較工具

    2018-04-16
  • 8. systemd的新特性及awk用法

    1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函數示例(至少3例)

    2018-07-07
  • FTP服務介紹及相關實驗

    FTP是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。FTP協議是早期的三個應用級協議之一。

    2018-06-26
  • Web Service基礎、httpd-2.2、httpd-2.4

    Web Service 傳輸層:提供進程地址 port number: tcp:傳輸控制協議,面向連接的協議,通信前需要建立虛擬鏈路,結束后拆除鏈路;端口:0-65535 udp:user datagram protocol,無連接的協議;端口:0-65535   IANA: 0-1023:特權端口,永久分配給固定應用使用 1024-41951:注…

    Linux筆記 2018-04-24
  • liunx基礎命令

    alias:查看命令別名(別名只針對用戶有效) alias h=hostname(定義別名) cdnet=‘cd /etc/sysconfig/network-scripts/’(帶參數命令的要帶單引號) 想長久生效修改.bashrc文件(root為/root/.bashrc,全部用戶為/etc/bashrc,其他/home/user/.bashrc) un…

    Linux筆記 2018-04-08
  • 正則表達式

    Linux文本處理三劍客 *************************************************grep:文本過濾(pattern模式)工具 grep egrep fgrepsed:stream editor,文本編輯工具awk:Linux上的實現gawk,文本報告生成器 *****************************…

    Linux筆記 2018-04-07
欧美性久久久久