『壹』 如何修改linux iptables
1.首先介紹一下指令和相關配置文件
啟動指令:service
iptables
start
重啟指令:service
iptables
restart
關閉指令:service
iptables
stop
然後是相關配置:/etc/sysconfig/iptables
如何操作該配置呢?
vim
/etc/sysconfig/iptables
然後進去修改即可,修改完了怎麼辦?這里很多人會想到/etc/rc.d/init.d/iptables
save指令,但是一旦你這么幹了你剛才的修改內容就白做了。。。
具體方法是:
只修改/etc/sysconfig/iptables
使其生效的辦法是修改好後先service
iptables
restart,然後才調用/etc/rc.d/init.d/iptables
save,
因為/etc/rc.d/init.d/iptables
save會在iptables服務啟動時重新載入,要是在重啟之前直接先調用了/etc/rc.d/init.d/iptables
save那麼你
的/etc/sysconfig/iptables
配置就回滾到上次啟動服務的配置了,這點必須注意!!!
2.下面介紹一些指令用法(主要還是man iptables看下相關資料才行)
-A:指定鏈名
-p:指定協議類型
-d:指定目標地址
--dport:指定目標埠(destination
port
目的埠)
--sport:指定源埠(source
port
源埠)
-j:指定動作類型
3.如果我不像修改文件直接打命令可以嗎,當然沒問題,步驟如下:
例如我給SSH加放行的語句:
添加input記錄:
iptables
-A
INPUT
-p
tcp
--dport
22
-j
ACCEPT
添加output記錄:
iptables
-A
OUTPUT
-p
tcp
--sport
22
-j
ACCEPT
最後注意需要再執行一下
/etc/init.d/iptables
save,這樣這兩條語句就保存到剛才那個/etc/sysconfig/iptables
文件中了。
4.接下來說明一下步驟,如果機器不在我身邊,我只能SSH進去做iptables規則,那麼我必須注意每一步,千萬別搞錯了,否則就SSH鏈接不上都有可能!
首先要做的是給咱的SSH進行ACCEPT配置,以免直接無法連接的情況發生:
1.如果SSH埠是22(這里不建議用默認埠最好改掉SSH埠)
iptables
-A
INPUT
-p
tcp
--dport
22
-j
ACCEPT
iptables
-A
OUTPUT
-p
tcp
--sport
22
-j
ACCEPT
注意要/etc/rc.d/init.d/iptables
save,以下每一步都最好執行一遍此語句,以下不再累述。
2.vim
/etc/sysconfig/iptables確定是否已經加入配置,可以的話執行service
iptables
restart重啟後生效
3.下面是很危險的操作,如果你第一步沒做就會直接可能導致你連不上SSH,此步驟前切記執行第一步!!!
iptables
-P
INPUT
DROP
iptables
-P
OUTPUT
DROP
iptables
-P
FORWARD
DROP
這個步驟是把所有不符合自己配置的規則ACCEPT的連接全部DROP掉,執行完以後如果咱SSH還沒掉,那麼謝天謝地,安全了,重啟下iptables後繼續下面的配置!
4.下面咱就不細說了,具體就是看自己伺服器要開放哪些埠或者是要訪問哪些埠來做具體的配置,下面是我自己的機器的配置:
/etc/sysconfig/iptables文件配置如下:
#
Generated
by
iptables-save
v1.4.7
on
Fri
Mar
2
19:59:43
2012
*filter
:INPUT
DROP
[0:0]
:FORWARD
DROP
[0:0]
:OUTPUT
DROP
[8:496]
-A
INPUT
-m
state
--state
RELATED,ESTABLISHED
-j
ACCEPT
#ping使用的埠
-A
INPUT
-p
icmp
-j
ACCEPT
-A
INPUT
-i
lo
-j
ACCEPT
-A
INPUT
-s
127.0.0.1/32
-d
127.0.0.1/32
-j
ACCEPT
-A
INPUT
-s
192.168.2.200/32
-d
192.168.2.200/32
-j
ACCEPT
#允許伺服器自己的SSH(對外部請求來說伺服器是目標所以使用--dport)
-A
INPUT
-p
tcp
-m
tcp
--dport
22
-j
ACCEPT
#80埠不用說了吧,伺服器網站訪問埠
-A
INPUT
-p
tcp
-m
tcp
--dport
80
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
3306
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
11211
-j
ACCEPT
-A
INPUT
-p
tcp
-m
tcp
--dport
11212
-j
ACCEPT
-A
FORWARD
-j
REJECT
--reject-with
icmp-host-prohibited
#53埠是DNS相關,TCP和UDP都要配置
-A
INPUT
-p
tcp
-m
tcp
--dport
53
-j
ACCEPT
-A
INPUT
-p
udp
-m
udp
--dport
53
-j
ACCEPT
#ping使用的埠
-A
OUTPUT
-p
icmp
-j
ACCEPT
-A
OUTPUT
-s
127.0.0.1/32
-d
127.0.0.1/32
-j
ACCEPT
-A
OUTPUT
-s
192.168.2.200/32
-d
192.168.2.200/32
-j
ACCEPT
#允許伺服器SSH到其他機器(使用外部埠就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
22
-j
ACCEPT
#允許伺服器自己的SSH(自已為源輸出就使用--sport)
-A
OUTPUT
-p
tcp
-m
tcp
--sport
22
-j
ACCEPT
#訪問外部網站80埠(使用外部埠就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
80
-j
ACCEPT
#如果伺服器需要訪問外部網站,那麼OUTPUT也需要配置53埠(使用外部埠就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
53
-j
ACCEPT
-A
OUTPUT
-p
udp
-m
udp
--dport
53
-j
ACCEPT
#如果有訪問外部郵箱,那麼打開郵箱相關埠(使用外部埠就使用--dport)
-A
OUTPUT
-p
tcp
-m
tcp
--dport
465
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--dport
25
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--dport
110
-j
ACCEPT
#伺服器網站訪問埠(自已為源輸出就使用--sport)
-A
OUTPUT
-p
tcp
-m
tcp
--sport
80
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
3306
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
11211
-j
ACCEPT
-A
OUTPUT
-p
tcp
-m
tcp
--sport
11212
-j
ACCEPT
COMMIT
#
Completed
on
Fri
Mar
2
19:59:43
2012
5.可能有時候需要刪除規則,最簡單就是修改一下/etc/sysconfig/iptables然後service iptables restart,最後/etc/rc.d/init.d/iptables save即可。
當然也可以使用指令完成:
在網上找了一下,刪除規則的方法:
語法是:
iptables
-D
chain
rulenum
[options]
其中:
chain
是鏈的意思,就是INPUT
FORWARD
之類的
rulenum
是規則的編號。從1
開始。可以使用
--line-numbers
列出規則的編號
所以,例如上面要刪除一個INPUT鏈的規則的話可以這樣:iptables
-D
INPUT
3
意思是刪除第3條規則。
還有第二種方法。第二種辦法是
-A
命令的映射,不過用-D替換-A。當你的鏈中規則很復雜,而你不想計算它們的編號的時候這就十分有用了。也就是說,你如何用iptables
-A....
語句定義了一個規則,則刪除此規則時就用
-D
來代替-
A
其餘的都不變即可。
======================
說一下上面的
--line-numbers
選項,如下面的命令:
iptables
-L
INPUT
--line-numbers
列出INPUT
鏈所有的規則
num
target
prot
opt
source
destination
1
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:microsoft-ds
reject-with
icmp-port-unreachable
2
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:135
reject-with
icmp-port-unreachable
3
REJECT
tcp
--
anywhere
anywhere
tcp
dpt:netbios-ssn
reject-with
icmp-port-unreachable
...
...
刪除指定行規則:
[root@localhost
rc.d]#
iptables
-D
INPUT
4
6.最後補充一下,如果想針對某IP進行單獨開放埠可以如下配置:
如果我需要對內網某機器單獨開放mysql埠,應該如下配置:
iptables
-A
INPUT
-s
192.168.2.6
-p
tcp
-m
tcp
--dport
3306
-j
ACCEPT
iptables
-A
OUTPUT
-s
192.168.2.6
-p
tcp
-m
tcp
--sport
3306
-j
ACCEPT
7.徹底禁止某IP訪問:
#屏蔽單個IP的命令是
iptables
-I
INPUT
-s
123.45.6.7
-j
DROP
#封整個段即從123.0.0.1到123.255.255.254的命令
iptables
-I
INPUT
-s
123.0.0.0/8
-j
DROP
#封IP段即從123.45.0.1到123.45.255.254的命令
iptables
-I
INPUT
-s
124.45.0.0/16
-j
DROP
#封IP段即從123.45.6.1到123.45.6.254的命令是
iptables
-I
INPUT
-s
123.45.6.0/24
-j
DROP
指令I是insert指令
但是該指令會insert在正確位置並不像A指令看你自己的排序位置,因此用屏蔽因為必須在一開始就要載入屏蔽IP,所以必須使用I命令載入,然後注意執行/etc/rc.d/init.d/iptables
save進行保存後重啟服務即可