Kā iestatīt Iptables ugunsmūri, lai iespējotu attālo piekļuvi pakalpojumiem Linux - 8. daļa


Iepazīstinām ar Linux Foundation sertifikācijas programmu

No 1. daļas - Par šīs LFCE ( Linux Foundation Certified Engineer ) sērijas Iptables jūs atceraties, ka mēs sniedzām pamata aprakstu par to, kas ir ugunsmūris: pārvaldības mehānisms pakešu ienākšana tīklā un iziešana no tās. Ar “pārvaldīt” mēs faktiski domājam:

  1. atļaut vai aizliegt noteiktu pakešu iekļūšanu mūsu tīklā vai aiziešanu no tās.
  2. Pārsūtīt citas paketes no viena tīkla punkta uz citu.

pamatojoties uz iepriekš noteiktiem kritērijiem.

Šajā rakstā mēs apspriedīsim, kā ieviest pamata pakešu filtrēšanu un kā konfigurēt ugunsmūri ar iptables, kas ir netfilter frontend, kas ir vietējais kodola modulis, ko izmanto ugunsmūri.

Lūdzu, ņemiet vērā, ka ugunsmūris ir plaša tēma, un šis raksts nav paredzēts kā visaptverošs ceļvedis, lai izprastu visu, kas par to jāzina, bet drīzāk kā sākumpunkts padziļinātai šīs tēmas izpētei. Tomēr mēs atkārtoti apskatīsim šo sēriju šīs daļas 10. daļā , kad izpētīsim dažus īpašus ugunsmūra lietošanas gadījumus Linux.

Jūs varat iedomāties ugunsmūri kā starptautisku lidostu, kur pasažieru lidmašīnas nāk un iet gandrīz visu diennakti. Pamatojoties uz vairākiem nosacījumiem, piemēram, personas pases derīgumu vai viņa/viņas izcelsmes valsti (nosaucot dažus piemērus), viņam vai viņai drīkst vai nav atļauts iebraukt noteiktā valstī vai izbraukt no tās.

Tajā pašā laikā lidostas virsnieki var dot norādījumus cilvēkiem nepieciešamības gadījumā pārvietoties no vienas lidostas vietas uz citu, piemēram, kad viņiem jādodas caur Muitas dienestiem.

Mēs varam atrast lidostas analoģiju noderīgu pārējās šīs apmācības laikā. Vienkārši paturiet prātā šādas attiecības, kad turpinām:

  1. Personas = paketes
  2. ugunsmūris = lidosta
  3. 1. valsts = 1. tīkls
  4. Valsts Nr. 2 = tīkls Nr. 2
  5. virsnieku izpildītie lidostas noteikumi = ugunsmūra noteikumi

Iptables - pamati

Zemākajā līmenī kodols pats “izlemj”, ko darīt ar paketēm, pamatojoties uz kārtulām, kas sagrupētas ķēdēs vai teikumos . Šīs ķēdes nosaka, kādas darbības jāveic, ja pakete atbilst viņu norādītajiem kritērijiem.

Pirmās iptables veiktās darbības būs izlemt, ko darīt ar pakešu:

  1. Vai to pieņemt (lai tas nonāk mūsu tīklā)?
  2. noraidīt (liegt piekļuvi mūsu tīklam)?
  3. Pārsūtīt to (uz citu ķēdi)?

Gadījumā, ja jūs domājat, kāpēc šo rīku sauc par iptables , tas ir tāpēc, ka šīs ķēdes ir sakārtotas tabulās, no kurām filtru tabula ir vispazīstamākā un izmanto, lai ieviestu pakešu filtrēšanu ar trim noklusējuma ķēdēm:

1. Ķēde INPUT apstrādā tīklā nonākošās paketes, kas paredzētas vietējām programmām.

2. Ķēdi OUTPUT izmanto, lai analizētu vietējā tīklā radušās paketes, kas jānosūta uz ārpusi.

3. Ķēde FORWARD apstrādā paketes, kuras jāpārsūta uz citu galamērķi (tāpat kā maršrutētāja gadījumā).

Katrai no šīm ķēdēm ir noklusējuma politika, kas nosaka, kas jādara pēc noklusējuma, ja paketes neatbilst nevienam no ķēdes noteikumiem. Katrai ķēdei izveidotās kārtulas un noklusējuma politiku varat apskatīt, izpildot šādu komandu:

# iptables -L

Pieejamās politikas ir šādas:

  1. ACCEPT → izlaiž pakešu. Jebkura pakete, kas neatbilst nevienam ķēdes likumam, ir atļauta tīklā.
  2. PILINĀT → klusi nomet paketi. Jebkurai paketei, kas neatbilst nevienam ķēdes likumam, tiek liegta piekļuve tīklam
  3. Noraidīt → noraida paketi un atgriež informatīvu ziņojumu. Šis īpaši nedarbojas kā noklusējuma politika. Tā vietā tas ir paredzēts, lai papildinātu pakešu filtrēšanas kārtulas.

Kad jāizlemj, kuru politiku jūs īstenosiet, jums jāņem vērā katras pieejas plusi un mīnusi , kā paskaidrots iepriekš - ņemiet vērā, ka nav piemērota viena izmēra -viss risinājums.

Lai ugunsmūrim pievienotu kārtulu, izsauciet komandu iptables šādi:

# iptables -A chain_name criteria -j target

kur,

  1. -A nozīmē Papildināt (pievienojiet pašreizējo kārtulu ķēdes beigās).
  2. ķēdes_nosaukums ir INPUT, OUTPUT vai FORWARD.
  3. mērķis ir darbība vai politika, kas jāpiemēro šajā gadījumā (ACCEPT, REJECT vai DROP).
  4. kritēriji ir nosacījumu kopums, saskaņā ar kuru paketes jāpārbauda. To veido vismaz viens (visticamāk, vairāk) no šiem karodziņiem. Iekavās esošās opcijas, atdalītas ar vertikālu joslu, ir līdzvērtīgas viena otrai. Pārējais ir izvēles slēdži:

[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Līmēsim visu to 3 klasiskos piemēros, pirmajiem diviem izmantojot šādu testa vidi:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

Un tas par pēdējo piemēru

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15

Vispirms mēs definēsim DROP politiku ievades pingam uz mūsu ugunsmūri. Tas ir, icmp paketes tiks nomestas klusi.

# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Pirms turpināt daļu Noraidīt , mēs izdzēsīsim visus INPUT ķēdes noteikumus, lai pārliecinātos, ka mūsu paketes tiks pārbaudītas ar šo jauno kārtulu:

# iptables -F INPUT
# iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

Strādājot ar izejošo datplūsmu, mums būs darīšana ar ķēdi OUTPUT :

# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

Palaidiet šīs komandas NFSv4 serverī/ugunsmūrī, lai aizvērtu 2049 un 111 porti visa veida trafikam:

# iptables -F
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Tagad atvērsim šīs ostas un redzēsim, kas notiek.

# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Kā redzat, pēc datplūsmas atvēršanas mēs varējām uzstādīt NFSv4 daļu.

Iepriekšējos piemēros mēs parādījām, kā kārtulas pievienot ķēdēm INPUT un OUTPUT . Ja mēs tos vēlamies ievietot iepriekš noteiktā vietā, tā vietā jāizmanto slēdzis -I (lielie burti i).

Jums jāatceras, ka kārtulas tiks vērtētas viena pēc otras un ka vērtēšana tiek pārtraukta (vai lec), kad tiek saskaņota politika DROP vai ACCEPT . Šī iemesla dēļ jūs varat atrast nepieciešamību pēc nepieciešamības ķēdes sarakstā pārvietot noteikumus uz augšu vai uz leju.

Lai to parādītu, mēs izmantosim triviālu piemēru:

Ievietosim šādu kārtulu:

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

2. pozīcijā) INPUT ķēdē (tādējādi pārvietojot iepriekšējo # 2 kā # 3)

Izmantojot iepriekš iestatīto iestatījumu, pirms porta 2049 pārbaudīšanas trafiks tiks pārbaudīts, vai tas ir novirzīts uz 80 portu.

Varat arī izdzēst kārtulu un mainīt atlikušo kārtulu mērķi uz REJECT (izmantojot slēdzi -R ):

# iptables -D INPUT 1
# iptables -nL -v --line-numbers
# iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Visbeidzot, bet ne mazāk svarīgi, jums būs jāatceras, ka, lai ugunsmūra kārtulas būtu noturīgas, tās būs jāsaglabā failā un pēc tam automātiski jāatjauno pēc palaišanas (izmantojot izvēlēto vēlamo metodi vai ir pieejams jūsu izplatīšanai).

Ugunsmūra noteikumu saglabāšana:

# iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
# iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Noteikumu atjaunošana:

# iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
# iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Šeit mēs varam redzēt līdzīgu procedūru (ugunsmūra noteikumu saglabāšana un atjaunošana ar rokām), izmantojot fiktīvu failu ar nosaukumu iptables.dump , nevis noklusējuma, kā parādīts iepriekš.

# iptables-save > iptables.dump

Lai šīs izmaiņas būtu noturīgas visos zābakos:

Ubuntu : instalējiet pakotni iptables-persistent , kas ielādēs kārtulas, kas saglabātas failā /etc/iptables/rules.v4 .

# apt-get install iptables-persistent

CentOS : pievienojiet šādas 2 rindas failam /etc/sysconfig/iptables-config .

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE : sarakstā /etc/sysconfig/SuSEfirewall2 norādiet atļautos portus, protokolus, adreses un tā tālāk (atdalot tos ar komatiem).

Plašāku informāciju skatiet pašā failā, kas ir ļoti komentēts.

Secinājums

Šajā rakstā sniegtie piemēri, lai arī neaptver visus iptables zvanus un svilpes, kalpo tam, lai parādītu, kā iespējot un atspējot ienākošās vai izejošās trafika trafiku.

Tiem no jums, kas esat ugunsmūra fani, ņemiet vērā, ka mēs šo tēmu atkārtoti aplūkosim ar konkrētākām šīs LFCE sērijas 10. daļas lietojumprogrammām.

Droši paziņojiet man, ja jums ir kādi jautājumi vai komentāri.